commit e7904e314039fa6460c4f4efd67ce11eb949d74b Author: jellejurre Date: Sat Jul 19 01:03:02 2025 +0200 Initial Commit diff --git a/AssetOrganizer.meta b/AssetOrganizer.meta new file mode 100644 index 0000000..52c3214 --- /dev/null +++ b/AssetOrganizer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8eea97a2d91b3b4f829627b70886682 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AssetOrganizer/Editor.meta b/AssetOrganizer/Editor.meta new file mode 100644 index 0000000..551ef16 --- /dev/null +++ b/AssetOrganizer/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7698f40b260788141b158264be2f08e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AssetOrganizer/Editor/AssetOrganizer.cs b/AssetOrganizer/Editor/AssetOrganizer.cs new file mode 100644 index 0000000..4188c5a --- /dev/null +++ b/AssetOrganizer/Editor/AssetOrganizer.cs @@ -0,0 +1,662 @@ +using System; +using System.Collections; +using UnityEngine; +using UnityEditor; +using UnityEditor.Presets; +using UnityEditor.Animations; +using System.IO; +using System.Linq; +using System.Collections.Generic; +using Object = UnityEngine.Object; + +namespace DreadScripts.AssetOrganizer +{ + public class AssetOrganizer : EditorWindow + { + #region Declarations + #region Constants + + private const string PrefsKey = "AvatarAssetOrganizerSettings"; + private static readonly OrganizeType[] organizeTypes = + { + new OrganizeType(0, "Animation", typeof(AnimationClip), typeof(BlendTree)), + new OrganizeType(1, "Controller", typeof(AnimatorController), typeof(AnimatorOverrideController)), + new OrganizeType(2, "Texture", typeof(Texture)), + new OrganizeType(3, "Material", typeof(Material)), + new OrganizeType(4, "Model", new string[] {".fbx",".obj", ".dae", ".3ds", ".dxf"}, typeof(Mesh)), + new OrganizeType(5, "Prefab", new string[] {".prefab"}, typeof(GameObject)), + new OrganizeType(6, "Audio", typeof(AudioClip)), + new OrganizeType(7, "Mask", typeof(AvatarMask)), + new OrganizeType(8, "Scene", typeof(SceneAsset)), + new OrganizeType(9, "Preset", typeof(Preset)), + new OrganizeType(10, "VRC", "VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionParameters","VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionsMenu"), + new OrganizeType(11, "Shader", typeof(Shader)), + new OrganizeType(12, "Script", new string[] {".dll"}, typeof(MonoScript)), + new OrganizeType(13, "Other", typeof(ScriptableObject)) + }; + private static readonly string[] mainTabs = {"Organizer", "Options"}; + private static readonly string[] optionTabs = {"Folders", "Types"}; + + + private enum OrganizeAction + { + Skip, + Move + //Removed till an intuitive way for user friendly GUID replacement option is implemented + //Copy + } + + private enum SortOptions + { + AlphabeticalPath, + AlphabeticalAsset, + AssetType + } + #endregion + #region Automated Variables + private static int mainToolbarIndex; + private static int optionsToolbarIndex; + private static DependencyAsset[] assets; + private static List createdFolders = new List(); + private Vector2 scrollview; + #endregion + #region Input + private static Object mainAsset; + private static string destinationPath; + + [SerializeField] private List specialFolders; + [SerializeField] private OrganizeAction[] typeActions; + [SerializeField] private SortOptions sortByOption; + [SerializeField] private bool deleteEmptyFolders = true; + #endregion + #endregion + + #region Methods + #region Main Methods + private void OnGUI() + { + scrollview = EditorGUILayout.BeginScrollView(scrollview); + mainToolbarIndex = GUILayout.Toolbar(mainToolbarIndex, mainTabs); + + switch (mainToolbarIndex) + { + case 0: + DrawOrganizerTab(); + break; + case 1: + DrawOptionsTab(); + break; + } + + DrawSeparator(); + Credit(); + EditorGUILayout.EndScrollView(); + } + private void GetDependencyAssets() + { + destinationPath = AssetDatabase.GetAssetPath(mainAsset); + bool isFolder = AssetDatabase.IsValidFolder(destinationPath); + string[] assetsPath = isFolder ? GetAssetPathsInFolder(destinationPath).ToArray() : AssetDatabase.GetDependencies(destinationPath); + assets = assetsPath.Select(p => new DependencyAsset(p)).ToArray(); + + if (!isFolder) destinationPath = destinationPath.Replace('\\', '/').Substring(0, destinationPath.LastIndexOf('/')); + + foreach (var a in assets) + { + string[] subFolders = a.path.Split('/'); + + bool setByFolder = false; + foreach (var f in specialFolders) + { + if (!f.active) continue; + if (subFolders.All(s => s != f.name)) continue; + + a.action = f.action; + setByFolder = true; + break; + + } + + if (setByFolder) continue; + + if (!TrySetAction(a)) + a.associatedType = organizeTypes.Last(); + } + + switch (sortByOption) + { + case SortOptions.AlphabeticalPath: + assets = assets.OrderBy(a => a.path).ToArray(); + break; + case SortOptions.AlphabeticalAsset: + assets = assets.OrderBy(a => a.asset.name).ToArray(); + break; + case SortOptions.AssetType: + assets = assets.OrderBy(a => a.type.Name).ToArray(); + break; + } + + } + private void OrganizeAssets() + { + CheckFolders(); + List affectedFolders = new List(); + try + { + AssetDatabase.StartAssetEditing(); + int count = assets.Length; + float progressPerAsset = 1f / count; + for (var i = 0; i < count; i++) + { + EditorUtility.DisplayProgressBar("Organizing", $"Organizing Assets ({i+1}/{count})", (i + 1) * progressPerAsset); + var a = assets[i]; + string newPath = AssetDatabase.GenerateUniqueAssetPath($"{destinationPath}/{a.associatedType.name}/{Path.GetFileName(a.path)}"); + switch (a.action) + { + default: case OrganizeAction.Skip: continue; + case OrganizeAction.Move: + AssetDatabase.MoveAsset(a.path, newPath); + affectedFolders.Add(Path.GetDirectoryName(a.path)); + break; + /*case OrganizeAction.Copy: + AssetDatabase.CopyAsset(a.path, newPath); + break;*/ + } + } + } + finally + { + EditorUtility.ClearProgressBar(); + AssetDatabase.StopAssetEditing(); + } + + try + { + AssetDatabase.StartAssetEditing(); + + foreach (var folderPath in createdFolders.Concat(affectedFolders).Distinct().Where(DirectoryIsEmpty)) + AssetDatabase.DeleteAsset(folderPath); + } + finally { AssetDatabase.StopAssetEditing(); } + + EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(destinationPath)); + + assets = null; + destinationPath = null; + } + #endregion + #region GUI Methods + + private void DrawOrganizerTab() + { + GUIStyle boxStyle = GUI.skin.GetStyle("box"); + + using (new GUILayout.HorizontalScope()) + { + EditorGUI.BeginChangeCheck(); + mainAsset = EditorGUILayout.ObjectField("Main Asset", mainAsset, typeof(Object), false); + if (EditorGUI.EndChangeCheck()) + { + if (mainAsset) + { + destinationPath = AssetDatabase.GetAssetPath(mainAsset); + if (!AssetDatabase.IsValidFolder(destinationPath)) destinationPath = Path.GetDirectoryName(destinationPath).Replace('\\', '/'); + } + assets = null; + } + + using (new EditorGUI.DisabledScope(!mainAsset)) + if (GUILayout.Button("Get Assets", GUILayout.Width(80))) + GetDependencyAssets(); + } + + destinationPath = AssetFolderPath(destinationPath, "Destination Folder"); + + + if (assets != null) + { + DrawSeparator(4, 20); + + var h = EditorGUIUtility.singleLineHeight; + var squareOptions = new GUILayoutOption[] { GUILayout.Width(h), GUILayout.Height(h) }; + foreach (var a in assets) + { + using (new GUILayout.HorizontalScope(boxStyle)) + { + GUILayout.Label(a.icon, squareOptions); + if (GUILayout.Button($"| {a.path}", GUI.skin.label)) + EditorGUIUtility.PingObject(a.asset); + + a.action = (OrganizeAction)EditorGUILayout.EnumPopup(a.action, GUILayout.Width(60)); + } + + } + + if (GUILayout.Button("Organize Assets")) + OrganizeAssets(); + + } + } + + private void DrawOptionsTab() + { + optionsToolbarIndex = GUILayout.Toolbar(optionsToolbarIndex, optionTabs); + switch (optionsToolbarIndex) + { + case 0: + DrawFolderOptions(); + break; + case 1: + DrawTypeOptions(); + break; + } + + DrawSeparator(); + using (new GUILayout.HorizontalScope("helpbox")) + { + deleteEmptyFolders = EditorGUILayout.Toggle(new GUIContent("Delete Empty Folders", "After moving assets, delete source folders if they're empty"), deleteEmptyFolders); + sortByOption = (SortOptions)EditorGUILayout.EnumPopup("Sort Search By", sortByOption); + } + } + + private void DrawFolderOptions() + { + for (var i = 0; i < specialFolders.Count; i++) + { + var f = specialFolders[i]; + using (new GUILayout.HorizontalScope("helpbox")) + { + using (new BGColoredScope(Color.green, Color.grey, f.active)) + f.active = GUILayout.Toggle(f.active, f.active ? "Enabled" : "Disabled", GUI.skin.button, GUILayout.Width(100), GUILayout.Height(18)); + using (new EditorGUI.DisabledScope(!f.active)) + { + f.name = GUILayout.TextField(f.name); + f.action = (OrganizeAction) EditorGUILayout.EnumPopup(f.action, GUILayout.Width(60)); + if (GUILayout.Button("X", GUILayout.Width(18), GUILayout.Height(18))) + specialFolders.RemoveAt(i); + } + } + } + + if (GUILayout.Button("Add")) + specialFolders.Add(new CustomFolder()); + } + + private void DrawTypeOptions() + { + using (new GUILayout.HorizontalScope()) + { + void DrawTypeGUI(OrganizeType t) + { + var icon = GUIContent.none; + if (t.associatedTypes.Length > 0) + icon = new GUIContent(AssetPreview.GetMiniTypeThumbnail(t.associatedTypes[0])); + + using (new GUILayout.HorizontalScope()) + { + GUILayout.Label(icon, GUILayout.Height(18), GUILayout.Width(18)); + GUILayout.Label($"| {t.name}"); + if (TryGetTypeAction(t, out _)) + typeActions[t.actionIndex] = (OrganizeAction)EditorGUILayout.EnumPopup(typeActions[t.actionIndex], GUILayout.Width(60)); + } + } + + using (new GUILayout.VerticalScope("helpbox")) + { + for (int i = 0; i < organizeTypes.Length; i+=2) + DrawTypeGUI(organizeTypes[i]); + } + using (new GUILayout.VerticalScope("helpbox")) + { + for (int i = 1; i < organizeTypes.Length; i += 2) + DrawTypeGUI(organizeTypes[i]); + } + } + } + + private static string AssetFolderPath(string variable, string title) + { + using (new GUILayout.HorizontalScope()) + { + EditorGUILayout.TextField(title, variable); + + if (GUILayout.Button("...", GUILayout.Width(30))) + { + var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : "Assets", string.Empty); + if (string.IsNullOrEmpty(dummyPath)) + return variable; + string newPath = FileUtil.GetProjectRelativePath(dummyPath); + + if (!newPath.StartsWith("Assets")) + { + Debug.LogWarning("New Path must be a folder within Assets!"); + return variable; + } + + variable = newPath; + } + } + + return variable; + } + + private static void DrawSeparator(int thickness = 2, int padding = 10) + { + Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(thickness + padding)); + r.height = thickness; + r.y += padding / 2f; + r.x -= 2; + r.width += 6; + ColorUtility.TryParseHtmlString(EditorGUIUtility.isProSkin ? "#595959" : "#858585", out Color lineColor); + EditorGUI.DrawRect(r, lineColor); + } + #endregion + + #region Sub-Main Methods + + [MenuItem("DreadTools/Asset Organizer", false, 36)] + private static void ShowWindow() => GetWindow(false, "Asset Organizer", true); + private bool TrySetAction(DependencyAsset a) + { + for (int i = 0; i < organizeTypes.Length; i++) + { + if (!organizeTypes[i].IsAppliedTo(a)) continue; + + if (TryGetTypeAction(organizeTypes[i], out var action)) + { + a.action = action; + a.associatedType = organizeTypes[i]; + return true; + } + + } + + return false; + } + + private bool TryGetTypeAction(OrganizeType type, out OrganizeAction action) + { + bool hasDoubleTried = false; + TryAgain: + try + { + action = typeActions[type.actionIndex]; + return true; + } + catch (Exception) + { + if (hasDoubleTried) throw; + + OrganizeAction[] newArray = new OrganizeAction[organizeTypes.Length]; + for (int j = 0; j < newArray.Length; j++) + { + try { newArray[j] = typeActions[j]; } + catch { newArray[j] = OrganizeAction.Skip; } + } + + Debug.LogWarning("Type Actions re-initialized due to a loading/serialization."); + typeActions = newArray; + hasDoubleTried = true; + goto TryAgain; + } + } + + private static void CheckFolders() + { + if (!destinationPath.StartsWith("Assets/")) + destinationPath = "Assets/" + destinationPath; + ReadyPath(destinationPath); + + createdFolders.Clear(); + + void CheckFolder(string name) + { + string path = $"{destinationPath}/{name}"; + if (ReadyPath(path)) createdFolders.Add(path); + } + + try + { + AssetDatabase.StartAssetEditing(); + for (int i = 0; i < organizeTypes.Length; i++) + CheckFolder(organizeTypes[i].name); + } + finally { AssetDatabase.StopAssetEditing(); } + } + public static void DeleteIfEmptyFolder(string folderPath) + { + if (!AssetDatabase.IsValidFolder(folderPath)) + folderPath = Path.GetDirectoryName(folderPath); + while (DirectoryIsEmpty(folderPath) && folderPath != "Assets") + { + var parentDirectory = Path.GetDirectoryName(folderPath); + FileUtil.DeleteFileOrDirectory(folderPath); + FileUtil.DeleteFileOrDirectory(folderPath + ".meta"); + folderPath = parentDirectory; + } + } + public static bool DirectoryIsEmpty(string path) => !Directory.EnumerateFileSystemEntries(path).Any(); + #endregion + #region Automated Methods + private void OnEnable() + { + string data = EditorPrefs.GetString(PrefsKey, JsonUtility.ToJson(this, false)); + JsonUtility.FromJsonOverwrite(data, this); + if (!EditorPrefs.HasKey(PrefsKey)) + { + //Default Folder based actions. Based on usual VRC assets. + specialFolders = new List + { + new CustomFolder("VRCSDK"), + new CustomFolder("_PoiyomiShaders"), + new CustomFolder("VRLabs"), + new CustomFolder("PumkinsAvatarTools"), + new CustomFolder("DreadScripts"), + new CustomFolder("Packages"), + new CustomFolder("Plugins"), + new CustomFolder("Editor") + }; + + //Default Type based Actions + typeActions = new OrganizeAction[] + { + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Move, + OrganizeAction.Skip, + OrganizeAction.Move, + OrganizeAction.Skip, + OrganizeAction.Skip, + OrganizeAction.Skip, + }; + } + + createdFolders = new List(); + } + + private void OnDisable() + { + string data = JsonUtility.ToJson(this, false); + EditorPrefs.SetString(PrefsKey, data); + } + #endregion + #region Helper Methods + private static void Credit() + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made By Dreadrith#3238", "boldlabel")) + Application.OpenURL("https://linktr.ee/Dreadrith"); + } + } + + private static bool ReadyPath(string folderPath) + { + if (Directory.Exists(folderPath)) return false; + + Directory.CreateDirectory(folderPath); + AssetDatabase.ImportAsset(folderPath); + return true; + } + public static List GetAssetPathsInFolder(string path, bool deep = true) + { + string[] fileEntries = Directory.GetFiles(path); + string[] subDirectories = deep ? AssetDatabase.GetSubFolders(path) : null; + + List list = + (from fileName in fileEntries + where !fileName.EndsWith(".meta") + select fileName.Replace('\\', '/')).ToList(); + + + if (deep) + foreach (var sd in subDirectories) + list.AddRange(GetAssetPathsInFolder(sd)); + + + return list; + } + #endregion + #endregion + + #region Classes & Structs + + [System.Serializable] + private class CustomFolder + { + public string name; + public bool active = true; + public OrganizeAction action; + public CustomFolder(){} + public CustomFolder(string newName, OrganizeAction action = OrganizeAction.Skip) + { + name = newName; + this.action = action; + } + } + + + private class DependencyAsset + { + public readonly Object asset; + public readonly string path; + public readonly Type type; + public readonly GUIContent icon; + public OrganizeAction action; + public OrganizeType associatedType; + + public DependencyAsset(string path) + { + this.path = path; + asset = AssetDatabase.LoadAssetAtPath(path); + action = OrganizeAction.Skip; + type = asset.GetType(); + icon = new GUIContent(AssetPreview.GetMiniTypeThumbnail(type), type.Name); + } + } + private readonly struct OrganizeType + { + public readonly int actionIndex; + public readonly string name; + public readonly Type[] associatedTypes; + private readonly string[] associatedExtensions; + + public OrganizeType(int actionIndex, string name) + { + this.actionIndex = actionIndex; + this.name = name; + this.associatedTypes = Array.Empty(); + this.associatedExtensions = Array.Empty(); + } + public OrganizeType(int actionIndex, string name, params string[] associatedTypes) + { + this.actionIndex = actionIndex; + this.name = name; + this.associatedTypes = new Type[associatedTypes.Length]; + for (int i = 0; i < associatedTypes.Length; i++) + this.associatedTypes[i] = System.Type.GetType(associatedTypes[i]); + + this.associatedExtensions = Array.Empty(); + } + + public OrganizeType(int actionIndex, string name, params Type[] associatedTypes) + { + this.actionIndex = actionIndex; + this.name = name; + + this.associatedTypes = associatedTypes; + this.associatedExtensions = Array.Empty(); + } + + public OrganizeType(int actionIndex, string name, string[] associatedExtensions, params string[] associatedTypes) + { + this.actionIndex = actionIndex; + this.name = name; + + this.associatedTypes = new Type[associatedTypes.Length]; + for (int i = 0; i < associatedTypes.Length; i++) + this.associatedTypes[i] = System.Type.GetType(associatedTypes[i]); + + this.associatedExtensions = associatedExtensions; + } + + public OrganizeType(int actionIndex, string name, string[] associatedExtensions, params Type[] associatedTypes) + { + this.actionIndex = actionIndex; + this.name = name; + + int count = associatedTypes.Length; + this.associatedTypes = associatedTypes; + this.associatedExtensions = associatedExtensions; + } + + public bool IsAppliedTo(DependencyAsset a) + { + bool applies = a.type != null && + (associatedTypes.Any(t => t != null && (a.type == t || a.type.IsSubclassOf(t))) + || associatedExtensions.Any(e => !string.IsNullOrWhiteSpace(e) && a.path.EndsWith(e))); + + return applies; + } + + } + + private class BGColoredScope : System.IDisposable + { + private readonly Color ogColor; + public BGColoredScope(Color setColor) + { + ogColor = GUI.backgroundColor; + GUI.backgroundColor = setColor; + } + public BGColoredScope(Color setColor, bool isActive) + { + ogColor = GUI.backgroundColor; + GUI.backgroundColor = isActive ? setColor : ogColor; + } + public BGColoredScope(Color active, Color inactive, bool isActive) + { + ogColor = GUI.backgroundColor; + GUI.backgroundColor = isActive ? active : inactive; + } + + public BGColoredScope(int selectedIndex, params Color[] colors) + { + ogColor = GUI.backgroundColor; + GUI.backgroundColor = colors[selectedIndex]; + } + public void Dispose() + { + GUI.backgroundColor = ogColor; + } + } + #endregion + } +} diff --git a/AssetOrganizer/Editor/AssetOrganizer.cs.meta b/AssetOrganizer/Editor/AssetOrganizer.cs.meta new file mode 100644 index 0000000..0abbeb1 --- /dev/null +++ b/AssetOrganizer/Editor/AssetOrganizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3350e00f0c1769488b502a2a4f77a48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AssetOrganizer/Editor/com.dreadscripts.assetorganizer.Editor.asmdef b/AssetOrganizer/Editor/com.dreadscripts.assetorganizer.Editor.asmdef new file mode 100644 index 0000000..bbeaea2 --- /dev/null +++ b/AssetOrganizer/Editor/com.dreadscripts.assetorganizer.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.assetorganizer.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/AssetOrganizer/Editor/com.dreadscripts.assetorganizer.Editor.asmdef.meta b/AssetOrganizer/Editor/com.dreadscripts.assetorganizer.Editor.asmdef.meta new file mode 100644 index 0000000..ff96ea1 --- /dev/null +++ b/AssetOrganizer/Editor/com.dreadscripts.assetorganizer.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ffecb479d42e80945a3b21adb02b71e4 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AssetOrganizer/LICENSE b/AssetOrganizer/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/AssetOrganizer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/AssetOrganizer/LICENSE.meta b/AssetOrganizer/LICENSE.meta new file mode 100644 index 0000000..7575f84 --- /dev/null +++ b/AssetOrganizer/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9587cb3598e7645408cf231bd10e0beb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AssetOrganizer/README.md b/AssetOrganizer/README.md new file mode 100644 index 0000000..c587a0b --- /dev/null +++ b/AssetOrganizer/README.md @@ -0,0 +1,22 @@ +# Asset Organizer +Reorganizes Prefab, Scene or Folder's dependency assets into their own sorted folders + +### [Download From Here](https://vpm.dreadscripts.com/) + +## Features +- Organize assets in your project based on their types or custom folders. +- Define custom folder actions for specific asset types. +- Choose from various sorting options to manage your assets effectively. +- Delete empty folders automatically after organizing assets. + +## How to Use +1. Open the Unity Editor. +2. Navigate to `DreadTools > Asset Organizer` in the top menu. +3. Choose the "Organizer" tab to organize assets based on their types or custom folders. +4. Use the "Options" tab to configure folder actions, type actions, and sorting options. +5. Click "Get Assets" to select a main asset and gather its dependencies. +6. Adjust the organization settings as needed. +7. Click "Organize Assets" to apply the changes. + +### Thank You +If you enjoy Asset Organizer, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! \ No newline at end of file diff --git a/AssetOrganizer/README.md.meta b/AssetOrganizer/README.md.meta new file mode 100644 index 0000000..8cc9b30 --- /dev/null +++ b/AssetOrganizer/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 293a57234d624b74ab4a7fbe07d0ac19 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AssetOrganizer/package.json b/AssetOrganizer/package.json new file mode 100644 index 0000000..0bda437 --- /dev/null +++ b/AssetOrganizer/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.assetorganizer", + "displayName": "DreadScripts - AssetOrganizer", + "version": "1.0.1", + "description": "Reorganizes Prefab, Scene or Folder's dependency assets into their own sorted folders.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/AssetOrganizer/package.json.meta b/AssetOrganizer/package.json.meta new file mode 100644 index 0000000..47a85d2 --- /dev/null +++ b/AssetOrganizer/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e4bc2cfdad5430543a82759af2a714dc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds.meta b/AutoBounds.meta new file mode 100644 index 0000000..9c1d1b4 --- /dev/null +++ b/AutoBounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3dd19a6bc8656345af033917af670f4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/Editor.meta b/AutoBounds/Editor.meta new file mode 100644 index 0000000..13b31f0 --- /dev/null +++ b/AutoBounds/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c6fc63526d0ac084981a6d4acbeff746 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/Editor/AutoBounds.cs b/AutoBounds/Editor/AutoBounds.cs new file mode 100644 index 0000000..b856fe1 --- /dev/null +++ b/AutoBounds/Editor/AutoBounds.cs @@ -0,0 +1,92 @@ +using UnityEngine; +using UnityEditor; + +//Made by Dreadrith#3238 +//Discord: https://discord.gg/ZsPfrGn +//Github: https://github.com/Dreadrith/DreadScripts +//Gumroad: https://gumroad.com/dreadrith +//Ko-fi: https://ko-fi.com/dreadrith + +namespace DreadScripts.AutoBounds +{ + public class AutoBounds + { + private const float boundsPercentIncrease = 25; + + //Sets bounds to auto-calculated dimensions starting from the target + [MenuItem("DreadTools/Utility/AutoBounds/Auto")] + private static void CalculateBounds() + { + //Get Selection + GameObject go = Selection.activeGameObject; + if (!go) return; + + //Check for animator and to use hips instead of target as root + //Always using target as root may make the bounds follow improperly + Animator ani = go.GetComponent(); + bool isHuman = ani && ani.avatar && ani.isHuman; + + Transform rootBone = isHuman ? ani.GetBoneTransform(HumanBodyBones.Hips) ?? go.transform : go.transform; + + //Get child renderers including disabled + var renderers = go.GetComponentsInChildren(true); + + //Get Max Extent by getting the biggest dimension + //Avatars can rotate their armature around meaning this dimension can go in any direction, so reuse it for every dimension + //Probably not the best logic or calculation but it usually works + float maxExtent = 0; + foreach (var r in renderers) + { + if (!r.sharedMesh) continue; + Transform currentRootBone = r.rootBone ?? r.transform; + var currentExtent = GetMaxAxis(rootBone.InverseTransformPoint(currentRootBone.position)) + GetMaxAxis(r.sharedMesh.bounds.size); + if (maxExtent < currentExtent) maxExtent = currentExtent; + } + + //If human, hips should stay the center + //Otherwise, center the bounds vertically based on current dimensions + Vector3 center = new Vector3(0, isHuman ? 0 : maxExtent / 2, 0); + + //Increase area by percentage for safe measure + maxExtent *= 1 + boundsPercentIncrease / 100; + Vector3 extents = new Vector3(maxExtent, maxExtent, maxExtent); + + //Set auto calculated bounds starting from target as root + SetBounds(go.transform, rootBone, new Bounds(center, extents)); + } + + + //Sets sampled bounds from target starting from top most parent of target + [MenuItem("DreadTools/Utility/AutoBounds/Sample")] + private static void SampleBounds() + { + //Get Selection + GameObject go = Selection.activeGameObject; + if (!go) return; + + //Get renderer for sampling + SkinnedMeshRenderer sampleRenderer = go.GetComponent(); + if (!sampleRenderer) + { + Debug.LogWarning("No skinned mesh renderer on selected gameobject."); + return; + } + + //Set the samples bounds start from the top most parent + SetBounds(go.transform.root, sampleRenderer.rootBone, sampleRenderer.bounds); + } + + //Sets all children skinned mesh renderers of the root to the given bounds + private static void SetBounds(Transform root, Transform rootbone, Bounds myBounds) + { + foreach (var r in root.GetComponentsInChildren(true)) + { + r.rootBone = rootbone; + r.localBounds = myBounds; + EditorUtility.SetDirty(r); + } + } + + private static float GetMaxAxis(Vector3 v) => Mathf.Max(v.x, v.y, v.z); + } +} diff --git a/AutoBounds/Editor/AutoBounds.cs.meta b/AutoBounds/Editor/AutoBounds.cs.meta new file mode 100644 index 0000000..800ac2b --- /dev/null +++ b/AutoBounds/Editor/AutoBounds.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b593cd90629c1ec408e9482136c2ce62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/Editor/AutoBoundsEditor.asmdef b/AutoBounds/Editor/AutoBoundsEditor.asmdef new file mode 100644 index 0000000..6610281 --- /dev/null +++ b/AutoBounds/Editor/AutoBoundsEditor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "AutoBoundsEditor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/AutoBounds/Editor/AutoBoundsEditor.asmdef.meta b/AutoBounds/Editor/AutoBoundsEditor.asmdef.meta new file mode 100644 index 0000000..1feee63 --- /dev/null +++ b/AutoBounds/Editor/AutoBoundsEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9ba96ad25be5a4649abd6919a2505e50 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/How to use.txt b/AutoBounds/How to use.txt new file mode 100644 index 0000000..0b636af --- /dev/null +++ b/AutoBounds/How to use.txt @@ -0,0 +1,26 @@ +Made by Dreadrith#3238 +Discord: https://discord.gg/ZsPfrGn +Github: https://github.com/Dreadrith/DreadScripts +Gumroad: https://gumroad.com/dreadrith +Ko-fi: https://ko-fi.com/dreadrith + +Menu items can be found in the top left corner of the Unity Editor window +[DreadTools > Utility > AutoBounds] + +=========================================================================== + +[Automatic] +This will set all the skinned mesh renderers of the target to the same automatically calculated bounds and sets the hip/root bone as the target. + +1- Select the root of your avatar. +2- Press the menu item: [DreadTools > Utility > AutoBounds > Auto] + +============================================================================ + +[Sample] +This will set all the skinned mesh renderers that are children to the top most parent of the target to the same bounds and root bone as the target. + +1- Select the target that you want to sample from. +2- Press the menu item: [DreadTools > Utility > AutoBounds > Sample] + +============================================================================ \ No newline at end of file diff --git a/AutoBounds/How to use.txt.meta b/AutoBounds/How to use.txt.meta new file mode 100644 index 0000000..7549c64 --- /dev/null +++ b/AutoBounds/How to use.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 101f95a936983c24e93978d6b5194335 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/LICENSE b/AutoBounds/LICENSE new file mode 100644 index 0000000..a7d4152 --- /dev/null +++ b/AutoBounds/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/AutoBounds/LICENSE.meta b/AutoBounds/LICENSE.meta new file mode 100644 index 0000000..08aada1 --- /dev/null +++ b/AutoBounds/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a9e3c6636b709a4ba2456e06fa37dc5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/README.md b/AutoBounds/README.md new file mode 100644 index 0000000..250a28b --- /dev/null +++ b/AutoBounds/README.md @@ -0,0 +1,23 @@ +# AutoBounds +AutoBounds's purpose is to make easier to set the bounds of skinned mesh renderers so that they don't disappear in your peripherals especially when the avatar is not in a standing pose + +# How To Use +Menu items can be found in the top left corner of the Unity Editor window +[DreadTools > Utility > AutoBounds] + +## Automatic +This will set all the skinned mesh renderers of the target to the same automatically calculated bounds and sets the hip/root bone as the target. + +1- Select the root of your avatar. +2- Press the menu item: [DreadTools > Utility > AutoBounds > Auto] + +## Sample +This will set all the skinned mesh renderers that are children to the top most parent of the target to the same bounds and root bone as the target. + +1- Select the target that you want to sample from. +2- Press the menu item: [DreadTools > Utility > AutoBounds > Sample] + +### Before +[]() +### After +[]() diff --git a/AutoBounds/README.md.meta b/AutoBounds/README.md.meta new file mode 100644 index 0000000..cefc5cc --- /dev/null +++ b/AutoBounds/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f82691f766015f24a92f2952e70e2aea +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/_media.meta b/AutoBounds/_media.meta new file mode 100644 index 0000000..2676379 --- /dev/null +++ b/AutoBounds/_media.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd6bbcd0b5d172d47a2fb8b30c225eeb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/_media/After.png b/AutoBounds/_media/After.png new file mode 100644 index 0000000..0b9297f Binary files /dev/null and b/AutoBounds/_media/After.png differ diff --git a/AutoBounds/_media/After.png.meta b/AutoBounds/_media/After.png.meta new file mode 100644 index 0000000..c2f88a8 --- /dev/null +++ b/AutoBounds/_media/After.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: b4d4eec8e21c87f47b20228e1ed0e320 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/_media/Before.png b/AutoBounds/_media/Before.png new file mode 100644 index 0000000..bf81d81 Binary files /dev/null and b/AutoBounds/_media/Before.png differ diff --git a/AutoBounds/_media/Before.png.meta b/AutoBounds/_media/Before.png.meta new file mode 100644 index 0000000..9472c35 --- /dev/null +++ b/AutoBounds/_media/Before.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 654e762dad0af114c9f148942ba2b372 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AutoBounds/package.json b/AutoBounds/package.json new file mode 100644 index 0000000..c206363 --- /dev/null +++ b/AutoBounds/package.json @@ -0,0 +1,23 @@ +{ + "name": "com.dreadscripts.tool.autobounds", + "displayName": "AutoBounds", + "version": "1.0.0", + "unity": "2019.4", + "description": "Editor script to help setting the bounds of skinned mesh renderers.", + "keywords": [ + "Dreadrith", + "DreadScripts", + "DreadTools", + "Editor", + "Utility", + "Renderers" + ], + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://github.com/Dreadrith" + }, + "legacyFolders": { + "Assets\\DreadScripts\\Utility\\Editor\\AutoBounds": "97d295ac00bde904b83106bff682f8b6" + } +} \ No newline at end of file diff --git a/AutoBounds/package.json.meta b/AutoBounds/package.json.meta new file mode 100644 index 0000000..e6b52e9 --- /dev/null +++ b/AutoBounds/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57512e319d5fa5d4f948b525f1c016af +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Better-Unity.meta b/Better-Unity.meta new file mode 100644 index 0000000..f0c57fc --- /dev/null +++ b/Better-Unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c58042552f45a5439a61e9c16711da7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Better-Unity/.gitignore b/Better-Unity/.gitignore new file mode 100644 index 0000000..719db2f --- /dev/null +++ b/Better-Unity/.gitignore @@ -0,0 +1,2 @@ + +*.meta diff --git a/Better-Unity/Editor/BetterUnityEditor.asmdef b/Better-Unity/Editor/BetterUnityEditor.asmdef new file mode 100644 index 0000000..2e74079 --- /dev/null +++ b/Better-Unity/Editor/BetterUnityEditor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "BetterUnityEditor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Better-Unity/Editor/CopyCutPaste.cs b/Better-Unity/Editor/CopyCutPaste.cs new file mode 100644 index 0000000..98e4234 --- /dev/null +++ b/Better-Unity/Editor/CopyCutPaste.cs @@ -0,0 +1,86 @@ +using UnityEngine; +using UnityEditor; +using System.IO; + +//Adds 3 new Assets context menu items: Copy, Cut & Paste + +namespace BetterUnity +{ + public class CopyCutPaste + { + private static bool copy; + private static string[] _tempGUID; + private static string[] assetsGUID; + + [MenuItem("Assets/Copy", false, 20)] + private static void Copy() + { + copy = true; + assetsGUID = _tempGUID; + } + + [MenuItem("Assets/Cut", false, 20)] + private static void Cut() + { + copy = false; + assetsGUID = _tempGUID; + } + + [MenuItem("Assets/Paste", false, 20)] + private static void Paste() + { + string folderPath = AssetDatabase.GetAssetPath(Selection.activeObject); + Move(folderPath, assetsGUID, copy); + } + + public static void Move(string destination, string[] assetsGUID, bool copy) + { + if (!string.IsNullOrEmpty(Path.GetExtension(destination)) && !AssetDatabase.IsValidFolder(destination)) + destination = Path.GetDirectoryName(destination); + + try + { + AssetDatabase.StartAssetEditing(); + + foreach (string s in assetsGUID) + { + string filePath = AssetDatabase.GUIDToAssetPath(s); + string fileName = Path.GetFileName(filePath); + + + if (copy) + { + AssetDatabase.CopyAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName)); + } + else + { + if (destination + "/" + fileName != filePath) + AssetDatabase.MoveAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName)); + } + } + } + catch(System.Exception e) { Debug.LogError(e);} + finally + { + AssetDatabase.StopAssetEditing(); + } + } + + [MenuItem("Assets/Copy", true, 20)] + [MenuItem("Assets/Cut", true, 20)] + private static bool ValidateSelect() + { + _tempGUID = Selection.assetGUIDs; + return _tempGUID.Length > 0; + } + + [MenuItem("Assets/Paste", true, 20)] + private static bool ValidateMove() + { + return (assetsGUID != null && assetsGUID.Length > 0 && Selection.activeObject); + } + + + + } +} \ No newline at end of file diff --git a/Better-Unity/Editor/CopyGUID.cs b/Better-Unity/Editor/CopyGUID.cs new file mode 100644 index 0000000..86cb260 --- /dev/null +++ b/Better-Unity/Editor/CopyGUID.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +public class CopyGUID : MonoBehaviour +{ + [MenuItem("Assets/Copy GUID")] + private static void CopyGUIDMethod() + { + if (Selection.assetGUIDs.Length > 0) + EditorGUIUtility.systemCopyBuffer = Selection.assetGUIDs[0]; + } +} diff --git a/Better-Unity/Editor/CreateTxt.cs b/Better-Unity/Editor/CreateTxt.cs new file mode 100644 index 0000000..2f40ad1 --- /dev/null +++ b/Better-Unity/Editor/CreateTxt.cs @@ -0,0 +1,36 @@ +using UnityEditor; +using System.IO; + +//Adds new context menu item: Assets > Create > Text File +//Creates a new text file in the destination folder + +namespace BetterUnity +{ + public class CreateTxt + { + [MenuItem("Assets/Create/Text File", false, 20)] + private static void CreateMyHeckingTextFile() + { + //Get the path of what was used on right click + string path = AssetDatabase.GetAssetPath(Selection.activeObject); + + //If using Unity's toolbar context menu. There may be no selection. So use the main Assets folder. + if (string.IsNullOrWhiteSpace(path)) path = "Assets"; + + //If it's a folder, use it. If it's a file, get the parent folder. Name it "New Text File". + string txtPath = (AssetDatabase.IsValidFolder(path) ? path : Path.GetDirectoryName(path)) + "/New Text File.txt"; + + //Make it unique + txtPath = AssetDatabase.GenerateUniqueAssetPath(txtPath); + + //Create it and Dispose of the StreamWriter + File.CreateText(txtPath).Dispose(); + + //Import it + AssetDatabase.ImportAsset(txtPath); + + //Highlight it + EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(txtPath)); + } + } +} \ No newline at end of file diff --git a/Better-Unity/Editor/GOCopyPath.cs b/Better-Unity/Editor/GOCopyPath.cs new file mode 100644 index 0000000..c55a5cf --- /dev/null +++ b/Better-Unity/Editor/GOCopyPath.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +//Copy the path from the root transform to the target GameObject + +namespace BetterUnity +{ + public class GOCopyPath + { + private const bool log = true; + + [MenuItem("GameObject/Copy Path", false, -1000)] + private static void GameObjectCopyPath() + { + var go = Selection.activeGameObject; + if (!go) + { + Debug.LogWarning("No GameObject selected"); + return; + } + + string path = AnimationUtility.CalculateTransformPath(go.transform, go.transform.root); + if (log) Debug.Log("Path: " + path); + GUIUtility.systemCopyBuffer = path; + } + } +} diff --git a/Better-Unity/Editor/TransformEditor.cs b/Better-Unity/Editor/TransformEditor.cs new file mode 100644 index 0000000..a8cf115 --- /dev/null +++ b/Better-Unity/Editor/TransformEditor.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using UnityEditor; + +//Replicates Unity's Transform Inspector but adds new Context Menu to each field. +//Allows you to Copy, Paste and Reset any transform field individually. + +namespace BetterUnity +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Transform))] + public class TransformEditor : Editor + { + private static System.Type RotationGUIType; + private static MethodInfo RotationGUIEnableMethod; + private static MethodInfo DrawRotationGUIMethod; + private object rotationGUI; + + private SerializedProperty m_LocalPosition; + private SerializedProperty m_LocalRotation; + private SerializedProperty m_LocalScale; + + private static Vector3 copiedValues; + private static bool hasCopiedValues; + private static int contextChoice; + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.PropertyField(m_LocalPosition, positionContent); + Rect posRect = GUILayoutUtility.GetLastRect(); + + DrawRotationGUIMethod.Invoke(rotationGUI, null); + Rect rotRect = GUILayoutUtility.GetLastRect(); + + EditorGUILayout.PropertyField(m_LocalScale, scaleContent); + Rect scaleRect = GUILayoutUtility.GetLastRect(); + + serializedObject.ApplyModifiedProperties(); + + Event e = Event.current; + Vector2 m = e.mousePosition; + if (e.type == EventType.ContextClick) + { + contextChoice = 0; + if (posRect.Contains(m)) contextChoice = 1; + if (rotRect.Contains(m)) contextChoice = 2; + if (scaleRect.Contains(m)) contextChoice = 3; + if (contextChoice > 0) + { + GenericMenu myMenu = new GenericMenu(); + myMenu.AddItem(new GUIContent("Copy"), false, CopyFieldValues); + myMenu.AddItem(new GUIContent("Paste"), false, hasCopiedValues ? new GenericMenu.MenuFunction(PasteFieldValues) : null); + myMenu.AddItem(new GUIContent("Reset"), false, ResetFieldValues); + myMenu.ShowAsContext(); + } + } + } + + private void ResetFieldValues() + { + switch (contextChoice) + { + case 1: + m_LocalPosition.vector3Value = Vector3.zero; + break; + case 2: + m_LocalRotation.quaternionValue = new Quaternion(); + break; + case 3: + m_LocalScale.vector3Value = Vector3.one; + break; + } + serializedObject.ApplyModifiedProperties(); + } + private void CopyFieldValues() + { + hasCopiedValues = true; + switch (contextChoice) + { + case 1: copiedValues = m_LocalPosition.vector3Value; + break; + case 2: + copiedValues = m_LocalRotation.quaternionValue.eulerAngles; + break; + case 3: + copiedValues = m_LocalScale.vector3Value; + break; + } + } + + private void PasteFieldValues() + { + switch (contextChoice) + { + case 1: + m_LocalPosition.vector3Value = copiedValues; + break; + case 2: + var tempQuaternion = new Quaternion {eulerAngles = copiedValues}; + m_LocalRotation.quaternionValue = tempQuaternion; + break; + case 3: + m_LocalScale.vector3Value = copiedValues ; + break; + } + serializedObject.ApplyModifiedProperties(); + } + + private void OnEnable() + { + if (RotationGUIType == null) RotationGUIType = System.Type.GetType("UnityEditor.TransformRotationGUI, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"); + if (RotationGUIEnableMethod == null) RotationGUIEnableMethod = RotationGUIType.GetMethod("OnEnable", BindingFlags.Public | BindingFlags.Instance); + if (DrawRotationGUIMethod == null) DrawRotationGUIMethod = RotationGUIType.GetMethod("RotationField", Array.Empty()); + + m_LocalPosition = serializedObject.FindProperty("m_LocalPosition"); + m_LocalRotation = serializedObject.FindProperty("m_LocalRotation"); + m_LocalScale = serializedObject.FindProperty("m_LocalScale"); + + if (rotationGUI == null) rotationGUI = Activator.CreateInstance(RotationGUIType); + RotationGUIEnableMethod.Invoke(rotationGUI, new object[] {m_LocalRotation, rotationContent}); + } + + private GUIContent positionContent = new GUIContent("Position", "The local position of this GameObject relative to the parent."); + private GUIContent rotationContent = new GUIContent("Rotation", "The local rotation of this GameObject relative to the parent."); + private GUIContent scaleContent = new GUIContent("Scale", "The local scaling of this GameObject relative to the parent."); + private const string floatingPointWarning = "Due to floating-point precision limitations, it is recommended to bring the world coordinates of the GameObject within a smaller range."; + + } +} diff --git a/Better-Unity/LICENSE b/Better-Unity/LICENSE new file mode 100644 index 0000000..a7d4152 --- /dev/null +++ b/Better-Unity/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Better-Unity/README.md b/Better-Unity/README.md new file mode 100644 index 0000000..c383e97 --- /dev/null +++ b/Better-Unity/README.md @@ -0,0 +1,37 @@ +# Better-Unity +Built on Unity 2019.4.31f1.
+Collection of editor scripts that aim to overall facilitate and improve usage of Unity Editor. + + +Download: +Unity Package - + Zip (VPM Compatible) + +
+ CopyCutPaste + Adds 3 new Assets context menu items: Copy, Cut & Paste +
+ +
+ CreateTxt + Adds a new Assets context menu item: Create > Text File
+ Allows you to instantly create a text file in the targeted folder +
+ +
+ Transform Editor + Replicates Unity's Transform Inspector but adds a Context Menu to each field.
+ Allows you to Copy, Paste and Reset any transform field individually. +
+ +
+ GOCopy Path + Adds a new GameObject context menu item: GameObject > Copy Path.
+ Allows you to Copy the path From the root to the target GameObject. +
+ +
+ CopyGUID + Adds a new Assets context menu item: Copy GUID.
+ Copies the GUID of the selected Asset to the clipboard. +
diff --git a/Better-Unity/package.json b/Better-Unity/package.json new file mode 100644 index 0000000..4699fd5 --- /dev/null +++ b/Better-Unity/package.json @@ -0,0 +1,23 @@ +{ + "name": "com.dreadscripts.tool.betterunity", + "displayName": "DreadTools - Better Unity", + "version": "1.0.0", + "unity": "2019.4", + "description": "Editor scripts to improve the Unity Editor.", + "keywords": [ + "Dreadrith", + "DreadScripts", + "DreadTools", + "Editor", + "Utility", + "Enhancement" + ], + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://github.com/Dreadrith" + }, + "legacyFolders": { + "Assets\\DreadScripts\\Better Unity": "a09203517043c5344b527754b22a4eac" + } +} \ No newline at end of file diff --git a/CameraUtility.meta b/CameraUtility.meta new file mode 100644 index 0000000..1ea3992 --- /dev/null +++ b/CameraUtility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71b402fd2933a4b478281f4cf11967be +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CameraUtility/Editor.meta b/CameraUtility/Editor.meta new file mode 100644 index 0000000..3b94866 --- /dev/null +++ b/CameraUtility/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 904e122b4614a8c439caa37312b0704d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CameraUtility/Editor/CameraUtility.cs b/CameraUtility/Editor/CameraUtility.cs new file mode 100644 index 0000000..29cb3b6 --- /dev/null +++ b/CameraUtility/Editor/CameraUtility.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace DreadScripts.CameraUtility +{ + public class CameraUtility + { + private const float SCENE_PIVOT_OFFSET = 1; + + [MenuItem("DreadTools/Utility/Camera/Snap Scene To Game")] + public static void SnapSceneViewToGame() + { + if (!TryGetGameCamera(out Camera gc)) return; + + SceneView view = SceneView.lastActiveSceneView; + if (YellowLog(view == null, "No Scene View found")) return; + + Undo.RecordObject(view, "Snap STG"); + view.LookAtDirect(gc.transform.position, gc.transform.rotation, SCENE_PIVOT_OFFSET/2); + view.pivot = gc.transform.position + gc.transform.forward * SCENE_PIVOT_OFFSET; + } + + [MenuItem("DreadTools/Utility/Camera/Snap Game To Scene")] + public static void SnapGameViewToScene() + { + if (!TryGetGameCamera(out Camera gc)) return; + if (!TryGetSceneCamera(out Camera sc)) return; + + Undo.RecordObject(gc.transform, "Snap GTS"); + gc.transform.SetPositionAndRotation(sc.transform.position, sc.transform.rotation); + } + + private static bool TryGetGameCamera(out Camera gameCamera) + { + gameCamera = Camera.main ?? Object.FindObjectOfType(); + return !YellowLog(!gameCamera, "No Camera found in scene"); + } + private static bool TryGetSceneCamera(out Camera sceneCamera) + { + sceneCamera = SceneView.lastActiveSceneView?.camera; + return !YellowLog(!sceneCamera, "No Scene View found"); + } + + private static bool YellowLog(bool condition, string msg) + { + if (condition) Debug.LogWarning($"[CameraUtility] {msg}"); + return condition; + } + } +} diff --git a/CameraUtility/Editor/CameraUtility.cs.meta b/CameraUtility/Editor/CameraUtility.cs.meta new file mode 100644 index 0000000..cf87717 --- /dev/null +++ b/CameraUtility/Editor/CameraUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e230c2bf340461c46939efc284f6bf22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CameraUtility/Editor/com.dreadscripts.camerautility.Editor.asmdef b/CameraUtility/Editor/com.dreadscripts.camerautility.Editor.asmdef new file mode 100644 index 0000000..dd7f063 --- /dev/null +++ b/CameraUtility/Editor/com.dreadscripts.camerautility.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.camerautility.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/CameraUtility/Editor/com.dreadscripts.camerautility.Editor.asmdef.meta b/CameraUtility/Editor/com.dreadscripts.camerautility.Editor.asmdef.meta new file mode 100644 index 0000000..2b674cc --- /dev/null +++ b/CameraUtility/Editor/com.dreadscripts.camerautility.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: acb80353a76f6c0488836f3e26ef1785 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CameraUtility/LICENSE b/CameraUtility/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/CameraUtility/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/CameraUtility/LICENSE.meta b/CameraUtility/LICENSE.meta new file mode 100644 index 0000000..511d011 --- /dev/null +++ b/CameraUtility/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6d418ac183680543906fe0d17a02a3a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CameraUtility/README.md b/CameraUtility/README.md new file mode 100644 index 0000000..2f03237 --- /dev/null +++ b/CameraUtility/README.md @@ -0,0 +1,16 @@ +# Camera Utility + +### [Download From Here](https://vpm.dreadscripts.com/) + +![image](https://i.imgur.com/5fow365.gif) + +## Features +- Snap the Scene view to the position and rotation of the Game view camera or vice versa. + +## How to Use +1. Open the Unity Editor. +2. Navigate to `DreadTools > Utility > Camera` in the top menu. +3. Choose either "Snap Scene To Game" or "Snap Game To Scene" to synchronize views accordingly. + +### Thank You +If you enjoy Camera Utility, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! diff --git a/CameraUtility/README.md.meta b/CameraUtility/README.md.meta new file mode 100644 index 0000000..610531b --- /dev/null +++ b/CameraUtility/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: df3ef724ecd912644ab09c0dd1490ca1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CameraUtility/package.json b/CameraUtility/package.json new file mode 100644 index 0000000..90c92b3 --- /dev/null +++ b/CameraUtility/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.camerautility", + "displayName": "DreadScripts - CameraUtility", + "version": "1.0.1", + "description": "Simple menu item to snap Game View to Scene View or vice versa.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/CameraUtility/package.json.meta b/CameraUtility/package.json.meta new file mode 100644 index 0000000..7e51e2c --- /dev/null +++ b/CameraUtility/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c08baa384bf219b4494368267dea3617 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste.meta b/CopyCutPaste.meta new file mode 100644 index 0000000..d4003a2 --- /dev/null +++ b/CopyCutPaste.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0694de95b2b93b4f825ec371ddbff0f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste/Editor.meta b/CopyCutPaste/Editor.meta new file mode 100644 index 0000000..2852468 --- /dev/null +++ b/CopyCutPaste/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 214b8dfd44e5d9240b993faa65d5bd17 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste/Editor/CopyCutPaste.cs b/CopyCutPaste/Editor/CopyCutPaste.cs new file mode 100644 index 0000000..d8296e1 --- /dev/null +++ b/CopyCutPaste/Editor/CopyCutPaste.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using UnityEditor; +using System.IO; + +namespace DreadScripts.CopyCutPaste +{ + public class CopyCutPaste + { + private static bool copy; + private static string[] _tempGUID; + private static string[] assetsGUID; + + [MenuItem("Assets/Copy", false, 20)] + private static void Copy() + { + copy = true; + assetsGUID = _tempGUID; + } + + [MenuItem("Assets/Cut", false, 20)] + private static void Cut() + { + copy = false; + assetsGUID = _tempGUID; + } + + [MenuItem("Assets/Paste", false, 20)] + private static void Paste() + { + string folderPath = AssetDatabase.GetAssetPath(Selection.activeObject); + Move(folderPath, assetsGUID, copy); + } + + public static void Move(string destination, string[] assetsGUID, bool copy) + { + if (!string.IsNullOrEmpty(Path.GetExtension(destination)) && !AssetDatabase.IsValidFolder(destination)) + destination = Path.GetDirectoryName(destination); + + try + { + AssetDatabase.StartAssetEditing(); + + foreach (string s in assetsGUID) + { + string filePath = AssetDatabase.GUIDToAssetPath(s); + string fileName = Path.GetFileName(filePath); + + + if (copy) + { + AssetDatabase.CopyAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName)); + } + else + { + if (destination + "/" + fileName != filePath) + AssetDatabase.MoveAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName)); + } + } + } + catch(System.Exception e) { Debug.LogError(e);} + finally + { + AssetDatabase.StopAssetEditing(); + } + } + + [MenuItem("Assets/Copy", true, 20)] + [MenuItem("Assets/Cut", true, 20)] + private static bool ValidateSelect() + { + _tempGUID = Selection.assetGUIDs; + return _tempGUID.Length > 0; + } + + [MenuItem("Assets/Paste", true, 20)] + private static bool ValidateMove() + { + return (assetsGUID != null && assetsGUID.Length > 0 && Selection.activeObject); + } + + + + } +} \ No newline at end of file diff --git a/CopyCutPaste/Editor/CopyCutPaste.cs.meta b/CopyCutPaste/Editor/CopyCutPaste.cs.meta new file mode 100644 index 0000000..eeb51e6 --- /dev/null +++ b/CopyCutPaste/Editor/CopyCutPaste.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e426aee4657d89e48be7f5d84c4adbdd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste/Editor/com.dreadscripts.copycutpaste.Editor.asmdef b/CopyCutPaste/Editor/com.dreadscripts.copycutpaste.Editor.asmdef new file mode 100644 index 0000000..d593741 --- /dev/null +++ b/CopyCutPaste/Editor/com.dreadscripts.copycutpaste.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.copycutpaste.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/CopyCutPaste/Editor/com.dreadscripts.copycutpaste.Editor.asmdef.meta b/CopyCutPaste/Editor/com.dreadscripts.copycutpaste.Editor.asmdef.meta new file mode 100644 index 0000000..50ff3a9 --- /dev/null +++ b/CopyCutPaste/Editor/com.dreadscripts.copycutpaste.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 76bf5f01c2ff3744eab2e7b22276e902 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste/LICENSE b/CopyCutPaste/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/CopyCutPaste/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/CopyCutPaste/LICENSE.meta b/CopyCutPaste/LICENSE.meta new file mode 100644 index 0000000..9bc40e8 --- /dev/null +++ b/CopyCutPaste/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b549fccaaa3640d439317f3d4c5e43ba +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste/README.md b/CopyCutPaste/README.md new file mode 100644 index 0000000..eaa1386 --- /dev/null +++ b/CopyCutPaste/README.md @@ -0,0 +1,7 @@ +# CopyCutPaste +Adds 3 much needed buttons to Unity assets: Copy, Cut, and Paste. Does what's expected. + +### [Download From Here](https://vpm.dreadscripts.com/) + +### Thank You +If you enjoy CopyCutPaste, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! \ No newline at end of file diff --git a/CopyCutPaste/README.md.meta b/CopyCutPaste/README.md.meta new file mode 100644 index 0000000..0f74314 --- /dev/null +++ b/CopyCutPaste/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b36388504e24a824fa514d38dbf5b32c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CopyCutPaste/package.json b/CopyCutPaste/package.json new file mode 100644 index 0000000..5dff63a --- /dev/null +++ b/CopyCutPaste/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.copycutpaste", + "displayName": "DreadScripts - CopyCutPaste", + "version": "1.0.1", + "description": "Adds 3 much needed buttons to Unity assets: Copy, Cut, and Paste.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/CopyCutPaste/package.json.meta b/CopyCutPaste/package.json.meta new file mode 100644 index 0000000..d3134c7 --- /dev/null +++ b/CopyCutPaste/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 97bb26747222b3d4f96722ba6c1fb318 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl.meta b/LimbControl.meta new file mode 100644 index 0000000..fb6f3bb --- /dev/null +++ b/LimbControl.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a4b9dbdf0cee554da296d547d86a5d1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/CHANGELOG.md b/LimbControl/CHANGELOG.md new file mode 100644 index 0000000..1dacd1f --- /dev/null +++ b/LimbControl/CHANGELOG.md @@ -0,0 +1,30 @@ +(v1.1.2) +-------- +- [Misc] Defined minimal unity version +- [Misc] Renamed package to say DreadScripts instead of DreadTools + +(v1.1.1) +-------- +- [Fix] Fixed Package importing to project root instead of Packages +- [Fix] Fixed Package causing upload to throw errors due to Editor namespace + +(v1.1.0) +-------- +- [Feature] Limb Control will now also temporarily activate with control menu is open +- [Improvement] Limb Control now uses 0 parameter memory! Woo! +- [Fix] Fixed a few issues with pathing +- [UI] Reworked some UI +- [Misc] All Parameters renamed to use slash pathing. i.e: LC/RightArm/Toggle +- [Misc] Placed Add Tracking submenu after limb control like it's supposed to have been +- [Misc] Layers and States are now organized rather than default and have empty clips. +- [Misc] Some general code cleanup + +(v1.0.3) +-------- +- [Improvement] Max Parameter Cost is now detected automatically +- [Change] Modified folder name and paths from 'Limb Control' to 'LimbControl' +- [Change] Moved script to editor folder and removed unnecessary '#if UNITY_EDITOR' + +(v1.0.2) +-------- +- Initial Changelog creation \ No newline at end of file diff --git a/LimbControl/CHANGELOG.md.meta b/LimbControl/CHANGELOG.md.meta new file mode 100644 index 0000000..0dc7799 --- /dev/null +++ b/LimbControl/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f912695042cde8d49b2b38efd30fd2bc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Documentation~/com.dreadscripts.limbcontrol.md b/LimbControl/Documentation~/com.dreadscripts.limbcontrol.md new file mode 100644 index 0000000..480f32d --- /dev/null +++ b/LimbControl/Documentation~/com.dreadscripts.limbcontrol.md @@ -0,0 +1,34 @@ +Made by Dreadrith#3238 +Discord Server: https://discord.gg/ZsPfrGn + +## Feature Release + +Window found under DreadTools > Limb Control + +Limb Control allows the control of limbs through Puppet Control with a few clicks. +Desktop users, you've got power now! Half body users, Kick those people that say you dun got legs! + +Setup: +- Set your Avatar Descriptor +- Select the limbs to control +- Press Add Control +- Done! + +By default, each selected limb is a separate control and is controlled separately. +Use "Same Control" to make the selected limbs be controlled using the same control. + +Use "Custom BlendTree" to change the way the limbs move by setting your own BlendTree. + +Add Tracking: Adds another Submenu to the Expression Menu which allows Enabling/Disabling tracking on limbs. +Utilizes the integer values from 244 to 255, integer may be reused for other purposes. + +## Information about the feature +- Toggling a Limb control "On" sets the limb to Animation and enables its ability to be controlled using the "Control" puppet menu. +- Toggling a Limb control "Off" sets the limb to Tracking and disables the ability to control it using the "Control" puppet menu. +- Limb Control works during normal movement, emote animation and while sitting. + +## Information about the script +- Duplicates Base, Action and Sitting controllers if they exist. Creates new ones if they don't. +- Creates a new Expression Menu and/or Expression Parameters if they don't exist. +- Adds Submenu controls to the main Expression Menu. Fails if full. +- Creates new assets at the chosen asset path in the window. diff --git a/LimbControl/Editor.meta b/LimbControl/Editor.meta new file mode 100644 index 0000000..3405aa8 --- /dev/null +++ b/LimbControl/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2be2d83291a64544eb311808c71ae551 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Editor/LimbControl.cs b/LimbControl/Editor/LimbControl.cs new file mode 100644 index 0000000..f3f8e94 --- /dev/null +++ b/LimbControl/Editor/LimbControl.cs @@ -0,0 +1,938 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using VRC.SDK3.Avatars.Components; +using UnityEditor.Animations; +using VRC.SDK3.Avatars.ScriptableObjects; +using System; +using System.Linq; +using System.IO; +using System.Text.RegularExpressions; +using Object = UnityEngine.Object; +using static DreadScripts.LimbControl.LimbControl.CustomGUI; +using UnityEditor.SceneManagement; +using UnityEngine.Networking; + +namespace DreadScripts.LimbControl +{ + public class LimbControl : EditorWindow + { + private const string LAYER_TAG = "Limb Control"; + + + public static VRCAvatarDescriptor avatar; + public static bool useSameParameter; + public static bool useCustomTree; + public static bool addTracking; + public static bool addRightArm, addLeftArm, addRightLeg, addLeftLeg; + + public static BlendTree customTree; + + private static string assetPath; + private static AnimationClip emptyClip; + private static Vector2 scroll; + + + [MenuItem("DreadTools/Limb Control", false, 566)] + public static void ShowWindow() + { + GetWindow("Limb Control").titleContent.image = EditorGUIUtility.IconContent("AvatarMask Icon").image; + } + + public void OnGUI() + { + bool isValid = true; + scroll = EditorGUILayout.BeginScrollView(scroll); + + using (new GUILayout.VerticalScope(EditorStyles.helpBox)) + { + avatar = (VRCAvatarDescriptor)EditorGUILayout.ObjectField(Content.avatarContent, avatar, typeof(VRCAvatarDescriptor), true); + isValid &= avatar; + + } + + EditorGUILayout.Space(); + using (new GUILayout.VerticalScope(GUI.skin.box)) + { + DrawTitle("Control Limbs", "Choose which Limbs to control in your menu"); + + using (new GUILayout.HorizontalScope()) + { + DrawColoredButton(ref addLeftArm, "Left Arm"); + DrawColoredButton(ref addRightArm, "Right Arm"); + } + + using (new GUILayout.HorizontalScope()) + { + DrawColoredButton(ref addLeftLeg, "Left Leg"); + DrawColoredButton(ref addRightLeg, "Right Leg"); + } + DrawColoredButton(ref addTracking, Content.trackingContent); + EditorGUILayout.Space(); + } + + using (new GUILayout.VerticalScope(GUI.skin.box)) + { + DrawTitle("Extra", "To Add to or Modify Limb Control"); + bool canCombineControl = Convert.ToInt32(addRightArm) + Convert.ToInt32(addLeftArm) + Convert.ToInt32(addLeftLeg) + Convert.ToInt32(addRightLeg) > 1; + if (!canCombineControl) useSameParameter = false; + using (new EditorGUI.DisabledScope(!canCombineControl)) + DrawColoredButton(ref useSameParameter, Content.sameControlContent); + + + if (!useCustomTree) DrawColoredButton(ref useCustomTree, Content.customTreeContent); + else + { + using (new GUILayout.HorizontalScope()) + { + using (new BGColoredScope(useCustomTree)) + useCustomTree = GUILayout.Toggle(useCustomTree, string.Empty, EditorStyles.toolbarButton, GUILayout.Width(18), GUILayout.Height(18)); + customTree = (BlendTree)EditorGUILayout.ObjectField(customTree, typeof(BlendTree), false); + } + } + } + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + GUILayout.Label(new GUIContent("Required Memory: 0!","Limb Control only needs VRC's IK sync and no parameter syncing!"), EditorStyles.centeredGreyMiniLabel); + + + isValid &= addLeftArm || addLeftLeg || addRightArm || addRightLeg || addTracking; + + using (new GUILayout.HorizontalScope()) + { + using (new BGColoredScope(isValid)) + using(new EditorGUI.DisabledScope(!isValid)) + if (GUILayout.Button("Apply Limb Control", Content.comicallyLargeButton, GUILayout.Height(32))) + InitAddControl(!(addLeftArm || addLeftLeg || addRightArm || addRightLeg)); + + using (new BGColoredScope(Color.red)) + using (new EditorGUI.DisabledScope(!avatar)) + if (GUILayout.Button(Content.iconTrash,new GUIStyle(GUI.skin.button) {padding=new RectOffset()},GUILayout.Width(40),GUILayout.Height(32))) + if (EditorUtility.DisplayDialog("Remove Limb Control", "Remove Limb Control from " + avatar.gameObject.name + "?\nThis action can't be reverted.", "Remove", "Cancel")) + RemoveLimbControl(); + } + + DrawSeparator(); + assetPath = AssetFolderPath(assetPath, "Generated Assets", "LimbControlSavePath"); + Credit(); + + EditorGUILayout.EndScrollView(); + } + + private static string folderPath; + private static void InitAddControl(bool onlyTracking=false) + { + + if (avatar.expressionsMenu) + { + int cCost = (!onlyTracking ? 1 : 0) + (addTracking ? 1 : 0); + if (onlyTracking && !avatar.expressionsMenu.controls.Any(c => c.name == "Limb Control" && c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu)) + { + cCost -= 1; + } + if (addTracking && !avatar.expressionsMenu.controls.Any(c => c.name == "Tracking Control" && c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu)) + { + cCost -= 1; + } + + if ( 8 - (avatar.expressionsMenu.controls.Count + cCost) < 0) + { + Debug.LogError("Expression Menu can't contain more than 8 controls!"); + return; + } + + } + + ReadyPath(assetPath); + folderPath = AssetDatabase.GenerateUniqueAssetPath($"{assetPath}/{ValidatePath(avatar.gameObject.name)}"); + ReadyPath(folderPath); + emptyClip = Resources.Load("Animations/LC_EmptyClip"); + + AnimatorController myLocomotion = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base); + if (!myLocomotion) + myLocomotion = Resources.Load("Animations/LC_BaseLocomotion"); + + myLocomotion = CopyAssetAndReturn(myLocomotion, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + myLocomotion.name + ".controller")); + SetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base, myLocomotion); + + if (onlyTracking) goto AddTrackingJump; + + AnimatorController myAction = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Action); + if (!myAction) + { + myAction = new AnimatorController() { name = "LC_BaseAction" }; + AssetDatabase.CreateAsset(myAction, folderPath + "/" + myAction.name + ".controller"); + myAction.AddLayer("Base Layer"); + } + else + myAction = CopyAssetAndReturn(myAction, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + myAction.name + ".controller")); + SetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Action, myAction); + + AnimatorController mySitting = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting); + if (!mySitting) + mySitting = Resources.Load("Animations/LC_BaseSitting"); + + mySitting = CopyAssetAndReturn(mySitting, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + mySitting.name + ".controller")); + SetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting, mySitting); + + AvatarMask GetNewMask(string n) + { + AvatarMask newMask = new AvatarMask() { name = n }; + for (int i = 0; i < 13; i++) + { + newMask.SetHumanoidBodyPartActive((AvatarMaskBodyPart)i, false); + } + AssetDatabase.CreateAsset(newMask, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + newMask.name + ".mask")); + return newMask; + } + + AvatarMask myMask = null; + if (useSameParameter) + myMask = GetNewMask("LC_MixedMask"); + + GetBaseTree(); + + void DoControl(bool isRight, bool isArm) + { + string direction = isRight? "Right" : "Left"; + string limbName = isArm ? "Arm" : "Leg"; + string fullName = direction + limbName; + + if (!useSameParameter) + myMask = GetNewMask($"LC_{fullName}Mask"); + + myMask.SetHumanoidBodyPartActive((AvatarMaskBodyPart)Enum.Parse(typeof(AvatarMaskBodyPart), fullName, true), true); + if (!useSameParameter) + AddControl(myMask, customTree, $"LC/{fullName}"); + } + + if (addRightArm) DoControl(true, true); + if (addRightLeg) DoControl(true, false); + if (addLeftLeg) DoControl(false, false); + if (addLeftArm) DoControl(false, true); + + + if (useSameParameter) + { + string newBaseParameter = "Mixed"; + + if (avatar.expressionParameters) + newBaseParameter = GenerateUniqueString(newBaseParameter, s => avatar.expressionParameters.parameters.All(p => p.name != s)); + AddControl(myMask, customTree, $"LC/{newBaseParameter}"); + } + + Debug.Log("[Limb Control] Added Limb Control successfully!"); + + AddTrackingJump: + if (addTracking) AddTracking(myLocomotion); + } + public static void AddControl(AvatarMask mask, BlendTree tree, string baseparameter) + { + var tempParameter = $"{baseparameter}/Temp"; + var toggleParameter = $"{baseparameter}/Toggle"; + var treeParameter1 = $"{baseparameter}/X"; + var treeParameter2 = $"{baseparameter}/Y"; + avatar.customExpressions = true; + avatar.customizeAnimationLayers = true; + + VRCExpressionsMenu myMenu = avatar.expressionsMenu; + VRCExpressionParameters myParams = avatar.expressionParameters; + + if (!myMenu) + myMenu = ReplaceMenu(avatar, folderPath); + + if (!myParams) + myParams = ReplaceParameters(avatar, folderPath); + + + + VRCExpressionsMenu mainMenu = myMenu.controls.Find(c => c.name == "Limb Control" && c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu)?.subMenu; + + if (mainMenu == null) + { + mainMenu = CreateInstance(); + mainMenu.controls = new List(); + AddControls(myMenu, new List() { new VRCExpressionsMenu.Control() { name = "Limb Control", type = VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = mainMenu, icon = Resources.Load("Icons/LC_HandWaving") } }); + AssetDatabase.CreateAsset(mainMenu, folderPath + "/LC_LimbControlMainMenu.asset"); + } + + VRCExpressionsMenu mySubmenu = Resources.Load("LC_LimbControlMenu"); + var subMenuPath = $"{folderPath}/{ValidateName(baseparameter)} Control Menu.asset"; + mySubmenu = CopyAssetAndReturn(mySubmenu, subMenuPath); + + mySubmenu.controls[0].value = 1; + mySubmenu.controls[0].parameter = new VRCExpressionsMenu.Control.Parameter() { name = toggleParameter }; + + VRCExpressionsMenu.Control.Parameter[] subParameters = new VRCExpressionsMenu.Control.Parameter[2]; + subParameters[0] = new VRCExpressionsMenu.Control.Parameter { name = treeParameter1 }; + subParameters[1] = new VRCExpressionsMenu.Control.Parameter() { name = treeParameter2 }; + + mySubmenu.controls[1].parameter = new VRCExpressionsMenu.Control.Parameter(){name = tempParameter }; + mySubmenu.controls[1].subParameters = subParameters; + + EditorUtility.SetDirty(mySubmenu); + + var indStart = toggleParameter.IndexOf('/')+1; + var indEnd = toggleParameter.LastIndexOf('/'); + if (indStart == indEnd) + indStart = 0; + if (indEnd == 0) + indEnd = toggleParameter.Length; + + var midName = toggleParameter.Substring(indStart, indEnd - indStart); + var finalName = midName.Aggregate(string.Empty, (result, next) => + { + if (char.IsUpper(next) && result.Length > 0) + result += ' '; + return result + next; + }); + + VRCExpressionsMenu.Control newControl = new VRCExpressionsMenu.Control + { + type = VRCExpressionsMenu.Control.ControlType.SubMenu, + name = finalName, + subMenu = mySubmenu + + }; + AddControls(mainMenu, new List() { newControl }); + + AddParameters(myParams, new List() { + new VRCExpressionParameters.Parameter(){ name = tempParameter, saved = false, valueType = VRCExpressionParameters.ValueType.Bool, networkSynced = false, defaultValue = 0 }, + new VRCExpressionParameters.Parameter(){ name = toggleParameter,saved = true, valueType = VRCExpressionParameters.ValueType.Bool, networkSynced = false, defaultValue = 0 }, + new VRCExpressionParameters.Parameter(){ name = treeParameter1, saved = true, valueType = VRCExpressionParameters.ValueType.Float, networkSynced = false, defaultValue = 0 }, + new VRCExpressionParameters.Parameter(){ name = treeParameter2, saved = true, valueType = VRCExpressionParameters.ValueType.Float, networkSynced = false, defaultValue = 0 } + }); + + BlendTree myTree = CopyAssetAndReturn(tree, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + tree.name + ".blendtree")); + myTree.blendParameter = treeParameter1; + myTree.blendParameterY = treeParameter2; + EditorUtility.SetDirty(myTree); + + void AddLimbLayer(AnimatorController controller, bool setTracking) + { + ReadyParameter(controller, tempParameter, AnimatorControllerParameterType.Bool); + ReadyParameter(controller, toggleParameter, AnimatorControllerParameterType.Bool); + ReadyParameter(controller, treeParameter1, AnimatorControllerParameterType.Float); + ReadyParameter(controller, treeParameter2, AnimatorControllerParameterType.Float); + + AnimatorControllerLayer newLayer = AddLayer(controller, toggleParameter, 1, mask); + AddTag(newLayer, LAYER_TAG); + + AnimatorState firstState = newLayer.stateMachine.AddState("Idle", new Vector3(30, 160)); + AnimatorState secondState = newLayer.stateMachine.AddState("Control", new Vector3(30, 210)); + + firstState.motion = emptyClip; + secondState.motion = myTree; + + if (setTracking) + { + VRCAnimatorTrackingControl trackingControl = firstState.AddStateMachineBehaviour(); + VRCAnimatorTrackingControl trackingControl2 = secondState.AddStateMachineBehaviour(); + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.Head)) + { + trackingControl.trackingHead = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingHead = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.Body)) + { + trackingControl.trackingHip = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingHip = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.RightArm)) + { + trackingControl.trackingRightHand = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingRightHand = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.LeftArm)) + { + trackingControl.trackingLeftHand = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingLeftHand = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.RightFingers)) + { + trackingControl.trackingRightFingers = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingRightFingers = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.LeftFingers)) + { + trackingControl.trackingLeftFingers = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingLeftFingers = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.RightLeg)) + { + trackingControl.trackingRightFoot = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingRightFoot = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.LeftLeg)) + { + trackingControl.trackingLeftFoot = VRCAnimatorTrackingControl.TrackingType.Tracking; + trackingControl2.trackingLeftFoot = VRCAnimatorTrackingControl.TrackingType.Animation; + } + + } + + var t = firstState.AddTransition(secondState, false); + t.duration = 0.15f; + t.AddCondition(AnimatorConditionMode.If, 0, toggleParameter); + + t = firstState.AddTransition(secondState, false); + t.duration = 0.15f; + t.AddCondition(AnimatorConditionMode.If, 0, tempParameter); + + t = secondState.AddTransition(firstState, false); + t.duration = 0.15f; + t.AddCondition(AnimatorConditionMode.IfNot, 0, toggleParameter); + t.AddCondition(AnimatorConditionMode.IfNot, 0, tempParameter); + + } + + + AnimatorController myLocomotion = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base); + AddLimbLayer(myLocomotion, true); + + AnimatorController myAction = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Action); + AddLimbLayer(myAction, false); + + AnimatorController mySitting = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting); + AddLimbLayer(mySitting, false); + + EditorUtility.SetDirty(avatar); + EditorSceneManager.MarkAllScenesDirty(); + } + + private static void AddTracking(AnimatorController c) + { + ReadyParameter(c, "LC/Tracking Control", AnimatorControllerParameterType.Int); + + VRCExpressionsMenu myMenu = avatar.expressionsMenu; + VRCExpressionParameters myParams = avatar.expressionParameters; + + if (!myMenu) + myMenu = ReplaceMenu(avatar, folderPath); + + if (!myParams) + myParams = ReplaceParameters(avatar, folderPath); + + VRCExpressionsMenu trackingMenu = Resources.Load("LC_TrackingMainMenu"); + trackingMenu = ReplaceMenu(trackingMenu, folderPath, true); + + AddControls(myMenu, new List() { new VRCExpressionsMenu.Control() {name="Tracking Control", type= VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = trackingMenu, icon = Resources.Load("Icons/LC_RnR") } }); + AddParameters(myParams, new List() { new VRCExpressionParameters.Parameter() { name = "LC/Tracking Control", saved = false, valueType = VRCExpressionParameters.ValueType.Int, networkSynced = false } }); + + AnimatorControllerLayer newLayer = AddLayer(c, "LC/Tracking Control", 0); + AddTag(newLayer, LAYER_TAG); + + AnimatorStateMachine m = newLayer.stateMachine; + AnimatorState HoldState = m.AddState("Hold", new Vector3(260, 120)); + HoldState.motion = emptyClip; + + m.exitPosition = new Vector3(760, 120); + Vector3 startIndex = new Vector3(510, -140); + Vector3 GetNextPos() + { + startIndex += new Vector3(0, 40); + return startIndex; + } + + void AddTrackingState(string propertyName,string partName, int toggleValue) + { + AnimatorState enableState = m.AddState(partName + " On", GetNextPos()); + AnimatorState disableState = m.AddState(partName + " Off", GetNextPos()); + enableState.motion = disableState.motion = emptyClip; + + InstantTransition(HoldState, enableState).AddCondition(AnimatorConditionMode.Equals, toggleValue, "LC/Tracking Control"); + InstantExitTransition(enableState).AddCondition(AnimatorConditionMode.NotEqual, toggleValue, "LC/Tracking Control"); + + InstantTransition(HoldState, disableState).AddCondition(AnimatorConditionMode.Equals, toggleValue+1, "LC/Tracking Control"); + InstantExitTransition(disableState).AddCondition(AnimatorConditionMode.NotEqual, toggleValue+1, "LC/Tracking Control"); + + void setSObject(SerializedObject o, int v) + { + o.FindProperty(propertyName).enumValueIndex = v; + o.ApplyModifiedPropertiesWithoutUndo(); + } + + setSObject(new SerializedObject(enableState.AddStateMachineBehaviour()), 1); + setSObject(new SerializedObject(disableState.AddStateMachineBehaviour()), 2); + } + + AddTrackingState("trackingHead", "Head", 254); + AddTrackingState("trackingRightHand", "Right Hand", 252); + AddTrackingState("trackingLeftHand", "Left Hand", 250); + AddTrackingState("trackingHip", "Hip", 248); + AddTrackingState("trackingRightFoot", "Right Foot", 246); + AddTrackingState("trackingLeftFoot", "Left Foot", 244); + + Debug.Log("[Limb Control] Added Tracking Control successfully!"); + } + + private static void RemoveLimbControl() + { + Debug.Log("Removing Limb Control from " + avatar.gameObject.name); + void RemoveControl(AnimatorController c) + { + if (!c) + return; + for (int i=c.layers.Length-1;i>=0;i--) + { + if (HasTag(c.layers[i], LAYER_TAG)) + { + Debug.Log("Removed Layer " + c.layers[i].name+" from "+c.name); + c.RemoveLayer(i); + } + } + for (int i=c.parameters.Length-1;i>=0;i--) + { + if (c.parameters[i].name.StartsWith("LC/")) + { + Debug.Log("Removed Parameter " + c.parameters[i].name + " from " + c.name); + c.RemoveParameter(i); + } + } + } + RemoveControl(GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base)); + RemoveControl(GetPlayableLayer(avatar,VRCAvatarDescriptor.AnimLayerType.Action)); + RemoveControl(GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting)); + + if (avatar.expressionsMenu) + { + for (int i = avatar.expressionsMenu.controls.Count - 1; i >= 0; i--) + { + if (avatar.expressionsMenu.controls[i].name == "Limb Control") + { + Debug.Log("Removed Limb Control Submenu from Expression Menu"); + avatar.expressionsMenu.controls.RemoveAt(i); + EditorUtility.SetDirty(avatar.expressionsMenu); + continue; + } + if (avatar.expressionsMenu.controls[i].name == "Tracking Control") + { + Debug.Log("Removed Tracking Control Submenu from Expression Menu"); + avatar.expressionsMenu.controls.RemoveAt(i); + EditorUtility.SetDirty(avatar.expressionsMenu); + continue; + } + } + } + if (avatar.expressionParameters) + { + for (int i=avatar.expressionParameters.parameters.Length-1;i>=0;i--) + { + if (avatar.expressionParameters.parameters[i].name.StartsWith("LC/")) + { + Debug.Log("Removed " + avatar.expressionParameters.parameters[i].name + " From Expression Parameters"); + ArrayUtility.RemoveAt(ref avatar.expressionParameters.parameters, i); + } + } + EditorUtility.SetDirty(avatar.expressionParameters); + } + + Debug.Log("Finished removing Limb Control!"); + } + + + + private void OnEnable() + { + if (avatar == null) avatar = FindObjectOfType(); + + assetPath = EditorPrefs.GetString("LimbControlPath", "Assets/DreadScripts/LimbControl/Generated Assets"); + GetBaseTree(); + } + + private static void GetBaseTree() + { + if (!customTree || !useCustomTree) + customTree = Resources.Load("Animations/LC_NormalBlendTree"); + } + + #region GUI Methods + + private static void DrawColoredButton(ref bool toggle, string label) => DrawColoredButton(ref toggle, new GUIContent(label)); + private static void DrawColoredButton(ref bool toggle, GUIContent label) + { + using (new BGColoredScope(toggle)) + toggle = GUILayout.Toggle(toggle, label, EditorStyles.toolbarButton); + } + + private static void DrawTitle(string title, string tooltip = "") + { + using (new GUILayout.HorizontalScope("in bigtitle")) + { + bool hasTooltip = !string.IsNullOrEmpty(tooltip); + if (hasTooltip) GUILayout.Space(21); + GUILayout.Label(title, Content.styleTitle); + if (hasTooltip) GUILayout.Label(new GUIContent(Content.iconHelp){tooltip = tooltip}, GUILayout.Width(18)); + } + } + private static void Credit() + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made By Dreadrith#3238", "boldlabel")) + Application.OpenURL("https://linktr.ee/Dreadrith"); + } + } + #endregion + + #region DSHelper Methods + + private static AnimatorController GetPlayableLayer(VRCAvatarDescriptor avi, VRCAvatarDescriptor.AnimLayerType type) + { + for (var i = 0; i < avi.baseAnimationLayers.Length; i++) + if (avi.baseAnimationLayers[i].type == type) + return GetController(avi.baseAnimationLayers[i].animatorController); + + for (var i = 0; i < avi.specialAnimationLayers.Length; i++) + if (avi.specialAnimationLayers[i].type == type) + return GetController(avi.specialAnimationLayers[i].animatorController); + + return null; + } + private static bool SetPlayableLayer(VRCAvatarDescriptor avi, VRCAvatarDescriptor.AnimLayerType type,RuntimeAnimatorController ani) + { + for (var i = 0; i < avi.baseAnimationLayers.Length; i++) + if (avi.baseAnimationLayers[i].type == type) + { + if (ani) + avi.customizeAnimationLayers = true; + avi.baseAnimationLayers[i].isDefault = !ani; + avi.baseAnimationLayers[i].animatorController = ani; + EditorUtility.SetDirty(avi); + return true; + } + + for (var i = 0; i < avi.specialAnimationLayers.Length; i++) + if (avi.specialAnimationLayers[i].type == type) + { + if (ani) + avi.customizeAnimationLayers = true; + avi.specialAnimationLayers[i].isDefault = !ani; + avi.specialAnimationLayers[i].animatorController = ani; + EditorUtility.SetDirty(avi); + return true; + } + + + return false; + } + private static AnimatorController GetController(RuntimeAnimatorController controller) + { + return AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(controller)); + } + + private static AnimatorStateTransition InstantTransition(AnimatorState state, AnimatorState destination) + { + var t = state.AddTransition(destination, false); + t.duration = 0; + return t; + } + private static AnimatorStateTransition InstantExitTransition(AnimatorState state) + { + var t = state.AddExitTransition(false); + t.duration = 0; + return t; + } + + private static void AddTag(AnimatorControllerLayer layer, string tag) + { + if (HasTag(layer, tag)) return; + + var t = layer.stateMachine.AddAnyStateTransition((AnimatorState)null); + t.isExit = true; + t.mute = true; + t.name = tag; + } + private static bool HasTag(AnimatorControllerLayer layer, string tag) + { + return layer.stateMachine.anyStateTransitions.Any(t => t.isExit && t.mute && t.name == tag); + } + + private static AnimatorControllerLayer AddLayer(AnimatorController controller, string name, float defaultWeight, AvatarMask mask = null) + { + var newLayer = new AnimatorControllerLayer + { + name = name, + defaultWeight = defaultWeight, + avatarMask = mask, + stateMachine = new AnimatorStateMachine + { + name = name, + hideFlags = HideFlags.HideInHierarchy, + entryPosition = new Vector3(50, 120), + anyStatePosition = new Vector3(50, 80), + exitPosition = new Vector3(50, 40), + }, + }; + AssetDatabase.AddObjectToAsset(newLayer.stateMachine, controller); + controller.AddLayer(newLayer); + return newLayer; + } + private static void ReadyParameter(AnimatorController controller, string parameter, AnimatorControllerParameterType type) + { + if (!GetParameter(controller, parameter, out _)) + controller.AddParameter(parameter, type); + } + private static bool GetParameter(AnimatorController controller, string parameter, out int index) + { + index = -1; + for (int i = 0; i < controller.parameters.Length; i++) + { + if (controller.parameters[i].name == parameter) + { + index = i; + return true; + } + } + return false; + } + + + + private static void ReadyPath(string folderPath) + { + if (!Directory.Exists(folderPath)) + { + Directory.CreateDirectory(folderPath); + AssetDatabase.ImportAsset(folderPath); + } + } + + internal static string ValidatePath(string path) + { + string regexFolderReplace = Regex.Escape(new string(Path.GetInvalidPathChars())); + + path = path.Replace('\\', '/'); + if (path.IndexOf('/') > 0) + path = string.Join("/", path.Split('/').Select(s => Regex.Replace(s, $@"[{regexFolderReplace}]", "-"))); + + return path; + } + internal static string ValidateName(string name) + { + string regexFileReplace = Regex.Escape(new string(Path.GetInvalidFileNameChars())); + return string.IsNullOrEmpty(name) ? "Unnamed" : Regex.Replace(name, $@"[{regexFileReplace}]", "-"); + } + + + private static T CopyAssetAndReturn(string path, string newpath) where T : Object + { + if (path != newpath) + AssetDatabase.CopyAsset(path, newpath); + return AssetDatabase.LoadAssetAtPath(newpath); + + } + + internal static T CopyAssetAndReturn(T obj, string newPath) where T : Object + { + string assetPath = AssetDatabase.GetAssetPath(obj); + Object mainAsset = AssetDatabase.LoadMainAssetAtPath(assetPath); + + if (!mainAsset) return null; + if (obj != mainAsset) + { + T newAsset = Object.Instantiate(obj); + AssetDatabase.CreateAsset(newAsset, newPath); + return newAsset; + } + + AssetDatabase.CopyAsset(assetPath, newPath); + return AssetDatabase.LoadAssetAtPath(newPath); + } + + + private static VRCExpressionParameters ReplaceParameters(VRCAvatarDescriptor avi, string folderPath) + { + avi.customExpressions = true; + if (avi.expressionParameters) + { + avi.expressionParameters = CopyAssetAndReturn(avi.expressionParameters, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + avi.expressionParameters.name + ".asset")); + return avi.expressionParameters; + } + + var assetPath = folderPath + "/" + avi.gameObject.name + " Parameters.asset"; + var newParameters = ScriptableObject.CreateInstance(); + newParameters.parameters = Array.Empty(); + AssetDatabase.CreateAsset(newParameters, AssetDatabase.GenerateUniqueAssetPath(assetPath)); + AssetDatabase.ImportAsset(assetPath); + avi.expressionParameters = newParameters; + avi.customExpressions = true; + return newParameters; + } + + private static VRCExpressionsMenu ReplaceMenu(VRCExpressionsMenu menu, string folderPath, bool deep = true, Dictionary copyDict = null) + { + VRCExpressionsMenu newMenu; + if (!menu) + return null; + if (copyDict == null) + copyDict = new Dictionary(); + + if (copyDict.ContainsKey(menu)) + newMenu = copyDict[menu]; + else + { + newMenu = CopyAssetAndReturn(menu, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + menu.name + ".asset")); + copyDict.Add(menu, newMenu); + if (!deep) return newMenu; + + foreach (var c in newMenu.controls.Where(c => c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu != null)) + { + c.subMenu = ReplaceMenu(c.subMenu, folderPath, true, copyDict); + } + + EditorUtility.SetDirty(newMenu); + } + return newMenu; + } + + private static VRCExpressionsMenu ReplaceMenu(VRCAvatarDescriptor avi, string folderPath, bool deep = false) + { + avi.customExpressions = true; + if (avi.expressionsMenu) + { + avi.expressionsMenu = ReplaceMenu(avi.expressionsMenu, folderPath, deep); + return avi.expressionsMenu; + } + + + var newMenu = ScriptableObject.CreateInstance(); + newMenu.controls = new List(); + AssetDatabase.CreateAsset(newMenu, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + avi.gameObject.name + " Menu.asset")); + avi.expressionsMenu = newMenu; + avi.customExpressions = true; + return newMenu; + + } + + private static void AddControls(VRCExpressionsMenu target, List newCons) + { + foreach (var c in newCons) + target.controls.Add(c); + + EditorUtility.SetDirty(target); + } + + private static void AddParameters(VRCExpressionParameters target, List newParams) + { + target.parameters = target.parameters == null || target.parameters.Length <= 0 ? newParams.ToArray() : target.parameters.Concat(newParams).ToArray(); + + EditorUtility.SetDirty(target); + AssetDatabase.WriteImportSettingsIfDirty(AssetDatabase.GetAssetPath(target)); + } + private static string GenerateUniqueString(string s, System.Func check) + { + if (check(s)) + return s; + + int suffix = 0; + + int.TryParse(s.Substring(s.Length - 2, 2), out int d); + if (d >= 0) + suffix = d; + if (suffix > 0) s = suffix > 9 ? s.Substring(0, s.Length - 2) : s.Substring(0, s.Length - 1); + + s = s.Trim(); + + suffix++; + + string newString = s + " " + suffix; + while (!check(newString)) + { + suffix++; + newString = s + " " + suffix; + } + + return newString; + } + #endregion + + internal static class CustomGUI + { + internal static class Content + { + internal static GUIContent iconTrash = new GUIContent(EditorGUIUtility.IconContent("TreeEditor.Trash")) { tooltip = "Remove Limb Control from Avatar" }; + internal static GUIContent iconError = new GUIContent(EditorGUIUtility.IconContent("console.warnicon.sml")) { tooltip = "Not enough memory available in Expression Parameters!" }; + internal static GUIContent iconHelp = new GUIContent(EditorGUIUtility.IconContent("UnityEditor.InspectorWindow")); + + internal static GUIContent + customTreeContent = new GUIContent("Use Custom BlendTree", "Set a custom BlendTree to change the way the limbs move"), + avatarContent = new GUIContent("Avatar Descriptor", "Drag and Drop your avatar here."), + trackingContent = new GUIContent("Add Tracking Control", "Add a SubMenu that allows the individual Enable/Disable of limb tracking"), + sameControlContent = new GUIContent("Use Same Control", "Selected limbs will be controlled together using the same single control"); + + internal static GUIStyle styleTitle = new GUIStyle(GUI.skin.label) {alignment = TextAnchor.MiddleCenter, fontSize = 14, fontStyle = FontStyle.Bold}; + internal static GUIStyle comicallyLargeButton = new GUIStyle(GUI.skin.button) {fontSize = 16, fontStyle = FontStyle.Bold}; + } + + internal sealed class BGColoredScope : System.IDisposable + { + private readonly Color ogColor; + public BGColoredScope(Color setColor) + { + ogColor = GUI.backgroundColor; + GUI.backgroundColor = setColor; + } + + public BGColoredScope(bool isActive) + { + ogColor = GUI.backgroundColor; + GUI.backgroundColor = isActive ? Color.green : Color.grey; + } + + public void Dispose() => GUI.backgroundColor = ogColor; + + } + + internal static string AssetFolderPath(string variable, string title, string prefKey) + { + using (new GUILayout.HorizontalScope()) + { + using (new EditorGUI.DisabledScope(true)) + EditorGUILayout.TextField(title, variable); + + if (GUILayout.Button("...", GUILayout.Width(30))) + { + var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : "Assets", string.Empty); + if (string.IsNullOrEmpty(dummyPath)) + return variable; + string newPath = FileUtil.GetProjectRelativePath(dummyPath); + + if (!newPath.StartsWith("Assets")) + { + Debug.LogWarning("New Path must be a folder within Assets!"); + return variable; + } + + newPath = ValidatePath(newPath); + variable = newPath; + EditorPrefs.SetString(prefKey, variable); + } + } + + return variable; + } + + internal static void DrawSeparator(int thickness = 2, int padding = 10) + { + Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(thickness + padding)); + r.height = thickness; + r.y += padding / 2f; + r.x -= 2; + r.width += 6; + ColorUtility.TryParseHtmlString(EditorGUIUtility.isProSkin ? "#595959" : "#858585", out Color lineColor); + EditorGUI.DrawRect(r, lineColor); + } + } + } +} diff --git a/LimbControl/Editor/LimbControl.cs.meta b/LimbControl/Editor/LimbControl.cs.meta new file mode 100644 index 0000000..e8628cd --- /dev/null +++ b/LimbControl/Editor/LimbControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 546c21cd2ef473f469fc09e9f17df7be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Editor/com.dreadscripts.limbcontrol.Editor.asmdef b/LimbControl/Editor/com.dreadscripts.limbcontrol.Editor.asmdef new file mode 100644 index 0000000..fe732b4 --- /dev/null +++ b/LimbControl/Editor/com.dreadscripts.limbcontrol.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.limbcontrol.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/LimbControl/Editor/com.dreadscripts.limbcontrol.Editor.asmdef.meta b/LimbControl/Editor/com.dreadscripts.limbcontrol.Editor.asmdef.meta new file mode 100644 index 0000000..286bd6f --- /dev/null +++ b/LimbControl/Editor/com.dreadscripts.limbcontrol.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f3eaebd95cc4e8a4cb3f2daeb810aaef +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/LICENSE.md b/LimbControl/LICENSE.md new file mode 100644 index 0000000..e68260d --- /dev/null +++ b/LimbControl/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LimbControl/LICENSE.md.meta b/LimbControl/LICENSE.md.meta new file mode 100644 index 0000000..aaef59a --- /dev/null +++ b/LimbControl/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8fbe7850af5ea0d42969e2bac72e238c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/README.md b/LimbControl/README.md new file mode 100644 index 0000000..ded8c8d --- /dev/null +++ b/LimbControl/README.md @@ -0,0 +1,14 @@ +Showcase | Setup +:-------------------------:|:-------------------------: +[![Limb Control](https://img.youtube.com/vi/eJMprLDaUJI/0.jpg)](https://youtu.be/eJMprLDaUJI) | [![Limb Setup](https://img.youtube.com/vi/BbhiZaY9-Ns/0.jpg)](https://youtu.be/BbhiZaY9-Ns) + +# Limb Control + +Feature Release +-------------------- +Limb Control allows you to control your limbs through Puppet Control with a few clicks. +Desktop users, you've got power now! Half body users, Kick those people that say you dun got legs! + +Using "Same Control" makes the selected limbs be controlled using the same Puppet control. +You can also set your own BlendTree to move your limbs the way you want them to! +Besides that, you can also add Tracking Control which allows you toggle individual parts' tracking. diff --git a/LimbControl/README.md.meta b/LimbControl/README.md.meta new file mode 100644 index 0000000..b28142f --- /dev/null +++ b/LimbControl/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e046f0c7ae4ff704db06aa9ec88a8283 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources.meta b/LimbControl/Resources.meta new file mode 100644 index 0000000..5efa70d --- /dev/null +++ b/LimbControl/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e976a03ce46a1c47a66ef4d37694f03 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations.meta b/LimbControl/Resources/Animations.meta new file mode 100644 index 0000000..ac08f32 --- /dev/null +++ b/LimbControl/Resources/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf73b754ebe397541abc7a18767d78bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/LC_BaseLocomotion.controller b/LimbControl/Resources/Animations/LC_BaseLocomotion.controller new file mode 100644 index 0000000..ed1ad76 --- /dev/null +++ b/LimbControl/Resources/Animations/LC_BaseLocomotion.controller @@ -0,0 +1,410 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_BaseLocomotion + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: VelocityX + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: VelocityY + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: VelocityZ + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: AngularY + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Grounded + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Upright + m_Type: 1 + m_DefaultFloat: 1 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Seated + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: AFK + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: TrackingType + m_Type: 3 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Locomotion + m_StateMachine: {fileID: 110700000} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &110700000 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Locomotion + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102577115747224770} + m_Position: {x: 324, y: 192, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102611737556091544} + m_Position: {x: 324, y: -144, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102781996838665776} + m_Position: {x: 324, y: 36, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 24, y: -60, z: 0} + m_EntryPosition: {x: 24, y: -144, z: 0} + m_ExitPosition: {x: 1776, y: -252, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102611737556091544} +--- !u!114 &114022255662586678 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: b658310f3202fc64aac64aa6e603b79a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114161388611585310 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 2 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 2 + trackingLeftFoot: 2 + trackingRightFoot: 2 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!114 &114186363907183432 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 2 + trackingLeftFoot: 2 + trackingRightFoot: 2 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!114 &114389411411105514 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 2 + trackingLeftHand: 2 + trackingRightHand: 2 + trackingHip: 2 + trackingLeftFoot: 2 + trackingRightFoot: 2 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!114 &114592321216657706 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 1 + trackingLeftFoot: 1 + trackingRightFoot: 1 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!114 &114860979276583244 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 1 + trackingLeftFoot: 1 + trackingRightFoot: 1 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!1101 &1101015495729127544 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 4 + m_ConditionEvent: Upright + m_EventTreshold: 0.41 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102577115747224770} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.5 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101069751804321926 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 3 + m_ConditionEvent: Upright + m_EventTreshold: 0.7 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102611737556091544} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.2 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101267269745335784 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 3 + m_ConditionEvent: Upright + m_EventTreshold: 0.43 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102781996838665776} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.5 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101557312258220082 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 4 + m_ConditionEvent: Upright + m_EventTreshold: 0.68 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102781996838665776} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.5 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &1102577115747224770 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Prone + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101267269745335784} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 20600000, guid: 667633d86ecc9c0408e81156d77d9a83, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102611737556091544 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Standing + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101557312258220082} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 20600000, guid: b7ff0bc6ae31ce4458992fa6ce9f6897, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102781996838665776 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Crouching + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101015495729127544} + - {fileID: 1101069751804321926} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 20600000, guid: 1fe93258fe621c344be8713451c5104f, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/LimbControl/Resources/Animations/LC_BaseLocomotion.controller.meta b/LimbControl/Resources/Animations/LC_BaseLocomotion.controller.meta new file mode 100644 index 0000000..925ef2e --- /dev/null +++ b/LimbControl/Resources/Animations/LC_BaseLocomotion.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: debbf9a84fe0fd34ba7d73b6789e13c6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/LC_BaseSitting.controller b/LimbControl/Resources/Animations/LC_BaseSitting.controller new file mode 100644 index 0000000..6f3df23 --- /dev/null +++ b/LimbControl/Resources/Animations/LC_BaseSitting.controller @@ -0,0 +1,793 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_BaseSitting + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Seated + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: AvatarVersion + m_Type: 3 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Sitting + m_StateMachine: {fileID: 1107681706011699772} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!114 &114008585218972436 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 141706016, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + enterPoseSpace: 0 + fixedDelay: 1 + delayTime: 0 + debugString: +--- !u!114 &114022255662586678 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: b658310f3202fc64aac64aa6e603b79a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114147142126113726 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3} + m_Name: + m_EditorClassIdentifier: + disableLocomotion: 0 + disableLeftHandTrack: 0 + disableRightHandTrack: 0 + disableHip3pt: 0 + disableAutoWalk: 0 + disableHipTrackFbt: 0 + disableRightFootTrack: 0 + disableLeftFootTrack: 0 + disableHeadTrack: 1 + disableAll: 0 + setViewPoint: 0 + delayTime: 0 + DebugName: SitDown +--- !u!114 &114147305607324078 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3} + m_Name: + m_EditorClassIdentifier: + disableLocomotion: 0 + disableLeftHandTrack: 0 + disableRightHandTrack: 0 + disableHip3pt: 1 + disableAutoWalk: 1 + disableHipTrackFbt: 1 + disableRightFootTrack: 1 + disableLeftFootTrack: 1 + disableHeadTrack: 0 + disableAll: 1 + setViewPoint: 1 + delayTime: 0.21 + DebugName: SittingV2 +--- !u!114 &114159394839152826 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 1658034022, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + setView: 1 + delayTime: 0.21 + debugString: + applied: 0 +--- !u!114 &114451134694153264 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 2 + trackingLeftFoot: 2 + trackingRightFoot: 2 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!114 &114530651618753848 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: 82154fcd59363fa4aa5ceb410dfa0cc0, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114532836840147502 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 2 + trackingLeftHand: 2 + trackingRightHand: 2 + trackingHip: 2 + trackingLeftFoot: 2 + trackingRightFoot: 2 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!114 &114548198012850600 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 1876060101, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + enterPoseSpace: 1 + fixedDelay: 1 + delayTime: 0.21 + debugString: +--- !u!114 &114681529930865528 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3} + m_Name: + m_EditorClassIdentifier: + disableLocomotion: 0 + disableLeftHandTrack: 0 + disableRightHandTrack: 0 + disableHip3pt: 0 + disableAutoWalk: 0 + disableHipTrackFbt: 0 + disableRightFootTrack: 0 + disableLeftFootTrack: 0 + disableHeadTrack: 0 + disableAll: 0 + setViewPoint: 0 + delayTime: 0 + DebugName: GetUp +--- !u!114 &114710780056594672 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 141706016, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + enterPoseSpace: 1 + fixedDelay: 1 + delayTime: 0.51 + debugString: +--- !u!114 &114768730629577578 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3} + m_Name: + m_EditorClassIdentifier: + disableLocomotion: 1 + disableLeftHandTrack: 0 + disableRightHandTrack: 0 + disableHip3pt: 1 + disableAutoWalk: 1 + disableHipTrackFbt: 1 + disableRightFootTrack: 1 + disableLeftFootTrack: 1 + disableHeadTrack: 0 + disableAll: 0 + setViewPoint: 1 + delayTime: 0 + DebugName: SitLoop +--- !u!114 &114803473576782264 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: -646210727, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 1 + trackingLeftFoot: 1 + trackingRightFoot: 1 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + trackingMouth: 0 + debugString: +--- !u!114 &114804564424020894 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: -646210727, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 0 + trackingLeftFoot: 0 + trackingRightFoot: 0 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + trackingMouth: 0 + debugString: +--- !u!114 &114820903061213562 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 1658034022, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + setView: 0 + delayTime: 0 + debugString: + applied: 0 +--- !u!114 &114875782908073470 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: -646210727, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 2 + trackingLeftHand: 2 + trackingRightHand: 2 + trackingHip: 2 + trackingLeftFoot: 2 + trackingRightFoot: 2 + trackingLeftFingers: 1 + trackingRightFingers: 1 + trackingEyes: 1 + trackingMouth: 1 + debugString: +--- !u!114 &114897624052543500 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3} + m_Name: + m_EditorClassIdentifier: + disableLocomotion: 0 + disableLeftHandTrack: 0 + disableRightHandTrack: 0 + disableHip3pt: 0 + disableAutoWalk: 0 + disableHipTrackFbt: 0 + disableRightFootTrack: 0 + disableLeftFootTrack: 0 + disableHeadTrack: 0 + disableAll: 0 + setViewPoint: 0 + delayTime: 0 + DebugName: RestoreTracking +--- !u!114 &114938240376977580 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 1876060101, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + enterPoseSpace: 0 + fixedDelay: 1 + delayTime: 0 + debugString: +--- !u!114 &114977321789056526 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + trackingHead: 1 + trackingLeftHand: 1 + trackingRightHand: 1 + trackingHip: 1 + trackingLeftFoot: 1 + trackingRightFoot: 1 + trackingLeftFingers: 0 + trackingRightFingers: 0 + trackingEyes: 0 + debugString: +--- !u!1101 &1101090626813726064 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102286624050114800} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.5 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101163680668272054 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 0} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 1 + serializedVersion: 3 + m_TransitionDuration: 0.2 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101181580859197468 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 4 + m_ConditionEvent: AvatarVersion + m_EventTreshold: 3 + - m_ConditionMode: 1 + m_ConditionEvent: Seated + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102753656758336688} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.2 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101459797441652132 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102398980834643402} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.2 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101633722343387124 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Seated + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 0} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 1 + serializedVersion: 3 + m_TransitionDuration: 0.2 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101808702802395124 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Seated + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102320304955423218} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101861624235594360 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 3 + m_ConditionEvent: AvatarVersion + m_EventTreshold: 2 + - m_ConditionMode: 1 + m_ConditionEvent: Seated + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102695531508929512} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.2 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &1102286624050114800 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PoseSpace + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101459797441652132} + m_StateMachineBehaviours: + - {fileID: 114710780056594672} + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 970f39cfa8501c741b71ad9eefeeb83d, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102320304955423218 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RestoreTracking + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101163680668272054} + m_StateMachineBehaviours: + - {fileID: 114803473576782264} + - {fileID: 114008585218972436} + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 91e5518865a04934b82b8aba11398609, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102398980834643402 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UpperBodyTracked + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101808702802395124} + m_StateMachineBehaviours: + - {fileID: 114804564424020894} + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 970f39cfa8501c741b71ad9eefeeb83d, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102560665265379622 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VersionSwitch + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101861624235594360} + - {fileID: 1101181580859197468} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 91e5518865a04934b82b8aba11398609, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102695531508929512 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DisableTracking + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101090626813726064} + m_StateMachineBehaviours: + - {fileID: 114875782908073470} + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 91e5518865a04934b82b8aba11398609, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &1102753656758336688 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: V2Seated + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101633722343387124} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 970f39cfa8501c741b71ad9eefeeb83d, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107681706011699772 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Sitting + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102695531508929512} + m_Position: {x: 204, y: 348, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102320304955423218} + m_Position: {x: 1104, y: 348, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102398980834643402} + m_Position: {x: 804, y: 348, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102286624050114800} + m_Position: {x: 504, y: 348, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102560665265379622} + m_Position: {x: 96, y: 204, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102753656758336688} + m_Position: {x: 612, y: 156, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 36, y: 24, z: 0} + m_EntryPosition: {x: 36, y: 108, z: 0} + m_ExitPosition: {x: 1428, y: 348, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102560665265379622} diff --git a/LimbControl/Resources/Animations/LC_BaseSitting.controller.meta b/LimbControl/Resources/Animations/LC_BaseSitting.controller.meta new file mode 100644 index 0000000..f996241 --- /dev/null +++ b/LimbControl/Resources/Animations/LC_BaseSitting.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b74b69dfec89e1446bfaa06ca5348385 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/LC_EmptyClip.anim b/LimbControl/Resources/Animations/LC_EmptyClip.anim new file mode 100644 index 0000000..55e6b1f --- /dev/null +++ b/LimbControl/Resources/Animations/LC_EmptyClip.anim @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_EmptyClip + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/LC_EmptyClip.anim.meta b/LimbControl/Resources/Animations/LC_EmptyClip.anim.meta new file mode 100644 index 0000000..8c9680e --- /dev/null +++ b/LimbControl/Resources/Animations/LC_EmptyClip.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5662ee04470f6548a6eca8c22b5978f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/LC_NormalBlendTree.blendtree b/LimbControl/Resources/Animations/LC_NormalBlendTree.blendtree new file mode 100644 index 0000000..b042684 --- /dev/null +++ b/LimbControl/Resources/Animations/LC_NormalBlendTree.blendtree @@ -0,0 +1,89 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!206 &20600000 +BlendTree: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalBlendTree + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 957a79874e541c94fa0a22d5a3eb66d1, type: 2} + m_Threshold: 0 + m_Position: {x: 1, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: b3217facd16fc78479f2f5251ba1317b, type: 2} + m_Threshold: 1 + m_Position: {x: -1, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 0b880ee47bdaa5647b9d77b72fc6629d, type: 2} + m_Threshold: 2 + m_Position: {x: 0, y: 1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: ef27a02dbff4e004ab901b486706bf52, type: 2} + m_Threshold: 3 + m_Position: {x: 0, y: -1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 0624707b131b6a7489374321542a64fb, type: 2} + m_Threshold: 4 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 2fd72ee6ef7304a48a7cdd3c00d6c995, type: 2} + m_Threshold: 5 + m_Position: {x: -0.707, y: -0.707} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 3e83eeab1a70d58449135e6d00218565, type: 2} + m_Threshold: 6 + m_Position: {x: -0.707, y: 0.707} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: da26a77912f71474c8b219df419ed18c, type: 2} + m_Threshold: 7 + m_Position: {x: 0.707, y: 0.707} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: cf10e7275768e674b8b617f850413c64, type: 2} + m_Threshold: 8 + m_Position: {x: 0.707, y: -0.707} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: VelocityX + m_Mirror: 0 + m_BlendParameter: LArmX + m_BlendParameterY: LArmY + m_MinThreshold: 0 + m_MaxThreshold: 8 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 1 diff --git a/LimbControl/Resources/Animations/LC_NormalBlendTree.blendtree.meta b/LimbControl/Resources/Animations/LC_NormalBlendTree.blendtree.meta new file mode 100644 index 0000000..4380ee3 --- /dev/null +++ b/LimbControl/Resources/Animations/LC_NormalBlendTree.blendtree.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 763573ff00d82be4ca9f14d41fa23ff9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 20600000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal.meta b/LimbControl/Resources/Animations/Normal.meta new file mode 100644 index 0000000..5ab2d9e --- /dev/null +++ b/LimbControl/Resources/Animations/Normal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06adb0c1615a4b844b0ca46f64d5140f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalDown.anim b/LimbControl/Resources/Animations/Normal/LC_NormalDown.anim new file mode 100644 index 0000000..ed9ac0d --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalDown.anim @@ -0,0 +1,683 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalDown + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.286 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.297 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.286 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.297 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5494506 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5494506 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.286 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.297 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.286 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.297 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5494506 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5494506 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalDown.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalDown.anim.meta new file mode 100644 index 0000000..7c7de39 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalDown.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef27a02dbff4e004ab901b486706bf52 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalDownLeft.anim b/LimbControl/Resources/Animations/Normal/LC_NormalDownLeft.anim new file mode 100644 index 0000000..770b6df --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalDownLeft.anim @@ -0,0 +1,818 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalDownLeft + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.637 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.495 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.736 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.062 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.095 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.385 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.011 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2967033 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4945055 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.31868133 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.32967034 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.12087912 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 64 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 72 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 73 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.637 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.495 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.736 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.062 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.095 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.385 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.011 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2967033 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4945055 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.31868133 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.32967034 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.12087912 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalDownLeft.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalDownLeft.anim.meta new file mode 100644 index 0000000..e60963b --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalDownLeft.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2fd72ee6ef7304a48a7cdd3c00d6c995 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalDownRight.anim b/LimbControl/Resources/Animations/Normal/LC_NormalDownRight.anim new file mode 100644 index 0000000..0ffdb81 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalDownRight.anim @@ -0,0 +1,818 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalDownRight + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.062 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.095 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.385 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.011 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.637 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.495 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.736 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2967033 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4945055 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.32967034 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.31868133 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.12087912 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 72 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 64 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 65 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.062 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.095 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.385 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.011 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.637 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.495 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.736 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.143 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2967033 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4945055 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.32967034 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.31868133 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.12087912 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalDownRight.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalDownRight.anim.meta new file mode 100644 index 0000000..0d190d8 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalDownRight.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf10e7275768e674b8b617f850413c64 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalLeft.anim b/LimbControl/Resources/Animations/Normal/LC_NormalLeft.anim new file mode 100644 index 0000000..af24829 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalLeft.anim @@ -0,0 +1,773 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalLeft + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.043956038 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.63736266 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.000000005567467 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.3736264 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.34065935 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362635 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.14285713 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5824176 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.6813187 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 72 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 73 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 64 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 65 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.043956038 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.63736266 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.000000005567467 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.3736264 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.34065935 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362635 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.14285713 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5824176 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.6813187 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalLeft.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalLeft.anim.meta new file mode 100644 index 0000000..2d8bef1 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalLeft.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3217facd16fc78479f2f5251ba1317b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalRight.anim b/LimbControl/Resources/Animations/Normal/LC_NormalRight.anim new file mode 100644 index 0000000..429f429 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalRight.anim @@ -0,0 +1,773 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalRight + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.34065935 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.043956038 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.63736266 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.3736264 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.000000005567467 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5824176 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.6813187 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362635 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.14285713 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 72 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 73 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 64 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 65 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.34065935 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.043956038 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.63736266 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.3736264 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.000000005567467 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5824176 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.6813187 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362635 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.14285713 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalRight.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalRight.anim.meta new file mode 100644 index 0000000..da7e02e --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalRight.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 957a79874e541c94fa0a22d5a3eb66d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalStill.anim b/LimbControl/Resources/Animations/Normal/LC_NormalStill.anim new file mode 100644 index 0000000..aac94e1 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalStill.anim @@ -0,0 +1,593 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalStill + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.1758242 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.1758242 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.6043956 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.36263737 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.6043956 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.36263737 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362638 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.2747253 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362638 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.2747253 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.1758242 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.1758242 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.6043956 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.36263737 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.6043956 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.36263737 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362638 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.2747253 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.37362638 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.2747253 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalStill.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalStill.anim.meta new file mode 100644 index 0000000..8823a4b --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalStill.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0624707b131b6a7489374321542a64fb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalUp.anim b/LimbControl/Resources/Animations/Normal/LC_NormalUp.anim new file mode 100644 index 0000000..505cb3b --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalUp.anim @@ -0,0 +1,773 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalUp + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.725 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.769 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.549 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.505 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.725 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.505 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.549 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.769 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 88 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 79 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.725 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.769 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.549 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.505 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.725 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.505 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.549 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.769 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalUp.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalUp.anim.meta new file mode 100644 index 0000000..61b4bec --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalUp.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b880ee47bdaa5647b9d77b72fc6629d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalUpLeft.anim b/LimbControl/Resources/Animations/Normal/LC_NormalUpLeft.anim new file mode 100644 index 0000000..4944d2d --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalUpLeft.anim @@ -0,0 +1,953 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalUpLeft + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5164835 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5604396 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.1648352 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.48351648 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.61538464 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2197802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 88 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 79 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 64 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 65 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 72 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 73 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5164835 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5604396 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.1648352 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.48351648 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.61538464 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2197802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalUpLeft.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalUpLeft.anim.meta new file mode 100644 index 0000000..2cb4a5e --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalUpLeft.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e83eeab1a70d58449135e6d00218565 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalUpRight.anim b/LimbControl/Resources/Animations/Normal/LC_NormalUpRight.anim new file mode 100644 index 0000000..9fd9e72 --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalUpRight.anim @@ -0,0 +1,953 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LC_NormalUpRight + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5604396 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.48351648 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.1648352 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5164835 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.61538464 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2197802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 90 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 94 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 88 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 92 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 91 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 93 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 81 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 82 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 83 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 84 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 85 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 79 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 66 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 63 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 64 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 65 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 74 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 71 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 72 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 73 + script: {fileID: 0} + typeID: 95 + customType: 8 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5604396 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.48351648 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.1648352 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.62637365 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.5164835 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Arm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7692308 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Forearm Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8021978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Shoulder Down-Up + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.61538464 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.2197802 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Left Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Lower Leg Stretch + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.9120879 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Front-Back + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg In-Out + path: + classID: 95 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.16483517 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Right Upper Leg Twist In-Out + path: + classID: 95 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/LimbControl/Resources/Animations/Normal/LC_NormalUpRight.anim.meta b/LimbControl/Resources/Animations/Normal/LC_NormalUpRight.anim.meta new file mode 100644 index 0000000..7fbb80f --- /dev/null +++ b/LimbControl/Resources/Animations/Normal/LC_NormalUpRight.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da26a77912f71474c8b219df419ed18c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Icons.meta b/LimbControl/Resources/Icons.meta new file mode 100644 index 0000000..9f052ef --- /dev/null +++ b/LimbControl/Resources/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a90661a860e00d042a6023a71ce62446 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Icons/LC_HandWaving.png b/LimbControl/Resources/Icons/LC_HandWaving.png new file mode 100644 index 0000000..920908e Binary files /dev/null and b/LimbControl/Resources/Icons/LC_HandWaving.png differ diff --git a/LimbControl/Resources/Icons/LC_HandWaving.png.meta b/LimbControl/Resources/Icons/LC_HandWaving.png.meta new file mode 100644 index 0000000..a009159 --- /dev/null +++ b/LimbControl/Resources/Icons/LC_HandWaving.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: af7dab49ea38131479b9445e33208ab2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 89b25030c4864ee489bb086b7ce807b6 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Icons/LC_RnR.png b/LimbControl/Resources/Icons/LC_RnR.png new file mode 100644 index 0000000..affc1bb Binary files /dev/null and b/LimbControl/Resources/Icons/LC_RnR.png differ diff --git a/LimbControl/Resources/Icons/LC_RnR.png.meta b/LimbControl/Resources/Icons/LC_RnR.png.meta new file mode 100644 index 0000000..bb2b443 --- /dev/null +++ b/LimbControl/Resources/Icons/LC_RnR.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: 13e2661009eeb7545915355882b30374 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: e70acdaecf288c049881fa8ef7586960 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Icons/LC_ToggleOff.png b/LimbControl/Resources/Icons/LC_ToggleOff.png new file mode 100644 index 0000000..28c96ba Binary files /dev/null and b/LimbControl/Resources/Icons/LC_ToggleOff.png differ diff --git a/LimbControl/Resources/Icons/LC_ToggleOff.png.meta b/LimbControl/Resources/Icons/LC_ToggleOff.png.meta new file mode 100644 index 0000000..52e8078 --- /dev/null +++ b/LimbControl/Resources/Icons/LC_ToggleOff.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: 61fee4a9eae042b47b08a725c6b2c02b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 59a59151e98683e4799ad89993370aab + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/Icons/LC_ToggleOn.png b/LimbControl/Resources/Icons/LC_ToggleOn.png new file mode 100644 index 0000000..d7d15d1 Binary files /dev/null and b/LimbControl/Resources/Icons/LC_ToggleOn.png differ diff --git a/LimbControl/Resources/Icons/LC_ToggleOn.png.meta b/LimbControl/Resources/Icons/LC_ToggleOn.png.meta new file mode 100644 index 0000000..e681204 --- /dev/null +++ b/LimbControl/Resources/Icons/LC_ToggleOn.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: 10d27a8d2e801d347821d88bbcc188c6 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 59a59151e98683e4799ad89993370aab + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/LC_LimbControlMenu.asset b/LimbControl/Resources/LC_LimbControlMenu.asset new file mode 100644 index 0000000..814b28a --- /dev/null +++ b/LimbControl/Resources/LC_LimbControlMenu.asset @@ -0,0 +1,45 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_LimbControlMenu + m_EditorClassIdentifier: + controls: + - name: Toggle + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 102 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Control + icon: {fileID: 2800000, guid: af7dab49ea38131479b9445e33208ab2, type: 3} + type: 201 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 0} + subParameters: + - name: + - name: + labels: + - name: + icon: {fileID: 0} + - name: + icon: {fileID: 0} + - name: + icon: {fileID: 0} + - name: + icon: {fileID: 0} diff --git a/LimbControl/Resources/LC_LimbControlMenu.asset.meta b/LimbControl/Resources/LC_LimbControlMenu.asset.meta new file mode 100644 index 0000000..f6a1ee5 --- /dev/null +++ b/LimbControl/Resources/LC_LimbControlMenu.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d5bbd3bcec1bed4b9adf75f39e9e465 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/LC_TrackingMainMenu.asset b/LimbControl/Resources/LC_TrackingMainMenu.asset new file mode 100644 index 0000000..70e1294 --- /dev/null +++ b/LimbControl/Resources/LC_TrackingMainMenu.asset @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_TrackingMainMenu + m_EditorClassIdentifier: + controls: + - name: Head + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 4 + style: 0 + subMenu: {fileID: 11400000, guid: af043a01b1924c34aa341dfd7cc5ede4, type: 2} + subParameters: [] + labels: [] + - name: Right Hand + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 6 + style: 0 + subMenu: {fileID: 11400000, guid: 4d2c8509202ecf8498e4efdc6e061af6, type: 2} + subParameters: [] + labels: [] + - name: Right Foot + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 11400000, guid: 1dff0ecce87ec97429acceb60d20dd10, type: 2} + subParameters: [] + labels: [] + - name: Left Foot + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 11400000, guid: d1a4a4d18516f4e4dac3d3a9e358af66, type: 2} + subParameters: [] + labels: [] + - name: Left Hand + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 9 + style: 0 + subMenu: {fileID: 11400000, guid: 49a5326f471a99e47bf10f4045c8c2e7, type: 2} + subParameters: [] + labels: [] + - name: Hip + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 11400000, guid: c715e1e0cbb0302449523154fa63de64, type: 2} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/LC_TrackingMainMenu.asset.meta b/LimbControl/Resources/LC_TrackingMainMenu.asset.meta new file mode 100644 index 0000000..1d27731 --- /dev/null +++ b/LimbControl/Resources/LC_TrackingMainMenu.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d77eedc62b3c0414bb13dee70d551aed +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus.meta b/LimbControl/Resources/SubMenus.meta new file mode 100644 index 0000000..a726417 --- /dev/null +++ b/LimbControl/Resources/SubMenus.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c4a82b3f188fd7f4ba60522403006a5a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus/LC_Head Tracking.asset b/LimbControl/Resources/SubMenus/LC_Head Tracking.asset new file mode 100644 index 0000000..1ccee43 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Head Tracking.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_Head Tracking + m_EditorClassIdentifier: + controls: + - name: On + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 254 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Off + icon: {fileID: 2800000, guid: 61fee4a9eae042b47b08a725c6b2c02b, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 255 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/SubMenus/LC_Head Tracking.asset.meta b/LimbControl/Resources/SubMenus/LC_Head Tracking.asset.meta new file mode 100644 index 0000000..a29a91c --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Head Tracking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af043a01b1924c34aa341dfd7cc5ede4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus/LC_Hip Tracking.asset b/LimbControl/Resources/SubMenus/LC_Hip Tracking.asset new file mode 100644 index 0000000..1b730e8 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Hip Tracking.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_Hip Tracking + m_EditorClassIdentifier: + controls: + - name: On + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 248 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Off + icon: {fileID: 2800000, guid: 61fee4a9eae042b47b08a725c6b2c02b, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 249 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/SubMenus/LC_Hip Tracking.asset.meta b/LimbControl/Resources/SubMenus/LC_Hip Tracking.asset.meta new file mode 100644 index 0000000..25e71b9 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Hip Tracking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c715e1e0cbb0302449523154fa63de64 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus/LC_Left Foot Tracking.asset b/LimbControl/Resources/SubMenus/LC_Left Foot Tracking.asset new file mode 100644 index 0000000..6455113 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Left Foot Tracking.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_Left Foot Tracking + m_EditorClassIdentifier: + controls: + - name: On + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 244 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Off + icon: {fileID: 2800000, guid: 61fee4a9eae042b47b08a725c6b2c02b, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 245 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/SubMenus/LC_Left Foot Tracking.asset.meta b/LimbControl/Resources/SubMenus/LC_Left Foot Tracking.asset.meta new file mode 100644 index 0000000..ca48cca --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Left Foot Tracking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1a4a4d18516f4e4dac3d3a9e358af66 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus/LC_Left Hand Tracking.asset b/LimbControl/Resources/SubMenus/LC_Left Hand Tracking.asset new file mode 100644 index 0000000..22a26f3 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Left Hand Tracking.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_Left Hand Tracking + m_EditorClassIdentifier: + controls: + - name: On + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 250 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Off + icon: {fileID: 2800000, guid: 61fee4a9eae042b47b08a725c6b2c02b, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 251 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/SubMenus/LC_Left Hand Tracking.asset.meta b/LimbControl/Resources/SubMenus/LC_Left Hand Tracking.asset.meta new file mode 100644 index 0000000..b20e6e7 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Left Hand Tracking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49a5326f471a99e47bf10f4045c8c2e7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus/LC_Right Foot Tracking.asset b/LimbControl/Resources/SubMenus/LC_Right Foot Tracking.asset new file mode 100644 index 0000000..341e3c7 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Right Foot Tracking.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_Right Foot Tracking + m_EditorClassIdentifier: + controls: + - name: On + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 246 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Off + icon: {fileID: 2800000, guid: 61fee4a9eae042b47b08a725c6b2c02b, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 247 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/SubMenus/LC_Right Foot Tracking.asset.meta b/LimbControl/Resources/SubMenus/LC_Right Foot Tracking.asset.meta new file mode 100644 index 0000000..cc85e26 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Right Foot Tracking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1dff0ecce87ec97429acceb60d20dd10 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/Resources/SubMenus/LC_Right Hand Tracking.asset b/LimbControl/Resources/SubMenus/LC_Right Hand Tracking.asset new file mode 100644 index 0000000..3974f76 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Right Hand Tracking.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: LC_Right Hand Tracking + m_EditorClassIdentifier: + controls: + - name: On + icon: {fileID: 2800000, guid: 10d27a8d2e801d347821d88bbcc188c6, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 252 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + - name: Off + icon: {fileID: 2800000, guid: 61fee4a9eae042b47b08a725c6b2c02b, type: 3} + type: 101 + parameter: + name: LC/Tracking Control + value: 253 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/LimbControl/Resources/SubMenus/LC_Right Hand Tracking.asset.meta b/LimbControl/Resources/SubMenus/LC_Right Hand Tracking.asset.meta new file mode 100644 index 0000000..7040558 --- /dev/null +++ b/LimbControl/Resources/SubMenus/LC_Right Hand Tracking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d2c8509202ecf8498e4efdc6e061af6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LimbControl/package.json b/LimbControl/package.json new file mode 100644 index 0000000..661c836 --- /dev/null +++ b/LimbControl/package.json @@ -0,0 +1,31 @@ +{ + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://github.com/Dreadrith" + }, + "name": "com.dreadscripts.limbcontrol", + "displayName": "DreadScripts - Limb Control", + "version": "1.1.2", + "description": "Puppet Control your limbs whether you're on VR or Desktop, Sitting or Dancing", + "keywords": [ + "Dreadrith", + "DreadScripts", + "DreadTools", + "VRChat", + "Tool", + "Feature", + "Desktop" + ], + "gitDependencies": {}, + "vpmDependencies": { + "com.vrchat.avatars": "3.x.x" + }, + "legacyFolders": { + "Assets/DreadScripts/Limb Control": "590739e9535a1a0418b3476990debfb3", + "Assets/DreadScripts/LimbControl": "-1" + }, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/LimbControl/package.json.meta b/LimbControl/package.json.meta new file mode 100644 index 0000000..102631a --- /dev/null +++ b/LimbControl/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2cccb10b3fadf184b8a3f12ff0ab38a3 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe.meta b/Metal-Pipe.meta new file mode 100644 index 0000000..7a5f354 --- /dev/null +++ b/Metal-Pipe.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b38e8e3f8b01ac7458138d4961ec5117 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/CHANGELOG.md b/Metal-Pipe/CHANGELOG.md new file mode 100644 index 0000000..1da26e4 --- /dev/null +++ b/Metal-Pipe/CHANGELOG.md @@ -0,0 +1,2 @@ +## [1.0.0] - 2023/04/18 +### Initial Release \ No newline at end of file diff --git a/Metal-Pipe/CHANGELOG.md.meta b/Metal-Pipe/CHANGELOG.md.meta new file mode 100644 index 0000000..b604be5 --- /dev/null +++ b/Metal-Pipe/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57f28502b1efbf541a91b054db13bcd7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/Editor.meta b/Metal-Pipe/Editor.meta new file mode 100644 index 0000000..4796902 --- /dev/null +++ b/Metal-Pipe/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f170acfbc72991d4e96951ec67fd43f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/Editor/MetalPipe.cs b/Metal-Pipe/Editor/MetalPipe.cs new file mode 100644 index 0000000..a2fc521 --- /dev/null +++ b/Metal-Pipe/Editor/MetalPipe.cs @@ -0,0 +1,175 @@ +using UnityEditor; +using UnityEngine; + +namespace DreadScripts.MetalPipe +{ + public class MetalPipe : EditorWindow, IHasCustomMenu + { + private const string PREF_KEY = "MetalPipeSettings"; + private const string TEXTURE_PATH = "MP_Protagonist"; + private const string AUDIO_PATH = "MP_Sooth (LOUD)"; + + private Texture2D _pipeTexture; + + private Texture2D pipeTexture + { + get + { + if (_pipeTexture == null) _pipeTexture = Resources.Load(TEXTURE_PATH); + return _pipeTexture; + } + } + private AudioClip pipeAudio; + private bool displaySettings; + private bool hasModifiedSettings; + private double nextPlayTime; + private Vector2 scroll; + + public float volume = 0.25f; + public bool autoPlay; + public float minAutoTime = 20; + public float maxAutoTime = 420; + + #region Properties + private static GameObject _pipePlayerContainer; + + private static GameObject pipePlayerContainer + { + get + { + _pipePlayerContainer = new GameObject("Pipe"); + _pipePlayerContainer.hideFlags = HideFlags.DontSave | HideFlags.HideInHierarchy; + var source = _pipePlayerContainer.AddComponent(); + source.hideFlags = HideFlags.DontSave; + source.spatialBlend = 0; + source.playOnAwake = false; + source.priority = 0; + return _pipePlayerContainer; + } + } + private static AudioSource pipeAudioSource => pipePlayerContainer.GetComponent(); + + #endregion + + + [MenuItem("DreadTools/Utility/Metal Pipe")] + public static void ShowWindow() + { + var inst = GetWindow("Metal Pipe"); + inst.titleContent.image = inst.pipeTexture; + } + + public void OnGUI() + { + if (!displaySettings) + { + var ratio = pipeTexture.width / (float)pipeTexture.height; + var rect = GUILayoutUtility.GetAspectRect(ratio); + + GUI.DrawTexture(rect, pipeTexture); + + var e = Event.current; + switch (e.type) + { + case EventType.Repaint: + EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link); + break; + case EventType.MouseDown when e.button == 0 && rect.Contains(e.mousePosition): + PlayClip(); + break; + } + + } + else + { + scroll = EditorGUILayout.BeginScrollView(scroll); + EditorGUI.BeginChangeCheck(); + volume = EditorGUILayout.Slider("Volume", volume, 0, 1); + + bool wasAutoPlaying = autoPlay; + autoPlay = EditorGUILayout.Toggle(new GUIContent("Auto Play", ""), autoPlay); + if (wasAutoPlaying != autoPlay) + { + EditorApplication.update -= CheckForAutoPlay; + if (autoPlay) + { + RandomizeTimer(); + EditorApplication.update += CheckForAutoPlay; + } + } + + using (new EditorGUI.DisabledScope(!autoPlay)) + { + EditorGUI.indentLevel++; + minAutoTime = Mathf.Max(0, EditorGUILayout.FloatField("Min Auto Time", minAutoTime)); + maxAutoTime = Mathf.Max(0, EditorGUILayout.FloatField("Max Auto Time", maxAutoTime)); + EditorGUI.indentLevel--; + } + + hasModifiedSettings |= EditorGUI.EndChangeCheck(); + + using (new GUILayout.HorizontalScope()) + { + if (GUILayout.Button("Back", GUILayout.ExpandWidth(false))) + displaySettings = false; + + using (new EditorGUI.DisabledScope(!hasModifiedSettings)) + { + if (GUILayout.Button("Revert Changes")) + LoadSettings(); + + if (GUILayout.Button("Save Settings")) + SaveSettings(); + } + } + + EditorGUILayout.EndScrollView(); + } + } + + public void PlayClip(bool isTest = false) + { + pipeAudioSource.PlayOneShot(pipeAudio, volume); + if (!isTest) RandomizeTimer(); + } + + + public void OnEnable() + { + pipeAudio = Resources.Load(AUDIO_PATH); + LoadSettings(); + + if (autoPlay) + { + RandomizeTimer(); + EditorApplication.update -= CheckForAutoPlay; + EditorApplication.update += CheckForAutoPlay; + } + } + + public void OnDisable() => EditorApplication.update -= CheckForAutoPlay; + + + public void CheckForAutoPlay() + { + if (Time.realtimeSinceStartup > nextPlayTime) + PlayClip(); + } + public void RandomizeTimer() => nextPlayTime = Time.realtimeSinceStartup + Random.Range(minAutoTime, maxAutoTime); + public void AddItemsToMenu(GenericMenu menu) => menu.AddItem(new GUIContent("Settings"), displaySettings, () => displaySettings = !displaySettings); + + #region Saving + public void SaveSettings() + { + EditorPrefs.SetString(PREF_KEY, JsonUtility.ToJson(this)); + hasModifiedSettings = false; + } + public void LoadSettings() + { + if (EditorPrefs.HasKey(PREF_KEY)) JsonUtility.FromJsonOverwrite(EditorPrefs.GetString(PREF_KEY), this); + hasModifiedSettings = false; + } + #endregion + } + +} \ No newline at end of file diff --git a/Metal-Pipe/Editor/MetalPipe.cs.meta b/Metal-Pipe/Editor/MetalPipe.cs.meta new file mode 100644 index 0000000..0e6e58b --- /dev/null +++ b/Metal-Pipe/Editor/MetalPipe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e9935148c0be85439592b0052c895ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/Editor/com.dreadscripts.metalpipe.Editor.asmdef b/Metal-Pipe/Editor/com.dreadscripts.metalpipe.Editor.asmdef new file mode 100644 index 0000000..0db49a5 --- /dev/null +++ b/Metal-Pipe/Editor/com.dreadscripts.metalpipe.Editor.asmdef @@ -0,0 +1,13 @@ +{ + "name": "com.dreadscripts.metalpipe.Editor", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Metal-Pipe/Editor/com.dreadscripts.metalpipe.Editor.asmdef.meta b/Metal-Pipe/Editor/com.dreadscripts.metalpipe.Editor.asmdef.meta new file mode 100644 index 0000000..6af97cc --- /dev/null +++ b/Metal-Pipe/Editor/com.dreadscripts.metalpipe.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 54f6442ba203a494db8497077d69a272 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/LICENSE.md b/Metal-Pipe/LICENSE.md new file mode 100644 index 0000000..8993ad3 --- /dev/null +++ b/Metal-Pipe/LICENSE.md @@ -0,0 +1,18 @@ +Copyright (c) 2023 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Metal-Pipe/LICENSE.md.meta b/Metal-Pipe/LICENSE.md.meta new file mode 100644 index 0000000..0e71bf9 --- /dev/null +++ b/Metal-Pipe/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bbbb9d1a52c90f246b5adb328f7d88f6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/Resources.meta b/Metal-Pipe/Resources.meta new file mode 100644 index 0000000..1320393 --- /dev/null +++ b/Metal-Pipe/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89cd029e998f91f4e94b3805e8268346 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/Resources/MP_Protagonist.png b/Metal-Pipe/Resources/MP_Protagonist.png new file mode 100644 index 0000000..3b9c3e5 Binary files /dev/null and b/Metal-Pipe/Resources/MP_Protagonist.png differ diff --git a/Metal-Pipe/Resources/MP_Protagonist.png.meta b/Metal-Pipe/Resources/MP_Protagonist.png.meta new file mode 100644 index 0000000..e44057a --- /dev/null +++ b/Metal-Pipe/Resources/MP_Protagonist.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 79feaf7835c2c9d45b5a5b57d12ea121 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/Resources/MP_Sooth (LOUD).mp3 b/Metal-Pipe/Resources/MP_Sooth (LOUD).mp3 new file mode 100644 index 0000000..e164325 Binary files /dev/null and b/Metal-Pipe/Resources/MP_Sooth (LOUD).mp3 differ diff --git a/Metal-Pipe/Resources/MP_Sooth (LOUD).mp3.meta b/Metal-Pipe/Resources/MP_Sooth (LOUD).mp3.meta new file mode 100644 index 0000000..5c6f5bf --- /dev/null +++ b/Metal-Pipe/Resources/MP_Sooth (LOUD).mp3.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 51b0a0602a3128841b09fd3c2597165a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Metal-Pipe/package.json b/Metal-Pipe/package.json new file mode 100644 index 0000000..aefe666 --- /dev/null +++ b/Metal-Pipe/package.json @@ -0,0 +1,21 @@ +{ + "author": { + "name": "Dreadrith", + "email": "DreadScripts@gmail.com", + "url": "https://github.com/Dreadrith" + }, + "name": "com.dreadscripts.metalpipe", + "displayName": "MetalPipe", + "version": "1.0.0", + "description": "A metal pipe window to soothe your ears with the beautiful sound of a metal pipe.", + "keywords": [ + "Soothing", + "Beautiful", + "Hardcode" + ], + "gitDependencies": {}, + "vpmDependencies": {}, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool" +} \ No newline at end of file diff --git a/Metal-Pipe/package.json.meta b/Metal-Pipe/package.json.meta new file mode 100644 index 0000000..71ba58b --- /dev/null +++ b/Metal-Pipe/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2ea3144282705e4f9e52f5fcb8aeb2e +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame.meta b/NoAutoGame.meta new file mode 100644 index 0000000..0df0a4d --- /dev/null +++ b/NoAutoGame.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3341bbac48cc2841aa6e1bce75b3ff5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame/Editor.meta b/NoAutoGame/Editor.meta new file mode 100644 index 0000000..af32d07 --- /dev/null +++ b/NoAutoGame/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6ade5b442638bd4086b19338f33ea09 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame/Editor/NoAutoGame.cs b/NoAutoGame/Editor/NoAutoGame.cs new file mode 100644 index 0000000..f2015a5 --- /dev/null +++ b/NoAutoGame/Editor/NoAutoGame.cs @@ -0,0 +1,151 @@ +using UnityEngine; +using UnityEditor; +using System.Threading; +using System.Threading.Tasks; +using System; +using System.Linq; +using System.Reflection; + +namespace DreadScripts.NoAutoGame +{ + internal static class NoAutoGame + { + #region Constants + private const string GAME_WINDOW_TYPE_ASSEMBLY_FULL_NAME = "UnityEditor.GameView, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"; + private const string GAME_WINDOW_OPEN_SESS_KEY = "NoAutoGameWindowWasOpen"; + private const string LAST_WINDOWS_SESS_KEY = "NoAutoGameLastWindowsIDs"; + + private const string CLOSE_GAME_WINDOW_PREF_KEY = "NoAutoGameCloseGameWindow"; + private const string UNFOCUS_GAME_WINDOW_PREF_KEY = "NoAutoGameUnfocusGameView"; + private const int GAME_WINDOW_HANDLE_DELAY = 100; + #endregion + + private static Type _gameWindowType; + private static Type gameWindowType => _gameWindowType ?? (_gameWindowType = Type.GetType(GAME_WINDOW_TYPE_ASSEMBLY_FULL_NAME)); + private static readonly PropertyInfo hasFocusProperty = typeof(EditorWindow).GetProperty("hasFocus", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + + private static CancellationTokenSource cts; + + private static bool closeGameWindow; + private static bool unfocusGameWindow; + private static EditorWindow[] previouslyFocusedWindows; + private static void HandlePlaymodeChange(PlayModeStateChange change) + { + cts?.Cancel(); + + switch (change) + { + case PlayModeStateChange.ExitingEditMode: + RememberWindows(); + break; + case PlayModeStateChange.EnteredPlayMode: + try + { + cts = new CancellationTokenSource(); + _ = HandleGameWindow(cts.Token); + } + catch(OperationCanceledException){} + break; + case PlayModeStateChange.EnteredEditMode: + SessionState.EraseString(LAST_WINDOWS_SESS_KEY); + if (!closeGameWindow && unfocusGameWindow && !SessionState.GetBool(GAME_WINDOW_OPEN_SESS_KEY, true)) + { + var gameWindows = (EditorWindow[])Resources.FindObjectsOfTypeAll(gameWindowType); + if (gameWindows.Any() && !gameWindows.Any(w => previouslyFocusedWindows.Contains(w))) + foreach(var w in gameWindows) + w.Close(); + } + + previouslyFocusedWindows = null; + break; + } + } + + private static void RememberWindows() + { + if (unfocusGameWindow && hasFocusProperty != null) + { + var idList = string.Join(",", Resources.FindObjectsOfTypeAll() + .Where(w => (bool) hasFocusProperty.GetValue(w)) + .Select(w => w.GetInstanceID().ToString())); + + SessionState.SetString(LAST_WINDOWS_SESS_KEY, idList); + } + + if (gameWindowType == null) return; + var gameWindows = Resources.FindObjectsOfTypeAll(gameWindowType); + SessionState.SetBool(GAME_WINDOW_OPEN_SESS_KEY, gameWindows.Length > 0); } + + private static async Task HandleGameWindow(CancellationToken ct) + { + if (!closeGameWindow && !unfocusGameWindow) return; + var gameWindowWasOpen = SessionState.GetBool(GAME_WINDOW_OPEN_SESS_KEY, true); + await Task.Delay(GAME_WINDOW_HANDLE_DELAY, ct); + + if (closeGameWindow && !gameWindowWasOpen) + { + var windows = Resources.FindObjectsOfTypeAll(gameWindowType); + foreach (var w in windows) + { + var ew = (EditorWindow)w; + ew.Close(); + } + } else if (unfocusGameWindow) + { + var previousWindowsFocusList = SessionState.GetString(LAST_WINDOWS_SESS_KEY, string.Empty); + if (string.IsNullOrWhiteSpace(previousWindowsFocusList)) return; + + previouslyFocusedWindows = previousWindowsFocusList + .Split(',').Select(int.Parse) + .Select(EditorUtility.InstanceIDToObject) + .OfType().Where(w => w != null).ToArray(); + foreach (var w in previouslyFocusedWindows) + w.Focus(); + } + } + + + #region Initialization + [InitializeOnLoadMethod] + private static void Initialize() => LoadVariables(); + private static void LoadVariables() + { + closeGameWindow = EditorPrefs.GetBool(CLOSE_GAME_WINDOW_PREF_KEY, false); + unfocusGameWindow = EditorPrefs.GetBool(UNFOCUS_GAME_WINDOW_PREF_KEY, true); + RefreshHook(); + } + + private static void RefreshHook() + { + EditorApplication.playModeStateChanged -= HandlePlaymodeChange; + if (closeGameWindow || unfocusGameWindow) + EditorApplication.playModeStateChanged += HandlePlaymodeChange; + } + #endregion + + #region Menu Items + [MenuItem("DreadTools/Utility/NoAutoGame/AutoUnfocus")] + private static void ToggleUnfocusGameWindow() + { + bool newValue = !EditorPrefs.GetBool(UNFOCUS_GAME_WINDOW_PREF_KEY, true); + EditorPrefs.SetBool(UNFOCUS_GAME_WINDOW_PREF_KEY, newValue); + Debug.Log($"[NoAutoGame] AutoUnfocus is now {(newValue ? "enabled" : "disabled")}."); + unfocusGameWindow = newValue; + RefreshHook(); + } + + [MenuItem("DreadTools/Utility/NoAutoGame/AutoClose")] + private static void ToggleCloseGameWindow() + { + bool newValue = !EditorPrefs.GetBool(CLOSE_GAME_WINDOW_PREF_KEY, false); + EditorPrefs.SetBool(CLOSE_GAME_WINDOW_PREF_KEY, newValue); + Debug.Log($"[NoAutoGame] AutoClose is now {(newValue ? "enabled" : "disabled")}."); + closeGameWindow = newValue; + RefreshHook(); + } + #endregion + + } + + +} diff --git a/NoAutoGame/Editor/NoAutoGame.cs.meta b/NoAutoGame/Editor/NoAutoGame.cs.meta new file mode 100644 index 0000000..8431da8 --- /dev/null +++ b/NoAutoGame/Editor/NoAutoGame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6c420c7dc39936499f795315373858c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame/Editor/com.dreadscripts.noautogame.Editor.asmdef b/NoAutoGame/Editor/com.dreadscripts.noautogame.Editor.asmdef new file mode 100644 index 0000000..1fdea90 --- /dev/null +++ b/NoAutoGame/Editor/com.dreadscripts.noautogame.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.noautogame.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/NoAutoGame/Editor/com.dreadscripts.noautogame.Editor.asmdef.meta b/NoAutoGame/Editor/com.dreadscripts.noautogame.Editor.asmdef.meta new file mode 100644 index 0000000..00250c0 --- /dev/null +++ b/NoAutoGame/Editor/com.dreadscripts.noautogame.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b0aba0aac9d6446439e0b33d153a8596 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame/LICENSE b/NoAutoGame/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/NoAutoGame/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/NoAutoGame/LICENSE.meta b/NoAutoGame/LICENSE.meta new file mode 100644 index 0000000..a260dd6 --- /dev/null +++ b/NoAutoGame/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ba9c196d2f7700141892c2fea0f6ca6a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame/README.md b/NoAutoGame/README.md new file mode 100644 index 0000000..ba969ca --- /dev/null +++ b/NoAutoGame/README.md @@ -0,0 +1,12 @@ +# NoAutoGame +Prevents the Game window from opening or automatically focusing. + +### [Download From Here](https://vpm.dreadscripts.com/) + +## How it works +There are two settings you can toggle from `DreadTools > Utility > NoAutoGame` +- **AutoClose:** If there was no Game window before entering playmode, then the Game window will be closed right away. +- **AutoUnfocus:** This will restore all windows' focuses to what it was before entering playmode. Additionally, if AutoClose is disabled, and there was no Game window, then it'll close the Game window upon exiting playmode. + +### Thank You +If you enjoy NoAutoGame, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! \ No newline at end of file diff --git a/NoAutoGame/README.md.meta b/NoAutoGame/README.md.meta new file mode 100644 index 0000000..a182449 --- /dev/null +++ b/NoAutoGame/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac0f110be26650d4c8c71ecce405ca12 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NoAutoGame/package.json b/NoAutoGame/package.json new file mode 100644 index 0000000..7cac3a4 --- /dev/null +++ b/NoAutoGame/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.noautogame", + "displayName": "DreadScripts - NoAutoGame", + "version": "1.1.0", + "description": "Prevents the Game window from opening or automatically focusing.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/NoAutoGame/package.json.meta b/NoAutoGame/package.json.meta new file mode 100644 index 0000000..e742825 --- /dev/null +++ b/NoAutoGame/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 53fccee2c1c00224bb4ebda93d268b44 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor.meta b/PackageProcessor.meta new file mode 100644 index 0000000..620062b --- /dev/null +++ b/PackageProcessor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a85d857cc5a56534ca8c306dcd1d4fcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/Editor.meta b/PackageProcessor/Editor.meta new file mode 100644 index 0000000..2db3e9a --- /dev/null +++ b/PackageProcessor/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df1ae91095633fd4d930d1e9b2b8193e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/Editor/ExportPostProcessor.cs b/PackageProcessor/Editor/ExportPostProcessor.cs new file mode 100644 index 0000000..51cec2c --- /dev/null +++ b/PackageProcessor/Editor/ExportPostProcessor.cs @@ -0,0 +1,405 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using HarmonyLib; +using System.Reflection; +using System.IO; +using System.Linq; +using Object = UnityEngine.Object; + +namespace DreadScripts.PackageProcessor +{ + [InitializeOnLoad] + public class ExportPostProcessor + { + #region Patching + private static readonly System.Type packageExportType; + private static readonly System.Type packageTreeGUIType; + private static readonly FieldInfo includeDependenciesField; + private static readonly FieldInfo exportItemsField; + private static readonly MethodInfo refreshListMethod; + private static readonly MethodInfo getTreeItemMethod; + #endregion + + #region Constants + + private const string PARAM_FOLDERS = "exportDefaultOffFolders"; + private const string PARAM_EXTENSIONS = "exportDefaultOffExtensions"; + private const string PARAM_TYPES = "exportDefaultOffTypes"; + private const string PARAM_ASSETS = "exportDefaultOffAssets"; + #endregion + + private static PackageProcessorData settings; + private static EditorWindow exporterInstance; + + private static object rawItems; + private static ReflectedExportPackageItem[] reflectedItems; + private static bool firstStart = true; + + static ExportPostProcessor() + { + packageExportType = GetType("UnityEditor.PackageExport"); + packageTreeGUIType = GetType("UnityEditor.PackageExportTreeView+PackageExportTreeViewGUI"); + + includeDependenciesField = packageExportType.GetField("m_IncludeDependencies", BindingFlags.Instance | BindingFlags.NonPublic); + exportItemsField = packageExportType.GetField("m_ExportPackageItems", BindingFlags.Instance | BindingFlags.NonPublic); + + + refreshListMethod = GetType("UnityEditor.PackageExportTreeView").GetMethod("ComputeEnabledStateForFolders", BindingFlags.Instance | BindingFlags.NonPublic); + getTreeItemMethod = GetType("UnityEditor.PackageExportTreeView+PackageExportTreeViewItem").GetMethod("get_item", BindingFlags.Instance | BindingFlags.Public); + + var harmony = new Harmony("com.dreadscripts.exportpostprocessor.tool"); + + void QuickPatch(System.Type targetType, string ogMethod, string preMethod = "", string poMethod = "") + { + MethodInfo originalMethod = AccessTools.GetDeclaredMethods(targetType).Find(m => m.Name == ogMethod); + HarmonyMethod prefixMethod = string.IsNullOrEmpty(preMethod) ? null : new HarmonyMethod(typeof(ExportPostProcessor).GetMethod(preMethod, BindingFlags.NonPublic | BindingFlags.Static)); + HarmonyMethod postMethod = string.IsNullOrEmpty(poMethod) ? null : new HarmonyMethod(typeof(ExportPostProcessor).GetMethod(poMethod, BindingFlags.NonPublic | BindingFlags.Static)); + harmony.Patch(originalMethod, prefixMethod, postMethod); + } + + QuickPatch(packageExportType, "ShowExportPackage", null, nameof(ShowExportPost)); + QuickPatch(packageExportType, "BuildAssetList", null, nameof(BuildAssetListPost)); + QuickPatch(packageExportType, "OnGUI", null, nameof(packageGUIPost)); + QuickPatch(packageTreeGUIType, "OnRowGUI", nameof(treeRowGUIPrefix)); + } + + static void ShowExportPost() + { + settings = PackageProcessorData.instance; + exporterInstance = EditorWindow.GetWindow(packageExportType); + firstStart = true; + if (settings.active) + includeDependenciesField.SetValue(exporterInstance, settings.includeDependencies); + + } + + static void BuildAssetListPost() + { + GetExportItems(); + if (!firstStart || !settings.active) return; + firstStart = false; + + List offTypes = new List(); + settings.exportDefaultOffTypes.ForEach(t => + { + if (string.IsNullOrWhiteSpace(t)) return; + System.Type targetType = GetType(t); + if (targetType != null) + offTypes.Add(targetType); + }); + foreach (var i in reflectedItems) + { + if (offTypes.Any(t => t == i.type) || + settings.exportDefaultOffFolders.Any(f => i.assetPath.Contains(f)) || + settings.exportDefaultOffExtensions.Any(s => s == Path.GetExtension(i.assetPath)) || + (!i.isFolder && settings.exportDefaultOffAssets.Any(g => g == i.guid))) + + i.enabledState = 0; + } + } + + static void packageGUIPost() + { + using (new GUILayout.HorizontalScope()) + { + + if (GUILayout.Button("Modified by Dreadrith#3238", "minilabel")) + Application.OpenURL("https://github.com/Dreadrith/DreadScripts"); + GUILayout.FlexibleSpace(); + } + } + + static ReflectedExportPackageItem reflectedTargetItem; + static void treeRowGUIPrefix(Rect rowRect,UnityEditor.IMGUI.Controls.TreeViewItem tvItem) + { + if (Event.current.type == EventType.ContextClick && rowRect.Contains(Event.current.mousePosition)) + { + object targetItem = getTreeItemMethod.Invoke(tvItem, null); + if (targetItem != null) + { + reflectedTargetItem = new ReflectedExportPackageItem(targetItem); + if (!reflectedTargetItem.isFolder) + { + GenericMenu myMenu = new GenericMenu(); + myMenu.AddItem(new GUIContent("Toggle Type"), false, new GenericMenu.MenuFunction(ToggleSelectedType)); + myMenu.AddSeparator(""); + + if (!HasSelectedAsset()) + myMenu.AddItem(new GUIContent("Exclusions/Add Asset"), false, new GenericMenu.MenuFunction(ExcludeSelectedAsset)); + else + myMenu.AddItem(new GUIContent("Exclusions/Remove Asset"), false, new GenericMenu.MenuFunction(IncludeSelectedAsset)); + + if (!HasSelectedType()) + myMenu.AddItem(new GUIContent("Exclusions/Add Type"), false, new GenericMenu.MenuFunction(ExcludeSelectedType)); + else + myMenu.AddItem(new GUIContent("Exclusions/Remove Type"), false, new GenericMenu.MenuFunction(IncludeSelectedType)); + + if (!HasSelectedExtension()) + myMenu.AddItem(new GUIContent("Exclusions/Add Extension"), false, new GenericMenu.MenuFunction(ExcludeSelectedExtension)); + else + myMenu.AddItem(new GUIContent("Exclusions/Remove Extension"), false, new GenericMenu.MenuFunction(IncludeSelectedExtension)); + + myMenu.ShowAsContext(); + Event.current.Use(); + } + else + { + GenericMenu myMenu = new GenericMenu(); + if (!HasSelectedFolder()) + myMenu.AddItem(new GUIContent("Exclusions/Add Folder"), false, new GenericMenu.MenuFunction(ExcludeSelectedFolder)); + else + myMenu.AddItem(new GUIContent("Exclusions/Remove Folder"), false, new GenericMenu.MenuFunction(IncludeSelectedFolder)); + myMenu.ShowAsContext(); + Event.current.Use(); + } + } + else + { + GenericMenu myMenu = new GenericMenu(); + myMenu.AddDisabledItem(new GUIContent("Folder not being exported")); + myMenu.ShowAsContext(); + Event.current.Use(); + } + } + } + + static void ToggleSelectedType() + { + List targetItems = new List(); + bool allOn = true; + Iterate(reflectedItems, i => + { + if (i.type == reflectedTargetItem.type) + { + targetItems.Add(i); + if (i.enabledState == 0) + { + allOn = false; + } + } + }); + targetItems.ForEach(i => i.enabledState = allOn ? 0 : 1); + RefreshTreeView(); + } + + static bool HasExclusion(string property, string value) + { + SerializedObject data = new SerializedObject(PackageProcessorData.instance); + SerializedProperty targetProperty = data.FindProperty(property); + for (int i = 0; i < targetProperty.arraySize; i++) + { + if (targetProperty.GetArrayElementAtIndex(i).stringValue == value) + { + return true; + } + } + return false; + } + + static void AddExclusion(string property, string value) + { + SerializedObject data = new SerializedObject(PackageProcessorData.instance); + SerializedProperty targetProperty = data.FindProperty(property); + targetProperty.arraySize++; + targetProperty.GetArrayElementAtIndex(targetProperty.arraySize - 1).stringValue = value; + data.ApplyModifiedPropertiesWithoutUndo(); + } + + static void RemoveExclusion(string property, string value) + { + SerializedObject data = new SerializedObject(PackageProcessorData.instance); + SerializedProperty targetProperty = data.FindProperty(property); + for (int i = 0; i < targetProperty.arraySize; i++) + { + if (targetProperty.GetArrayElementAtIndex(i).stringValue == value) + { + targetProperty.DeleteArrayElementAtIndex(i); + break; + } + } + data.ApplyModifiedPropertiesWithoutUndo(); + } + + #region Extension Exclusion + static bool HasSelectedExtension() => HasExclusion(PARAM_EXTENSIONS, Ext(reflectedTargetItem.assetPath)); + static void ExcludeSelectedExtension() => AddExclusion(PARAM_EXTENSIONS, Ext(reflectedTargetItem.assetPath)); + static void IncludeSelectedExtension() => RemoveExclusion(PARAM_EXTENSIONS, Ext(reflectedTargetItem.assetPath)); + #endregion + + #region Folder Exclusion + static bool HasSelectedFolder() => HasExclusion(PARAM_FOLDERS, reflectedTargetItem.assetPath); + static void ExcludeSelectedFolder() => AddExclusion(PARAM_FOLDERS, reflectedTargetItem.assetPath); + static void IncludeSelectedFolder() => RemoveExclusion(PARAM_FOLDERS, reflectedTargetItem.assetPath); + #endregion + + #region Type Exclusion + static bool HasSelectedType() => PackageProcessorData.instance.exportDefaultOffTypes.Any(t => GetType(t) == reflectedTargetItem.type); + static void ExcludeSelectedType() => AddExclusion(PARAM_TYPES, reflectedTargetItem.type.AssemblyQualifiedName); + static void IncludeSelectedType() + { + SerializedObject data = new SerializedObject(PackageProcessorData.instance); + SerializedProperty targetProperty = data.FindProperty(PARAM_TYPES); + for (int i = 0; i < targetProperty.arraySize; i++) + { + Type currentType = GetType(targetProperty.GetArrayElementAtIndex(i).stringValue); + if (currentType == reflectedTargetItem.type) + { + targetProperty.DeleteArrayElementAtIndex(i); + break; + } + } + data.ApplyModifiedPropertiesWithoutUndo(); + } + + #endregion + + #region Asset Exclusion + static bool HasSelectedAsset() => HasExclusion(PARAM_ASSETS, reflectedTargetItem.guid); + static void ExcludeSelectedAsset() => AddExclusion(PARAM_ASSETS, reflectedTargetItem.guid); + static void IncludeSelectedAsset() => RemoveExclusion(PARAM_ASSETS, reflectedTargetItem.guid); + #endregion + + private static string Ext(string path) => Path.GetExtension(path); + + private static void GetExportItems() + { + rawItems = exportItemsField.GetValue(exporterInstance); + object[] exportItems = (object[])rawItems; + exportItemsField.SetValue(exporterInstance, exportItems); + + reflectedItems = new ReflectedExportPackageItem[exportItems.Length]; + for (int i = 0; i < exportItems.Length; i++) + reflectedItems[i] = new ReflectedExportPackageItem(exportItems[i]); + + } + + private static void RefreshTreeView() + { + refreshListMethod.Invoke(packageExportType.GetField("m_Tree", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(exporterInstance), null); + } + + private class ReflectedExportPackageItem + { + private readonly object instance; + + public bool isFolder => AssetDatabase.IsValidFolder(assetPath); + + private string _assetPath; + public string assetPath + { + get + { + if (string.IsNullOrEmpty(_assetPath)) + _assetPath = (string)assetPathField.GetValue(instance); + return _assetPath; + } + } + + private bool stateInit; + private int _enabledState; + public int enabledState + { + get + { + if (!stateInit) + return 1; + if (_enabledState == -2) + _enabledState = (int)enabledStateField.GetValue(instance); + return _enabledState; + } + set + { + stateInit = true; + _enabledState = value; + enabledStateField.SetValue(instance, value); + } + } + + private string _guid; + public string guid + { + get + { + if (string.IsNullOrEmpty(_guid)) + _guid = (string)guidField.GetValue(instance); + return _guid; + } + } + + private System.Type _type; + public System.Type type + { + get + { + if (asset && _type == null) + _type = asset.GetType(); + return _type; + } + } + + private Object _asset; + private bool _assetLoaded; + + private Object asset + { + get + { + if (_asset || _assetLoaded) return _asset; + + _asset = AssetDatabase.LoadMainAssetAtPath(assetPath); + _assetLoaded = true; + return _asset; + } + } + + + static FieldInfo assetPathField; + static FieldInfo enabledStateField; + static FieldInfo guidField; + public ReflectedExportPackageItem(object instance) + { + this.instance = instance; + } + + [InitializeOnLoadMethod] + static void InitializeFields() + { + System.Type targetType = AccessTools.TypeByName("ExportPackageItem"); + assetPathField = targetType.GetField("assetPath", BindingFlags.Public | BindingFlags.Instance); + enabledStateField = targetType.GetField("enabledStatus", BindingFlags.Public | BindingFlags.Instance); + guidField = targetType.GetField("guid", BindingFlags.Public | BindingFlags.Instance); + } + + } + + private static System.Type GetType(string typeName) + { + System.Type myType = System.Type.GetType(typeName); + if (myType != null) + return myType; + foreach (Assembly assembly in System.AppDomain.CurrentDomain.GetAssemblies()) + { + myType = assembly.GetType(typeName); + if (myType != null) + return myType; + } + return null; + } + + public static void Iterate(IEnumerable collection, System.Action action) + { + using (IEnumerator myNum = collection.GetEnumerator()) + { + while (myNum.MoveNext()) + { + action(myNum.Current); + } + } + } + + } + +} \ No newline at end of file diff --git a/PackageProcessor/Editor/ExportPostProcessor.cs.meta b/PackageProcessor/Editor/ExportPostProcessor.cs.meta new file mode 100644 index 0000000..fc31160 --- /dev/null +++ b/PackageProcessor/Editor/ExportPostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afc24f4a03a4b5d42a9c8ca0f1c4604e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/Editor/ImportPostProcessor.cs b/PackageProcessor/Editor/ImportPostProcessor.cs new file mode 100644 index 0000000..11d18e2 --- /dev/null +++ b/PackageProcessor/Editor/ImportPostProcessor.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using HarmonyLib; +using UnityEngine; +using UnityEditor; +using Object = UnityEngine.Object; + +namespace DreadScripts.PackageProcessor +{ + [InitializeOnLoad] + public class ImportPostProcessor + { + + private static readonly Harmony harmony; + private static readonly FieldInfo assetPathField; + private static readonly FieldInfo enabledStatusField; + private static readonly FieldInfo isFolderField; + + static ImportPostProcessor() + { + harmony = new Harmony("com.dreadscripts.importpostprocessor.tool"); + Type packageImportType = GetType("UnityEditor.PackageImport"); + Type packageImportItemType = GetType("UnityEditor.ImportPackageItem"); + assetPathField = packageImportItemType.GetField("destinationAssetPath", BindingFlags.Public | BindingFlags.Instance); + enabledStatusField = packageImportItemType.GetField("enabledStatus", BindingFlags.Public | BindingFlags.Instance); + isFolderField = packageImportItemType.GetField("isFolder", BindingFlags.Public | BindingFlags.Instance); + QuickPatch(packageImportType, "ShowImportPackage", string.Empty, nameof(ShowImportPackagePost)); + } + + private static void ShowImportPackagePost(object[] items) + { + foreach (var i in items) + { + string path = (string)assetPathField.GetValue(i) ; + bool isFolder = (bool)isFolderField.GetValue(i); + if (!isFolder && !string.IsNullOrEmpty(path) && (path.EndsWith(".cs") || path.EndsWith(".dll"))) + enabledStatusField.SetValue(i, 0); + + } + } + + private static void QuickPatch(System.Type targetType, string ogMethod, string preMethod = "", string poMethod = "") + { + MethodInfo originalMethod = AccessTools.GetDeclaredMethods(targetType).Find(m => m.Name == ogMethod); + HarmonyMethod prefixMethod = string.IsNullOrEmpty(preMethod) ? null : new HarmonyMethod(typeof(ImportPostProcessor).GetMethod(preMethod, BindingFlags.NonPublic | BindingFlags.Static)); + HarmonyMethod postMethod = string.IsNullOrEmpty(poMethod) ? null : new HarmonyMethod(typeof(ImportPostProcessor).GetMethod(poMethod, BindingFlags.NonPublic | BindingFlags.Static)); + harmony.Patch(originalMethod, prefixMethod, postMethod); + } + + private static System.Type GetType(string typeName) + { + System.Type myType = System.Type.GetType(typeName); + if (myType != null) + return myType; + foreach (Assembly assembly in System.AppDomain.CurrentDomain.GetAssemblies()) + { + myType = assembly.GetType(typeName); + if (myType != null) + return myType; + } + + return null; + } + } +} diff --git a/PackageProcessor/Editor/ImportPostProcessor.cs.meta b/PackageProcessor/Editor/ImportPostProcessor.cs.meta new file mode 100644 index 0000000..12785ea --- /dev/null +++ b/PackageProcessor/Editor/ImportPostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbdf79a44f36b9b4aaabc6ffa66403b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/Editor/PackageProcessorData.cs b/PackageProcessor/Editor/PackageProcessorData.cs new file mode 100644 index 0000000..a8ba76e --- /dev/null +++ b/PackageProcessor/Editor/PackageProcessorData.cs @@ -0,0 +1,55 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace DreadScripts.PackageProcessor +{ + [System.Serializable] + public class PackageProcessorData : ScriptableObject + { + private static PackageProcessorData _instance; + + public static PackageProcessorData instance + { + get + { + if (!_instance && Exists()) + if (_instance = AssetDatabase.LoadAssetAtPath(SavePath)) + return _instance; + + _instance = CreateInstance(); + if (!System.IO.Directory.Exists(folderPath)) + System.IO.Directory.CreateDirectory(folderPath); + + AssetDatabase.CreateAsset(_instance, SavePath); + return _instance; + } + } + + private static string _folderPath; + + public static string folderPath + { + get + { + if (string.IsNullOrEmpty(_folderPath)) + _folderPath = PlayerPrefs.GetString("PackageProcessorDataPath", "Assets/DreadScripts/Saved Data/PackageProcessor"); + return _folderPath; + } + set => _folderPath = value; + } + + private static string SavePath => folderPath + "/PackageProcessorData.asset"; + + public bool active = true; + public bool includeDependencies = false; + public List exportDefaultOffExtensions = new List(); + public List exportDefaultOffFolders = new List(); + public List exportDefaultOffTypes = new List(); + public List exportDefaultOffAssets = new List(); + + public static bool Exists() => System.IO.File.Exists(SavePath); + + } +} diff --git a/PackageProcessor/Editor/PackageProcessorData.cs.meta b/PackageProcessor/Editor/PackageProcessorData.cs.meta new file mode 100644 index 0000000..54cde81 --- /dev/null +++ b/PackageProcessor/Editor/PackageProcessorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed2394df32bc4ff439e376a0a2aa49e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/Editor/PackageProcessorWindow.cs b/PackageProcessor/Editor/PackageProcessorWindow.cs new file mode 100644 index 0000000..f45d5e3 --- /dev/null +++ b/PackageProcessor/Editor/PackageProcessorWindow.cs @@ -0,0 +1,248 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using Object = UnityEngine.Object; + +namespace DreadScripts.PackageProcessor +{ + public class PackageProcessorWindow : EditorWindow + { + private static SerializedObject settings; + private static SerializedProperty includeDependencies; + private static SerializedProperty active; + + private static SerializedProperty exportDefaultOffTypes; + private static SerializedProperty exportDefaultOffFolders; + private static SerializedProperty exportDefaultOffExtensions; + private static SerializedProperty exportDefaultOffAssets; + + private static Object targetObject; + private static Object targetFolder; + private static Object targetAsset; + + [MenuItem("DreadTools/Utility/Package Processor")] + public static void ShowWindow() => GetWindow(false, "Package Processor Settings", true); + + private void OnGUI() + { + settings.Update(); + + using (new BGColorScope(active.boolValue, Color.green, Color.grey)) + active.boolValue = GUILayout.Toggle(active.boolValue, "Active", "toolbarbutton"); + + using (new EditorGUI.DisabledScope(!active.boolValue)) + { + using (new LabelWidthScope(200)) + EditorGUILayout.PropertyField(includeDependencies, new GUIContent("Default Include Dependencies")); + DrawListProperty(exportDefaultOffExtensions); + DrawListProperty(exportDefaultOffFolders, FolderPropertyGUI); + DrawListProperty(exportDefaultOffTypes, TypePropertyGUI); + DrawAssetProperty(exportDefaultOffAssets); + } + + PackageProcessorData.folderPath = AssetFolderPath(PackageProcessorData.folderPath, "Settings Path", "ExportPostProcessorDataPath"); + + settings.ApplyModifiedProperties(); + + + } + + #region GUI Methods + private void DrawListProperty(SerializedProperty p, Action guiCall = null) + { + using (new GUILayout.VerticalScope("box")) + { + p.isExpanded = EditorGUILayout.Foldout(p.isExpanded, p.displayName); + if (!p.isExpanded) return; + + guiCall?.Invoke(); + + EditorGUI.indentLevel++; + if (GUILayout.Button("+")) + p.arraySize++; + + for (int i = p.arraySize-1; i >= 0; i--) + { + using (new GUILayout.HorizontalScope()) + { + EditorGUILayout.PropertyField(p.GetArrayElementAtIndex(i)); + if (GUILayout.Button("X", GUILayout.Width(18))) + p.DeleteArrayElementAtIndex(i); + } + } + EditorGUI.indentLevel--; + } + } + private void TypePropertyGUI() + { + + using (new GUILayout.HorizontalScope()) + { + targetObject = EditorGUILayout.ObjectField("Add Type Of", targetObject, typeof(Object), true); + EditorGUI.BeginDisabledGroup(!targetObject); + if (GUILayout.Button("Add Type")) + { + exportDefaultOffTypes.arraySize++; + exportDefaultOffTypes.GetArrayElementAtIndex(exportDefaultOffTypes.arraySize - 1).stringValue = targetObject.GetType().AssemblyQualifiedName; + } + EditorGUI.EndDisabledGroup(); + } + + } + private void FolderPropertyGUI() + { + + using (new GUILayout.HorizontalScope()) + { + EditorGUI.BeginChangeCheck(); + targetFolder = EditorGUILayout.ObjectField("Folder", targetFolder, typeof(Object), true); + if (EditorGUI.EndChangeCheck() && targetFolder) + { + string assetPath = AssetDatabase.GetAssetPath(targetFolder); + if (!AssetDatabase.IsValidFolder(assetPath)) + targetFolder = AssetDatabase.LoadMainAssetAtPath(System.IO.Path.GetDirectoryName(assetPath)); + } + EditorGUI.BeginDisabledGroup(!targetFolder); + if (GUILayout.Button("Add Folder")) + { + exportDefaultOffFolders.arraySize++; + exportDefaultOffFolders.GetArrayElementAtIndex(exportDefaultOffFolders.arraySize - 1).stringValue = AssetDatabase.GetAssetPath(targetFolder); + } + EditorGUI.EndDisabledGroup(); + } + + } + + private void DrawAssetProperty(SerializedProperty p) + { + using (new GUILayout.VerticalScope("box")) + { + p.isExpanded = EditorGUILayout.Foldout(p.isExpanded, p.displayName); + if (p.isExpanded) + { + using (new GUILayout.HorizontalScope()) + { + targetAsset = EditorGUILayout.ObjectField("Add GUID Of", targetAsset, typeof(Object), false); + if (AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(targetAsset))) + targetAsset = null; + EditorGUI.BeginDisabledGroup(!targetAsset); + if (GUILayout.Button("Add GUID")) + { + AssetDatabase.TryGetGUIDAndLocalFileIdentifier(targetAsset, out string newGUID, out long _); + exportDefaultOffAssets.arraySize++; + exportDefaultOffAssets.GetArrayElementAtIndex(exportDefaultOffAssets.arraySize - 1).stringValue = newGUID; + } + EditorGUI.EndDisabledGroup(); + } + + EditorGUI.indentLevel++; + if (GUILayout.Button("+")) + { + p.arraySize++; + } + for (int i = p.arraySize - 1; i >= 0; i--) + { + using (new GUILayout.HorizontalScope()) + { + EditorGUILayout.PropertyField(p.GetArrayElementAtIndex(i)); + if (GUILayout.Button("X", GUILayout.Width(18))) + p.DeleteArrayElementAtIndex(i); + if (GUILayout.Button("?",GUILayout.Width(18))) + { + Object asset = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(p.GetArrayElementAtIndex(i).stringValue)); + if (!asset) + { + if (EditorUtility.DisplayDialog("Not Found", "Asset for this GUID was not found. Delete?", "Delete", "Ignore")) + p.DeleteArrayElementAtIndex(i); + } + else + EditorGUIUtility.PingObject(asset); + + } + } + } + EditorGUI.indentLevel--; + } + } + } + + private static string AssetFolderPath(string variable, string title, string playerpref, bool isPlayerPrefs = true) + { + using (new GUILayout.HorizontalScope()) + { + using (new EditorGUI.DisabledScope(true)) + EditorGUILayout.TextField(title, variable); + + if (GUILayout.Button("...", GUILayout.Width(30))) + { + var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : "Assets", string.Empty); + if (string.IsNullOrEmpty(dummyPath)) + return variable; + string newPath = FileUtil.GetProjectRelativePath(dummyPath); + + if (!newPath.StartsWith("Assets")) + { + Debug.LogWarning("New Path must be a folder within Assets!"); + return variable; + } + + variable = newPath; + if (isPlayerPrefs) PlayerPrefs.SetString(playerpref, variable); + else EditorPrefs.SetString(playerpref, variable); + } + } + + return variable; + } + #endregion + + private void OnEnable() + { + if (settings == null) + { + settings = new SerializedObject(PackageProcessorData.instance); + includeDependencies = settings.FindProperty("includeDependencies"); + active = settings.FindProperty("active"); + exportDefaultOffTypes = settings.FindProperty("exportDefaultOffTypes"); + exportDefaultOffFolders = settings.FindProperty("exportDefaultOffFolders"); + exportDefaultOffExtensions = settings.FindProperty("exportDefaultOffExtensions"); + exportDefaultOffAssets = settings.FindProperty("exportDefaultOffAssets"); + } + + } + + #region Scope Classes + public class LabelWidthScope : System.IDisposable + { + private readonly float originalWidth; + public LabelWidthScope(float newWidth) + { + originalWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = newWidth; + } + + public void Dispose() => EditorGUIUtility.labelWidth = originalWidth; + + } + + public class BGColorScope : System.IDisposable + { + private readonly Color originalColor; + + public BGColorScope(bool active, Color activeColor, Color inactiveColor) + { + originalColor = GUI.backgroundColor; + GUI.backgroundColor = active ? activeColor : inactiveColor; + } + + public void Dispose() => GUI.backgroundColor = originalColor; + + } + #endregion + } + + + +} \ No newline at end of file diff --git a/PackageProcessor/Editor/PackageProcessorWindow.cs.meta b/PackageProcessor/Editor/PackageProcessorWindow.cs.meta new file mode 100644 index 0000000..e564073 --- /dev/null +++ b/PackageProcessor/Editor/PackageProcessorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43224e74da76e8a4ca25914ed1364442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/Editor/com.dreadrith.packageprocessor.Editor.asmdef b/PackageProcessor/Editor/com.dreadrith.packageprocessor.Editor.asmdef new file mode 100644 index 0000000..aaf10b3 --- /dev/null +++ b/PackageProcessor/Editor/com.dreadrith.packageprocessor.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadrith.packageprocessor.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/PackageProcessor/Editor/com.dreadrith.packageprocessor.Editor.asmdef.meta b/PackageProcessor/Editor/com.dreadrith.packageprocessor.Editor.asmdef.meta new file mode 100644 index 0000000..71283ca --- /dev/null +++ b/PackageProcessor/Editor/com.dreadrith.packageprocessor.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b94789d11fa32064c84634c99b5a21bd +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/LICENSE b/PackageProcessor/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/PackageProcessor/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PackageProcessor/LICENSE.meta b/PackageProcessor/LICENSE.meta new file mode 100644 index 0000000..8660900 --- /dev/null +++ b/PackageProcessor/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e31dd2b2d1b36c94ba8b44b96eaa1632 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/README.md b/PackageProcessor/README.md new file mode 100644 index 0000000..367964b --- /dev/null +++ b/PackageProcessor/README.md @@ -0,0 +1,37 @@ +# Package Processor +Make it less tedious to import or export only the things that you need. + +![image](https://cdn.discordapp.com/attachments/1096062312495972414/1096062312944783450/postprost.gif?ex=66343bd3&is=6632ea53&hm=3bec6fe57e3675b2a80bba600fcbb753f312ec7797d62ed5633d3defb8c09b21&) + +Package Processor can be used to reduce the tediousness of having to Select/Deselect certain assets based on Exclusion rules and other features. + +Settings can be found under +DreadTools > Scripts Settings > Package Processor +Currently, Import Processor only deselects scripts and doesn't have settings. + +Settings Window +--------------- +- "Active": Whether the settings should affect the exporting at all. + - "Include Dependencies": Whether opening the export window should have dependencies On or Off by default. + - "Default Off Extensions": Any File matching one of these extensions will be Off by default. + - "Default Off Folders": Any File whose path contains one of these paths will be Off by default. + - "Default Off Types": Any File whose type matches one of these types will be Off by default. + - "Default Off Assets": Any File whose GUID matches one of these GUIDs will be Off by default. + - "Settings Path": The path where the settings should be saved and loaded from. + +Export Window +------------- +Right Clicking any file will open a Context menu for extra features + +- File - Toggle Type: Turns On/Off all of the assets being exporting whose types match the one selected. +- Exclusions: + - Add/Remove Asset: Adds/Removes this File's GUID in the Default Off Assets list. + - Add/Remove Type: Adds/Removes this File's Type in the Default Off Types list. + - Add/Remove Extension: Adds/Removes this File's Extension in the Default Off Extensions list. + +- Folder - Exclusions: Add/Remove Folder: Adds/Removes this Folder's Path in the Default Off Folders list. + +**Requires Harmony!** + +### Thank you +If you enjoy Package Processor, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! diff --git a/PackageProcessor/README.md.meta b/PackageProcessor/README.md.meta new file mode 100644 index 0000000..c79a8b6 --- /dev/null +++ b/PackageProcessor/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3c7cb9dfc3a13214cb620c8f76deca94 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PackageProcessor/package.json b/PackageProcessor/package.json new file mode 100644 index 0000000..9cab5b2 --- /dev/null +++ b/PackageProcessor/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadrith.packageprocessor", + "displayName": "DreadScripts - PackageProcessor", + "version": "1.0.1", + "description": "Make it less tedious to import or export only the things that you need.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/PackageProcessor/package.json.meta b/PackageProcessor/package.json.meta new file mode 100644 index 0000000..a350534 --- /dev/null +++ b/PackageProcessor/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 779188ec76ff7e84f9da587fa51f2d2c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter.meta b/PhysBone-Converter.meta new file mode 100644 index 0000000..e8c21a0 --- /dev/null +++ b/PhysBone-Converter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8269f379715f7c408dd9249447b4491 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter/Editor.meta b/PhysBone-Converter/Editor.meta new file mode 100644 index 0000000..56cad45 --- /dev/null +++ b/PhysBone-Converter/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb81ed9ea3b9261488c105f6fc58a0ee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter/Editor/PhysBoneConverter.cs b/PhysBone-Converter/Editor/PhysBoneConverter.cs new file mode 100644 index 0000000..f6a13ab --- /dev/null +++ b/PhysBone-Converter/Editor/PhysBoneConverter.cs @@ -0,0 +1,368 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using VRC.SDK3.Avatars.Components; +using VRC.SDK3.Dynamics.PhysBone.Components; + +//This work is licensed under the Creative Commons Attribution-NonCommercial 2.0 License. +//To view a copy of the license, visit https://creativecommons.org/licenses/by-nc/2.0/legalcode + +//Made by Dreadrith#3238 +//Discord: https://discord.gg/ZsPfrGn +//Github: https://github.com/Dreadrith/DreadScripts +//Gumroad: https://gumroad.com/dreadrith +//Ko-fi: https://ko-fi.com/dreadrith + +namespace DreadScripts.PhysBoneConverter +{ + public class PhysBoneConverter : EditorWindow + { + #region Automated + private static readonly Dictionary colliderDictionary = new Dictionary(); + private static readonly AnimationCurve AngleToStiffnessCurve = SmoothCurveTangents(new AnimationCurve( + new Keyframe(0, 1), + new Keyframe(60, 0.5f), + new Keyframe(105, 0.2f), + new Keyframe(130, 0.1f), + new Keyframe(180, 0))); + + private static readonly GUIContent[] names = + { + new GUIContent("Damping","How much the bones get slowed down."), + new GUIContent("Elasticity","How much force is applied to return each bone to its original orientation."), + new GUIContent("Stiffness", "How much the bone's original orientation gets preserved."), + new GUIContent("Inert", "How much the character's position change is ignored in physics simulation."), + new GUIContent("Friction", "How much the bones get slowed down when colliding.") + }; + + private static int optionsCount; + private static FieldInfo frictionField; + private static FieldInfo frictionDistribField; + #endregion + + #region Input + public static GameObject targetRoot; + public static bool makeBackup = true; + public static bool[] bools = {true,true,true,true,true}; + public static float[] floats = {0.2f, 0.2f, 0, 0, 0}; + public static AnimationCurve[] curves = {new AnimationCurve(), new AnimationCurve(), new AnimationCurve(), new AnimationCurve(), new AnimationCurve()}; + #endregion + + #region GUI + [MenuItem("DreadTools/Utility/PhysBone Converter")] + public static void ShowWindow() => GetWindow("PhysBone Converter"); + + + public void OnGUI() + { + EditorGUIUtility.labelWidth = 90; + + using (new GUILayout.HorizontalScope(GUI.skin.box)) + targetRoot = (GameObject) EditorGUILayout.ObjectField(Helper.Content.root, targetRoot, typeof(GameObject), true); + + for (int i = 0; i < optionsCount; i++) + DrawFloatOption(i); + + using (new EditorGUI.DisabledScope(!targetRoot)) + if (GUILayout.Button("Convert", Helper.Styles.toolbarButton)) + Helper.ReportCall(StartConversion); + + + EditorGUIUtility.labelWidth = 0; + + Helper.Credit(); + } + + private static void DrawFloatOption(int index) + { + using (new GUILayout.HorizontalScope(GUI.skin.box)) + { + EditorGUILayout.PrefixLabel(names[index]); + if (!bools[index]) + { + floats[index] = EditorGUILayout.Slider(floats[index], 0f, 1f); + curves[index] = EditorGUILayout.CurveField(curves[index], GUILayout.Width(70)); + } + else GUILayout.FlexibleSpace(); + + var ogColor = GUI.backgroundColor; + GUI.backgroundColor = bools[index] ? Color.green : Color.red; + bools[index] = GUILayout.Toggle(bools[index], "Auto", GUI.skin.button, GUILayout.ExpandWidth(false)); + GUI.backgroundColor = ogColor; + } + } + + private void OnEnable() + { + targetRoot = targetRoot ?? FindObjectOfType()?.gameObject ?? FindObjectOfType()?.gameObject; + frictionField = typeof(DynamicBone).GetField("m_Friction"); + frictionDistribField = typeof(DynamicBone).GetField("m_FrictionDistrib"); + optionsCount = frictionField == null ? 4 : 5; + } + #endregion + + #region Main + public static void StartConversion() + { + if (!targetRoot) return; + colliderDictionary.Clear(); + var pbBones = targetRoot.GetComponentsInChildren(true); + var pbColliders = targetRoot.GetComponentsInChildren(true); + if (pbBones.Length == 0 && pbColliders.Length == 0) + { + Helper.GreenLog("No Physbones or colliders to convert."); + return; + } + + if (makeBackup) + { + var t = targetRoot.transform; + var backup = Instantiate(targetRoot, t.position, t.rotation, t.parent); + backup.name = backup.name.Replace(" (Backup)", string.Empty).Replace("(Clone)", " (Backup)"); + backup.SetActive(false); + } + + foreach (var c in pbColliders) ConvertCollider(c); + + //1 to 1 Replacement is rarely incorrect. + //In cases where there are multiple children of the PB and it's set to ignore, then each child needs its own DBone. + foreach (var pb in pbBones) ConvertPhysBone(pb); + + + foreach (var c in pbColliders) DestroyImmediate(c); + foreach (var pb in pbBones) DestroyImmediate(pb); + + Helper.GreenLog($"Finished conversion! Bones: {pbBones.Length} | Colliders: {pbColliders.Length}"); + } + + private static void ConvertCollider(VRCPhysBoneCollider pbc) + { + Transform rootTransform = pbc.GetRootTransform(); + string collidersName = $"{rootTransform.name} Colliders"; + GameObject colliderParent = rootTransform.Find(collidersName)?.gameObject; + if (!colliderParent) + { + colliderParent = new GameObject(collidersName) + { + transform = + { + parent = rootTransform, + localPosition = Vector3.zero, + localRotation = Quaternion.identity, + localScale = Vector3.one + } + }; + } + + GameObject colliderTarget = new GameObject("Collider") + { + transform = + { + parent = colliderParent.transform, + localPosition = pbc.position, + localRotation = pbc.rotation, + localScale = Vector3.one + } + }; + GameObjectUtility.EnsureUniqueNameForSibling(colliderTarget); + + bool isPlane = pbc.shapeType == VRC.Dynamics.VRCPhysBoneColliderBase.ShapeType.Plane; + + DynamicBoneColliderBase baseCollider; + if (isPlane) baseCollider = colliderTarget.AddComponent(); + else baseCollider = colliderTarget.AddComponent(); + + + baseCollider.m_Bound = (DynamicBoneColliderBase.Bound) (pbc.insideBounds ? 1 : 0); + baseCollider.m_Center = Vector3.zero; + baseCollider.m_Direction = DynamicBoneColliderBase.Direction.Y; + + if (!isPlane) + { + var collider = (DynamicBoneCollider)baseCollider; + collider.m_Radius = pbc.radius; + collider.m_Height = pbc.height; + } + + colliderDictionary.Add(pbc, baseCollider); + } + + private static void ConvertPhysBone(VRCPhysBone pb) + { + var dbone = pb.gameObject.AddComponent(); + dbone.m_Root = pb.GetRootTransform(); + float scaleFactor = (Mathf.Abs(dbone.transform.lossyScale.x / dbone.m_Root.lossyScale.x)); + + + dbone.m_Damping = bools[0] ? 1 - pb.spring : floats[0]; + dbone.m_DampingDistrib = bools[0] ? InvertCurve(pb.springCurve) : curves[0]; + dbone.m_Elasticity = bools[1] ? pb.pull : floats[1]; + dbone.m_ElasticityDistrib = bools[1] ? pb.pullCurve : curves[1]; + dbone.m_Inert = bools[3] ? pb.immobile : floats[3]; + dbone.m_InertDistrib = bools[3] ? pb.immobileCurve : curves[3]; + if (!bools[4]) + { + frictionField.SetValue(dbone, floats[4]); + frictionDistribField.SetValue(dbone, curves[4]); + } + + dbone.m_Radius = pb.radius / scaleFactor; + dbone.m_RadiusDistrib = pb.radiusCurve; + dbone.m_Gravity = new Vector3(0, -pb.gravity / 10f, 0); + + //Better Limit conversion, such as Hinge to Freeze Axis, can be done, but not all possibilities with PhysBone limits can be achieved. + if (bools[2]) + { + dbone.m_Stiffness = 0; + if (pb.limitType == VRC.Dynamics.VRCPhysBoneBase.LimitType.Angle) + { + bool hasAnglecurve = pb.maxAngleXCurve != null && pb.maxAngleXCurve.keys.Length > 0; + dbone.m_Stiffness = hasAnglecurve ? 1 : AngleToStiffnessCurve.Evaluate(pb.maxAngleX); + + dbone.m_StiffnessDistrib = SmoothCurveTangents(DeriveCurve(SubdivideCurve(pb.maxAngleXCurve, 10, false), k => + { + k.value = AngleToStiffnessCurve.Evaluate(k.value * 180); + return k; + })); + } + } + else + { + dbone.m_Stiffness = floats[2]; + dbone.m_StiffnessDistrib = curves[2]; + } + + dbone.m_Exclusions = pb.ignoreTransforms; + dbone.m_Colliders = pb.colliders.Cast() + .Where(pbc => pbc && colliderDictionary.ContainsKey(pbc)) + .Select(pbc => colliderDictionary[pbc]).ToList(); + + + if (pb.endpointPosition != Vector3.zero) + { + foreach (var t in dbone.m_Root.GetComponentsInChildren().Where(t => t.childCount == 0 && !IsExcluded(t, dbone.m_Exclusions))) + { + GameObjectUtility.EnsureUniqueNameForSibling(new GameObject($"{t.name} EndBone") + { + transform = + { + parent = t, + position = t.TransformPoint(pb.endpointPosition), + localRotation = Quaternion.identity, + localScale = Vector3.one, + } + }); + } + } + + //Dunno if this optimizes anything in-game but aye better than nothing + dbone.m_DistantDisable = true; + dbone.m_ReferenceObject = targetRoot.transform; + } + + private static bool IsExcluded(Transform t, IEnumerable exclusions) => exclusions.Any(e => e != null && t.IsChildOf(e)); + #endregion + + #region Curve Functions + private static AnimationCurve SmoothCurveTangents(AnimationCurve curve) + { + if (curve == null) return null; + for (int i = 0; i < curve.keys.Length; i++) + curve.SmoothTangents(i, 0); + return curve; + } + private static AnimationCurve DeriveCurve(AnimationCurve curve, Func KeyFunc) + { + if (curve == null) return null; + int length = curve.keys.Length; + + var newKeys = new Keyframe[length]; + for (int i = 0; i < length; i++) + newKeys[i] = KeyFunc(curve.keys[i]); + + return new AnimationCurve(newKeys); + } + private static AnimationCurve InvertCurve(AnimationCurve curve) => + DeriveCurve(curve, k => + { + k.value = -k.value; + k.inTangent = -k.inTangent; + k.outTangent = -k.outTangent; + return k; + }); + private static AnimationCurve SubdivideCurve(AnimationCurve curve, int keyLimit = 10, bool smoothCurve = true) + { + if (curve == null) return null; + if (curve.length <= 1) return curve; + List keys = new List(curve.keys); + if (keys.Count > 1) + { + while (keys.Count < keyLimit) + { + var currentKeys = keys.OrderBy(k => k.time).ToList(); + for (int i = 0; i < currentKeys.Count - 1 && keys.Count < keyLimit; i++) + { + var time = (currentKeys[i].time + currentKeys[i + 1].time) / 2; + keys.Add(new Keyframe(time, curve.Evaluate(time))); + } + } + } + + + var newCurve = new AnimationCurve(keys.ToArray()); + if (smoothCurve) SmoothCurveTangents(newCurve); + return newCurve; + } + private static void LogCurve(AnimationCurve curve) + { + Debug.Log(string.Join("\n", curve.keys.Select(k => k.time).Zip(curve.keys.Select(k => k.value), (t, v) => $"Time: {t} | Value: {v}"))); + } + #endregion + } + public static class Helper + { + + internal static void ReportCall(Action action) + { + try { action(); } + catch (Exception e) + { + string errorMSG = $"{e.Message}\n\n{e.StackTrace}"; + if (EditorUtility.DisplayDialog("Error!", $"An unexpected error has occured and execution was halted. Please Press Copy and report this stack trace to Dreadrith#3238\n~~~~~~~~~~~~\n{errorMSG}", "Copy", "Nah")) + EditorGUIUtility.systemCopyBuffer = errorMSG; + throw; + } + } + + internal static void Credit() + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made By Dreadrith#3238", "boldlabel")) + Application.OpenURL("https://linktr.ee/Dreadrith"); + } + } + + private const string logName = "PBConverter"; + internal static void GreenLog(string msg) => + Debug.Log($"[{logName}] {msg}"); + + public static class Styles + { + public static readonly GUIStyle toolbarButton = GUI.skin.GetStyle("toolbarbutton"); + public static readonly GUIStyle box = GUI.skin.GetStyle("box"); + } + + public static class Content + { + public static readonly GUIContent root = new GUIContent("Root", "The Root. Will convert all the PhysBones and Colliders under this root."); + } + + } + +} diff --git a/PhysBone-Converter/Editor/PhysBoneConverter.cs.meta b/PhysBone-Converter/Editor/PhysBoneConverter.cs.meta new file mode 100644 index 0000000..16f9133 --- /dev/null +++ b/PhysBone-Converter/Editor/PhysBoneConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5362ab9190648fc4fa4a11324829ab0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter/Instructions.txt b/PhysBone-Converter/Instructions.txt new file mode 100644 index 0000000..cd44528 --- /dev/null +++ b/PhysBone-Converter/Instructions.txt @@ -0,0 +1,20 @@ +//Made by Dreadrith#3238 +//Discord: https://discord.gg/ZsPfrGn +//Github: https://github.com/Dreadrith/DreadScripts +//Gumroad: https://gumroad.com/dreadrith +//Ko-fi: https://ko-fi.com/dreadrith + +This tool will convert your PhysBones and PBColliders to DynamicBones and DBColliders. +Of course, it's not perfect but it does almost the inverse conversion of PhysBones. + +How to use +---------- +Find the tool's window near the top left corner of Unity under +DreadTools > Utility > PhysBone Converter + +1- Make sure that your avatar or root is correctly set as "Root". +2- Press Convert. Done! + +You can optionally disable the "Auto" option for any setting and set your own value and curve. +This will be the same value across all DynamicBones + diff --git a/PhysBone-Converter/Instructions.txt.meta b/PhysBone-Converter/Instructions.txt.meta new file mode 100644 index 0000000..2169a80 --- /dev/null +++ b/PhysBone-Converter/Instructions.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 54d64c9949521fa468c6dbab8670364f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter/LICENSE.md b/PhysBone-Converter/LICENSE.md new file mode 100644 index 0000000..af6fc40 --- /dev/null +++ b/PhysBone-Converter/LICENSE.md @@ -0,0 +1,2 @@ +This work is licensed under the Creative Commons Attribution-NonCommercial 2.0 License. +To view a copy of the license, visit https://creativecommons.org/licenses/by-nc/2.0/legalcode \ No newline at end of file diff --git a/PhysBone-Converter/LICENSE.md.meta b/PhysBone-Converter/LICENSE.md.meta new file mode 100644 index 0000000..932e1da --- /dev/null +++ b/PhysBone-Converter/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 29f9273871992164daf47069bf15ea30 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter/README.md b/PhysBone-Converter/README.md new file mode 100644 index 0000000..fc01076 --- /dev/null +++ b/PhysBone-Converter/README.md @@ -0,0 +1,32 @@ +# PhysBone Converter +This tool will convert your PhysBones and PBColliders to DynamicBones and DBColliders.
+Of course, it's not perfect but it does almost the inverse conversion of PhysBones.

+Download here

+![window](https://raw.githubusercontent.com/Dreadrith/DreadScripts/main/Other/Info_Source/PhysBoneConverter/toolwindow.png) + +# How to use +Prerequisites: VRCAvatars SDK & Dynamic Bone OR Dynamic Bone Stub
+ +Find the tool's window near the top left corner of Unity under
+DreadTools > Utility > PhysBone Converter + +1- Make sure that your avatar or root is correctly set as "Root".
+2- Press Convert. Done! + +You can optionally disable the "Auto" option for any setting and set your own value and curve.
+This will be the same value across all DynamicBones

+![showcase](https://raw.githubusercontent.com/Dreadrith/DreadScripts/main/Other/Info_Source/PhysBoneConverter/showcase.gif) + +# Potential Issues +Issue: DreadTools button doesn't appear on the top toolbar
+Solution: Your project has a script error which prevents new scripts from loading. Check your console for errors and read them for details about what's causing them. Below are some common errors + +Issue: Error: the type or namespace name 'DynamicBoneColliderBase' could not be found.
+Solution: You either don't have Dynamic Bones or your dynamic bones version doesn't match the one this script is made for. This was made for 1.2.x as it's the most common version. Try using the Dynamic Bone Stub listed above instead + +Issue: Error: The type or namespace name 'VRCPhysBoneCollider' could not be found
+Issue: Error: 'VRCPhysBone' does not contain a definition for 'maxAngleXCurve'...
+Solution: Both of these can be solved with importing the proper Avatars VRCSDK. Currently, the latest Avatars VRCSDK should work. + +Issue: The Dynamic Bones aren't acting the same as how PhysBones were.
+Sadly, Dynamic Bones don't function the same as PhysBones and have less features. As such, they will behave differently and in some uncommon cases even look broken in comparison. This may be improved with manual tweaking. diff --git a/PhysBone-Converter/README.md.meta b/PhysBone-Converter/README.md.meta new file mode 100644 index 0000000..368f9fd --- /dev/null +++ b/PhysBone-Converter/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3fc128096b1a3c34cb474729e4bc841f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PhysBone-Converter/package.json b/PhysBone-Converter/package.json new file mode 100644 index 0000000..9276cfd --- /dev/null +++ b/PhysBone-Converter/package.json @@ -0,0 +1,23 @@ +{ + "name": "com.dreadrith.physboneconverter", + "displayName": "DreadTools - PhysBone Converter", + "version": "1.0.3", + "unity": "2019.4", + "description": "Converts PhysBones to DynamicBones to the best of my capability", + "keywords": [ + "Dreadrith", + "DreadScripts", + "DreadTools", + "VRChat", + "ChilloutVR" + "Tool", + "Converter", + "Conversion", + "DynamicBone" + ], + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://linktr.ee/Dreadrith" + } +} \ No newline at end of file diff --git a/PhysBone-Converter/package.json.meta b/PhysBone-Converter/package.json.meta new file mode 100644 index 0000000..e9453d2 --- /dev/null +++ b/PhysBone-Converter/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1562724099a9d24a8757ab714f67242 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle.meta b/QuickToggle.meta new file mode 100644 index 0000000..fba2e4d --- /dev/null +++ b/QuickToggle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1969d984bcccc7744ab94b84eb2f6f1d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/CHANGELOG.md b/QuickToggle/CHANGELOG.md new file mode 100644 index 0000000..bcad480 --- /dev/null +++ b/QuickToggle/CHANGELOG.md @@ -0,0 +1,17 @@ +v1.6.1 +------ +- [Fix] Added assembly definition which allows the package to actually compile +- [Misc] Defined minimal unity version + +v1.6.0 +------ +- [Improvement] Updated VPM Format + +v1.5.1 +------ +- [Feature] Added 'Write Defaults' Option for making a toggle +- [Improvement] Migrated to VPM Format + +v1.5.0 +------ +- [Feature] Added VRC support to quickly add a toggle diff --git a/QuickToggle/CHANGELOG.md.meta b/QuickToggle/CHANGELOG.md.meta new file mode 100644 index 0000000..b31def0 --- /dev/null +++ b/QuickToggle/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2236364181b3da64cbcee7bf193d7d0b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/Editor.meta b/QuickToggle/Editor.meta new file mode 100644 index 0000000..58fca15 --- /dev/null +++ b/QuickToggle/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 902ff8ac2ea082648a2d0fa88cd0a3c1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/Editor/QuickToggle.cs b/QuickToggle/Editor/QuickToggle.cs new file mode 100644 index 0000000..c20cdf2 --- /dev/null +++ b/QuickToggle/Editor/QuickToggle.cs @@ -0,0 +1,1113 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEditor.Animations; +using VRC.SDK3.Avatars.Components; +using VRC.SDK3.Avatars.ScriptableObjects; +using Object = UnityEngine.Object; + +namespace DreadScripts.QuickToggle +{ + public class QuickToggle : EditorWindow + { + #region VRC + +#if VRC_SDK_VRCSDK3 + private static VRCAvatarDescriptor avatar; + private static VRCExpressionsMenu menu; + private static VRCToggleFlags vrcAddFlags = VRCToggleFlags.All; + private static string _parameter = "Toggle"; + + private static string parameter + { + get => _parameter; + set + { + if (_parameter == value) return; + _parameter = value; + RefreshUniqueParameter(); + } + } + + private static bool uniqueParameter = true; + private static bool useWriteDefaults = false; + private enum VRCToggleFlags + { + None = 0, + FX = 1 << 0, + Menu = 1 << 1, + Parameters = 1 << 2, + All = ~0 + } +#endif + + #endregion + + #region Private Variables + + private static bool init; + private static bool clipValid = false; + private static string folderPath; + + private static UnityEditorInternal.ReorderableList targetList; + private static Vector2 scroll; + + public static int toolbarIndex; + private static readonly string[] toolbarOptions = {"Toggle", "Blendshape", "Settings"}; + private const string PREF_KEY = "QuickToggleDataKey"; + + private enum BlendClipMode + { + SingleClip, + ClipPerRenderer, + ClipPerBlendshape + } + + #endregion + + #region Input + + public static GameObject _root; + + public static GameObject root + { + get => _root; + set + { + if (_root == value) return; + _root = value; + OnRootChanged(); + } + } + + public static List targets = new List(); + + private static List skinnedRenderers = new List() {new SkinnedShapeSlot()}; + + public static string clipName; + + #endregion + + #region Settings + + [SerializeField] private int frameSpan = 1; + [SerializeField] private bool loopTime; + [SerializeField] private bool pingFolder = true; + [SerializeField] private bool autoClose = true; + [SerializeField] private string savePath = "Assets/DreadScripts/Quick Actions/Quick Toggle/Generated Clips"; + + private static bool autoName = true; + private static bool individualToggle; + private static bool createOpposite = true; + private static bool useAllShapes; + private static BlendClipMode shapeClipMode = BlendClipMode.SingleClip; + + #endregion + + [MenuItem("DreadTools/Quick Toggle", false, 840)] + [MenuItem("GameObject/Quick Toggle", false, -10)] + public static void ShowWindow() + { + GetWindow(); + GameObject[] targetObjs = Selection.GetFiltered(SelectionMode.Editable); + targets = targetObjs.Select(t => new ToggleObject(t)).ToList(); + skinnedRenderers = targetObjs.Select(t => new SkinnedShapeSlot(t.GetComponent())).Where(s => s.renderer).ToList(); + + GameObject[] selectedObj = Selection.GetFiltered(SelectionMode.TopLevel); + if (!root && selectedObj.Length > 0) + root = selectedObj[0].transform.root.gameObject; + +#if VRC_SDK_VRCSDK3 + if (!root) root = FindObjectOfType()?.gameObject; +#endif + + if (autoName) + { + clipName = string.Empty; + switch (targetObjs.Length) + { + case 0: + clipName = "Objects"; + break; + case 1: + clipName = targetObjs[0].name; + +#if VRC_SDK_VRCSDK3 + parameter = clipName; +#endif + + break; + + default: + { + for (int i = 0; i < targetObjs.Length; i++) + { + int letterCount = Mathf.Clamp(7 - targetObjs.Length, 2, 5); + clipName += targetObjs[i].name.Substring(0, Mathf.Clamp(letterCount, 1, targetObjs[i].name.Length)); + if (i != targetObjs.Length - 1) + clipName += "-"; + } + +#if VRC_SDK_VRCSDK3 + parameter = clipName; +#endif + + break; + } + } + + clipName += " Enable"; + } + + CheckIfValid(); + init = false; + + } + + private static QuickToggle GetWindow() => GetWindow(false, "Quick Toggle", true); + + #region Main GUI Methods + + private void OnGUI() + { + if (!init) + RefreshList(); + + toolbarIndex = GUILayout.Toolbar(toolbarIndex, toolbarOptions, EditorStyles.toolbarButton); + scroll = EditorGUILayout.BeginScrollView(scroll); + + switch (toolbarIndex) + { + case 0: + case 1: + DrawCreatorGUI(); + break; + case 2: + DrawSettingsGUI(); + break; + } + + + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made by Dreadrith#3238", "boldlabel")) + Application.OpenURL("https://github.com/Dreadrith/DreadScripts"); + } + + EditorGUILayout.EndScrollView(); + + if (!init) + { + GUI.FocusControl("CreateClip"); + init = true; + } + + if (GUI.GetNameOfFocusedControl() == "CreateClip" && Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter)) + { + StartCreateClip(false); + } + } + + private void DrawCreatorGUI() + { + bool creatingToggle = toolbarIndex == 0; + + using (new GUILayout.VerticalScope(EditorStyles.helpBox)) + { + +#if VRC_SDK_VRCSDK3 + bool showAvatarField = avatar && creatingToggle; + EditorGUI.BeginChangeCheck(); + Object tempObject = EditorGUILayout.ObjectField(showAvatarField ? "Avatar" : "Root", showAvatarField ? (Object) avatar : (Object) root, showAvatarField ? typeof(VRCAvatarDescriptor) : typeof(GameObject), true); + if (EditorGUI.EndChangeCheck()) + { + avatar = tempObject as VRCAvatarDescriptor; + if (avatar) root = avatar.gameObject; + else root = (GameObject) tempObject; + } +#else + root = (GameObject)EditorGUILayout.ObjectField( "Root", root, typeof(GameObject), true); +#endif + } + + using (new GUILayout.VerticalScope(EditorStyles.helpBox)) + { + if (creatingToggle) targetList.DoLayoutList(); + else + { + + for (int i = 0; i < skinnedRenderers.Count; i++) + skinnedRenderers[i].Draw(); + + if (GUILayout.Button("Add Skinned Renderer")) skinnedRenderers.Add(new SkinnedShapeSlot()); + + + } + } + + EditorGUILayout.Space(); + + using (new GUILayout.VerticalScope(EditorStyles.helpBox)) + { + + + using (new GUILayout.HorizontalScope()) + { + using (new GUILayout.VerticalScope()) + { + DoToggle(ref createOpposite, Styles.createOppositeContent); + using (new GUILayout.VerticalScope()) clipName = EditorGUILayout.TextField("Clip Name", clipName); + using (new EditorGUI.DisabledScope(creatingToggle)) + shapeClipMode = (BlendClipMode) EditorGUILayout.EnumPopup("Clip Mode", shapeClipMode); + } + + using (new GUILayout.VerticalScope()) + { + using (new EditorGUI.DisabledScope(!creatingToggle)) + { + DoToggle(ref individualToggle, Styles.individualToggleContent); + autoName = EditorGUILayout.Toggle(new GUIContent("AutoName", "Automatically generate a clip name when using context menu button"), autoName); + } + using (new EditorGUI.DisabledScope(creatingToggle || shapeClipMode == BlendClipMode.ClipPerBlendshape)) + DoToggle(ref useAllShapes, Styles.useAllShapesContent); + + } + } + + } + + EditorGUILayout.Space(); + +#if VRC_SDK_VRCSDK3 + if (avatar && creatingToggle) + { + using (new GUILayout.HorizontalScope(EditorStyles.helpBox)) + { + using (new GUILayout.VerticalScope()) + { + using (new EditorGUI.DisabledScope(!creatingToggle || !avatar)) + vrcAddFlags = (VRCToggleFlags) EditorGUILayout.EnumFlagsField("Add To", vrcAddFlags); + + using (new EditorGUI.DisabledScope(!vrcAddFlags.HasFlag(VRCToggleFlags.Menu))) + menu = (VRCExpressionsMenu) EditorGUILayout.ObjectField("Target Menu", menu, typeof(VRCExpressionsMenu), false); + } + + using (new GUILayout.VerticalScope()) + { + using (new GUILayout.HorizontalScope()) + { + using (new EditorGUI.DisabledScope(!creatingToggle || !avatar || vrcAddFlags == VRCToggleFlags.None)) + parameter = EditorGUILayout.TextField("Parameter", parameter); + + if (!avatar) GUILayout.Label(Styles.noteIcon, GUILayout.Width(18)); + + + var og = GUI.backgroundColor; + GUI.backgroundColor = uniqueParameter ? Color.green : Color.grey; + + EditorGUI.BeginChangeCheck(); + using (new EditorGUI.DisabledScope(vrcAddFlags == VRCToggleFlags.None)) + uniqueParameter = GUILayout.Toggle(uniqueParameter, "Unique", GUI.skin.button, GUILayout.ExpandWidth(false)); + if (EditorGUI.EndChangeCheck()) RefreshUniqueParameter(); + + GUI.backgroundColor = og; + } + + useWriteDefaults = EditorGUILayout.Toggle("Write Defaults", useWriteDefaults); + + } + } + + EditorGUILayout.Space(); + } +#endif + + + + + GUI.SetNextControlName("CreateClip"); + + using (new EditorGUI.DisabledScope(string.IsNullOrWhiteSpace(clipName))) + { + if (creatingToggle) + { + using (new EditorGUI.DisabledScope(!clipValid)) + if (GUILayout.Button("Create Toggle Clip", EditorStyles.toolbarButton)) + StartCreateClip(false); + } + else + using (new EditorGUI.DisabledScope(!skinnedRenderers.Any(sr => sr.renderer))) + if (GUILayout.Button("Create Blendshape Clip", EditorStyles.toolbarButton)) + StartCreateClip(true); + } + + } + + private void DrawSettingsGUI() + { + using (new GUILayout.HorizontalScope(EditorStyles.helpBox)) + { + using (new GUILayout.VerticalScope()) + { + frameSpan = Mathf.Max(1, EditorGUILayout.IntField(new GUIContent("Clip Length", "The length of the animation clip in frames (60 fps)"), frameSpan)); + autoClose = EditorGUILayout.Toggle(new GUIContent("Close Window", "Close window upon clip creation."), autoClose); + } + + using (new GUILayout.VerticalScope()) + { + loopTime = EditorGUILayout.Toggle(new GUIContent("Loop Time", "Sets loop time to true on the created clips."), loopTime); + pingFolder = EditorGUILayout.Toggle(new GUIContent("Ping Folder", "Automatically highlights the folder where the clips were generated"), pingFolder); + } + } + + EditorGUILayout.LabelField(string.Empty, GUI.skin.horizontalSlider); + savePath = DSHelper.AssetFolderPath(savePath, "Generated Assets Path"); + + } + + #endregion + + #region Main Methods + + public void StartCreateClip(bool isBlendshapes) + { +#if VRC_SDK_VRCSDK3 + if (!isBlendshapes) + { + RefreshUniqueParameter(); + + void VRCWarningCheck(string msg, bool condition) + { + if (!condition) return; + EditorUtility.DisplayDialog("Warning", msg, "Ok"); + throw new Exception(msg); + } + + VRCWarningCheck("FX Controller not set in Avatar Descriptor.", vrcAddFlags.HasFlag(VRCToggleFlags.FX) && avatar.GetPlayableLayer(VRCAvatarDescriptor.AnimLayerType.FX) == null); + + int addCount = individualToggle ? targets.Count(o => o.valid) : 1; + + if (vrcAddFlags.HasFlag(VRCToggleFlags.Parameters)) + { + VRCWarningCheck("Expression Parameters not set in Avatar Descriptor", vrcAddFlags.HasFlag(VRCToggleFlags.Parameters) && avatar.expressionParameters == null); + + if (avatar.expressionParameters.parameters == null) + { + avatar.expressionParameters.parameters = Array.Empty(); + EditorUtility.SetDirty(avatar.expressionParameters); + } + + VRCWarningCheck($"Expression Parameters requires {addCount}/256 free memory.", avatar.expressionParameters.CalcTotalCost() + addCount > 256); + } + + if (vrcAddFlags.HasFlag(VRCToggleFlags.Menu)) + { + VRCWarningCheck("No Target Menu set.", vrcAddFlags.HasFlag(VRCToggleFlags.Menu) && menu == null); + VRCWarningCheck("Cannot add more than 8 toggles to an expression menu!", addCount > 8); + VRCWarningCheck($"Target Menu requires {addCount}/8 free control slots.", menu.controls.Count + addCount > 8); + } + + + + } +#endif + DSHelper.ReadyPath(savePath); + folderPath = savePath + "/" + root.name; + DSHelper.ReadyPath(folderPath); + + if (isBlendshapes) + CreateBlendshapeClips(); + else CreateToggleClips(); + + if (autoClose) Close(); + } + + private void CreateToggleClips() + { + AnimationClip currentClip = new AnimationClip(); + + foreach (ToggleObject obj in targets.Where(o => o != null && o.valid)) + { + string path = AnimationUtility.CalculateTransformPath(obj.gameObject.transform, root.transform); + + System.Type myType = obj.GetActive().GetType(); + + currentClip.SetCurve(path, myType, myType == typeof(GameObject) ? "m_IsActive" : "m_Enabled", new AnimationCurve {keys = new Keyframe[] {new Keyframe {time = 0, value = obj.active ? 1 : 0}, new Keyframe {time = frameSpan / 60f, value = obj.active ? 1 : 0}}}); + + if (individualToggle) + { + SaveClip(currentClip, $" {obj.gameObject.name}", false); + RefreshUniqueParameter(); + currentClip = new AnimationClip(); + } + } + + if (!individualToggle) + SaveClip(currentClip, string.Empty, false); + + if (pingFolder) + EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath(folderPath)); + } + + private void CreateBlendshapeClips() + { + AnimationClip GetNewClip() + { + AnimationClip newClip = new AnimationClip(); + return newClip; + } + + + AnimationClip currentClip = null; + for (int i = 0; i < skinnedRenderers.Count; i++) + { + if (!skinnedRenderers[i].renderer) + continue; + string renderPath = AnimationUtility.CalculateTransformPath(skinnedRenderers[i].renderer.transform, root.transform); + if ((shapeClipMode == BlendClipMode.ClipPerRenderer) || i == 0) + currentClip = GetNewClip(); + bool anyShapeUsed = false; + for (int j = 0; j < skinnedRenderers[i].shapes.Count; j++) + { + SkinnedShape shape = skinnedRenderers[i].shapes[j]; + if (shape.value > 0 || (useAllShapes && shapeClipMode != BlendClipMode.ClipPerBlendshape)) + { + anyShapeUsed = true; + currentClip.SetCurve(renderPath, typeof(SkinnedMeshRenderer), "blendShape." + shape.name, new AnimationCurve() {keys = new Keyframe[] {new Keyframe(0, shape.value), new Keyframe(frameSpan / 60f, shape.value)}}); + if (shapeClipMode == BlendClipMode.ClipPerBlendshape) + { + SaveClip(currentClip, " " + shape.name, true); + currentClip = GetNewClip(); + } + } + } + + if (shapeClipMode == BlendClipMode.ClipPerRenderer && anyShapeUsed) + { + SaveClip(currentClip, " " + skinnedRenderers[i].renderer.gameObject.name, true); + currentClip = GetNewClip(); + } + + } + + if (shapeClipMode == BlendClipMode.SingleClip) + SaveClip(currentClip, string.Empty, true); + if (pingFolder) + EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath(folderPath)); + } + + private AnimationClip CreateOppositeClip(AnimationClip c, string clipPath, bool isBlendshapeClip) + { + AnimationClip newClip = new AnimationClip(); + EditorUtility.CopySerialized(c, newClip); + EditorCurveBinding[] bindings = AnimationUtility.GetCurveBindings(newClip); + foreach (var b in bindings) + { + int myValue = isBlendshapeClip || AnimationUtility.GetEditorCurve(c, b)[0].value != 0 ? 0 : 1; + newClip.SetCurve(b.path, b.type, b.propertyName, new AnimationCurve() {keys = new Keyframe[] {new Keyframe(0, myValue), new Keyframe(frameSpan / 60f, myValue)}}); + } + + string oppPath = AssetDatabase.GenerateUniqueAssetPath(clipPath.Substring(0, clipPath.Length - 5) + " Opp.anim"); + SaveClip(newClip, oppPath); + return newClip; + } + + private void SaveClip(AnimationClip c, string suffix, bool isBlendShapeClip) + { + AnimationClip onClip = c, offClip = null; + string path = AssetDatabase.GenerateUniqueAssetPath($"{folderPath}/{clipName}{suffix}.anim"); + SaveClip(c, path); + + if (createOpposite) offClip = CreateOppositeClip(c, path, isBlendShapeClip); + +#if VRC_SDK_VRCSDK3 + DoVRCToggle(onClip, offClip); +#endif + } + + private void SaveClip(AnimationClip c, string path) + { + AssetDatabase.CreateAsset(c, path); + Debug.Log("[Quick Toggle] " + System.IO.Path.GetFileNameWithoutExtension(path) + " Created."); + EnableLoopTime(c); + } + + private void EnableLoopTime(AnimationClip c) + { + if (!loopTime) return; + AnimationClipSettings settings = AnimationUtility.GetAnimationClipSettings(c); + settings.loopTime = true; + AnimationUtility.SetAnimationClipSettings(c, settings); + } + +#if VRC_SDK_VRCSDK3 + private void DoVRCToggle(AnimationClip onClip, AnimationClip offClip) + { + if (vrcAddFlags == VRCToggleFlags.None) return; + if (vrcAddFlags.HasFlag(VRCToggleFlags.FX)) + { + AnimatorController c = avatar.GetPlayableLayer(VRCAvatarDescriptor.AnimLayerType.FX); + if (!c) throw new NullReferenceException("Unexpected Error! FX Controller not found!"); + else + { + c.AddParameter(parameter, AnimatorControllerParameterType.Bool); + + AnimatorControllerLayer newLayer = c.AddLayer(parameter, 1); + AnimationClip buffer = ReadyBuffer(); + AnimatorStateMachine m = newLayer.stateMachine; + + m.exitPosition = Vector3.zero; + m.anyStatePosition = new Vector3(0, 40); + m.entryPosition = new Vector3(0, 80); + + AnimatorState idleState = m.AddState("Idle", new Vector3(-20, 140)); + AnimatorState onState = m.AddState($"{parameter} On", new Vector3(-140, 240)); + AnimatorState offState = m.AddState($"{parameter} Off", new Vector3(100, 240)); + idleState.writeDefaultValues = onState.writeDefaultValues = offState.writeDefaultValues = useWriteDefaults; + + idleState.writeDefaultValues = onState.writeDefaultValues = offState.writeDefaultValues; + + idleState.motion = buffer; + onState.motion = onClip; + offState.motion = offClip; + + AnimatorStateTransition DoTransition(AnimatorState source, AnimatorState destination, bool state) + { + var t = source.AddTransition(destination); + t.hasExitTime = false; + t.duration = 0; + t.AddCondition(state ? AnimatorConditionMode.If : AnimatorConditionMode.IfNot, 0, parameter); + return t; + } + + DoTransition(idleState, onState, true).offset = 1; + DoTransition(idleState, offState, false).offset = 1; + + DoTransition(offState, onState, true); + DoTransition(onState, offState, false); + } + + } + + if (vrcAddFlags.HasFlag(VRCToggleFlags.Parameters)) + { + var so = new SerializedObject(avatar.expressionParameters); + var prop = so.FindProperty("parameters"); + + prop.arraySize++; + var elem = prop.GetArrayElementAtIndex(prop.arraySize - 1); + elem.FindPropertyRelative("name").stringValue = parameter; + elem.FindPropertyRelative("valueType").enumValueIndex = 2; + elem.FindPropertyRelative("saved").boolValue = true; + elem.FindPropertyRelative("defaultValue").floatValue = 0; + + so.ApplyModifiedPropertiesWithoutUndo(); + } + + if (vrcAddFlags.HasFlag(VRCToggleFlags.Menu)) + { + if (menu.controls == null) + menu.controls = new List(); + + var newControl = new VRCExpressionsMenu.Control + { + name = parameter, + parameter = new VRCExpressionsMenu.Control.Parameter() { name = parameter }, + type = VRCExpressionsMenu.Control.ControlType.Toggle, + value = 1 + }; + menu.controls.Add(newControl); + EditorUtility.SetDirty(menu); + } + } + + private AnimationClip ReadyBuffer() + { + string bufferPath = $"{savePath}/1 Frame Buffer.anim"; + AnimationClip buffer = AssetDatabase.LoadAssetAtPath(bufferPath); + if (buffer) return buffer; + buffer = new AnimationClip(); + buffer.SetCurve("_Buffer", typeof(GameObject), "m_IsActive", new AnimationCurve(new Keyframe(0, 0), new Keyframe(1 / 60f, 0))); + AssetDatabase.CreateAsset(buffer, bufferPath); + return buffer; + } +#endif + + private static void GreenLog(string msg, bool condition = true) + { + if (condition) Debug.Log($"[QuickToggle] {msg}"); + } + private static void RedLog(string msg, bool condition = true) + { + if (condition) Debug.Log($"[QuickToggle] {msg}"); + } + #endregion + + #region Automated Methods + + private static void AutoRename() + { + if (!autoName || targets.Count == 0) + return; + if (string.IsNullOrEmpty(clipName)) + return; + + string statusName = ""; + bool enabled = false, disabled = false; + foreach (var t in targets) + { + if (t.gameObject) + if (t.active) + { + enabled = true; + statusName = " Enable"; + } + else + { + disabled = true; + statusName = " Disable"; + } + + if (enabled && disabled) + { + statusName = " Toggle"; + break; + } + } + + if (clipName == (clipName = Regex.Replace(clipName, " enable", statusName, RegexOptions.IgnoreCase))) + { + if (clipName == (clipName = Regex.Replace(clipName, " disable", statusName, RegexOptions.IgnoreCase))) + { + clipName = Regex.Replace(clipName, " toggle", statusName, RegexOptions.IgnoreCase); + } + } + + } + + private static void OnRootChanged() + { +#if VRC_SDK_VRCSDK3 + avatar = root?.GetComponent(); + if (avatar != null) menu = avatar.expressionsMenu; +#endif + CheckIfValid(); + } + + private static void CheckIfValid() + { + clipValid = root; + if (!root) return; + foreach (ToggleObject obj in targets) + obj.valid = obj.gameObject && obj.gameObject.transform.IsChildOf(root.transform); + + clipValid = targets.All(t => t.valid); + } + +#if VRC_SDK_VRCSDK3 + private static void RefreshUniqueParameter() + { + if (!uniqueParameter) return; + if (!avatar || string.IsNullOrEmpty(_parameter) || + vrcAddFlags == VRCToggleFlags.None || + vrcAddFlags == VRCToggleFlags.Menu) return; + + if (avatar.expressionParameters && avatar.expressionParameters.parameters != null) + _parameter = DSHelper.GenerateUniqueString(_parameter, s => avatar.expressionParameters.parameters.All(p => p.name != s)); + + foreach (var c in avatar.baseAnimationLayers.Concat(avatar.specialAnimationLayers).Where(p => !p.isDefault).Select(p => p.animatorController as AnimatorController).Where(c => c)) + _parameter = DSHelper.GenerateUniqueString(_parameter, s => c.parameters.All(p => p.name != s)); + + } +#endif + + private void OnEnable() + { + this.Load(PREF_KEY); + + RefreshList(); + CheckIfValid(); + init = false; + } + + private void OnDisable() => this.Save(PREF_KEY); + + #endregion + + #region Extra GUI Methods + + private static string CutString(string s, int maxLength) + => s.Length <= maxLength ? s : s.Substring(0, maxLength - 3) + "..."; + + private static void DoToggle(ref bool b, GUIContent label) => b = EditorGUILayout.Toggle(label, b); + + private void DrawHeader(Rect rect) + { + EditorGUI.LabelField(rect, "Targets"); + + if (GUI.Button(new Rect(rect.width - 10, rect.y + 2, 20, EditorGUIUtility.singleLineHeight), Styles.switchIcon, GUIStyle.none)) + { + foreach (ToggleObject obj in targets) + obj.active = !obj.active; + AutoRename(); + } + } + + private void DrawElement(Rect rect, int index, bool isActive, bool isFocused) + { + if (!(index < targets.Count && index >= 0)) + return; + if (GUI.Button(new Rect(rect.x, rect.y + 2, 20, EditorGUIUtility.singleLineHeight), "X")) + { + targets.RemoveAt(index); + CheckIfValid(); + AutoRename(); + return; + } + + ToggleObject toggleObj = targets[index]; + Rect myRect = new Rect(rect.x + 22, rect.y + 2, rect.width - 62, EditorGUIUtility.singleLineHeight); + EditorGUI.BeginChangeCheck(); + + Object dummy; + dummy = EditorGUI.ObjectField(myRect, toggleObj.GetActive(), typeof(GameObject), true); + + if (EditorGUI.EndChangeCheck()) + { + if (dummy == null) + targets[index] = new ToggleObject(); + else + { + if (((GameObject) dummy).scene.IsValid()) + { + targets[index] = new ToggleObject((GameObject) dummy); + } + else + Debug.LogWarning("[QuickToggle] GameObject must be a scene object!"); + } + + CheckIfValid(); + } + + float xCoord = rect.x + rect.width - 18; + if (!toggleObj.valid) + EditorGUI.LabelField(new Rect(xCoord - 60, rect.y + 2, 25, EditorGUIUtility.singleLineHeight), Styles.warnIcon); + + EditorGUI.BeginDisabledGroup(!dummy || targets[index].allComps.Length < 2); + if (GUI.Button(new Rect(xCoord - 20, rect.y + 2, 20, 18), Styles.nextIcon, GUIStyle.none)) + { + targets[index].next(); + } + + EditorGUI.EndDisabledGroup(); + + if (toggleObj.active) + if (GUI.Button(new Rect(xCoord, rect.y, 20, 18), Styles.greenLight, GUIStyle.none)) + { + toggleObj.active = false; + AutoRename(); + } + + if (!toggleObj.active) + if (GUI.Button(new Rect(xCoord, rect.y, 20, 18), Styles.redLight, GUIStyle.none)) + { + toggleObj.active = true; + AutoRename(); + } + + } + + private void RefreshList() + { + targetList = new UnityEditorInternal.ReorderableList(targets, typeof(ToggleObject), false, true, true, false) + { + drawElementCallback = DrawElement, + drawHeaderCallback = DrawHeader + }; + } + + #endregion + + #region Classes + + public class ToggleObject + { + public GameObject gameObject = null; + public bool active = true; + public bool valid = true; + + public Component[] allComps; + public int index; + + public ToggleObject() + { + } + + public ToggleObject(GameObject o) + { + this.gameObject = o; + allComps = gameObject.GetComponents(); + } + + public Object GetActive() + { + if (index == 0) + { + return gameObject; + } + else + { + return allComps[index]; + } + } + + public void next() + { + index++; + if (index >= allComps.Length) + index = 0; + } + } + + private class SkinnedShapeSlot + { + private SkinnedMeshRenderer _renderer; + + public SkinnedMeshRenderer renderer + { + get => _renderer; + private set + { + if (_renderer == value) return; + _renderer = value; + OnRendererChanged(); + } + } + + public readonly List shapes = new List(); + private bool expanded; + private Vector2 scroll; + + public SkinnedShapeSlot() + { + } + + public SkinnedShapeSlot(SkinnedMeshRenderer renderer) => this.renderer = renderer; + + + void GetShapes() + { + shapes.Clear(); + for (int i = 0; i < renderer.sharedMesh.blendShapeCount; i++) + { + shapes.Add(new SkinnedShape(renderer.sharedMesh, i)); + } + + SortShapes(); + } + + void SortShapes() + { + int CompareShape(SkinnedShape a, SkinnedShape b) + { + return a.name.CompareTo(b.name); + } + + shapes.Sort(CompareShape); + } + + public void Draw() + { + if (expanded && renderer != null) + EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.MaxHeight(300)); + else + EditorGUILayout.BeginVertical(GUI.skin.box); + + using (new GUILayout.HorizontalScope()) + { + EditorGUIUtility.labelWidth = 10; + expanded = GUILayout.Toggle(expanded, string.Empty, GUI.skin.GetStyle("Foldout"), GUILayout.Width(15)); + renderer = (SkinnedMeshRenderer) EditorGUILayout.ObjectField(string.Empty, renderer, typeof(SkinnedMeshRenderer), true); + + EditorGUIUtility.labelWidth = 0; + + if (GUILayout.Button("X", GUI.skin.label, GUILayout.Width(18))) + { + skinnedRenderers.Remove(this); + return; + } + } + + if (expanded && shapes.Count > 0) + { + scroll = EditorGUILayout.BeginScrollView(scroll); + EditorGUIUtility.labelWidth = 100; + EditorGUI.indentLevel++; + foreach (var s in shapes) s.Draw(); + + EditorGUI.indentLevel--; + EditorGUILayout.EndScrollView(); + EditorGUIUtility.labelWidth = 0; + } + + EditorGUILayout.EndVertical(); + } + + private void OnRendererChanged() + { + if (renderer == null) shapes.Clear(); + else if (root && !renderer.transform.IsChildOf(root.transform)) + { + Debug.LogWarning("Renderer is not a child of root!"); + renderer = null; + shapes.Clear(); + } + else if (!renderer.sharedMesh) + { + Debug.LogWarning("Renderer is not using any mesh!"); + renderer = null; + shapes.Clear(); + } + else GetShapes(); + } + } + + private class SkinnedShape + { + public string name; + public int index; + public float value; + + public SkinnedShape(Mesh m, int i) + { + index = i; + name = m.GetBlendShapeName(i); + value = 0; + } + + public void Draw() + { + using (new GUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField(CutString(name, 28), GUILayout.Width(180)); + value = EditorGUILayout.Slider(value, 0, 100); + } + } + } + + private static class Styles + { + internal static readonly GUIContent + noteIcon = new GUIContent(EditorGUIUtility.IconContent("console.warnicon.inactive.sml")) {tooltip = "No Avatar Descriptor found on Root"}, + warnIcon = new GUIContent(EditorGUIUtility.IconContent("d_console.warnicon.sml")) {tooltip = "Object is not a child of Root!"}, + greenLight = new GUIContent(EditorGUIUtility.IconContent("d_greenLight")) {tooltip = "Enable"}, + redLight = new GUIContent(EditorGUIUtility.IconContent("d_redLight")) {tooltip = "Disable"}, + switchIcon = new GUIContent(EditorGUIUtility.IconContent("d_Animation.Record")) {tooltip = "Invert Toggles"}, + nextIcon = new GUIContent(EditorGUIUtility.IconContent("Refresh")) {tooltip = "Cycle Components"}, + createOppositeContent = new GUIContent("Create Opposite", "Make the opposite clip for created animation clips"), + individualToggleContent = new GUIContent("Individual Toggles", "Make an animation clip for each target separately"), + useAllShapesContent = new GUIContent("Use all Blendshapes", "When creating the clip, utilize all the blendshapes of the Renderers"); + } + + #endregion + } + + internal static class DSHelper + { + internal static void ReadyPath(string folderPath) + { + if (Directory.Exists(folderPath)) return; + Directory.CreateDirectory(folderPath); + AssetDatabase.ImportAsset(folderPath); + } + internal static string AssetFolderPath(string variable, string title) + { + using (new GUILayout.HorizontalScope()) + { + using (new EditorGUI.DisabledScope(true)) + EditorGUILayout.TextField(title, variable); + + if (!GUILayout.Button("...", GUILayout.Width(30))) return variable; + var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : "Assets", string.Empty); + if (string.IsNullOrEmpty(dummyPath)) + return variable; + string newPath = FileUtil.GetProjectRelativePath(dummyPath); + + if (!newPath.StartsWith("Assets")) + { + Debug.LogWarning("New Path must be a folder within Assets!"); + return variable; + } + + variable = newPath; + } + + return variable; + } + + internal static void Save(this T window, string prefs) where T : EditorWindow + { + string data = JsonUtility.ToJson(window, false); + PlayerPrefs.SetString(prefs, data); + } + internal static void Load(this T window, string prefs) where T : EditorWindow + { + string defaultData = JsonUtility.ToJson(window, false); + string data = PlayerPrefs.GetString(prefs, defaultData); + JsonUtility.FromJsonOverwrite(data, window); + } + + internal static string GenerateUniqueString(string s, System.Func check) + { + if (check(s)) + return s; + + int suffix = 0; + + int.TryParse(s.Substring(s.Length - 2, 2), out int d); + if (d >= 0) + suffix = d; + if (suffix > 0) s = suffix > 9 ? s.Substring(0, s.Length - 2) : s.Substring(0, s.Length - 1); + + s = s.Trim(); + + suffix++; + + string newString = s + " " + suffix; + while (!check(newString)) + { + suffix++; + newString = s + " " + suffix; + } + + return newString; + } + + internal static AnimatorControllerLayer AddLayer(this AnimatorController controller, string name, float defaultWeight) + { + var newLayer = new AnimatorControllerLayer + { + name = name, + defaultWeight = defaultWeight, + stateMachine = new AnimatorStateMachine + { + name = name, + hideFlags = HideFlags.HideInHierarchy + }, + }; + AssetDatabase.AddObjectToAsset(newLayer.stateMachine, controller); + controller.AddLayer(newLayer); + return newLayer; + } + +#if VRC_SDK_VRCSDK3 + internal static AnimatorController GetPlayableLayer(this VRCAvatarDescriptor avi, VRCAvatarDescriptor.AnimLayerType type) + => avi.baseAnimationLayers.Concat(avi.specialAnimationLayers).FirstOrDefault(l => l.type == type).animatorController as AnimatorController; +#endif + } +} \ No newline at end of file diff --git a/QuickToggle/Editor/QuickToggle.cs.meta b/QuickToggle/Editor/QuickToggle.cs.meta new file mode 100644 index 0000000..7dc009b --- /dev/null +++ b/QuickToggle/Editor/QuickToggle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51c789a660c733043948e233cdbfda31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/Editor/com.dreadscripts.tool.quicktoggle.Editor.asmdef b/QuickToggle/Editor/com.dreadscripts.tool.quicktoggle.Editor.asmdef new file mode 100644 index 0000000..0d1716f --- /dev/null +++ b/QuickToggle/Editor/com.dreadscripts.tool.quicktoggle.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.tool.quicktoggle.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/QuickToggle/Editor/com.dreadscripts.tool.quicktoggle.Editor.asmdef.meta b/QuickToggle/Editor/com.dreadscripts.tool.quicktoggle.Editor.asmdef.meta new file mode 100644 index 0000000..20b4aa7 --- /dev/null +++ b/QuickToggle/Editor/com.dreadscripts.tool.quicktoggle.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4701ac087cea88a4fb980b6762583b83 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/LICENSE b/QuickToggle/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/QuickToggle/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/QuickToggle/LICENSE.meta b/QuickToggle/LICENSE.meta new file mode 100644 index 0000000..dd65b9c --- /dev/null +++ b/QuickToggle/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4ffa88496fbe9d248a8016822480a7a1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/README.md b/QuickToggle/README.md new file mode 100644 index 0000000..aa47531 --- /dev/null +++ b/QuickToggle/README.md @@ -0,0 +1,41 @@ +# Quick Toggle +Quick Toggle simplifies the creation of simple clips and toggles. + +### [Download From Here](https://vpm.dreadscripts.com/) + +**Quick Steps:** +1. Set the Root +2. Select the Target GameObjects or Components. +3. Right Click > Quick Actions > Quick Toggle. +4. Set the desired settings. +5. Press "Create Toggle Clip". + +# Blendshape Mode +Easily create clips that modify the Blendshapes of skinned mesh renderers. +**Quick Steps:** +1. Set the Root. +2. Set a clip name. +3. Set the target Skinned Mesh Renderers. +4. Expand the foldout, set the desired blendshape values. +5. Press "Create Blendshape Clip". + +# Settings +- Clip Length: The length of the animation clip in frames (60 fps) +- Loop time: Sets loop time to true on the created animation clips +- Ping Folder: Highlights the folder where the new animations clips were created. +- Close Window: Automatically close the window after animation clips creation. +- Create Opposite: Create an opposite clip for each animation clip created. + - Toggle: Disables Objects/Components previously enabled and vice versa + - Blendshape: Sets Blendshapes value in the opposite clip to 0. + +- (Toggle) Individual Toggles: Creates an Animation clip for each target Object/Component + +- (Blendshape) Clip Mode: Chooses the clip creation + - Single Clip: Puts all set Blendshape values in a single animation clip. + - Separate Renderers: Makes an animation clip for each target Skinned Mesh Renderer. Can be used for multiple Clips for the same Renderer. + - Separate Blendshapes: Makes an animation clip for each used Blendshape (Value > 0). + +- (Blendshape) Use all Blendshapes: Uses all the Blendshape values in the target Renderers in the created clips. + +### Thank You +If you enjoy Quick Toggle, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! \ No newline at end of file diff --git a/QuickToggle/README.md.meta b/QuickToggle/README.md.meta new file mode 100644 index 0000000..49b4125 --- /dev/null +++ b/QuickToggle/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fad8af93d6e0c084d94e74efb5d32d3f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/QuickToggle/package.json b/QuickToggle/package.json new file mode 100644 index 0000000..9ace68a --- /dev/null +++ b/QuickToggle/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.quicktoggle", + "displayName": "DreadScripts - QuickToggle", + "version": "1.6.1", + "description": "Quick Toggle simplifies the creation of simple clips and toggles.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/QuickToggle/package.json.meta b/QuickToggle/package.json.meta new file mode 100644 index 0000000..89a8816 --- /dev/null +++ b/QuickToggle/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ef3e67d5da8084a419990566749466ce +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion.meta b/ReplaceMotion.meta new file mode 100644 index 0000000..8bc6c00 --- /dev/null +++ b/ReplaceMotion.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7dfe0ef1830032642a879730225296a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion/Editor.meta b/ReplaceMotion/Editor.meta new file mode 100644 index 0000000..8dd517e --- /dev/null +++ b/ReplaceMotion/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b095e083c4f79b24aaf1e6460f3e35e8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion/Editor/ReplaceMotion.cs b/ReplaceMotion/Editor/ReplaceMotion.cs new file mode 100644 index 0000000..e5a9c4d --- /dev/null +++ b/ReplaceMotion/Editor/ReplaceMotion.cs @@ -0,0 +1,384 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.Animations; +using VRC.SDK3.Avatars.Components; +using System.Linq; + +namespace DreadScripts.ReplaceMotion +{ + public class ReplaceMotion : EditorWindow + { + static List originalMotion = new List(); + private static bool hasEmptyState; + private static bool replacingEmptyState; + static bool[] replaceFields; + static Motion[] targetMotion; + static Motion emptyTargetMotion; + static readonly Dictionary replaceValues = new Dictionary(); + + private static VRCAvatarDescriptor mainAvatar; + private static AnimatorController mainController; + + private static Vector2 scroll; + + [MenuItem("DreadTools/Utility/Replace Motion")] + private static void showWindow() + { + GetWindow(false, "Replace Motion", true); + } + + private void OnEnable() + { + if (!mainAvatar && !mainController) + { + mainAvatar = FindObjectOfType(); + if (mainAvatar) + GetMotions(mainAvatar); + } + } + + private void OnGUI() + { + GUIStyle labelButton = new GUIStyle(GUI.skin.button) { padding = new RectOffset(1, 1, 1, 1), margin = new RectOffset(), alignment = TextAnchor.MiddleCenter }; + scroll = EditorGUILayout.BeginScrollView(scroll); + using (new GUILayout.HorizontalScope("box")) + { + EditorGUI.BeginChangeCheck(); + Object dummy = CustomObjectField(new GUIContent("Target"), (Object)mainAvatar ?? mainController ?? null, true, true, out int resultType, typeof(VRCAvatarDescriptor), typeof(AnimatorController)); + if (EditorGUI.EndChangeCheck()) + { + switch (resultType) + { + case -1: + mainAvatar = null; + mainController = null; + break; + case 0: + mainAvatar = (VRCAvatarDescriptor)dummy; + mainController = null; + break; + case 1: + mainAvatar = null; + mainController = (AnimatorController)dummy; + break; + } + if (mainAvatar) + GetMotions(mainAvatar); + else if (mainController) + GetMotions(mainController); + } + } + EditorGUI.BeginDisabledGroup(!(mainAvatar || mainController)); + if (GUILayout.Button("Replace")) + { + PopulateDictionary(); + if (mainAvatar) + SetMotions(mainAvatar); + else + SetMotions(mainController); + AssetDatabase.SaveAssets(); + Debug.Log("[Replace Motion] Done!"); + + if (mainAvatar) + GetMotions(mainAvatar); + else + GetMotions(mainController); + } + EditorGUI.EndDisabledGroup(); + + + if (originalMotion.Count > 0 || hasEmptyState) + { + DrawSeperator(); + if (hasEmptyState) + { + using (new GUILayout.HorizontalScope("box")) + { + EditorGUILayout.ObjectField(null, typeof(Motion), false); + GUILayout.Space(20); + GUILayout.Label("->", "boldlabel", GUILayout.Width(20)); + GUILayout.Space(20); + + if (!replacingEmptyState) + replacingEmptyState = GUILayout.Toggle(replacingEmptyState, new GUIContent("Replace", "Replace all instances of the original motion"), "button"); + + else + { + if (GUILayout.Button("X", labelButton, GUILayout.Width(20))) + replacingEmptyState = false; + + emptyTargetMotion = (Motion)EditorGUILayout.ObjectField(emptyTargetMotion, typeof(Motion), true); + } + + } + } + for (int i = 0; i < originalMotion.Count; i++) + { + using (new GUILayout.HorizontalScope("box")) + { + EditorGUILayout.ObjectField(originalMotion[i], typeof(Motion), false); + GUILayout.Space(20); + GUILayout.Label("->", "boldlabel", GUILayout.Width(20)); + GUILayout.Space(20); + if (!replaceFields[i]) + replaceFields[i] = GUILayout.Toggle(replaceFields[i],new GUIContent("Replace","Replace all instances of the original motion"), "button"); + else + { + if (GUILayout.Button("X", labelButton, GUILayout.Width(20))) + replaceFields[i] = false; + targetMotion[i] = (Motion)EditorGUILayout.ObjectField(targetMotion[i], typeof(Motion), true); + } + } + } + } + EditorGUILayout.EndScrollView(); + } + + private static Object CustomObjectField(GUIContent label, Object displayObject, bool allowScene, bool checkComponents, out int resultTypeIndex, params System.Type[] validTypes) + { + //Special Cases + bool supportsController = false; + int controllerTypeIndex = -1; + if (checkComponents) + { + for (int i = 0; i < validTypes.Length; i++) + { + if (validTypes[i] == typeof(AnimatorController)) + { + supportsController = true; + controllerTypeIndex = i; + break; + } + } + } + /////////////// + + + EditorGUI.BeginChangeCheck(); + Object dummy = EditorGUILayout.ObjectField(label, displayObject, typeof(Object), allowScene); + + if (EditorGUI.EndChangeCheck()) + { + if (!dummy) + { + resultTypeIndex = -1; + return null; + } + + for (int i = 0; i < validTypes.Length; i++) + { + if (dummy.GetType() == validTypes[i]) + { + resultTypeIndex = i; + return dummy; + } + } + + if (checkComponents && dummy is GameObject go) + { + Component[] components = go.GetComponents(); + for (int i = 0; i < components.Length; i++) + { + for (int j = 0; j < validTypes.Length; j++) + { + if (components[i].GetType() == validTypes[j]) + { + resultTypeIndex = j; + return components[i]; + } + + //Special Cases + if (supportsController && (components[i] is Animator ani) && ani.runtimeAnimatorController) + { + resultTypeIndex = controllerTypeIndex; + return AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(ani.runtimeAnimatorController)); + } + /////////////// + } + } + } + string validTypesMessage = string.Join(", ", validTypes.Select(t => t.Name)); + Debug.LogWarning("Field must be of Type: " + validTypesMessage); + } + resultTypeIndex = -2; + return dummy; + } + private void SetMotions(VRCAvatarDescriptor avatar) + { + IterateStates(avatar, SetMotions); + } + + private void GetMotions(VRCAvatarDescriptor avatar) + { + GetStart(); + IterateStates(avatar, s => GetMotions(s.motion)); + GetFinal(); + } + private void SetMotions(AnimatorController controller) + { + IterateStates(controller, SetMotions); + } + private void GetMotions(AnimatorController controller) + { + GetStart(); + IterateStates(controller, s => GetMotions(s.motion)); + GetFinal(); + } + + private void GetStart() + { + hasEmptyState = false; + emptyTargetMotion = null; + originalMotion.Clear(); + } + private void GetFinal() + { + originalMotion = originalMotion.Distinct().ToList(); + targetMotion = new Motion[originalMotion.Count]; + replaceFields = new bool[originalMotion.Count]; + } + + private void GetMotions(BlendTree tree) + { + originalMotion.Add(tree); + for (int i = 0; i < tree.children.Length; i++) + { + GetMotions(tree.children[i].motion); + } + } + + private void GetMotions(Motion motion) + { + if (!motion) + hasEmptyState = true; + else + { + if (motion is AnimationClip) + originalMotion.Add(motion); + else + { + if (motion is BlendTree tree) + { + GetMotions(tree); + } + } + } + } + + private void SetMotions(AnimatorState state) + { + if (!state.motion) + { + if (replacingEmptyState) + state.motion = emptyTargetMotion; + } + else + { + if (replaceValues.ContainsKey(state.motion)) + { + state.motion = replaceValues[state.motion]; + EditorUtility.SetDirty(state); + } + else + { + if (state.motion is BlendTree tree) + { + SetMotions(tree); + } + } + } + } + private void SetMotions(BlendTree tree) + { + ChildMotion[] newMotions = tree.children; + for (int i = 0; i < newMotions.Length; i++) + { + if (replaceValues.ContainsKey(newMotions[i].motion)) + newMotions[i].motion = replaceValues[newMotions[i].motion]; + else + if (newMotions[i].motion is BlendTree subTree) + SetMotions(subTree); + } + tree.children = newMotions; + EditorUtility.SetDirty(tree); + } + + private void PopulateDictionary() + { + replaceValues.Clear(); + for (int i = 0; i < originalMotion.Count; i++) + { + if (!replaceFields[i]) + replaceValues.Add(originalMotion[i], originalMotion[i]); + else + replaceValues.Add(originalMotion[i], targetMotion[i]); + } + } + + public static void IterateStates(VRCAvatarDescriptor avatar, System.Action action) + { + HashSet visitedControllers = new HashSet(); + foreach (var layer in avatar.baseAnimationLayers.Concat(avatar.specialAnimationLayers)) + { + if (layer.animatorController) + { + AnimatorController controller = AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(layer.animatorController)); + if (controller && !visitedControllers.Contains(controller)) + { + IterateStates(controller, action); + visitedControllers.Add(controller); + } + } + } + foreach (var runtimeController in avatar.GetComponentsInChildren().Select(a => a.runtimeAnimatorController)) + { + if (runtimeController) + { + AnimatorController controller = AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(runtimeController)); + if (controller && !visitedControllers.Contains(controller)) + { + IterateStates(controller, action); + visitedControllers.Add(controller); + } + } + } + } + + public static void IterateStates(AnimatorController controller, System.Action action) + { + foreach (var layer in controller.layers) + { + IterateStates(layer.stateMachine, action, true); + } + } + + public static void IterateStates(AnimatorStateMachine machine, System.Action action, bool deep = true) + { + if (deep) + foreach (var subMachine in machine.stateMachines.Select(c => c.stateMachine)) + { + IterateStates(subMachine, action); + } + + foreach (var state in machine.states.Select(s => s.state)) + { + action(state); + } + } + + private static void DrawSeperator() + { + Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(1 + 2)); + r.height = 1; + r.y += 1; + r.x -= 2; + r.width += 6; + ColorUtility.TryParseHtmlString(EditorGUIUtility.isProSkin ? "#595959" : "#858585", out Color lineColor); + EditorGUI.DrawRect(r, lineColor); + } + + } + +} \ No newline at end of file diff --git a/ReplaceMotion/Editor/ReplaceMotion.cs.meta b/ReplaceMotion/Editor/ReplaceMotion.cs.meta new file mode 100644 index 0000000..2b1fe82 --- /dev/null +++ b/ReplaceMotion/Editor/ReplaceMotion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20a6e7c15d5f4744681ced7247a029a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion/Editor/com.dreadscripts.replacemotion.Editor.asmdef b/ReplaceMotion/Editor/com.dreadscripts.replacemotion.Editor.asmdef new file mode 100644 index 0000000..4ba6165 --- /dev/null +++ b/ReplaceMotion/Editor/com.dreadscripts.replacemotion.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.replacemotion.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/ReplaceMotion/Editor/com.dreadscripts.replacemotion.Editor.asmdef.meta b/ReplaceMotion/Editor/com.dreadscripts.replacemotion.Editor.asmdef.meta new file mode 100644 index 0000000..56fadfa --- /dev/null +++ b/ReplaceMotion/Editor/com.dreadscripts.replacemotion.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 355ae8e34ea9b874a9965deb911d8a85 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion/LICENSE b/ReplaceMotion/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/ReplaceMotion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ReplaceMotion/LICENSE.meta b/ReplaceMotion/LICENSE.meta new file mode 100644 index 0000000..d935cd4 --- /dev/null +++ b/ReplaceMotion/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 38e2ba75221516844b3416a99546dbe5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion/README.md b/ReplaceMotion/README.md new file mode 100644 index 0000000..c941bc7 --- /dev/null +++ b/ReplaceMotion/README.md @@ -0,0 +1,20 @@ +# Replace Motion +Easily replace all instances of a motion in an Avatar or Controller with the desired motion. + +![image](https://cdn.discordapp.com/attachments/1067972913594118214/1067972913988386867/unknown_4.png?ex=663437c8&is=6632e648&hm=5faf9a4ba98a093d3cccd7906daf6fee811e4fb40bbe446c5c449355d7291b13&) + +Replace Motion will easily replace all instances of a motion in an Avatar or Controller with the desired motion. +Found under DreadTools > Utilities > Replace Motion + +Window +------- +After specifying a target avatar or controller, the window will show you all the motions used. You can replace all instances of a motion with another motion of your choice. + +Target:The Avatar or Animator Controller to replace motions in. + +Motion List: +- Left Field: The original motion that's used in the target +- Right Field: the new motion that the original motion should be replaced with + +### Thank you +If you enjoy Replace Motion, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! diff --git a/ReplaceMotion/README.md.meta b/ReplaceMotion/README.md.meta new file mode 100644 index 0000000..dd46207 --- /dev/null +++ b/ReplaceMotion/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 575a36e847cb59c4488f4fc71997bec8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ReplaceMotion/package.json b/ReplaceMotion/package.json new file mode 100644 index 0000000..523457d --- /dev/null +++ b/ReplaceMotion/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.replacemotion", + "displayName": "DreadScripts - ReplaceMotion", + "version": "1.0.1", + "description": "Easily replace all instances of a motion in an Avatar or Controller with the desired motion.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/ReplaceMotion/package.json.meta b/ReplaceMotion/package.json.meta new file mode 100644 index 0000000..aaa37b7 --- /dev/null +++ b/ReplaceMotion/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f83ab771cf8f96246b561c63d1a24535 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid.meta b/ResetHumanoid.meta new file mode 100644 index 0000000..686e60b --- /dev/null +++ b/ResetHumanoid.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3bb8e19b467a38c4b9d8630d438ba9c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid/Editor.meta b/ResetHumanoid/Editor.meta new file mode 100644 index 0000000..c937afd --- /dev/null +++ b/ResetHumanoid/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89e2972b5cc7da64bb621fd56a97c8b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid/Editor/ResetHumanoid.cs b/ResetHumanoid/Editor/ResetHumanoid.cs new file mode 100644 index 0000000..d0c2952 --- /dev/null +++ b/ResetHumanoid/Editor/ResetHumanoid.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace DreadScripts.ResetHumanoid +{ + public class ResetHumanoid : EditorWindow + { + private static Animator ani; + private static bool full; + private static bool pos = true, rot = true, scale = true; + + [MenuItem("DreadTools/Utility/Reset Humanoid")] + private static void showWindow() + { + GetWindow(false, "Reset Humanoid", true); + if (ani == null) ani = FindObjectOfType(); + } + + private void OnGUI() + { + EditorGUIUtility.labelWidth = 60; + ani = (Animator) EditorGUILayout.ObjectField("Avatar", ani, typeof(Animator), true); + EditorGUILayout.BeginHorizontal(); + pos = EditorGUILayout.Toggle("Position", pos); + rot = EditorGUILayout.Toggle("Rotation", rot); + scale = EditorGUILayout.Toggle("Scale", scale); + EditorGUIUtility.labelWidth = 0; + EditorGUILayout.EndHorizontal(); + full = EditorGUILayout.Toggle(new GUIContent("Full Reset", "Reset includes the objects that the Model was imported with"), full); + if (GUILayout.Button("Reset")) + ResetPose(ani, full, pos, rot, scale); + + } + + public static void ResetPose(Animator ani, bool fullReset = false, bool position = true, bool rotation = true, bool scale = true) + { + if (!ani.avatar) + { + Debug.LogWarning("Avatar is required to reset pose!"); + return; + } + + // Humans IDs if not full reset, otherwise All Ids + // ID > Path + // ID > Element > Transform Data + Undo.RegisterFullObjectHierarchyUndo(ani.gameObject, "HierarchyReset"); + SerializedObject sAvi = new SerializedObject(ani.avatar); + SerializedProperty humanIds = sAvi.FindProperty("m_Avatar.m_Human.data.m_Skeleton.data.m_ID"); + SerializedProperty allIds = sAvi.FindProperty("m_Avatar.m_AvatarSkeleton.data.m_ID"); + SerializedProperty defaultPose = sAvi.FindProperty("m_Avatar.m_DefaultPose.data.m_X"); + SerializedProperty tos = sAvi.FindProperty("m_TOS"); + + Dictionary idToElem = new Dictionary(); + Dictionary elemToTransform = new Dictionary(); + Dictionary IdToPath = new Dictionary(); + + for (int i = 0; i < allIds.arraySize; i++) + idToElem.Add(allIds.GetArrayElementAtIndex(i).longValue, i); + + for (int i = 0; i < defaultPose.arraySize; i++) + elemToTransform.Add(i, new TransformData(defaultPose.GetArrayElementAtIndex(i))); + + for (int i = 0; i < tos.arraySize; i++) + { + SerializedProperty currProp = tos.GetArrayElementAtIndex(i); + IdToPath.Add(currProp.FindPropertyRelative("first").longValue, currProp.FindPropertyRelative("second").stringValue); + } + + Action applyTransform = (transform, data) => + { + if (transform) + { + if (position) + transform.localPosition = data.pos; + if (rotation) + transform.localRotation = data.rot; + if (scale) + transform.localScale = data.scale; + } + }; + + if (!fullReset) + { + for (int i = 0; i < humanIds.arraySize; i++) + { + Transform myBone = ani.transform.Find(IdToPath[humanIds.GetArrayElementAtIndex(i).longValue]); + TransformData data = elemToTransform[idToElem[humanIds.GetArrayElementAtIndex(i).longValue]]; + applyTransform(myBone, data); + } + } + else + { + for (int i = 0; i < allIds.arraySize; i++) + { + Transform myBone = ani.transform.Find(IdToPath[allIds.GetArrayElementAtIndex(i).longValue]); + TransformData data = elemToTransform[idToElem[allIds.GetArrayElementAtIndex(i).longValue]]; + applyTransform(myBone, data); + } + } + } + + struct TransformData + { + public Vector3 pos; + public Quaternion rot; + public Vector3 scale; + + public TransformData(SerializedProperty t) + { + SerializedProperty tProp = t.FindPropertyRelative("t"); + SerializedProperty qProp = t.FindPropertyRelative("q"); + SerializedProperty sProp = t.FindPropertyRelative("s"); + pos = new Vector3(tProp.FindPropertyRelative("x").floatValue, tProp.FindPropertyRelative("y").floatValue, tProp.FindPropertyRelative("z").floatValue); + rot = new Quaternion(qProp.FindPropertyRelative("x").floatValue, qProp.FindPropertyRelative("y").floatValue, qProp.FindPropertyRelative("z").floatValue, qProp.FindPropertyRelative("w").floatValue); + scale = new Vector3(sProp.FindPropertyRelative("x").floatValue, sProp.FindPropertyRelative("y").floatValue, sProp.FindPropertyRelative("z").floatValue); + } + } + } +} \ No newline at end of file diff --git a/ResetHumanoid/Editor/ResetHumanoid.cs.meta b/ResetHumanoid/Editor/ResetHumanoid.cs.meta new file mode 100644 index 0000000..a103c37 --- /dev/null +++ b/ResetHumanoid/Editor/ResetHumanoid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 842214ab484e30f4fb54f3a8c49fe911 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid/Editor/com.dreadscripts.resethumanoid.Editor.asmdef b/ResetHumanoid/Editor/com.dreadscripts.resethumanoid.Editor.asmdef new file mode 100644 index 0000000..70fdfc5 --- /dev/null +++ b/ResetHumanoid/Editor/com.dreadscripts.resethumanoid.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.resethumanoid.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/ResetHumanoid/Editor/com.dreadscripts.resethumanoid.Editor.asmdef.meta b/ResetHumanoid/Editor/com.dreadscripts.resethumanoid.Editor.asmdef.meta new file mode 100644 index 0000000..1e06cb2 --- /dev/null +++ b/ResetHumanoid/Editor/com.dreadscripts.resethumanoid.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 23482c6621fa978479978cf55ec8f668 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid/LICENSE b/ResetHumanoid/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/ResetHumanoid/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ResetHumanoid/LICENSE.meta b/ResetHumanoid/LICENSE.meta new file mode 100644 index 0000000..56a32de --- /dev/null +++ b/ResetHumanoid/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 852e3f2bfed42d24d9bac30b04123c5d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid/README.md b/ResetHumanoid/README.md new file mode 100644 index 0000000..b278bda --- /dev/null +++ b/ResetHumanoid/README.md @@ -0,0 +1,15 @@ +# Reset Humanoid + +### [Download From Here](https://vpm.dreadscripts.com/) + +## Features +- Allows resetting the pose of a humanoid animator. +- Choose which properties to reset: position, rotation, and scale. + +## How to Use +1. Navigate to `DreadTools > Utility > Reset Humanoid` in the top menu. +2. Select the avatar you want to reset the pose for. +3. Choose reset options and click "Reset" to apply the pose reset. + +### Thank You +If you enjoy Reset Humanoid, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! diff --git a/ResetHumanoid/README.md.meta b/ResetHumanoid/README.md.meta new file mode 100644 index 0000000..2eedc9f --- /dev/null +++ b/ResetHumanoid/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d64dd784833ec0f4f8046a38fc7b6b65 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ResetHumanoid/package.json b/ResetHumanoid/package.json new file mode 100644 index 0000000..4310137 --- /dev/null +++ b/ResetHumanoid/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.resethumanoid", + "displayName": "DreadScripts - ResetHumanoid", + "version": "1.0.2", + "description": "Simple tool to reset the pose of a humanoid animator.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/ResetHumanoid/package.json.meta b/ResetHumanoid/package.json.meta new file mode 100644 index 0000000..e4f5111 --- /dev/null +++ b/ResetHumanoid/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9d494f6df5e33e84fbe7bb1718986c67 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper.meta b/SelectionHelper.meta new file mode 100644 index 0000000..7afc4cf --- /dev/null +++ b/SelectionHelper.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 14265031cf9ba0b4e9e41bfdca165a9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/Editor.meta b/SelectionHelper/Editor.meta new file mode 100644 index 0000000..de8bdfc --- /dev/null +++ b/SelectionHelper/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c26ca17a65469e4b8475701dd9d7bef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/Editor/SaveSelection.cs b/SelectionHelper/Editor/SaveSelection.cs new file mode 100644 index 0000000..d3b71e8 --- /dev/null +++ b/SelectionHelper/Editor/SaveSelection.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; + +//Made by Dreadrith#3238 +//Discord: https://discord.gg/ZsPfrGn +//Github: https://github.com/Dreadrith/DreadScripts +//Gumroad: https://gumroad.com/dreadrith +//Ko-fi: https://ko-fi.com/dreadrith + +namespace DreadScripts.SelectionHelper +{ + [System.Serializable] + public class SaveSelection : ScriptableObject + { + [SerializeReference] + public Object[] oldSelection; + + public string[] s ={"Boi","Huh"}; + + [MenuItem("Assets/Selection Helper/Save Selection")] + [MenuItem("GameObject/Selection Helper/Save\\Load/Save Selection", false, 0)] + static void SaveSelected() + { + instance.oldSelection = Selection.objects; + Save(); + } + + [MenuItem("Assets/Selection Helper/Load Selection")] + [MenuItem("GameObject/Selection Helper/Save\\Load/Load Selection", false, 1)] + static void LoadSelected() + { + if (instance.oldSelection != null) + Selection.objects = Selection.objects.Concat(instance.oldSelection).ToArray(); + + } + + private static SaveSelection _instance; + private static SaveSelection instance => _instance ? _instance : GetInstance(); + + public static string folderPath = "DreadScripts/Saved Data/SaveSelection"; + private static string SavePath => folderPath + "/SaveSelectionData.txt"; + + public static SaveSelection GetInstance() + { + if (_instance == null && Exists()) + { + _instance = CreateInstance(); + using (System.IO.StreamReader reader = new System.IO.StreamReader(SavePath)) + JsonUtility.FromJsonOverwrite(reader.ReadToEnd(),_instance); + } + if (_instance == null) + { + _instance = CreateInstance(); + string directoryPath = System.IO.Path.GetDirectoryName(SavePath); + if (!System.IO.Directory.Exists(directoryPath)) + System.IO.Directory.CreateDirectory(directoryPath); + string json = JsonUtility.ToJson(_instance); + using (System.IO.StreamWriter writer = System.IO.File.CreateText(SavePath)) + writer.Write(json); + } + return _instance; + } + + public static void Save() + { + string json = EditorJsonUtility.ToJson(_instance); + using (System.IO.StreamWriter writer = new System.IO.StreamWriter(SavePath)) + writer.Write(json); + } + public static bool Exists() + { + return System.IO.File.Exists(SavePath); + } + } +} diff --git a/SelectionHelper/Editor/SaveSelection.cs.meta b/SelectionHelper/Editor/SaveSelection.cs.meta new file mode 100644 index 0000000..1ad6aa1 --- /dev/null +++ b/SelectionHelper/Editor/SaveSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a04dba417148dc641a899dc4853dfebb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/Editor/SceneObjectSelector.cs b/SelectionHelper/Editor/SceneObjectSelector.cs new file mode 100644 index 0000000..c0e9ae2 --- /dev/null +++ b/SelectionHelper/Editor/SceneObjectSelector.cs @@ -0,0 +1,294 @@ +using UnityEditor; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; + +//By Dreadrith#3238 +//https://discord.gg/ZsPfrGn +//Github: https://github.com/Dreadrith/DreadScripts +//Gumroad: https://gumroad.com/dreadrith + +namespace DreadScripts.SelectionHelper +{ + public class SceneObjectSelector : EditorWindow + { + + + #region Pref Keys + public const string PREF_PREFIX = "DS_SelectionHelperData_"; + public static readonly string PREF_ONCOLOR = $"{PREF_PREFIX}SelectedColor"; + public static readonly string PREF_OFFCOLOR = $"{PREF_PREFIX}DeselectedColor"; + public static readonly string PREF_MINSIZE = $"{PREF_PREFIX}MinSize"; + public static readonly string PREF_MAXSIZE = $"{PREF_PREFIX}MaxSize"; + public static readonly string PREF_SIZE = $"{PREF_PREFIX}Size"; + public static readonly string PREF_HUMANOID = $"{PREF_PREFIX}OnlyHumanoid"; + + public static void PrefSetColor(string key, Color value) + { + PlayerPrefs.SetFloat($"{key}R", value.r); + PlayerPrefs.SetFloat($"{key}G", value.g); + PlayerPrefs.SetFloat($"{key}B", value.b); + } + + public static Color PrefGetColor(string key, Color defaultColor) => new Color( + PlayerPrefs.GetFloat($"{key}R", defaultColor.r), + PlayerPrefs.GetFloat($"{key}G", defaultColor.g), + PlayerPrefs.GetFloat($"{key}B", defaultColor.b)); + + public static void PrefSetBool(string key, bool value) => PlayerPrefs.SetInt(key, value ? 1 : 0); + public static bool PrefGetBool(string key, bool defaultValue) => PlayerPrefs.GetInt(key, defaultValue ? 1 : 0) == 1; + #endregion + + [InitializeOnLoadMethod] + public static void LoadSettings() + { + OnColor = PrefGetColor(PREF_ONCOLOR, new Color(0.4f, 0.85f, 0.65f)); + OffColor = PrefGetColor(PREF_OFFCOLOR, new Color(0.8f, 0.15f, 0.35f)); + minHandleSize = PlayerPrefs.GetFloat(PREF_MINSIZE, 0.005f); + maxHandleSize = PlayerPrefs.GetFloat(PREF_MAXSIZE, 0.04f); + + handleSize = PlayerPrefs.GetFloat(PREF_SIZE, 0.00525f); + onlyHumanoid = PrefGetBool(PREF_HUMANOID, false); + + SceneView.duringSceneGui -= OnScene; + SceneView.duringSceneGui += OnScene; + Selection.selectionChanged -= OnSelectionChange; + Selection.selectionChanged += OnSelectionChange; + } + + public static void SaveSettings() + { + PrefSetColor(PREF_ONCOLOR, OnColor); + PrefSetColor(PREF_OFFCOLOR, OffColor); + PlayerPrefs.SetFloat(PREF_MINSIZE, minHandleSize); + PlayerPrefs.SetFloat(PREF_MAXSIZE, maxHandleSize); + PlayerPrefs.SetFloat(PREF_SIZE, handleSize); + PrefSetBool(PREF_HUMANOID, onlyHumanoid); + SceneView.RepaintAll(); + } + + public static void Disable() + { + SceneView.duringSceneGui -= OnScene; + Selection.selectionChanged -= OnSelectionChange; + } + + [MenuItem("DreadTools/Scripts Settings/Scene Object Selector")] + public static void showWindow() + { + GetWindow("Scene Selector Settings"); + } + + private static bool selecting; + private static bool onlyHumanoid; + private static float handleSize, minHandleSize, maxHandleSize; + private static Transform[] sceneObjects; + private static bool ignoreDBones = true, includeRoots = true; + private static bool hasDbones = (null != System.Type.GetType("DynamicBone")); + private static bool[] bitmask; + private static Color OnColor; + private static Color OffColor; + private static void OnScene(SceneView sceneview) + { + Handles.BeginGUI(); + GUILayout.Space(20); + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + if (GUILayout.Button(EditorGUIUtility.IconContent("CapsuleCollider2D Icon"), GUIStyle.none, GUILayout.Width(20), GUILayout.Height(20))) + { + Event e = Event.current; + if (e.button == 0) + { + selecting = !selecting; + if (selecting) + { + if (!onlyHumanoid) + { + sceneObjects = FindObjectsOfType(); + + if (hasDbones && ignoreDBones) + { + System.Type dboneType = System.Type.GetType("DynamicBone"); + List dbones = new List(); + Object[] dboneScripts = FindObjectsOfType(dboneType); + foreach (Object b in dboneScripts) + { + SerializedObject sb = new SerializedObject(b); + List exclusionList = new List(); + SerializedProperty excProp = sb.FindProperty("m_Exclusions"); + for (int i = 0; i < excProp.arraySize; i++) + exclusionList.Add((Transform) excProp.GetArrayElementAtIndex(i).objectReferenceValue); + GetBoneChildren(dbones, exclusionList, (Transform) sb.FindProperty("m_Root").objectReferenceValue, includeRoots); + } + + sceneObjects = sceneObjects.Except(dbones).ToArray(); + } + } + else + { + var list = new List(); + foreach (var a in FindObjectsOfType().Where(a => a.isHuman && a.avatar)) + { + for (int i = 0; i < 55; i++) + { + var t = a.GetBoneTransform((HumanBodyBones) i); + if (t) list.Add(t); + } + } + + sceneObjects = list.ToArray(); + } + refreshBitMask(); + } + } + if (e.button == 1) + { + GetWindow(false, "Scene Selector Settings", true); + } + } + EditorGUILayout.EndHorizontal(); + if (selecting) + { + //a + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + EditorGUI.BeginChangeCheck(); + handleSize = GUILayout.VerticalSlider(handleSize, maxHandleSize, minHandleSize, GUILayout.Height(50), GUILayout.Width(15)); + if (EditorGUI.EndChangeCheck()) + SaveSettings(); + + GUILayout.Space(1); + EditorGUILayout.EndHorizontal(); + } + Handles.EndGUI(); + + if (selecting) + { + if (sceneObjects.Length > 0) + { + for (int i = 0; i < sceneObjects.Length; i++) + { + if (!sceneObjects[i]) + continue; + int controlID = sceneObjects[i].GetHashCode(); + Event e = Event.current; + if (bitmask[i]) + Handles.color = OnColor; + else + Handles.color = OffColor; + Handles.SphereHandleCap(controlID, sceneObjects[i].position, Quaternion.identity, handleSize, EventType.Repaint); + switch (e.GetTypeForControl(controlID)) + { + case EventType.MouseDown: + if (HandleUtility.nearestControl == controlID && e.button == 0) + { + if (e.control) + { + if (!Selection.objects.Contains(sceneObjects[i].gameObject)) + { + Selection.objects = Selection.objects.Concat(new GameObject[] { sceneObjects[i].gameObject }).ToArray(); + } + else + { + Selection.objects = Selection.objects.Except(new GameObject[] { sceneObjects[i].gameObject }).ToArray(); + } + } + else + { + Selection.activeObject = sceneObjects[i].gameObject; + } + e.Use(); + } + break; + case EventType.Layout: + float distance = HandleUtility.DistanceToCircle(sceneObjects[i].position, handleSize / 2f); + HandleUtility.AddControl(controlID, distance); + break; + } + } + } + } + + } + + private static void GetBoneChildren(List dbones, List exclusionList, Transform parent, bool first = false) + { + if (exclusionList.Contains(parent)) return; + + if (!first) dbones.Add(parent); + for (int i = 0; i < parent.childCount; i++) + GetBoneChildren(dbones, exclusionList, parent.GetChild(i)); + + } + + + private void OnGUI() + { + EditorGUI.BeginChangeCheck(); + using (new GUILayout.HorizontalScope()) + { + EditorGUIUtility.labelWidth = 20; + EditorGUILayout.LabelField("Handle Size"); + + minHandleSize = EditorGUILayout.FloatField(minHandleSize, GUILayout.Width(40)); + handleSize = GUILayout.HorizontalSlider(handleSize, minHandleSize, maxHandleSize); + maxHandleSize = EditorGUILayout.FloatField(maxHandleSize, GUILayout.Width(40)); + EditorGUIUtility.labelWidth = 0; + } + + OnColor = EditorGUILayout.ColorField("Selected", OnColor); + OffColor = EditorGUILayout.ColorField("Deselected", OffColor); + + using (new GUILayout.HorizontalScope()) + { + EditorGUIUtility.labelWidth = 70; + + onlyHumanoid = EditorGUILayout.ToggleLeft("Only Humanoid", onlyHumanoid); + if (hasDbones) + { + ignoreDBones = EditorGUILayout.ToggleLeft("Ignore D-Bones", ignoreDBones); + includeRoots = EditorGUILayout.ToggleLeft("Include D-Bone Roots", includeRoots); + } + } + + if (EditorGUI.EndChangeCheck()) + SaveSettings(); + + EditorGUILayout.LabelField(string.Empty, GUI.skin.horizontalSlider); + + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made by Dreadrith#3238", "boldlabel")) + Application.OpenURL("https://github.com/Dreadrith/DreadScripts"); + } + + } + + private static void OnSelectionChange() + { + if (selecting) refreshBitMask(); + } + private static void refreshBitMask() + { + bitmask = new bool[sceneObjects.Length]; + for (int i = 0; i < sceneObjects.Length; i++) + { + if (!sceneObjects[i]) + { + sceneObjects = sceneObjects.Except(new Transform[] { sceneObjects[i] }).ToArray(); + refreshBitMask(); + break; + } + + if (Selection.objects.Contains(sceneObjects[i].gameObject)) + bitmask[i] = true; + else + bitmask[i] = false; + } + } + + + } +} diff --git a/SelectionHelper/Editor/SceneObjectSelector.cs.meta b/SelectionHelper/Editor/SceneObjectSelector.cs.meta new file mode 100644 index 0000000..fff388b --- /dev/null +++ b/SelectionHelper/Editor/SceneObjectSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02cefda8b1d83074e9c6585e1b599f2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/Editor/SelectionHelper.cs b/SelectionHelper/Editor/SelectionHelper.cs new file mode 100644 index 0000000..0da7d02 --- /dev/null +++ b/SelectionHelper/Editor/SelectionHelper.cs @@ -0,0 +1,91 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Linq; + +namespace DreadScripts.SelectionHelper +{ + public class SelectionHelper + { + //By Dreadrith#3238 + //Server: https://discord.gg/ZsPfrGn + //Github: https://github.com/Dreadrith/DreadScripts + //Gumroad: https://gumroad.com/dreadrith + + public static System.Type myCurrentType = System.Type.GetType(SessionState.GetString("SelectionHelperSelectType", "")); + + + [MenuItem("CONTEXT/Component/[SH] Choose Type", false, 900)] + static void selectType(MenuCommand selected) + { + myCurrentType = selected.context.GetType(); + SessionState.SetString("SelectionHelperSelectType", myCurrentType.AssemblyQualifiedName); + } + + [MenuItem("GameObject/Selection Helper/Select Immediate Children", false, 50)] + static void selectImmediate(MenuCommand selected) + { + Transform[] obj = Selection.GetFiltered(SelectionMode.Editable); + if (obj.Length == 0) + { + Debug.Log("[SH] No GameObject was selected"); + return; + } + List newSelection = new List(); + for (int i = 0; i < obj.Length; i++) + { + for (int j = 0; j < obj[i].childCount; j++) + { + newSelection.Add(obj[i].GetChild(j).gameObject); + } + } + Selection.objects = Selection.objects.Concat(newSelection).ToArray(); + } + + [MenuItem("GameObject/Selection Helper/By Type/Filter", false, -50)] + static void selectSelectedType() + { + Selection.objects = Selection.GetFiltered(myCurrentType, SelectionMode.Editable); + List newSelection = new List(); + for (int i = 0; i < Selection.objects.Length; i++) + { + newSelection.Add(((Component)Selection.objects[i]).gameObject); + } + Selection.objects = newSelection.ToArray(); + } + + [MenuItem("GameObject/Selection Helper/By Type/Children", false, -51)] + static void selectChildrenType(MenuCommand selected) + { + selectByType(selected, true); + } + + [MenuItem("GameObject/Selection Helper/By Type/Parents", false, -52)] + static void selectParentsType(MenuCommand selected) + { + selectByType(selected, false); + } + + static void selectByType(MenuCommand selected, bool child) + { + if (myCurrentType == null) + { + Debug.Log("[SH] No Component Type Chosen"); + return; + } + if (!selected.context) + { + Debug.Log("[SH] No GameObject was selected"); + return; + } + GameObject[] objs; + if (child) + objs = ((GameObject)selected.context).GetComponentsInChildren(myCurrentType, true).Select(c => c.gameObject).ToArray(); + else + objs = ((GameObject)selected.context).GetComponentsInParent(myCurrentType, true).Select(c => c.gameObject).ToArray(); + + Selection.objects = objs; + + } + } +} \ No newline at end of file diff --git a/SelectionHelper/Editor/SelectionHelper.cs.meta b/SelectionHelper/Editor/SelectionHelper.cs.meta new file mode 100644 index 0000000..72003c0 --- /dev/null +++ b/SelectionHelper/Editor/SelectionHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d370428cfe632814e82b8f8b0aba3da2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/Editor/com.dreadscripts.selectionhelper.Editor.asmdef b/SelectionHelper/Editor/com.dreadscripts.selectionhelper.Editor.asmdef new file mode 100644 index 0000000..2a5f348 --- /dev/null +++ b/SelectionHelper/Editor/com.dreadscripts.selectionhelper.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.selectionhelper", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/SelectionHelper/Editor/com.dreadscripts.selectionhelper.Editor.asmdef.meta b/SelectionHelper/Editor/com.dreadscripts.selectionhelper.Editor.asmdef.meta new file mode 100644 index 0000000..dd452fa --- /dev/null +++ b/SelectionHelper/Editor/com.dreadscripts.selectionhelper.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2816fbc8c0aecd44eb2bcfbd149155be +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/LICENSE.md b/SelectionHelper/LICENSE.md new file mode 100644 index 0000000..a7d4152 --- /dev/null +++ b/SelectionHelper/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SelectionHelper/LICENSE.md.meta b/SelectionHelper/LICENSE.md.meta new file mode 100644 index 0000000..82dc050 --- /dev/null +++ b/SelectionHelper/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b96a03a8521c0bc46818b2e3a1e973a8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/README.md b/SelectionHelper/README.md new file mode 100644 index 0000000..3e32633 --- /dev/null +++ b/SelectionHelper/README.md @@ -0,0 +1,22 @@ +# SelectionHelper +Unity Editor package to make selecting certain objects easier and less tedious + +Get it from the VCC listing! + +SelectionHelper: +---------------- +- Go to a Component on an object and Right Click > [SH] Choose Type. Right Click on a GameObject, Selection Helper > By Type > Children, Parents, or Filter Current Selection. +- Adds Selection Helper > Select Immediate Children, to GameObjects, to Select the next level of Children of currently selected GameObjects + +![Type Object Selector](https://raw.githubusercontent.com/Dreadrith/SelectionHelper/main/com.dreadscripts.selectionhelper/media~/TOS.gif) + +SceneObjectSelector: +-------------------- +Adds a small button to the top right of the Scene view. When clicked and enabled, will show a resizable sphere on each enabled object. This is useful for quickly selecting armature bones or managing empty objects. +Right click the new button to open its settings window. Automatically ignores Dynamic Bones by default. + +![Scene Object Selector](https://raw.githubusercontent.com/Dreadrith/SelectionHelper/main/com.dreadscripts.selectionhelper/media~/SOS.gif) + +SaveSelection: +-------------- +Adds Save\Load to Selection Helper, allows you to Save what objects were selected, and load them when needed. Loading combines current selection with loaded selection. diff --git a/SelectionHelper/README.md.meta b/SelectionHelper/README.md.meta new file mode 100644 index 0000000..f5e770f --- /dev/null +++ b/SelectionHelper/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 73637a1f995818c4695a9de50d48ac2f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/SelectionHelper/package.json b/SelectionHelper/package.json new file mode 100644 index 0000000..9510eb8 --- /dev/null +++ b/SelectionHelper/package.json @@ -0,0 +1,25 @@ +{ + "name": "com.dreadscripts.selectionhelper", + "displayName": "DreadScripts - Selection Helper", + "version": "1.2.4", + "unity": "2019.4", + "license": "MIT", + "description": "Unity Editor package to make selecting certain objects easier and less tedious", + "keywords": [ + "Dreadrith", + "DreadScripts", + "DreadTools", + "Editor", + "Utility", + "Selection" + ], + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://github.com/Dreadrith" + }, + "legacyFolders": { + "Assets\\DreadScripts\\Selection Helper": "6ec3e159e94175241a20166127b7da81", + "Assets\\DreadScripts\\SelectionHelper": "e0c37a2eebed7f54eb05af2439a04f27" + } +} \ No newline at end of file diff --git a/SelectionHelper/package.json.meta b/SelectionHelper/package.json.meta new file mode 100644 index 0000000..abe1469 --- /dev/null +++ b/SelectionHelper/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dccf082c009067847b60a2b9fa931dd8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture.meta b/Text2Texture.meta new file mode 100644 index 0000000..6d5320b --- /dev/null +++ b/Text2Texture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36d5d83ec3fce0541b5fe285a01cc0a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Editor.meta b/Text2Texture/Editor.meta new file mode 100644 index 0000000..3fdec38 --- /dev/null +++ b/Text2Texture/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bd9e230c8fe4534da61a8da601c8b8e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Editor/TextToTexture.cs b/Text2Texture/Editor/TextToTexture.cs new file mode 100644 index 0000000..dea2062 --- /dev/null +++ b/Text2Texture/Editor/TextToTexture.cs @@ -0,0 +1,596 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using UnityEngine; +using TMPro; +using UnityEditor; +using Object = UnityEngine.Object; + +namespace DreadScripts.TextToTexture +{ + public class TextToTexture : EditorWindow + { + #region Constants + + private const string POIYOMI_SHADER_NAME = ".poiyomi/• Poiyomi Toon •"; + private const string FALLBACK_SHADER_NAME = "Standard"; + + private const string DUMMY_PARENT_NAME = "(Temp) TTT_Objects"; + + private const string EDITORPREFS_SAVEPATH = "Text2TextureSavePath"; + private const string EDITORPREFS_DEFAULTSAVEPATH = "Assets/DreadScripts/TextToTexture/Generated Assets"; + + private const string RESOURCE_FONTPATH = "Assets/DreadScripts/TextToTexture/Resources/TTT_DancingScript TMP.asset"; + private const string RESOURCE_FONTGUID = "e7d6a5821a387564caacc9929e10eb22"; + + private const string RESOURCE_TEMPLATEPATH = "Assets/DreadScripts/TextToTexture/Resources/TTT_CanvasTemplate.prefab"; + private const string RESOURCE_TEMPLATEGUID = "2cd48bc473a380748ad104409753555e"; + + private readonly string[] DimensionPresets = + { + "128x128", + "256x256", + "512x512", + "1024x1024", + "2048x2048", + "4096x4096", + }; + + #endregion + + #region Automated Variables + + public static string savePath; + + private static GUIContent resetIcon; + private static bool showExtra; + private static bool isInCustomizing; + + private static Camera tempCamera; + private static TextMeshProUGUI tempText; + private static GameObject tempParent; + private static Material tempMaterial; + private static RenderTexture tempRenderTexture; + + #endregion + + #region Input Variables + public static string textInput = ""; + public static TextureGenerationType generationType = TextureGenerationType.GenerateMaterial; + + public static TMP_FontAsset customFont; + public static float outlineThickness = 0.075f; + public static float extraPadding = 5; + public static Vector2 offset; + public static int resolutionWidth = 1024; + public static int resolutionHeight = 1024; + + public static float verticalMargin = 100; + public static float horizontalMargin = 100; + + public static bool invert; + public static bool wrapText = true; + #endregion + + #region Declarations + public enum TextureGenerationType + { + GenerateNormalMap, + GenerateMask, + GenerateCustomTexture, + GenerateMaterial + } + #endregion + + [MenuItem("DreadTools/Utility/Text2Texture")] + public static void showWindow() + { + var title = GetWindow(false, "Text2Texture", true).titleContent; + title.image = EditorGUIUtility.IconContent("GUIText Icon").image; + } + + private void OnGUI() + { + EditorGUI.BeginDisabledGroup(isInCustomizing); + + GUIStyle iconStyle = new GUIStyle() {margin = new RectOffset(0, 0, 1, 1)}; + + using (new GUILayout.VerticalScope("helpbox")) + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUILayout.Label("Text Input", "boldlabel"); + GUILayout.FlexibleSpace(); + } + textInput = EditorGUILayout.TextArea(textInput); + generationType = (TextureGenerationType)EditorGUILayout.EnumPopup(generationType); + } + + using (new GUILayout.VerticalScope("box")) + { + showExtra = EditorGUILayout.Foldout(showExtra, "Extra Settings"); + + if (showExtra) + { + + using (new GUILayout.HorizontalScope("helpbox")) + customFont = (TMP_FontAsset) EditorGUILayout.ObjectField("Custom Font", customFont, typeof(TMP_FontAsset), false); + + using (new GUILayout.HorizontalScope("helpbox")) + using (new EditorGUI.DisabledScope(generationType != TextureGenerationType.GenerateNormalMap && generationType != TextureGenerationType.GenerateMaterial)) + outlineThickness = Mathf.Clamp01(EditorGUILayout.FloatField("Normal Thickness", outlineThickness)); + + using (new GUILayout.HorizontalScope("helpbox")) + extraPadding = EditorGUILayout.FloatField("Padding", extraPadding); + + using (new GUILayout.HorizontalScope("helpbox")) + { + GUILayout.Label("Offset", GUILayout.Width(136)); + offset = EditorGUILayout.Vector2Field(GUIContent.none, offset); + } + + using (new GUILayout.HorizontalScope("helpbox")) + { + GUILayout.Label("Margin (%)", GUILayout.Width(136)); + + EditorGUIUtility.labelWidth = 10; + horizontalMargin = EditorGUILayout.FloatField(new GUIContent("X", "Width"), horizontalMargin); + verticalMargin = EditorGUILayout.FloatField(new GUIContent("Y", "Height"), verticalMargin); + EditorGUIUtility.labelWidth = 0; + } + + using (new GUILayout.HorizontalScope("helpbox")) + { + GUILayout.Label("Resolution", GUILayout.Width(136)); + + EditorGUIUtility.labelWidth = 0; + + EditorGUIUtility.labelWidth = 10; + resolutionWidth = EditorGUILayout.IntField(new GUIContent("X", "Width"), resolutionWidth); + resolutionHeight = EditorGUILayout.IntField(new GUIContent("Y", "Height"), resolutionHeight); + EditorGUIUtility.labelWidth = 0; + + + int dummy = -1; + EditorGUI.BeginChangeCheck(); + dummy = EditorGUILayout.Popup(dummy, DimensionPresets, GUILayout.Width(18)); + if (EditorGUI.EndChangeCheck()) + { + string[] dimensions = ((string) DimensionPresets.GetValue(dummy)).Split('x'); + resolutionWidth = int.Parse(dimensions[0]); + resolutionHeight = int.Parse(dimensions[1]); + } + + if (GUILayout.Button(resetIcon, iconStyle, GUILayout.Height(18), GUILayout.Width(18))) + resolutionWidth = resolutionHeight = 1024; + } + + using (new GUILayout.HorizontalScope("helpbox")) + { + wrapText = EditorGUILayout.Toggle("Wrap Text", wrapText); + + using (new EditorGUI.DisabledScope((int)generationType > 1)) + invert = EditorGUILayout.Toggle(new GUIContent("Invert Map"), invert); + } + } + } + + EditorGUI.EndDisabledGroup(); + + if (!isInCustomizing) + { + using (new EditorGUI.DisabledScope(string.IsNullOrWhiteSpace(textInput))) + using (new GUILayout.HorizontalScope()) + { + if (GUILayout.Button("Generate")) + { + switch (generationType) + { + case TextureGenerationType.GenerateNormalMap: + case TextureGenerationType.GenerateMask: + GenerateInit(); + break; + case TextureGenerationType.GenerateCustomTexture: + isInCustomizing = true; + GenerateInit(); + break; + case TextureGenerationType.GenerateMaterial: + + generationType = TextureGenerationType.GenerateNormalMap; + Texture2D normalTexture = GenerateInit(); + + generationType = TextureGenerationType.GenerateMask; + bool oldInvert = invert; + invert = true; + Texture2D maskTexture = GenerateInit(); + invert = oldInvert; + + generationType = TextureGenerationType.GenerateMaterial; + + Shader currentShader = Shader.Find(POIYOMI_SHADER_NAME) ?? Shader.Find(FALLBACK_SHADER_NAME); + Material newMaterial = new Material(currentShader); + #region Standard/Generic Property Set + newMaterial.SetTexture("_MainTex", maskTexture); + newMaterial.SetTexture("_MetallicGlossMap", maskTexture); + newMaterial.SetTexture("_BumpMap", normalTexture); + newMaterial.SetFloat("_Glossiness", 0.85f); + newMaterial.SetFloat("_GlossMapScale", 0.85f); + #endregion + + #region Poiyomi Propert Set + newMaterial.EnableKeyword("VIGNETTE_CLASSIC"); + newMaterial.SetTexture("_BRDFSpecularMap", maskTexture); + newMaterial.SetTexture("_BRDFMetallicMap", maskTexture); + newMaterial.SetFloat("_LightingMode", 1); + newMaterial.SetFloat("_LightingStandardSmoothness", 0.85f); + newMaterial.SetFloat("_EnableBRDF", 1); + newMaterial.SetFloat("_BRDFMetallic", 1); + newMaterial.SetFloat("_BRDFGlossiness", 0.85f); + #endregion + string newMatName = Regex.Replace(textInput, "[^\\w\\._ ]", ""); + if (newMatName.Length > 30) newMatName = "Generated TextMaterial"; + string newMatPath = AssetDatabase.GenerateUniqueAssetPath($"{savePath}/{newMatName}.mat"); + AssetDatabase.CreateAsset(newMaterial, newMatPath); + EditorGUIUtility.PingObject(newMaterial); + break; + } + + } + } + } + else + { + if (!tempCamera) isInCustomizing = false; + if (GUILayout.Button("Save Texture")) + GenerateTexture(); + } + + + DrawSeparator(); + savePath = AssetFolderPath(savePath, "New Textures Path", EDITORPREFS_SAVEPATH, false); + Credit(); + } + + private Texture2D GenerateInit() + { + GameObject canvasTemplate = ReadyResource(RESOURCE_TEMPLATEPATH, RESOURCE_TEMPLATEGUID); + customFont = customFont ?? ReadyResource(RESOURCE_FONTPATH, RESOURCE_FONTGUID); + + tempRenderTexture = new RenderTexture(resolutionWidth, resolutionHeight, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); + + float resolutionRatio = (float) resolutionWidth / resolutionHeight; + + tempParent = GameObject.Find(DUMMY_PARENT_NAME); + if (tempParent) DestroyImmediate(tempParent); + tempParent = new GameObject(DUMMY_PARENT_NAME) + { + hideFlags = HideFlags.DontSaveInEditor | HideFlags.DontSaveInBuild, + transform = + { + position = new Vector3(420, 666, 69) + } + }; + + GameObject canvas = Instantiate(canvasTemplate, tempParent.transform); + if (generationType == TextureGenerationType.GenerateCustomTexture) EditorGUIUtility.PingObject(canvas.GetInstanceID()); + + tempCamera = canvas.GetComponentInChildren(); + tempText = canvas.GetComponentInChildren(); + RectTransform textRect = tempText.GetComponent(); + + tempCamera.transform.Translate(-offset); + tempCamera.orthographicSize = 80 + extraPadding * 2; + + tempText.enableWordWrapping = wrapText; + tempText.font = customFont; + tempText.text = textInput; + + switch (generationType) + { + case TextureGenerationType.GenerateNormalMap: + CreateTemporaryMaterial(tempText.fontSharedMaterial, true, true); + break; + case TextureGenerationType.GenerateMask: + CreateTemporaryMaterial(tempText.fontSharedMaterial, true, false); + break; + case TextureGenerationType.GenerateCustomTexture: + CreateTemporaryMaterial(tempText.fontSharedMaterial, false, false); + break; + } + + + textRect.sizeDelta = new Vector2(160 * resolutionRatio * (horizontalMargin/100), 160 * (verticalMargin / 100)); + + + return isInCustomizing ? null : GenerateTexture(); + } + + private Texture2D GenerateTexture() + { + isInCustomizing = false; + tempCamera.targetTexture = tempRenderTexture; + RenderTexture.active = tempRenderTexture; + + ReadyPath(savePath); + byte[] textureBytes = null; + + switch (generationType) + { + case TextureGenerationType.GenerateNormalMap: + { + + tempMaterial.SetFloat("_LightAngle", 0); + Texture2D bottomTexture = CaptureRender(); + + tempMaterial.SetFloat("_LightAngle", 6.28f / 4); + Texture2D rightTexture = CaptureRender(); + + tempMaterial.SetFloat("_LightAngle", 6.28f / 4 * 2); + Texture2D topTexture = CaptureRender(); + + tempMaterial.SetFloat("_LightAngle", 6.28f / 4 * 3); + Texture2D leftTexture = CaptureRender(); + + + Color[] bottomPixels = bottomTexture.GetPixels(); + Color[] rightPixels = rightTexture.GetPixels(); + Color[] topPixels = topTexture.GetPixels(); + Color[] leftPixels = leftTexture.GetPixels(); + + Color[] newColors = new Color[resolutionHeight * resolutionWidth]; + + Parallel.For(0, resolutionHeight, i => + { + Parallel.For(0, resolutionWidth, j => + { + int currentIndex = i * resolutionWidth + j; + float horizontalInfluence = 0.5f + leftPixels[currentIndex].r / 2 - rightPixels[currentIndex].r / 2; + float verticalInfluence = 0.5f + bottomPixels[currentIndex].r / 2 - topPixels[currentIndex].r / 2; + float blueColor = 1 - ((Mathf.Abs(horizontalInfluence - 0.5f) + Mathf.Abs(verticalInfluence - 0.5f)) / 2); + newColors[currentIndex] = new Color(horizontalInfluence, verticalInfluence, blueColor); + }); + }); + + DestroyImmediate(rightTexture); + DestroyImmediate(topTexture); + DestroyImmediate(leftTexture); + + bottomTexture.SetPixels(newColors); + bottomTexture.Apply(); + textureBytes = bottomTexture.EncodeToPNG(); + DestroyImmediate(bottomTexture); + break; + } + case TextureGenerationType.GenerateMask: + { + CreateTemporaryMaterial(tempText.fontSharedMaterial, true, false); + + tempCamera.backgroundColor = invert ? Color.white : Color.black; + Texture2D maskTexture = CaptureRender(); + textureBytes = maskTexture.EncodeToPNG(); + DestroyImmediate(maskTexture); + + break; + } + case TextureGenerationType.GenerateCustomTexture: + { + Texture2D newTexture = CaptureRender(); + textureBytes = newTexture.EncodeToPNG(); + DestroyImmediate(newTexture); + break; + } + } + + RenderTexture.active = null; + tempRenderTexture.Release(); + + Texture2D generatedTexture = SaveTexture(textureBytes); + EditorGUIUtility.PingObject(generatedTexture); + + if (tempParent) + DestroyImmediate(tempParent); + + return generatedTexture; + } + + private static Texture2D SaveTexture(byte[] textureBytes) + { + AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(tempMaterial)); + string suffix; + switch (generationType) + { + case TextureGenerationType.GenerateNormalMap: + suffix = " Normal"; + break; + case TextureGenerationType.GenerateMask: + suffix = " Mask"; + break; + default: + suffix = string.Empty; + break; + } + string texturePath = AssetDatabase.GenerateUniqueAssetPath($"{savePath}/{Regex.Replace(textInput, "[^\\w\\._ ]", "")}{suffix}.png"); + try + { + File.WriteAllBytes(texturePath, textureBytes); + } + catch + { + texturePath = AssetDatabase.GenerateUniqueAssetPath($"{savePath}/Generated TextTexture.png"); + File.WriteAllBytes(texturePath, textureBytes); + } + + AssetDatabase.ImportAsset(texturePath); + + TextureImporter textureSettings = (TextureImporter)AssetImporter.GetAtPath(texturePath); + + if (generationType == TextureGenerationType.GenerateNormalMap) textureSettings.textureType = TextureImporterType.NormalMap; + if (generationType == TextureGenerationType.GenerateMask) textureSettings.sRGBTexture = false; + + textureSettings.maxTextureSize = 1024; + textureSettings.crunchedCompression = true; + textureSettings.compressionQuality = 100; + + textureSettings.streamingMipmaps = true; + textureSettings.SaveAndReimport(); + + return (Texture2D)AssetDatabase.LoadMainAssetAtPath(texturePath); + } + + private static Texture2D CaptureRender() + { + tempCamera.Render(); + Texture2D capturedTexture = new Texture2D(resolutionWidth, resolutionHeight, TextureFormat.RGBA32, false); + capturedTexture.ReadPixels(new Rect(0, 0, resolutionWidth, resolutionHeight), 0, 0); + return capturedTexture; + } + + private static void SetRequiredMaterialSettings(Material m, bool isNormal) + { + foreach (var key in m.shaderKeywords) + m.DisableKeyword(key); + + if (isNormal) + { + m.EnableKeyword("BEVEL_ON"); + m.SetFloat("_OutlineWidth", outlineThickness); + } + + m.SetFloat("_ShaderFlags", 0); + m.SetFloat("_Bevel", isNormal ? invert ? -1 : 1 : 0); + m.SetFloat("_BevelOffset", 0); + m.SetFloat("_BevelClamp", 0); + m.SetFloat("_BevelRoundness", 0); + m.SetFloat("_BevelWidth", 0.5f); + + m.SetFloat("_Ambient", 1); + m.SetFloat("_SpecularPower", 1); + m.SetFloat("_Reflectivity", 5); + m.SetFloat("_Diffuse", 0); + + m.SetFloat("_BumpFace", 0); + m.SetFloat("_BumpOutline", 0); + + m.SetColor("_FaceColor", isNormal ? Color.clear : invert ? Color.black : Color.white); + m.SetColor("_OutlineColor", isNormal ? Color.black : Color.clear); + m.SetColor("_ReflectFaceColor", Color.clear); + m.SetColor("_ReflectOutlineColor", Color.clear); + m.SetColor("_SpecularColor", new Color(1.498039f, 1.498039f, 1.498039f)); + } + + private static void CreateTemporaryMaterial(Material original, bool ForceSettings, bool isNormal) + { + ReadyPath($"{savePath}/Temp"); + string path = AssetDatabase.GenerateUniqueAssetPath($"{savePath}/Temp/(Temp) {original.name}.mat"); + tempMaterial = CopyAssetAndReturn(original, path); + if (ForceSettings) SetRequiredMaterialSettings(tempMaterial, isNormal); + tempText.fontSharedMaterial = tempMaterial; + } + + private void OnEnable() + { + savePath = EditorPrefs.GetString(EDITORPREFS_SAVEPATH, EDITORPREFS_DEFAULTSAVEPATH); + resetIcon = new GUIContent(EditorGUIUtility.IconContent("d_Refresh")) {tooltip = "Reset Dimensions"}; + } + + #region DSHelper Methods + + private static T ReadyResource(string resourcePath, string resourceGUID = "", string msg = "") where T : Object + { + T asset = Resources.Load(resourcePath); + if (asset) return asset; + + if (!string.IsNullOrWhiteSpace(resourceGUID)) + { + asset = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(resourceGUID)); + if (asset) return asset; + } + + if (string.IsNullOrWhiteSpace(msg)) msg = $"Required Resources Asset at Resource Path {resourcePath} not found! Execution may not proceed."; + EditorUtility.DisplayDialog("Error", msg, "Heck"); + throw new NullReferenceException(msg); + } + + private static void ReadyPath(string path) + { + if (Directory.Exists(path)) return; + + Directory.CreateDirectory(path); + AssetDatabase.ImportAsset(path); + } + + private static T CopyAssetAndReturn(T obj, string newPath) where T : Object + { + string assetPath = AssetDatabase.GetAssetPath(obj); + Object mainAsset = AssetDatabase.LoadMainAssetAtPath(assetPath); + + if (!mainAsset) return null; + if (obj != mainAsset) + { + T newAsset = Object.Instantiate(obj); + AssetDatabase.CreateAsset(newAsset, newPath); + return newAsset; + } + + AssetDatabase.CopyAsset(assetPath, newPath); + return AssetDatabase.LoadAssetAtPath(newPath); + } + + private static string AssetFolderPath(string variable, string title, string playerpref, bool isPlayerPrefs = true) + { + using (new GUILayout.HorizontalScope()) + { + using (new EditorGUI.DisabledScope(true)) + EditorGUILayout.TextField(title, variable); + + if (GUILayout.Button("...", GUILayout.Width(30))) + { + var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : string.Empty, string.Empty); + if (string.IsNullOrEmpty(dummyPath)) + return null; + + if (!dummyPath.StartsWith("Assets")) + { + Debug.LogWarning("New Path must be a folder within Assets!"); + return null; + } + + variable = FileUtil.GetProjectRelativePath(dummyPath); + if (isPlayerPrefs) + PlayerPrefs.SetString(playerpref, variable); + else + EditorPrefs.SetString(playerpref, variable); + } + } + + return variable; + } + + private static void DrawSeparator(int thickness = 2, int padding = 10) + { + Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(thickness + padding)); + r.height = thickness; + r.y += padding / 2f; + r.x -= 2; + r.width += 6; + ColorUtility.TryParseHtmlString(EditorGUIUtility.isProSkin ? "#595959" : "#858585", out Color lineColor); + EditorGUI.DrawRect(r, lineColor); + } + + private static void Credit() + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made By Dreadrith#3238", "boldlabel")) + Application.OpenURL("https://linktr.ee/Dreadrith"); + } + } + + #endregion + } +} diff --git a/Text2Texture/Editor/TextToTexture.cs.meta b/Text2Texture/Editor/TextToTexture.cs.meta new file mode 100644 index 0000000..09b6a9c --- /dev/null +++ b/Text2Texture/Editor/TextToTexture.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efa3db7a402bc0e44a0ffbff1d95c11a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Editor/com.dreadscripts.text2texture.Editor.asmdef b/Text2Texture/Editor/com.dreadscripts.text2texture.Editor.asmdef new file mode 100644 index 0000000..1aae7a3 --- /dev/null +++ b/Text2Texture/Editor/com.dreadscripts.text2texture.Editor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "com.dreadscripts.text2texture.Editor", + "references": [ + "GUID:6546d7765b4165b40850b3667f981c26", + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Text2Texture/Editor/com.dreadscripts.text2texture.Editor.asmdef.meta b/Text2Texture/Editor/com.dreadscripts.text2texture.Editor.asmdef.meta new file mode 100644 index 0000000..2d8e868 --- /dev/null +++ b/Text2Texture/Editor/com.dreadscripts.text2texture.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f40d54adece044a47a43729495c62653 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/LICENSE b/Text2Texture/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/Text2Texture/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Text2Texture/LICENSE.meta b/Text2Texture/LICENSE.meta new file mode 100644 index 0000000..93b6ef2 --- /dev/null +++ b/Text2Texture/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 346c416569d58b04794129825a43a514 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/README.md b/Text2Texture/README.md new file mode 100644 index 0000000..67bfc62 --- /dev/null +++ b/Text2Texture/README.md @@ -0,0 +1,26 @@ +# Text2Texture +Easily generate a Normal Map, Mask, Custom Text Texture or a Material from given text input + +## Requires TextMeshPro! +Window > Package Manager > TextMeshPro. When prompted, Import TMP Essentials. + +## Features +- Supports custom font to use any font you'd like +- Generate a Normal Map to engrave or emboss text on a surface +- Generate a Mask to apply whatever masked effects you'd like in a text shape +- Generate a Material utilizing both of the maps. Uses Poiyomi and falls back to Standard. +- Easily generate any text image by customizing it in the intermediate stage in "Generate Custom Texture" +- Extra settings to generate the textures the way you want them + +![image](https://cdn.discordapp.com/attachments/1096063656447459490/1096063656632000512/brandeded.gif?ex=66343d13&is=6632eb93&hm=1decea93481aaa9b076fb86306b85d99616bbe21872ba82c8e5e9512074bc2f7&) + +## How to use a custom font +- Import your font asset into Unity +- Right Click Font > Create > TextMeshPro > Font Asset +- (Optional) You may change the settings on this asset if you'd like +- You can now Drag and Drop the new asset to the Custom Font field anytime +Done! + + +### Thank you +If you enjoy Text2Texture, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! diff --git a/Text2Texture/README.md.meta b/Text2Texture/README.md.meta new file mode 100644 index 0000000..f5b39f4 --- /dev/null +++ b/Text2Texture/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 44ba8f348e8b04c41920d455dc61e987 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Resources.meta b/Text2Texture/Resources.meta new file mode 100644 index 0000000..3bc76ef --- /dev/null +++ b/Text2Texture/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1abe35cf9f775ad4fb2d5df09669fe92 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Resources/TTT_CanvasTemplate.prefab b/Text2Texture/Resources/TTT_CanvasTemplate.prefab new file mode 100644 index 0000000..42a5cc5 --- /dev/null +++ b/Text2Texture/Resources/TTT_CanvasTemplate.prefab @@ -0,0 +1,310 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8085274800980037037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8085274800980037038} + - component: {fileID: 8085274800980037039} + m_Layer: 0 + m_Name: Render Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8085274800980037038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274800980037037} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -200} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8085274801473204273} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8085274800980037039 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274800980037037} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + 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: 1 + orthographic size: 90 + 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!1 &8085274801473204286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8085274801473204273} + - component: {fileID: 8085274801473204275} + - component: {fileID: 8085274801473204272} + m_Layer: 5 + m_Name: Input Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8085274801473204273 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274801473204286} + 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_Children: + - {fileID: 8085274800980037038} + m_Father: {fileID: 8085274802494049708} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 160} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8085274801473204275 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274801473204286} + m_CullTransparentMesh: 0 +--- !u!114 &8085274801473204272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274801473204286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: e7d6a5821a387564caacc9929e10eb22, type: 2} + m_sharedMaterial: {fileID: -567968814723445512, guid: e7d6a5821a387564caacc9929e10eb22, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 0 + m_fontSizeMax: 999 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &8085274802494049704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8085274802494049708} + - component: {fileID: 8085274802494049709} + - component: {fileID: 8085274802494049706} + - component: {fileID: 8085274802494049707} + m_Layer: 5 + m_Name: TTT_CanvasTemplate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8085274802494049708 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274802494049704} + 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_Children: + - {fileID: 8085274801473204273} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 160} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &8085274802494049709 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274802494049704} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &8085274802494049706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274802494049704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &8085274802494049707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8085274802494049704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 diff --git a/Text2Texture/Resources/TTT_CanvasTemplate.prefab.meta b/Text2Texture/Resources/TTT_CanvasTemplate.prefab.meta new file mode 100644 index 0000000..e6cf026 --- /dev/null +++ b/Text2Texture/Resources/TTT_CanvasTemplate.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2cd48bc473a380748ad104409753555e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Resources/TTT_DancingScript Font.ttf b/Text2Texture/Resources/TTT_DancingScript Font.ttf new file mode 100644 index 0000000..5ddb3b7 Binary files /dev/null and b/Text2Texture/Resources/TTT_DancingScript Font.ttf differ diff --git a/Text2Texture/Resources/TTT_DancingScript Font.ttf.meta b/Text2Texture/Resources/TTT_DancingScript Font.ttf.meta new file mode 100644 index 0000000..ccccfa0 --- /dev/null +++ b/Text2Texture/Resources/TTT_DancingScript Font.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 2dedba84ce1ce5c4c8bfb2b6ae52aabc +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Dancing Script + fontNames: + - Dancing Script + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/Resources/TTT_DancingScript TMP.asset b/Text2Texture/Resources/TTT_DancingScript TMP.asset new file mode 100644 index 0000000..8bb7a9f --- /dev/null +++ b/Text2Texture/Resources/TTT_DancingScript TMP.asset @@ -0,0 +1,1656 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-3630272914525870158 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DancingScript-VariableFont_wght Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 1024 + m_Height: 1024 + m_CompleteImageSize: 1048576 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_IsPreProcessed: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 1048576 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709091012100c070604000000030608090f12100c070604000000030608090f11100c07060400000000000000000000000000000003080b0d0e100f0d0c0a0908070603000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e0d0707050100000000000000000000000000000000000000000000000000020507080d100e0e0c080300000000000000000000000000000000000000000000000000000000000000000002050708080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0d0f10111110100e0d0a08070502000000000000000000000000000000000000000000000000000000000000000000000000030608090b07060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090d0f0f0c080705020000000000030709090d0e0f0e0c080806020000000000000000000000000000000000000000000000000000000000000000000000010507070a0c0d0e0d0c0a07060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070b0d0f101111100f0d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080c0f11110f0c0808060200000000000000000000000306070a0e1011100e0a070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040707090807060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a080806020000000000000000000000000000000000010407070c0f10100f0d09090703000000000000000000000000000000000000000000000000000000020608080d0c0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080c0e10101111100f0e0d0b0907060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161c1e1d191312100c070a0f1315161c1e1d191313100c070a0f1215151c1e1d191413100c07010000000000000000000001080e14171a1b1d1b1a181716141312100b060e0e0d0d0c0c0b0b0b0b0b0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a090909090909090909070605030000000000000000000000000000000000000000000001080e14171a1b1a1413110d080200000000000000000000000000000000000000000002090e121415191c1b1a18140f0901000000000000000000000000000000000000000000000000000000000003090e1214151514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307090e121415181a1c1d1d1e1d1c1b19171514120e09060300000000000000000000000000000000000000000000000000000000000000040a0f131516181413110d07010000000000000000000000000003050608080706050300000000000000000000000000000000000000000000000000000000000000040a0f1315161a1c1b191414110e080200040a0f1315161a1b1c1b191514120f0a030000000000000000000000000000000000000000000000000000000000000002080d11131417191a1b1a19171413110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080d111314171a1c1d1d1d1d1c1a181514120e090401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191c1d1d1c191514120e090300000000000000060c101213171a1c1d1c1b171413100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11131415151312100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e111414171514120e09030000000000000000000000000002080d111314191c1d1d1c191615130f0a040000000000000000000000000000000000000000000000030a0f121415191916130d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090f121415191b1c1d1e1d1d1c1b1a18161413110d0706050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f2223292b2a25201f1c1812151b1f2223292b2a26201f1c1812151b1f2122292b2a26201f1d18120b030000000000000000020b131a1f2426272a282725242221201f1c171c1b1a1a19191818181817171717171717171717171717171717171716161616161616161616161616151413120f0b0607060401000000000000000000000000000000020b131a1f2426272721201e19130d0500000000000000000000000000000000000000050d141a1e20212629282724201a130b03000000000000000000000000000000000000000000000000000000060d141a1e212221211e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151a1e2122252728292a2a2a2928262421201e1a13120f0b0600000000000000000000000000000000000000000000000000000000070f161b1f22232420201d18130c0400000000000000000000060b0f121314151413120f0b0604010000000000000000000000000000000000000000000000000001070d161b1f22232728282521201e19140c080d161b1f2223272829282522211f1a150f0b06000000000000000000000000000000000000000000000000000000040a0f13191d20212426272727262321201d1813100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f13191d2021242729292a2a2929272521201e1a14110d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e151a1e212226292a2a292622211e1a150f0a04000000030a11171c1f202327292a292724201f1d18120d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c1113191d20212222201f1c17110e090300000000000000000000000000000000000000000000000000000000000000000000000000000000040b10141a1e20212322211e1a150e060000000000000000000000040c13191d202125282a2a292623221f1b16100b050000000000000000000000000000000000000000060e151a1f21222625231e19120a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10151a1f21222527292a2a2a2a292826252321201d181613120f0b060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2f30363837322d2c28231c20272b2e2f363837322d2c28231d20262b2e2f353837332d2c29241d150d05000000000000010b141d242b30333437353332302f2e2d2b282329282727262625252524242424242424242424242424242423232323232323232323232323232323232221201f1b17171413100d0703000000000000000000000000010b141d242b303334342e2d2a251e170e060000000000000000000000000000000001090f171f252a2d2e33363534302b251d150b0100000000000000000000000000000000000000000000000000060f171f262a2d2e2e2d2a251f170f0700000000000000010406070a0a0a07070501000000000000000000000000000000000000000000000000000000000000000000050b10161b1f22262b2d2e31333536373737363533312e2d2a25201f1c17110d080200000000000000000000000000000000000000000000000109101920272b2e2f312d2c29241d160d0500000000000003090e11171b1f20212221201f1b1713110d080100000000000000000000000000000000000000000000040c121820272b2e2f343535322e2d2a251f18131921272c2f3033353534322f2e2b261f1c17110a02000000000000000000000000000000000000000000000000060b161b1e252a2d2e303334343332302d2c29241d1c160e0902000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f252a2d2e313335363737363533312e2d2a25201d18130c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1f262b2e2f3335373735332e2d2b261f1b160d0801080c151c23282c2d303436373634302d2c29241d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c1e24292c2d2f2e2d2c28231c1a140e060000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f252a2d2e302f2e2b261f180f06000000000000000000080e161e24292c2d3235363635332f2e2c27211c160c07010000000000000000000000000000000000070f1820262b2e2f33322f2a241c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c20262b2e2f32343637373737363533312f2d2c292422201f1b1713110d07040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e19222b32383b3c4345433f3a38342e272b32373b3c4245433f3a38342e272a32373b3c4244433f3a38352f271f170e05000000000008131d262f363c3f414342403f3d3c3b3a38342e353534333332323231313131313131313131313130303030303030303030303030303030303030302f2f2e2d2b27222320201d18120f0b060000000000000000000008131d262f363c3f41403a393630292018100600000000000000000000000000000009131b212930363a3b404341403c372f271d1309000000000000000000000000000000000000000000000000030d17212931363a3b3b3a363129211910070000000001070d1013141617161413110d0803000000000000000000000000000000000000000000000000000000000003090e171c21272c2e31373a3b3e4042434444434341403d3b3a36302d2b28221c19130d070100000000000000000000000000000000000000000009131b222b32373b3c3e3a39352f281f170e0500000000060e151a1b22272b2d2e2e2e2d2b2722201d19130c070100000000000000000000000000000000000000040d161d242932383b3c4042423f3b39363028231e252a32383b3c404142413f3b3a37312b28221c140b06000000000000000000000000000000000000000000020a111720272b3036393a3d3f4041403f3d3a39352f2c272119140d0500000000000000000000000000000000000000000000000000000000000000000000070b141b22272b3036393a3e40424344444342403e3b3a36302c29241d17110a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e171f252a31373a3b3f424444423f3b3a37312c272119130c111a1e262e34383a3d41434443413d3a38352f29251e160e08020000000000000000000000000000000000000000000000000000000000000000000000000000020b121a22282d3035393a3c3b3a38342e2a261f180f0600000000000000000000000000000000000000000000000000000000000000000000000007111921272c30363a3b3d3b3a37312a21180c030000000000000008111a20283035393a3f42434342403c3b38322c282118120b03000000000000000000000000000000071019222a31373a3b403e3b352e251c0f060000000000000000000000000000000000000000000000000002020100000000000000000000000000000000000000000000000000000000020a111a21282d31373a3b3f4143434444434241403e3c3a39352f2f2d2b2722201d1813100c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202b343d4348494f51504c4644403930343d4347494f51504c4645403930343c4347484f51504c47454039312920170b02000000030e1a242f3841474c4e504e4d4b4a494746443f4342414140403f3f3e3e3e3e3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3c3c3c3c3c3c3c3c3a3937332d302d2c29241f1c17110b0600000000000000030e1a242f3841474c4e4d4746413a322a22180e050000000000000000000000000009121b252d333b4246484c4f4e4d4841392f251a0f03000000000000000000000000000000000000000000000009141f29333b4246484846423b332b22190e050000070c12181d202023242321201d19130f0b060000000000000000000000000000000000000000000000000000050d141a22282d32383b3c4246484b4d4f505051504f4e4c4a4846423d3938332d29241e18130c0400000000000000000000000000000000000000050e1b252d343d4347494b4745403a312920170d020000070f181f262b2d3337393b3b3a3937332d2c29241e18120b030000000000000000000000000000000000020b161f282f353d4347494d4f4e4c4746413b342e2930363d4348494d4e4f4e4c4847433c38332d261d17110a02000000000000000000000000000000000000020b141c222832373a4146474a4c4d4e4d4c4a4745413a38322a251f170e0700000000000000000000000000000000000000000000000000000000000000000810191d262d33373a4146474a4d4f505050504f4d4b4846423b39352f28231c150c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18202930363c4247484c4f50504f4c4847423c383229241e161b232c30383f44464a4d4f504f4e4a474540393530282019130c05000000000000000000000000000000000000000000000000000000000000000000000000000b141d242c33393a414547484846443f3836312a2117110a02000000000000000000000000000000000000000000000000000000000000000000071019232b32383b4246474a4847423c332a1e150b00000000000007101a232c323a4145474c4f50504f4c4948433d383329241d150d0500000000000000000000000000030c19222b343c4347484c4b4640372e21170d0300000000000000000000000000000000000000030608090d0f0f0e0b0706040000000000000000000000000000000000000000000000000a141c232c33393c4347484c4e4f505150504f4e4d4b494745413f3c3937332d2c29241f1c18120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323d464f54565c5e5d5853514a423a3d464e54565c5e5d5953514b433a3c464e53555c5e5d5953514b433b33291d140a00000008141f2b36414a52585a5d5b5a5857555453504a504f4e4d4d4c4c4b4b4b4b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49494949494949494949494949484746443f403d3a39352f2b28221c17110a02000000000008141f2b36414a52585a5a54524c443c342a20170c020000000000000000000000040e1b242d373f454d5254595c5b59534b41372b20140800000000000000000000000000000000000000000000020e1a26313b454d535554534d453d342b20170c030b12181d24292c2d3031302e2d29251f1c17110a020000000000000000000000000000000000000000000000080f171f252a33393d4348494d5355585a5b5c5d5d5d5c5b595754524d4946443f38353029241d160d070100000000000000000000000000000000020d17202d373f464e54565753514b433b32291e140800071119212a3137383f444647484746443f3a39352f29231d150d06000000000000000000000000000000000a141d28313940454e54565a5b5b5854524d454039323a41464f54565a5b5c5b5855534e46443f382f28231c140c0400000000000000000000000000000000020b141d262d333d43474c525457595a5a5a595654514b48443d3630292018100700000000000000000000000000000000000000000000000000000000000008121a222a2f383f44464c5254575a5c5c5d5d5c5c5a5854524d4745403a342e261e18100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212a333b42464d5355595c5d5d5c5955534d48433d352f281f252d353e424a5053565a5c5d5c5a5753514b46413a322a251e170e07000000000000000000000000000000000000000000000000000000000000000000000008121d262f363e45494c5254555553504a46423b3327221b140b0200000000000000000000000000000000000000000000000000000000000000040f19232b353d44484d52545655534d453c30271c120700000000040f19222c353e444c5254585b5d5d5c5956544e48443e352f271f160e050000000000000000000000000b151e2b343d464e5355595752494033291f14090000000000000000000000000000000000030a0f1215151a1b1c1a171413100c0701000000000000000000000000000000000000000008121c262e353e44494e5355585a5c5d5d5d5d5c5b59585654514b4c4946443f3a39352f2c28231c1a140f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a444f596063696b6a65605c544c44434e586062696b6a65605c554c44424e585f62686b6a66605d554d453b2f261c110600000b1724303c47525c64676a686665636261605c545d5c5b5a5a5959585858575757575757575757575757575757565656565656565656565656565656565655545350494d4a4745403938332d27221b140b04000000000b1724303c47525c646767615e564e463c32291e130800000000000000000000020c16202d363f4951575e61666968645d53483c3024180c0000000000000000000000000000000000000000000005121e2a36424d575f61615e574e463d32291e140c151c23282f35393a3d3d3d3a3935302b28221c140b0600000000000000000000000000000000000000000008111a212931363e44494e5456575f61646668696a6a6a69686664615e575653504a46413a352f281f18120b0300000000000000000000000000000008141e29323f495158606264605d554c443b3025190b040d19232b333c42474950535455545350494745413a342f271f181008000000000000000000000000000006111c262f39434b5158606267686865615e56514b433b444c525960636668686765625f5853504a423d342e261e160d040000000000000000000000000000000a141d262f383f444e54565e6163666767666563605d55544f46423b322a22180f060000000000000000000000000000000000000000000000000000000007101a242c343c41495053565e61646668696a6a69686664615e5753514b443f38302a221a12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2a333c454d52575f6266686a6a6866615f57544e45413a312a2d373f474f545c606367696a696763605d55524c443f3630292019100800000000000000000000000000000000000000000000000000000000000000000005101a242f3841485055565d606261605c54534d453f332d261d140a000000000000000000000000000000000000000000000000000000000000000a16212b353d474f54575e6163625f574d42392e23180c030000000a15202b343e4750565d60656869696866626058554f454039312820160e050000000000000000000007121c27303d474f585f6266635b52453b31261a0e01000000000000000000000000000000070c151b1f21222628282724201f1d18120c0701000000000000000000000000000000000005101a242e3840474f55585f626567696a6a6a6a6968666462605d5558555350494745403a38342e2a251f1b150e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56606b6f767876726d665e564c4b55606a6f757876726d675e564c4b545f6a6f757776726d675e574d42382d22170b00000d1a26333f4c58646e7476757372706f6e6d666a6968686766666565656464646464646464646464646363636363636363636363636363636363636363626261605b53595653514b46443f38332d261d160d040000000d1a26333f4c58646e74736d685f584e443a3025190d0400000000000000000008131e28323f48515b62696e7376746f64594d4034271a0e010000000000000000000000000000000000000000000714212d3a46535f696e6e6960584e443a30261c151e272e3439404547494a494746413a38332d261d180f090000000000000000000000000000000000000008121a232b333b4246505558606267696e71737576777776767473706e696763605b54524c45413a3129231d150d0500000000000000000000000000010d1925303b44515b626a6f716d675e564c41362a1d140c161f2b353d454d53535b60616161605b5354514c454039312a221a1209010000000000000000000000000b17222d38424b555d606a6f737575726e68605c554c444c565e616b6f73747574726e6a64605b544f443f3830281f160e040000000000000000000000000006111b262f38424a50586062686d707273747372706d67636059524d443c342a21180b020000000000000000000000000000000000000000000000000000040f19222c363e464e535b6064686d717375767777767573716e6965605d55504a423c342c241b13090000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303c464e575e61696e7275777775726e69626058514c433c34363f49515961666d707476777674706d67615e565046413a322b221a120a01000000000000000000000000000000000000000000000000000000000000000c17222c36414a535a6164686d6f6e6d66615f5751443f382f261b11060000000000000000000000000000000000000000000000000000000000030f1b27323d474f596063696e706e695f544a4034281f14090000030f1b27323d46505a61686d7275767675736f6a636159514b433a322820160d030000000000000000000c18232e39424f59606a6e736d63574d42362a1e130800000000000000000000000000030b121820262b2e2f33353534312d2c29241d18120b03000000000000000000000000000000000b17222c36404a525961646a6e72747676777776757473716f6d67686562605b5353514b4644403936302b26201a150d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d686f7d8284837f786d685e52515d676f7c8284837f796d685e52515c666f7c8284837f796e695e544a3f33281c0f03000e1b2734414e5a6774808381807e7d7c7a797877767574747373727271717171717070707070707070707070707070707070707070706f6f6f6f6f6f6f6f6f6d6c65686663605d5553504a443f382f281f160c0100000e1b2734414e5a677480807a6f6a5f564c41362a20160a0000000000000000010d1925303a44505a626d727b7f828174685b4e4135281b08000000000000000000000000000000000000000000000815222e3b4855616e7b7b6f6a60564c42382e231d27303940444b515356575654524c46443f382f2a221b120a010000000000000000000000000000000007111a242c353d454d535a61646a6f74787b7e80828383848382817f7d7b7774706c66615d56514b433e342f271f170e0500000000000000000000000005111e2a36414c56626d727c7e796e685e52463e2f261c131d28313d474f575f61656c6e6e6d6c6565605d55514b433c342c241b13090000000000000000000000030f1c28333f4a545d676d757c8082817f7b736d675e564d545e686d767c808182817f7b77716c666059504a423a312820160d040000000000000000000000000b17222d38414a545b606a6f757a7d7f8081807f7d7a75706b615e564e463c33291d140e09030000000000000000000000000000000000000000000000000a15202b343e4850585f656c71767a7e80828383838382807e7b77726d67605c544e463e362d251b12090000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424e585f696e757b7f828383827f7b766f6a605d554e463e3e48515b626b70787d80828382817d79736d68625a524c443d342c241c130a01000000000000000000000000000000000000000000000000000000000004111c28333e48535c646c71767a7b7b79746e69625b504941382d221711070000000000000000000000000000000000000000000000000000000007131f2c38434f59606b70767b7d7b6e665c51443b31251a0d040006131f2b37434e58616c707a7f828383827f7c77706b605d554c443a32281f150b010000000000000004101c2834404a54606b6f7c7f73695f53463a2f24190d000000000000000000000000030c151c232831373a3c404242413e3a39352f29241d150d07000000000000000000000000000004101c28333e48525c636c70777b7f8182838483838281807e7c7a7775726f6c6564605d5553514a46423b37312b261f18130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a868f91908b837a6d615853606d79858f91908c837a6d615853606d79858f91908c837b6e665b5044382b1f1206000b1724313e4a5764717d8a8e8d8b8a888786858483828180807f7f7e7e7e7e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7c7c7c7c7c7c7c7c7c7c7c7b7a79777573706d6764605b545049413a31281e130800000d1a2633404d596673808c857c6f685e52463d32271b0f040000000000000005111d2935414c56626c727f868c8f84776a5d51443025190d01000000000000000000000000000000000000000004111e2b3744515e6a7783867c6f685e544a3f3428262f39424a51555d60636463615e5653504a423c342c241c130a020000000000000000000000000000050e19232c363e474f575e616c70777c8084888b8d8e8f9090908f8e8c8a8784817c78726d68605d5550454039312920170e0500000000000000000000000714202d3946525e68727f898a847a6e615a5042382d2218242f3a434f5960696e74797a7b7a7976726d67605c554e463e362d251b12090000000000000000000006121f2b3844505b666d7981898d8e8e8b8680796e685e575c666d7a83898d8e8f8e8b88837e786f6b605c544c433a32281f160c0300000000000000000000030f1b27333f49535b666c737c82868a8c8d8d8d8c8986827d766e695f584e453b2f261b1a140f0a04000000000000000000000000000000000000000000030f1b27323d46505a616a6f787d83868a8d8f8d8c8c8c8e8d8b87837f79726d665f5850483f372d241b11070000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545f6a6e7b82878c8f90908f8c88827c746d675f584f4745505a626d727d84898d8f908f8d8a85807a716c615e564f463e362d251c130a01000000000000000000000000000000000000000000000000000000000814212d3945505a646f747e8386888885817b726d605b53493f332723190e040000000000000000000000000000000000000000000000000000000915222f3b4854606b707d83878983786d60574d42362a1f160c010815222e3b4754606a707e858b8e90908e8c89837d756d675e564c443a31271d12070000000000000006121f2c3844515c666f7d86877b6e61554c4135291c110600000000000000000000000b151e272e343c4347484d4e4f4d4a47454039352f271f191008000000000000000000000000000814212d3944505a636e737d83888b8d8f909090908f8e8c8b898684817f7c7875716d6764605c54524d47433c373129241d160d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c89989e9d958f82766a5f55626f7b88979e9d959082766a6055626e7b88979e9d959083786c605346392d201306000a1723303c4955616c75818d9299969599929190908f8e8d8d8c8c8b8b8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89898989898989898989898989898989898887858482807d7a75706c66605b534c433a2f24190d0100091623303c4956636f7c8991857a6d61584e43372b20150a000000000000000713202d3946525e68717e8b92999184786b564c4135291d1105000000000000000000000000000000000000000004111e2b3744515e6a778491847a6d665c50443e332d38414a545c60676d7070706d6864605b544e463e362e251c140a01000000000000000000000000020d17202b353e48505960696e767d83898d919697989892908f8f8f90919396918d89847f7a736d67615a514b433a322920170d03000000000000000000000814212e3b4754616e7a8692968f82766c61544a3f33281d2935414b55606b707b818587888785827e7a726d675f5850483f372d251b1108000000000000000004101d2935404b55606c78828e939a999392928d837a6e695e606d7883909499928c8786898d8b837c736d665d554c443a31281e150b000000000000000000010c161f2b3744505b656c7880878f9296918f8d8f9297928f89827b6f6a5f574d41382d2a261f1b150c07010000000000000000000000000000000000000006131f2b37434e58616c717c838a8f928d8683807f7f808284898f908b857f786f6a615a51493f362d23190e0400000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666e7c858f939a9792898686898e89817a6f6a6159504955616c727f8a91969a938e8786878b8c857e766d68605950483f372e251c130a010000000000000000000000000000000000000000000000000000000a1723303c4955616c74818a90918f92928e867f746c655b50443f352b20160c020000000000000000000000000000000000000000000000000000091623303c4956636f7c879095958c7f72695e53463e31281d1207111d2935414c56626f7c879298969185818183888a81796d685e564c43392f23180d040000000000000713202d3a4653606d7984918d8073675d5145382e23170b0000000000000000000007121c27303940444e5355595b5b5a5753514b454039312a221a11080000000000000000000000000a1623303c4955616c73808a9095989a9c9d9d9d9d9c9b99979a93918e8b8885817e7a75706d66615e57534e47423c352f281f18130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8592989f9f94887b6f6255606d798592989f9f94887c6f6255606d798591989fa095897c706356493d3023160a000814212d3945505a606c7880878d9297999c9e9d9c9b9b9a9999989898979797979797979797979797969696969696969696969696969696969696969695959892918f8c8986827d78716c655d564c4135291d1104000713202d3a4653606d7985928e81756a6054473c31261b0f010000000000000714212e3a4754616d7a85929f9f928679685e5246392d2013070000000000000000000000000000000000000000000c1926333f4c5966727f8c8f82786d605a50453c333f49535c666d737a7c7d7c7a76716c665f58504840372e261c130900000000000000000000000008141e29323d47505a616b707b828a90959a9d94908b888584838282838486898c9093918c868079706c605c554c443b32291f150b01000000000000000003101c28343f4a5466727f8c989f948a7d70665b5044382b202c3945515d67707d868e9297928b898a8b857f796f6a615a51493f372d231a0f060000000000000006131f2c3845515d67727f8b949e94908785878d90847b6e6865727f8b959f92877f7a7a7c80858e8780786d675d564c433a30271c1207000000000000000007121d2b37434e58606c77818d9396918a84828182858a9196948f857c6f695f53493f3a36312b262018120b030000000000000000000000000000000000000815222e3b4754606a717e8690959388807a767372727375787c828991928c837c716c625b51483f352b20160c0200000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798390979f9e92857d79797c81878e847c706c615a515764717e8a919da0998e807a797b7f848b8b827a6f6b615a514940372e251c130a0000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8a938f8483869095928b80776c605b51473d32281e130800000000000000000000000000000000000000000000000000000916222f3c4955626f7c88959f9f92867b6e615a5043392f24180c13202d3946525d6876828f999e91847b7574777c838e837a6d685e554b4034291f160c0100000000000a1723303d4a5663707d899692857a6d60544a3f34281c10030000000000000000000c18232e39424a51585f626668686764605d55514b433c342c231a12080000000000000000000005111e2a36414d5664717e8a929da0a7a7a9a9a9a9a9a8a7a6aca49f9e9b9897928e8a86827d79736e69625f58534d45413a3129241d160d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d68707e868e929894897c6f62565d67707d868e929895897c7063565c66707d868e9298958a7d7063574a3d3024170a0004111c28333e44505b666c737b8185898d90929897999a9b9d9e9fa2aaa1a2a2a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2a2a1aaa29f9e9d9c9b9a99989695949993928f8a847e776d685d5245392c2013060006121f2c3844515c6675828f93897c6f62584e43372b1e1308000000000004111d2935414c5666727f8c98a2a399877a6d6154473a2e2114070000000000000000000000000000000000000000000714202d3a4753606d7984918d80736c61574e433a44505b656d788086898a8986837e786e6a615a524940382e251b110800000000000000000000010d1925303b444f59616c717d858f949d9c959089837f7b79777675767678797c7f83878d92928c847d746d675e564c443b31271d1207000000000000000006121f2b3844505c6676828f9ca69d9184786c6053463c32272d3a4754606d798592989f92857f7c7d81868c837c716c625b51493f352c21180b020000000000000714202d3a4753606d7985929e9990827b787b808790837a6d657683909c9a8d80746e6d6f747a81888d82796d685d554c42392e23180e05000000000000010d18242f3a47535f6a737f8c939590847d79757475797d8491969792857b6e655b504846423b373229231d150d050000000000000000000000000000000006121e2b37424e57626f7c86929893887e746d6867666566656c70757d848f9490867e726d625a50473d32281e130800000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a95a0a9998c7f736b6d6f747b838d867e716c625b5e697784919da39f92867a6d6c6e72787e868f847d716c635b524940372e251c120900000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e8f8278767b838f94928d80746d62594f443a3025190c03000000000000000000000000000000000000000000000000000815222e3b47545f6a7784919da2988f82756c61554b4035291e1514212e3a4754616d7a86939f998c807369676a6f78818e837a6d675c51453e31281e130800000000000d192633404c5966737f8c99988b7f72665c5044382b1f160a000000000000000004101c2834404a545c606a6f73757574716d67605d554e463e352c241a10070000000000000000000714202d3946525e687783909d9f9e9d9c9c9c9c9d9d9e9fa2a9a2a4a6a8a9a19e9b98928f8a85807b756f6a625f57514b433e352f281f180f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56616c707c8286888882796d605355616b707b8186888883796d605354606b707b8185888883796d6053473a2d20140700000c172228333f4a545b60696e74797d808386888a8c8d8f90919298949495969697979798989898989898989898989797979695959494989291908f8e8d8c8b8a898887868585848483807a6d6054473a2d2114070004101c2834404a5465727f8b988f82766a5f53473a2f24190d01000000000613202c3945525d687783909daaab95887c6f6255493c2f22160900000000000000000000000000000000000000000006131f2c3845515d67707d89928a7e706a5f554b414c56606c77818d9298979792908a837c716c635b524a40372d231a0f0500000000000000000005111e2a36414c56606b717e8792989f9b928c837c76726e6c6569696969676d6f72767b80858d92918a81796d685e564c43392f24180c03000000000000000713202d3a4653606d7985929faaa0958a7d7164584e43372b323f4c5865727f8b97a1988a7d726f70747b828c867e726d625b51473e332a1d140a0000000000000b1824313e4b5764717e8a979f92867b6e696e737d868f82776c7985929f96897c70636062686d747d858f837a6d675d544a40342820170d02000000000004101d2935404b55626e7c86929890837a706c6667666d707a84919e979082776c605555534d47433c342f271f170e050000000000000000000000000000000814212e3a47535f6a76839098988d80736c615e565959535b60636b707a828f9392887f726c62594f443a3024190d04000000000000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e9ba7a396897d706360636a6e78808c877e726d62616e7b8795a0aa9d918477686061666d727b838e877e726d635b524940372e241b110800000000000000000000000000000000000000000000000000101d2a3743505d6a768390887c6f696e79828f94928b7f726b60564c4135291e150b0000000000000000000000000000000000000000000000000006131f2b37434e5865727f8c99a39e948a7d70675d51453d30271d16222f3c4955626f7c8899a4978b7e71645860666d77818e82796d605a50433a2f24190d04000000000c1926333f4c5966727f8c999e9184786d6053463d32271b0f03000000000000030d17212c3844515c666d747c808182807d79736d675f5850473e362c22190e0500000000000000000814212e3b4754616e7a879599929190908f8f9090909192979496989a9c9ea2a9aaa39f9b97928d86817c756e69605d554f45403a312a21191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a44505a616a6f757a7b7b766d665c514f5961696e75797b7b786d675d514f5960696e75797b7b786d675d5145392c2013060000050b17222d38424a50575f61666d707376797b7d7f818283848586878888898a8a8a8b8b8b8b8b8b8b8b8b8b8b8b8b8a8a8989888787868584838281807f7e7d7c7b7a797878777777746d685d5245392c20130600000c18232e3b4855616e7b889694887c6f62554c4135291d1104000000000714212d3a4754606d7a86939faca3978a7d7064574a3d3124170a00000000000000000000000000000000000000000004101d2935404b55616b74818d92867c6e675d5349525d68727f8c939f95908885868a90867e736d635c52493f352c21170b0200000000000000000714202d3946525e68707d879299a29b918b80786f6b6561605b535c5c555c606265696e737a808791938e837a6e685e554b4035291e150a000000000000000915222f3c4855626f7b8898a2a298929083766a6054473a2f35424f5b6875828e9b9f9285786b6264696e757f87887f726d62594f453c2f261b110600000000000f1b2835424e5b6875818e9b9b8f8275695e616b707d878b7f727a8798a395887b6e6255565e616b707b839083796d665c51443e32291f140900000000000613202c3945515d6774818e9992867b6e68605b545c6068717e8a969f948a7e716766615f57534e454039312920170f0500000000000000000000000000000815222f3b4855626e7b88949f92857a6d605a524c4c4c4950535960686d78818f94938b7e716b60564c41352920160c01000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683909ca9a295887c6f6255575f666d747f8b887f726c636f7c8996a8a99c9083766956545c60696e79818d887f736e635c52493f362d231a0f06000000000000000000000000000000000000000000000000101d293643505c6976838f86796d60676d78828f9592877d6f685e52463e30271d1207000000000000000000000000000000000000000000000000030f1b26323c4754616d7a86929fa69e9184796d60584e42392e2318222f3c4955626f7c8895a9988b7e716558545c656d78828e81746c61564c41352920150a000000000b1824313e4b5764717e8a97a0968a7d7064584e43372b20150900000000000009141f2c38444f59606d7881888c8e8e8d8a857f796f6a615a50483e342b20170b02000000000000000916232f3c4956626f7c898b8886848383838383838484858687898b8d8f9297989b9fa2a9a19e99928e87817b736d676159514b433c332b231a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323e4850585f62676d6f6e69605c544b474f575f62676d6e6e6c655d554b474f575f61676d6e6e6c665d554b4035291d110400000006111c262f383f444d53545c606366666d6e70727475777879797a7b7c7c7d7d7d7e7e7e7e7f7f7f7f7f7e7e7e7e7d7d7d7c7b7b7a797978777675737271706f6e6d6c656b6b6a6a67605d564c4135291d110400000714212d3a46535f697784919a8e8174675d5145392c201409000000000a1723303d4a5663707d8999a4afa5988c7f7265594c3f32261908000000000000000000000000000000000000000000000c18242f39434f59606d7983919183796d655b5054606d7a85929f9890837c78797d838c8a7f736e635b51473e33291d140a0000000000000006121f2b37434e58616e7a859299a39c928b7f736d666059555350494f4f4b515356575e61676d747d85919590837a6e675d51453e30261c11060000000000000a1723303d4a5663707d8996aa9f928592887c6f62564c41353643505c6976838f9c9d9184776a59575e616d727e878b7f726b61574d41382d22170b0300000000111e2b3744515e6a7784919d988c7f72655759606b717e8b867b7a8799a395897c6f62564c525961696e7a838f82786d605a50443b3025190b02000000000714202d3a4753606d7a8692988c7f72695e565961636a6f747884919e9d90837976736e69625f58514b433b322921170d03000000000000000000000000000b1724313e4a5764717d8a979b8e8174685d5246413f3f3f44464f565d666d78828f9692877d70685d52463e32281e1308000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa396897c7063564e545c606d727f8b887e716c6f7c8995aaaa9d9083776a5d4a50575f676d77808d8c80736e635b51483e352c21180e0400000000000000000000000000000000000000000000000e1b2834414e5b6774818e877a6d615d666d7983909791847a6d61594f43392e23180c020000000000000000000000000000000000000000000000000a15202d3946525e6875828e9ba8a1968d80736a60544b4034281f212e3b4754616e7a8797a1998c807366554b535c666d79838a7e71685d52453c32261b0f040000000815222e3b4855616e7b8896a09c9083766a6054473c31261a0f0300000000020e1a25303c4855616b74818e93999b9b9a97928c847c706c615a50463d32291d140a000000000000000815222f3b4855626e7c817e7b79787776767676767777787a7b7c7e808285888b8e92979a9fa2a39f9a938e868079706b605d554d453d352c231a11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202c363e464e53555d6062625f57514b423e454d53555c606262605b534b433d454d53555c606262605b544b433a2f24180d01000000000a141d262d333b42464a505356545c6062646667686a6b676d6e6e6f6f707071717172727272727272727171717170706f6f6e6d6d666b6a696867666563626160605b5e5e5e5d5a54524c433a2f24190d01000005121e2a36424d576773808d9a92867a6d6054473b31261a0e020000000c1926323f4c5965727f8c98abb5a79a8d8174675a4e413025190d0100000000000000000000000000000000000000000007121d27313d45515d676f7c86928f82776c605a5665727f8c989f92867a6e6a6d7078808a8c80736d62594f453b2f261c11060000000000000815212e3a47535f6a75818e97a2a0958d80736d605c544f4846443f4243404546494d52555d606b6f7b8491959083796d60594f42382e23170c0000000000000b1824313e4b5764717e8a97a49a8d80878e8174685d52453935424f5c6875828f9b9e918578665c51535b636c717e87877d70695f53493f33271f140900000000121f2c3945525f6c7885929f978a7d7064574f59616c74808d837886929f968a7d7063574a464f575f686d7a838d80746c61564d42362a1d140a000000000a1724303d4a5763707d8a9892867a6d60575e616b70777c80838e939d9f959087837f7b756f6a605c554d443b33291f150b010000000000000000000000000c1926323f4c5965727f8c98988b7e7165564c4136302d33373d444c545c666d7a84919991857a6d615a50443a2f24190d020000000000000000000000000000000000000000000000000000000000000004101d2a3743505d6a7683909da9a4978a7d7164574a4a505b626d737f8c877e706e7b8798a2aa9e9184776b554c444d555d656c74808d8c80736d635a50473d332a20160b02000000000000000000000000000000000000000000000b1824313e4b5764717e8a897d7063575d676e7b8592968e81756b61554b4034281e130800000000000000000000000000000000000000000000000005111d2a36414c5663707d8996a1a89f92877c6f665c51453d3128202d3946525e687885929e9b8f8275675d514a545d676f7c86857a6d60584e43372b21160a0000000714212d3a46535f697784919e9f94897c6f62584e43372b1f14090000000005121e2a36424d5763707d89939da59e938f8a8b8e91867e706c61584e443b2f261c11060000000000000814212e3a47535f6a6e74726f6c666a696969696a6a6b676d6e6f717375797b7e8185898e92989d9fa49f99928d847d746d675f574f473e352c231910060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1a232c343c43474b51535555534d454039333c42474b515355555350494139333b42464b5153555553504a423a31281d13070000000000020b141c22283136383f44464a4a51535557595a5c5d555c60616162636364646465656565656565656565656464646362626161605c545d5c5b5a5958575655545350495151514d4745413a31281e1308000000020e1a26313d495663707d8997988b7e7165574d42362a1e1205000003101c28343f4a546875818e9ba8b4a99c8f837669564c41362a1d1105000000000000000000000000000000000000000000010b151f2935404b555f6a717e8b938c80736c615e687783909d9a8d8073685f60666d737e878c7f726b61574d42382d22170b0200000000000915222f3c4855626f7c88939ea89d9183786d605a504a423d3937332d2e34383a3c42464c515960696e7b8591958e81746b61544a3f34281c100300000000000c1925323f4c5865727f8b98a5988b7f818f867a6d6054473d33414d5a6774808d9a9f9386796d605346515a616c717e8b857b6e655b50443b31261a0e0400000013202c3946535f6c7986929f96897c6f635649505a606d79838b7e84919e998c7f7266544a3f454d565e686e7b848a7e71695e52463d2f261b11060000000d1a2733404d5a6673808d998e8175675d60686d757d83898683818e9aa79b8f81808486827c736d675e564d453b31271d12070000000000000000000000000c1825323f4b5865727e8b9896897d7063564a3d2f2522272b323a424b545e68707d8993978e81756c61564c4135291e130800000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8a5988b7f7265584c3f44515b636d74818e867d6f7985929fab9f928578675d5145434b535b606c77818e8c7f726c62594f453c32281d140a000000000000000000000000000000000000000000000714202d3a4753606d79858e8174695f555e69717e8a93938a7d70675c51453a3025190d020000000000000000000000000000000000000000000000010d1925303a4653606c7884919eaba3999083796d60584e433a2f242a36414d566875828e9b9f9285796d6053474b555f6a727f8c80746a5f53473d32271b0f04000005121e2a36424d576673808d99a69b8f82756a5f53473b30251a0e020000000714202d3a46525e6976828f9ca59e938f817d7e818791877e706a60564d42382d22170b03000000000006121e2b37424e575f626765626a6f73746d665c5d5d555c6061636567656c6e7175797d81858a90959c9fa39f97918a81796e6960594f473e352b22180d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a222a313739404547484847423c342e2a313739404547484846443f382f2a313639404547484846443f382f281f160c01000000000000020a11171f262a2e34383a3d404446484a4c4e4f504b515354555556575757585858585858585858585858585757565655545453504a504f4e4d4c4b4a49484746443f444444413a39352f281f160c01000000000913202d3a4653606d7985929c908376695f53463a2d211409000006121f2b3844505c667783909daab6ab9e928578685e5246392d201307000000000000000000000000000000000000000000050c1319242f39434e58626c74818e93887e706a616d7a86939f98897c6f6256545c606c717e87887d70695e544a3f33281e13080000000005121e2a36424d576774808d9aa5a1968a7d70665c51443f38302d2b272223282c2d30363a41454f575e69707d8a93938a7d70665c5044382c1f140900000000000c1925323f4c5865727f8b98a4988b7e7d8a8b7f7265594f44383e4b5764717e8a97a49a897c7063544a485059626c73808d82776c60574d42362a20160a000000121f2c3845525f6b7885929e96897c6f63564945515c676f7c8785828f9c9c8f8275665c50443b444c565e696f7c86857b6e61594f41382d22170b0000000f1c2935424f5c6875828f988b7f7265606a6f7a828a857f7a767b8799a39b8e8175797d848680796e685e574d43392f23180c0300000000000000000000000916232f3c4956626f7c899695897c6f6256493c2f23171b20283039424c56606b75818e97938a7e70685d52453a3024190d02000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa6a79a8e817467544b403f49515b606d788290857b76838f9ca9a297877a6d6054473a4149505b656d78828f8b7e716b60574e443a2f261b11060000000000000000000000000000000000000000000613202c3945515d67727f8c867b6e675c57616c75828f989184796d60564c4135291e130800000000000000000000000000000000000000000000000008131f2b3844505b6673808d99a7aba0958c80736a60554b41352925303e4b5865717e8b99a2988a7d7164574d434e58606c7783877c6f62594f44382c20150a0000020e1a26313b4855626e7b88949f9f93877b6e62574d42362a1e13080000000815212e3b4854616e7b87939fa99b8f81757071757c8490867c6f685e544a3f33281f14090000000000020e1a26313c454e53555d676d757c7f81786d6053514b5153545658535b606265666d7074797e83898f949da0a19e938e837b706b61594f473d342a1f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101820262b2f35393a3c3b3a3731282320262b2f34383a3b3b3937332d261d262a2f34383a3b3b3938332d261d160d04000000000000000000060b141a1c23282c2d2e34383a3b3d3f414244404546474849494a4a4a4b4b4b4b4c4c4c4c4c4b4b4b4b4a4a4a4948484746443f444342403f3e3d3c3b3a3937332d3737342d2c29241e160d04000000000006121f2c3844515c6675818e9b94887b6e6155483b31261a0e02000713202d3a4653606d7986929facaeaca197877a6d6154473a2e2114070000000000000000000000000000000000000000050e171e252a2d313c46505a606d79839092867c6e68707d8a9a9f9285796d60534a505a616c717f8b857b6e665b50443a3025190d020000000714212d3a46535f697885919eab9e9184786c60544a40342e26201f1b17181c1f20252a2f353d454d57616b75828f9b9184786d6053463b30251a0e02000000000b1825323e4b5865717e8b98a4988b7e78849184776b6054483b3b4754616e7b8795a09a8d8073665b504447505a606c78828b7f72695f53463d32271b0f040000111e2b3744515e6a7784919d968a7d7063574a404b55606a74808d86929f9f9285796d6053463a3a444d57606a727f8b82756b6053493f33271b0f030000101d2a3643505d69768390978a7d70646b707c8487807a726d687986929f9d9083776d71788087837a6e695e554b40342920150a00000000000000000000000613202d394653606c78849196897d7063564a3d3023170f161e27303a444f59616d7a85929e92857a6d60564c4135291e1308000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a9aa9d908377665c5145384044515c666e7a859083797f8c99a9a996897c706356493d383f49535c666d798390877d706a5f564c41382d22170e05000000000000000000000000000000000000000004101d2935404b55606c78828f83796d665d5a616e7b8692968c7f72685e52463a3025190d020000000000000000000000000000000000000000000000030f1c28333f4a54626f7b8895a0aca29792877c6f675d51453e342a2e3a4754616d7a86939f9c8f8276695f534644505b656f7c8783766b6054483c32271b0f0300000914212e3a47535f6a7683909ca49a8e8174695e52463a3025190d0100000b1825313e4b5864717e8b9aa4a197887c6f64646a6f798290847a6e665b50443b31261a0e0400000000000915202a333c434e58606d7981888c897c6f63564940454748494b49505355545c6063676d71767d828990959fa39e9591867d706b61594f463c31281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1d24292c2d2f2f2e2b261f18151a1d23292c2d2f2f2d2b27221b141a1d23292c2d2f2f2d2b28221c140b04000000000000000000000003090e11171c1f2023282c2d2f313334352e34383a3b3b3c3c3d3d3e3e3e3f3f3f3f3f3f3f3f3e3e3e3e3d3d3c3c3b3a3a38342e3635343332302f2e2d2d2b27222b2a2721201d19130c0400000000000004101c2834404a5464717e8a99998c7f7266574d42362a1e1205000815222f3b4855626e7b8898a3aaa29fa296897c706356493d3023160700000000000000000000000000000000000000020b1720293036393a393f45515c676e7b859291847a6d73808d9a9d908376665c504444505a626d74808d83786c60564c41362a1e14080000000815222e3b4855616e7b8897a1a79a8d8074665b5042392e231c14120f0b0c1013131a1e2429333b454f59636f7c8997968b7e7164574d42362a1e1105000000000b1724313e4a5764717d8a97a4988c7f73808d897d7063574d423a46525e697784909d9e9184786c6053463e44505b666e7b85867b6e61584e43382b20160a0000101c2936434f5c6976828f9c988b7e7265584b3f434e58606d7a849198a2a298897c7063544a3f343b454e58606c7782897d70655b5044372b1f14090000101d2a3743505d6a76839096897d706b707d86857d736d67616b7885929e9e9184786b666d737e86847b6e675c51453c31261b0f030000000000000000000005121f2b3744505b65707d8a938a7e7164574b3e3124180b0c151e28323d46525e68727f8c97978c8073685d52463a3025190d010000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8897a1ac9f9286796d6053463a34404a545e68707d888e817c8997a1a5988c7f7265594c3f3238414a545d676e7b8592857c6e685d53493f332720160c0200000000000000000000000000000000000000010d18242f3944505b666d7a848f82786d675f5f6973808d9892867a6d61564c41362a1e14080000000000000000000000000000000000000000000000000b17222d3847535f6a7784909daa9f92858e84796d605a50463c322d3946525e687683909c9f93877b6e61544b4049535f6a7480897c6f63584e43372b1f1306000006121e2b37424e5764717d8a96a09f92867b6e61564c4135291d130700010e1b2834414e5b6774818e9aac9e9285786a60585f676d79839082786c60574d42362a20160a0000000000030e18222e3b4754606a75828e93998d807366574d42383a3b3c3e3f4446484a5153555d60646b70767d838c9298a0a09892867d706b60584e43392f24180d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12181d1f202222211e1a150c090e12181c1f202222201f1b17110a0e12181c1f202222201f1c17110a02000000000000000000000000000000060c101213181c1f20222426272923282c2d2e2e2f30303131313232323232323232323232313131302f2f2e2e2d2b2823292827262524232221201f1b171e1e1a1413110d080100000000000000000c18232e3a4754606d7a86929d908377695f53463a2d211408000b1724313e4a5764717d8a97aaa2989298988b7f7265584c3f2e23180c000000000000000000000000000000000000000a141d29323a4146474641404b555e69707d87928f827876838f9c9b8e817468544a3f3e48505a606d78838b7f72685e52463b3025190e0000000b1724313e4a5764717d8a97a9a3978a7d7064544a3f30271c110a050300000406090e13192129333e4854606b7885929d908376695e52463a2d201407000000000916232f3c4956626f7c8995aa998c80737b878f8275695f53463a424d566673808d99a196897d7063564c413f4a545e69717e8a82756a6054473d32271b0f03000d1a2733404d5a6673808d999a8d807467554b403d45515d67717e8a959faa9a8d8174665c504438333d44505b656e7b8683786c6053463b31261a0e0200101d293643505c6976838f978b7e71707d86857c706b605d556b7885919e9f9285786c5c606c707d8783796d60584e43372b1f140900000000000000000000030f1b27333f4953616b727f878d8073665a4d4033271a0d030c16202a36414c56606d7985929e92857a6d61564c41362a1d11050000000000000000000000000000000000000000000000000000000000000714212d3a46535f697885919eaba398897c6f6356493c2f39424d56616b73808d8b7e85929ea89b8e817568584e43372f38424b555e69707d8791847a6d655b50443d32281e1308000000000000000000000000000000000000000007121d28333f4a545e686e7b848f82796f6a60616d7a8692988d8073685e52463b3025190d01000000000000000000000000000000000000000000000006111c2b37434e5866737f8c99a79f9286818e81746c61584e443a3136414c5666727f8c99a49a8d8073665c5145414e58606d7a8582766a6054473b2e2215080000020e1a26313c4653606c7884919ea3998d8074685e52463a2f24180d0103101d293643505c6976838f9ca99c8f837669584e555d676e7a848b7f72695f53463d32271b0f0400000000000916222f3c4955626f7c88939e9d908477695e53463a2d2e302d3337393b4044464b51535960636b70787f8690959ea29892877d706a5f554b40352921160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314151514120e09030001070c101314151513120f0b060001070c101314151513120f0b06000000000000000000000000000000000000000306070c1012131517191b1c181c1f20212222232424242525252525252525252525252524242323222121201f1c171c1b1a19181716151413120f0b06110e07060401000000000000000000000713202c3945515d6776828f9c95887b6e6155483b3025190e020d192633404c5966737f8c99a69f9285929a8e817467544b4034281c1004000000000000000000000000000000000006111b262f3a444c5254524c44434d57606b717e8b928d807885929e998c807366594d40363f45515c666e7b86857a6d61564c41362a1c110600000c1925323f4c5865727f8b98a5a195887b6e6255483b2d22150b000000000000000001080f17212c38434f596875828e9b93877b6e6154473b2e211408000000000815212e3b4854616e7b8798a29a8e817476828f877b6e61564c413c4956636f7c8997a29b8e8175685d524538424d57616c7581897c6f62584e43382b1f1306000b1724313e4a5764717d8a979c908376675d514538414c55606c7883909da69e9185796d6053463a30333f49535e6973808a7d7064574d42362a1e1205000e1b2835414e5b6874818e9b8f82787b86857c6f6a605951556b7885929e9e9285786b5f5a616b727f8b80746a5f53473b31251a0e02000000000000000000000b17222d38414f59626d727d838276695c504336291d1000050e1925303a45515d67737f8c98988d8073685e5246392d20160b00000000000000000000000000000000000000000000000000000000000005121e2b37424d576875818e9babaa998c807366564c4135303b444f59606d7883908683909daa9e9185786a5f53473b2e303a434d57606b737f8c8f82776c60594f443a3025190f0500000000000000000000000000000000000000010b17222d38424c565e696e7a838d847c736d666873808d9892867a6d61564c41362a1d12070000000000000000000000000000000000000000000000000f1a26313c4855616e7b8895a0a2988a7e848b7e716a5f564c433a313c4855626f7c8898a29e9285796d6053463c45515d67727f887c6f6255493c2f22160900000009151f2b3844505b66727e8b96a19f92867a6d61554b4035291d130700121e2b3845515e6b7884919ea79b8e8174685b4e4c555e686f7c87867b6e61584e43372b21160a00000000000b1825313e4b5864717e8b97a6a095877b6e6154483b2e232322272b2d2e34383a4045474f545960666d727c838e939ca39992867c6f675d51453d32271b0f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060709080806020000000000000406070808060503000000000000040607080806060300000000000000000000000000000000000000000000000000040607080a0c0e070c1013131415161617171718181818191919191918181818171717161515141312100b060f0d0c0b0a09080706050300000401000000000000000000000000000004111d2935414c5565727e8b9a988c7f7265564d41362a1e11050f1c28333f4a546875818e9ba89b8e828e9b908377665c5145382c1f130600000000000000000000000000000000000b17222d38414c565e615e564e46454f59626d74808d928c808c97a1988b7e7265584b3f3234404b545f69727f8b8074685e5246382e23170b00000d1a2633404d596673808c99a6a094877a6d6154473a2e21140700000000000000000000050f1b2732404d5a6773808d9a9a8a7e7164574b3e3124180b000000000613202d394653606c7985929f9b8f8275707d8a8d8074685e52463a4653606d7985929f9f92867a6d6054473a3b45505a616e7b8682766a6054473b2e221508000815212e3b4854616e7b87969f9286796d6053473a3a44505b656f7d89949ea1978a7d7063564c41362d38414d57606d79848376695f53463a2d211407000b1825323e4b5865717e8b97948f8384887d706a5f584f515c677985929f9e9184786b5e5059626d7581867c6f62574d42362a1e12050000000000000000000006111b262f3e47515b626b6f777c6e6255483b2f221508000008131e2935404b55606d7a86929f92867a6d6154473d32271b10010000000000000000000000000000000000000000000000000000000000020e1a26313e4b5864717e8b99a4a99c908376685d5245392c323e44515c666f7c87929095a0aca197887c6f6255493c3128313b454f59606c78828f8c7f736b60564c41362a21170d030000000000000000000000000000000000000006111c262f3a444d575e686d798087867f78706b6e7a8692988d8073685e5246392f24180d0000000000000000000000000000000000000000000000000a15212d3a46535f697784919daa9b8e817c87867c6f685e554b433a3a4653606d7985929fa197897d7063564a3d414c55606d79847f7265594c3f3226190c000000030f1c28333f4a54606d7984919ea2988c8073675d51453a2f24180d01121f2c3945525f6c7885929fa79a8d8074675a4d434c56606a737f8c82756a6054473d32271b0f02000000000a1724313d4a5764707d8a97a8a7988b7e7265554b4034281c171b1f2023282c2f35383d44484f545c606a6f79818c929ca2989184796d60594f44382c21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000040607080809090a0a0b0b0b0c0c0c0c0c0c0c0c0b0b0b0b0a0a0909080707060300000201000000000000000000000000000000000000000000000000000000010d19242f3b4754616e7b87939d908376685e5246392d201407121f2b3844505b667783909da9978a7e8a989286796d6053463a2d20130700000000000000000000000000000000030f1b27333f49535e686d6860584e4347505a606d78828f928c929ca9978a7d7064574a3d312e39424d57606c7783867a6e61544a3f34281c1003000d1a2733404d5a6673808d99a6a093867a6d6053473a2d20140700000000000000000000000a1926333f4c5966727f8c99998d8073665a4d4033271a0d0000000005121f2b3744505b657683909d9d9083776c788390867a6d61564c4144505c6675828e9ba3988b7f7265564c41353e46535e697480897c6f6256493c2f231609000714212d3a46535e697784919e98897d7063544a3f343f4953606b75828f9aa49b8e8275685e5246382e2f3b45515d67727f887b6e6155483b2e221508000714212d3a4754606d7a85919995908d80746b61584e4653606d798698a29d9083776a5d50515b616d7a858275695e53463a2d21140700000000000000000000000a141d2c353f49515960636a6e6a5f53473a2e2114080000020d18242f3a45525d6875818e9b988c7f7265594f44382c1d13070000000000000000000000000000000000000000000000000000000000000914212e3a4754616d7a86939fac9f92867a6d6054473a2e2834404a545f6a73808c95a0a7b1a9998c7f7266574d42362a29333d44505b666e7b8592877d70685e52463f33291f140900000000000000000000000000000000000000000a141d28323b454d565e676d737d848c847d756e74818e9a92867a6e61554b4035291b110a020000000000000000000000000000000000000000000005121e2a36424d576673808d99aa9e9285787f8c847a6d675d554c443c44505c667683909da99a8d8073675a4d403a45515c676f7c786d6053463a2d201307000000000b17222d3845515c67727f8b96a19e9285796d60554b4035291d1207121f2b3744505b657986929fa69a8d8073675a4d40444e58606d7883897c6f62594f43382c1e1408000000000815212e3b4854616e7b8796a0a89c8f8275675c5145382c1f130f1213181c1f24292c32383d424a50585f676d75808c929ca0968e81746b6054483d33271c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070b0e1011121211100d0a0706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3a46525e697783909d93877b6e6154473b2f24180d13202d394653606c7985929fa197877a869299887c6f6255493c2f2216080000000000000000000000000000000005121f2b3744505b656d7a6f6a6054473f44505c666d798390969ca4a296897c6f6356493c3027303c44505b656f7c878073665c5044382b1f1206000d192633404c5966737f8c99a6a194877a6e6154473b2e21140600000000000000000000000d1a2633404d596673808c999b8e8175685b4e4235281b0f02000000030f1b27333f49536774818e9a9f92857969717e8b8d8073685e52463f4a5465727f8c98aa9d908376685d52453936424d57616d7a858073665a4d4033271a0d0005121e2a36424d576774808d9a9a8e8174665c50443838414f59626f7c87939f9f92867a6d61544a3f342935404b55606d797d70695f53463a2d211407000613202c3945515d67707e87929792857a6d60594f464854616e7b8794aa9b8f8275685c4f46525d68717e877b6e6154483b2e2115080000000000000000000000020b1a232d373f474f54585f625f584e43372b1f120600000007131d2935414c5663707c89969d9184776b6054483a2f24180d0100000000000000000000000000000000000000000000000000000000000713202d3946525e687683909da9a3998a7d7164544a3f34282e39424e58606d7983919aa4afa99c908376695e53463a2d2128333f4a545e69717e8a91857a6d615a50453b31251a0e0400000000000000000000000000000000000000020b162029333b444c555c606b7079808689827b737b8894988d8073675d5145382d221b140b08020000000000000000000000000000000000000000020e1a26313c4956636f7c8998a2a197887c75818e83796d675e564e45404a546975828f9ca89d9083776a53493f34404b55606a6f6d665c5044382b1f12060000000006111c2834404b55606d7984919ea2978c7f72675d5145392f24180d13202d394653606c798699a3a79a8d8074675a4d413d44505c666f7c8782766b6054483b3025190d010000000714212d3a46535e697784919eaa9f9285796d6053463a2d20130805070c1012181d1f272c30383f444e555c606e737f8c929d9d93897d6f63594f44382c1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314181b1d1e1f1f1e1c1a171413100c0701000000000000000000000000000000000000000000000000000000000000000000000000010202000000000000000000000000020507080c0d0b080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d5766737f8c999a8b7e7165554b4035291d1115222e3b4855616e7b8898a29e9185788390988b7e7265584b3f2f24190d010000000000000000000000000000000613202d394653606c78837c6f625a50433f4a545d676e7a849197a2ab95887b6e6255483b2f2227333f49535f6a748185796d6053463a2d201307000c1825323f4b5865727e8b98aba295887c6f6255493c2d22170b0000000000000000000007101d2935404b556774808d9a9c8f8275695c4f4236291c0f03000000000b17222d3e4b5865717e8b98a298877a6e6d788491867a6d61584e424956636f7c8996a29f92867a6d6054473a313b46525e68707c786d6053463a2d20130700020e1a25313d4a5763707d8a979e9285796d6053463a2f3d47535f6a75818e99a3998c7f72665c5044382b2f3945515c676d706b61574d42362a1e12050004111d2935414c55616c717e858c91847a6d675c5145495663707c8996a3998d8073665a4d414c56606c78837f7265584b3f3225180c00000000000000000000000008111b252d353d44484e5355534e463c31261a0f02000000010d19242f3a4854606b7784919e96897c7063554b4035291d1104000000000000000000000000000000000000000000000000000000000005111d2a36414c5666727f8c99a8ab9b8e8175665c5044382b27303c45515c676f7c88939faaac9f93877b6e6154483c3126222d38424d57616c75818e8f82756c62574d42362a20160c0200000000000000000000000000000000000000050e172129323a434b515960676d737b818786807a838f9c9285796d6053493f332d261d19140d0500000000000000000000000000000000000000000913202d3a4653606d7985929fa9998c7f7279839082796d685f58514b49536875818e9ba89e918578655b50443739434e586062605c544a3f34281c100300000000000c18232e3945515c67717e8b95a09e9285796d60554b4035291d12121f2b3744505b657986929fa79a8d8174675a4e41343f4a545f6a7481897c6f63564c41362a1e110500000005121e2a36424d576773808d9aa9a298897d706356493d3025190e02000004070c10161b1e262e343c434b515b636d74808d949f9d9083766b605448392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c13191d202124282a2b2c2b2b292724201f1c18120f0a04000000000000000000000000000000000000000000000000000000000000030608090d0f0e0c08070502000000000002090e1214151819181514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303c4855626f7b88969c8f8275675d5145392c20131724303d4a5763707d8a96aa9c908376818e9a8e817468554c4135291d11040000000000000000000000000000000713202d3a4653606d798483766c61554b40424b555e686f7c85929fa399877a6d6154473a2e21222d38414e58616e7b867b6f6255483c2f221509000a1623303d495663707c8999a3a4978b7e7164544a3f33281c0f030000000000000000071019232c3945515d677683909c9c8f8376695c504336291d1003000000000615222f3c4855626f7b8897a296897d7066717e8a8d80736a5f544a4754616e7a8794a1a3998a7d7064574a3d3136414c56606b706d665c5044382b1f120600000913202d3a4653606d7985929f97897d7063564c413637434e58616e7b87929f9e9184786d6053463c322834404b555c606361594f453b31261a0e0200010d19242f3a43505a616c717a80858f82796d605b514b5865727e8b98a7978a7d7164574a3e44505b656e7b786d6053463a2d2013070000000000000000000000000009131b232b32383c43474847433c342a20150a000000000008131e2c38444f596673808d999b8e8175675d5145392c2013070000000000000000000000000000000000000000000000000000000000010d1925303c4855626f7b8896a0ab9e9285796d6053463a2d202834404b55606b74818e98a2aea49a8c7f7265584e43372b1d262f3b45505a616d7a85928b7e71695e53463f32281e13080000000000000000000000000000000000000000050f172029303940454f555d60696e757c828985828f9c978b7e72655b50443f382f2a251e170e070100000000000000000000000000000000000006121f2b3844505c6676838f9ca99c8f82766e7b8690837a6f6a605c55555b6575828f9ba89f9286796c60534639303d464e545653504a42382e23170b00000000000007121d2834404b55606d7884919da1978c7f72675d5145392f24180f1b27333f495f6c7885929fa89b8e8275685b4f422e38424e58606d7a858175685e5246392d201407000000020e1a25313c4956636f7c8997a1aa9a8d807367564c41362a1e11050000000000040b0c141c232831394045525b606d78828f979f95897d7063544b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181e24292c2d313437383938373633302d2c29231d1b160f0a040000000000000000000000000000000000000000000000000000040a0f1315161a1c1b191414110e09020000050d141a1e202125262522211e1a140f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212e3a47535f6a7784919e92867a6d6053473a2d22171926323f4c5965727f8c98a59b8e81747e8b98918477675d5145392c20130600000000000000000000000000000006121f2b3844505c66727e8a7e71675c51453a434d565f6a75828f9b9f9286796c6053463d342b21262f3c46525e696f7b6f6a5f53473a2e211508000714212d3a4754606d7a86929fa79a8e8174665b5044382b1f140a00000000000001081019222834404a54606d7a85929f9c8f8275695c4f4236291c0f03000000000613202d394653606c7985929e998c7f72666c768390877c6e665c504653606d798693a0ab998c7f7366594c4033303a444f596063605c544a3f34281c1003000006131f2c3845515c6674818e9a9b8e8175685e524638313c47535f6974818e99a1968a7d7064584e43372b2e39434b515357554f473e33291f140900000008131e28313e48505a61686d737a838e81756d63594f556774818d9aa095877a6e6154473b3f49535f696e6d665c5144382c1f1206000000000000000000000000000109111921272c31373a3b3a37312a22180e03000000000001101b27323d4955626f7c88969f92867a6d6053473a2e23180c0000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7784919eaaa297897c706356493d3227232e39434f59616e7b86929fa8ac9d9083776a5f5347392e231d29333e46525e68717e8b92867b6e615a50443a3025190d040000000000000000000000000000000000000000050e171e272e343d434b51575f616a6f767d838990959d9184786c60545049413d3630292018120c04000000000000000000000000000000000003101c28343f4a546673808d99a69f9285796d707d8790847c726d676362636c7884919eaba29886796d6053463a2d343d43474946443f3830261c1106000000000000000c18232e3944505c66707d8a949f9e9285796d60554b4035291d1217222d45525e6b7885919ea99c8f8276695c4f432f303c45525d68727f867a6e6154473b2e211408000000000913202d394653606c7985929eaa9d908377685e5246392d20140600000000000000020a11171f272f344044505c666e7a85929f9b8e8174665c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151d23292f35393a3e41434445454443403d3a38342f2c27211b160d08020000000000000000000000000000000000000000000001070c151b1f22222728282521201e19140c07090f171f252a2d2e3233322e2d2a261f1b160b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586773808d9a988a7d706453493f33271b1b2734414e5a6774818d9aa6998c7f737c899893867a6d6054473a2d21140600000000000000000000000000000003101c28343f4a54606d798584796d60564c413b444e586a7783909d9e9285786c62594f463c332a202a36424d575f6a6f6a5f584e43372b1f1206000713202c3945525d6876828f9ca69e9184786c6053463d2f261c110600000000040c1319222b343c44515c66717e8b98a29b8e8174685b4e4135281b0e020000000006121f2b3844505b6675828e9b9b8f827568626f7c879083786d605b5253606d798693a0a79a8d8174675a4e413428323d474f545653504a42382e23170b00000004101c2834404b5463707d89969f92867a6d61544a3f3437424d57616e7b87929f9c8f82766a5f5347392f2730394045464a48443e352c21170d03000000010c161f2c363e4850565e61686e7b858c7f726b60565d677783909d9d908477685e52463938414d575f62605c544a4034281c1004000000000000000000000000000000070f161b20262b2e2f2e2b2620180f06090a0b0b0b09070b16212e3b47535f6a7784919e988a7d7164544a4034281c1004000000000000000000000000000000000000000000000000000000000006121f2b37434e586774808d9aa9a99a8d807467584e43372b1d27303d46525e69737f8c96a1aca095887b6f62544b4034281c212a36414c56616c76828f8f82766c62564c41352920150a000000000000000000000000000000000000000000070d151d2429313940454d53585f626b70767d83909a968a7d7066605b534f46413b3229241d160d0600000000000000000000000000000000000b17232e3d4a5764707d8a97a3a298887b6f6b717e8891867f7973706e70747e8a96a1ab9f928578665c5144382c2b32373b3c3a38342e261e140a000000000000000007121d28343f4a54616c76829099a1978c7f72675d5145392f24181e2a3744515d6a7784909daa9d9084776a554b40342935414c56606d79847e7265584b3f3225180c0000000006121f2b3844505b6674818e9baa9f93877a6e6154473b2d22170b000000000000000000060d151d2329343f4a545e68727f8b969f9285796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f272f343a4145474b4e50515252514f4d4a4745403938322c272119130d050000000000000000000000000000000000000000030b121820272b2e2f343535322e2d2a251f1812121b212930363a3b3f403e3b3a36312b272017110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c4956636f7c89979b8e8174655b5044372b1f1d2935414b556976838f9ca4978a7e7179869299897d7063564a3d2e23170b000000000000000000000000000000000b17232e3845515c67727f8c7f72685e52463c45525d687885929ea1978b7e716b61584e453b322925303b454e585f625f584e463c31261a0f030004111d2935414c5663707d8a949ea196897d7063584e42382d22170b050002080d161e2429343d464f59606d7984919daa998c7f7266594c3f3326190c0000000000030f1c28333f4a5465717e8b989e9184786a606a74808d8d80746d615e59616e7b8794a1a89b8e8275685b4f4235282b353d44484946443f3830261c1106000000000c18232e3a4653606d7984919e988c7f72665c504438313c46535f6974818e999f94887c6f62554b403529272e34383a3d3c38332c231a0f060000000000040d1a242c363e444c52565e696f7c86877d70685e606d7a86929f998d807366564c41362f3c454d535553514a42392e23180c0000000000000000000000000000000000040a0f151a1f2122211f1a150f12131517181817161413131f2b37434e586773808d9a9b8e8175665c5144382c1f12060000000000000000000000000000000000000000000000000000000000030f1b26313d495663707c8997a2ab9e9184786a6054473b2e221e2a36424d56606d7984919ea7a79a8d8074665c5145382c1f1925303a44505a616e7b86928b7e71685e52463c32261b0d04000000000000000000000000000000000000000710191f272f35383a3f4446474e545960636b707b87939c8f8278706c656059524c443f352f281f180f07000000000000000000000000000000000616232f3c4956626f7c8995abaa978a7e71646c717e88928c84807d7b7c8087929fa8ab9d9083766a544a40342820272b2e2f2d2b28231c140c020000000000000000000c17232e3842505a626f7c87939f9e9285796d60554b4035291e1c2936434f5c6976828f9ca99e928578675c5145382c303a45515c676f7c796d6053463a2d20130700000000030f1c28333f4a5463707d8a98a2a49a8b7e716453493f33271b0f03000000000000000000030b1218232e38424c56606d7884919e98887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d172029313940454c5254575b5d5e5f5e5e5c5a5753514b48433d38322a251e170e06000000000000000000000000000000000000030d151d242932373b3c4042413f3b3a363028231d1b242d333b4246484b4c4b4846423b373228231c140c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a13202d394653606c7985929e9185786c605346392d20202c3945515d677885919eaa95897c6f768390998c807366544a3f34281c100300000000000000000000000000000006111c2934404b55606d7a85857a6d61584e434754606d7a8797a1a79f92877d706a60574d443b322829333c464e5355534e463c342a20150a0000010d19242f3a4855616b76828f96a09c8f82756a60544a3f332821160b060b13191f282f353e464e58606b737f8c95a0a298897d7063564a3d3023170a0000000000000b17222d3b4854616e7b8796a096887b6e62606d7984918c7f746d68676b717e8b98a4a79b8e8174685b4e413528232b32383b3d3a38342e261e140a000000000007121f2b3844505c66737f8c989e9184796d60544a3f3336424d57616e7b86929f9a8e8174675d5145392c2023282c2d302f2c28211a11080000000000000008121a242c323a41464d57606a717e8a857a6e6163707d8999a197897c6f6256493c302a333c4247484644403930271c120700000000000000000000000000000000000000030a0f121415141211171b1f2022242525242321201d1b26323d4a5663707d89989f9285796d6053463a2d2013090000000000000000000000000000000000000000000000000000000000000a13202d3a4653606d7985929eaba196897c6f6256493c31261a25303b45515c67717e8a95a0ab9e9285796d6053463c31261a1e29323e47535f6973808d92857a6d61584e43372b1f160c010000000000000000000000000000000000060f19222b31394045474950535453504f5459606976838f9c948f837d78706b615e5650454039312a211910070000000000000000000000000000000815222e3b4855616e7b8899a1a8998c7f7366626c717e8792918d8988898d9299a3afa3998c807366594d402e23181b1f2223201f1c17110a020000000000000000000006111c26303e47535f6a74818e97a1978c7f72675d51453a2f24192835414e5b6874818e9ba79f93867a6d6053473a2d2834404b55606a6f6d675c5145382c1f130600000000000b17222d3a4753606d7985929fac9b8e8175655b5044372b1f1205000000000000000000000107111c26303b44505c66727f8c99988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f29323b434b51565d6064676a6b6c6b6a696663605c55544f48433d3630292017110a02000000000000000000000000000000020b151f272f353c4347494d4f4e4c4746423b342e27212d363f454d525458595855534d47433d342e261e150d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b6674818e9a97897c6f6256493c3025212d3a4754606d7a8797a1a298877a6d73808d9a8f8276665c5044382b1f1206000000000000000000000000000000000c18232f3945515d6773808d81746a60554b4956636f7c8996a9a0959092867c6f695f564d443a31282a343c43474847433c342a22180e0300000008131e2c38444f59616d7a8491959f93877c6f665b50443d33271c1011171e2529313a41455058606a707d87929fa89f9285796d6053473a2d2014070000000000000614212d3a46535e697784919d988b7f72655d676f7c86928c817a7674767d85929eabaa998d8073665a4d4033271921272c2f302d2b28231c140c02000000000003101c28343f4a54616e7a86929f968b7e71665b50443a313b46535e6974818e999f92857a6d6053473a2d20181c1f202423201c16100800000000000000000008121a202830363b454e58616c74808d82766d6673808c999e9184786c605346392d202a31373a3b3a38342e271e150b000000000000000000000000000000000000000000000206080d141a1b22272b2d2f30313231302d2c2924202d3a4753606d7986929f97897d7063564a3d30251a0e02000000000000000000000000000000000000000000000000000000000006121f2c3844505c6674818e9baaa8998d807366584e43372b1f1f2934404b55606c7883919da7a1978a7e7164574d42372b1d17202b37424d57606d7a85928d81746a5f53473e31281d130700000000000000000000000000000000020b18212b343d434b5153535b6060605b5454525765717e8b999f95908a837d756e68625a514b433c332b2219100700000000000000000000000000000714202d3a4753606d7a8691969a998c8073665a626c717d8590959695969a9fa3aba79f92867b6e6155483b2e22150f1315161312100b06000000000000000000000000000a151e2b37434e58616d7a85929f9e9285796d60564c413529202633404c5966737f8c99a6a49a887b6e6255483b2f232e39434e586062605c554b4034281c1004000000000006131f2c3845515c6775828e9bab9e9185786c605346392d2013070000000000000000000000000a141e28343f4a54616e7b8796998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313b444c555c60686d717476777878777673706d67636059544f46413a3227221b140b0300000000000000000000000000000a141d27313940454e54555a5b5b5854524d454039302a333f4850575e61656665615f57544e443f3830271f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5463707d8a98998c807366564d41362a222f3c4955626f7c8895a99f92857868707d8a979285796d6053463a2d2013070000000000000000000000000000000007121d2935414c55616e7a86877c6f675c514b5865727e8b98a89d90838e91857b6e685e564c433931272a31373a3c3a37312a221810060000000001101c28333e46525e686e7b838d92999083786c60594f44382c20141c222830353d434c515a616a6f7c859299a3a3998e8174675c5145382c1f130600000000000005121e2a36424d576774808d9a9c8f8276685e606a717e8b928e86828183879297a1ada2988a7d7063574a3d302417161c202223201f1c17110a02000000000000000b17232e3846525e6874818e989d9184786c60554b403536424d57616e7b8692928e867a6d6053473a2d2014101313171614100b050000000000000000000000080e161e252a333c46505a606d79838b7f726976828f9c9a8d8174655b5044372b1f1f262b2e2f2d2c28231c150c030000000000000000000000000000000000000000000000090e171f252a2d3337393c3d3e3e3e3c3a3935302d2c3845515c6776828f9c9a8d807467574d42362a1e1205000000000000000000000000000000000000000000000000000000000003101c28343f4a5464707d8a98a2aa9d9184776a5f53473a2e2118232f3944505b66717e8a95a0a99c8f8276695f5347392f24181a26313c45525d68727f8b93877c6f625a50433a2f24180d020000000000000000000000000000000a141d2a333d464e555d6065656c6d6c6666615e56606d7a86929f9287808589817a716c605d554d453d342b22191007000000000000000000000000000613202c3945515d67707d848a8d8e897d7063565a616b707b838c92989d9fa4a9a29f958d8174695f53463a2d21140706080907060300000000000000000000000000050b10141b26323c46525e68727f8b95a0978c7f72685d52453b302d2e313e4b5764717e8a97a4ac968a7d7063574a3d302427303d464e545653514b43392e23180c00000000000004101c2934404b5564717e8a99a3a197887c6f6255493c2f24180d010000000000000000000000020c17232e3846535e697884919a8e8174675b4e4134281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434c565e676d737a7e81838485858482807d79756f6b636059524c443e332d261d150c0300000000000000000000000006111b262f39434b5158606267686865615e56514b433a323c46505a62696e7273716e69626058504a423931281f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3a4753606d7985929d908377685e5246392d24313e4b5764717e8a97a49d9083776a6d7a879698887c6f6255493c2f22160a00000000000000000000000000000000010d19242f3a46525e6874818d83796d605b51586774818e9aa095877b818e91847a6e685d554b43393128262b2e2f2e2b26201810060000000000000b17212935414c565e696e7980868c908c7f726b6055483c2f231d262d333a41464f555d606c717d859297a2a89f92877b6e62554b4034291c1004000000000000020e1a25313d4a5763707d8a979f92867a6d6158626c73808c92928f8e8f9399a1a9a79f9285796d6053473a2d20140b101316161312100b0600000000000000000006111c2a36414c56616e7b86929f968b7e71675d514539313b46535e6974818985817c6e675d5145392c20130606070a0907040000000000000000000000000000050c1319212b343e45515c676e7b86867b6e7985929f97897d706353493f33271b151a1e2122201f1c18120b03000000000000000000000000000000000000000000000009121a20293036383f4446484a4b4b4a494745413b3a3634404b5566737f8c999d918477695e52463a2d2014060000000000000000000000000000000000000000000000000000000000000c17232e3a4753606d7a86929faca096887b6f6255483c31251a1d28333f4a54606c7883909da79f93877b6e62554b4035291d151f2935414c56606d7884919083766c61554b4035291e1308000000000000000000000000000006111b262f3c454e5860676d7276797a7977736e68625d6875828f9c998a7d7a8086857e756d675f574f473d342b22190f0600000000000000000000000004111d2935404b55606b70797e81817d706b6054505960696e787f868c90939a9697928d83796d60574d42362a1e12050000000000000000000000000000000000000810171c2023242a36414c56606d7883919d9f92857a6d60564c4138393b3c3e4956626f7c8995a8a5988c7f7265594c3f2d221e2b343d4348494645403930271d1207000000000000000c18232f3a4754606d7a86929fa9998c7f7266554b4035291d100400000000000000000000000006111c2a36424d576875828f9b8e8175685b4e4235281b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555e686e7980858a8e9091918f8f8f8d8a85817c766f6b615e5650443f382f271e150d0300000000000000000000000b17222d38414b555d606a6f737574726e69605c554c443a434e58626c717b7e7f7e7b766f6a605c544b433a31281f150b020000030606080908070502000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6775828f9b93877a6e6154473b2e2333404d596673808c99a69b8f82756868778491988b7f7265584c3f31261a0f020000000000000000000000000000000008131e2a36414c56616e7a868d80746d605c5f6a7784919d9d91847778818e90837a6d675d554b433a3129212122211f1b150e0600000000000000050d1925303a444d575e676d747b7f8386877d7063564a3d30252a2f383f444c525960676d747e869297a1a9a0968d8074695f5343392f23180c00000000000000000913202d3a4653606d7985929f998b7f726a605b636e73808b92989a9c9fa4aba79f958c8073675d5145392c1f13060407090a0706030000000000000000000000000d1925303b46525e6973808c959b91847a6d6053473a2d36424d57616e7a7c79746e6a5f554b4035291d110400000000000000000000000000000000000000000002080f19222834404b555f69727f8c82777c88989e9285796d6053463a2d22170b0e1214151312100c0700000000000000000000000000000000000000000000000008121a242c333b424649505355575858575654524c4846423b3d495663707c8999a095877b6e6154483b2d22170b00000000000000000000000000000000000000000000000000000000000006131f2c3945515d6775828f9caca8998c7f7366574d42362a1e17222d3844505b65707d8a95a0a49a8d8073675d5145382c1f1619242f3a44505c66707d8a948a7e71675d51453a3025190d02000000000000000000000000000b17222d38414e57606a6f797f83868786847f7a726d6064717e8b999c8f8275737b828b81796e6960594f463d342b21170c030000000000000000000000010d18242f3a434f5960676d717474706c61594f474f575e666d727a7f83868889888580796d675d51453b31261a0e02000000000000000000000000000000000008111a22282d303133303a44505c66707d89939e978d8073685e5246444648494b4c54606d7a8796a1a79b8e81746853493f33271b222b32383b3c3a38342e271e150b00000000000000000713202c3945515d6775828f9cab9c8f8376675d5145392c201306000000000000000000000000000e1a2531414e5b6774818e9a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d676e7a838c9297938e88848382828386898d89837c756d68615a5049413930271f150c03000000000000000000030f1b27333f49535d676d747c8082817f7b736d675e564c4447535f6a717e868b8c8b88827c736d665d554b433a31271d140a060b0f121315161514120e090501000000000000000000000000000000000000000000000000000000000004101c2934404b5564717e8b999a8b7e7165544a40342835424f5b6875828e9ba69a8d8073676774818e9a8e827568584e43372b1f120600000000000000000000000000000000010d1925303b46525e6873808c8c7f736d67666f7c8896a0998d80736c78818e9082796d675d554c433b332b262018120f0a0400000000000000000008131e28323b454d555d60696e73777a7c7d706356493d3030363d424a50565e616b707a818a9298a1a9a2989184796d60574d4231271d1207000000000000000006131f2c3845515c6674818e9b9e91847c736c665d636d737e868f94999c9d9c9b959083796d60554b4035291d10040000000000000000000000000000000000000008141e2a36424d57606d78838e8e8981796d6053473a2d313b46525e686e706d67625f584e433a2f24180d010000000000000000000000000000000000000000000000071018232e39434d57606d78838b7f7e8b989a8e8174665c5044382c1b11060206080807060400000000000000000000000000000000000000000000000000040e1a242c363e454d52535b60626364656463605d5655534d46424753606d7a86929f988b7e716553493f33271b0f03000000000000000000000000000000000000000000000000000000000004101d2935404b5565717e8b9aa4aa9d908377695e53463a2d21141c27333f4953606c7884919da99f9285796d6053473d32271b131e28343f4a54616b7683909184796d60564c41362a1e1308000000000000000000000000030f1b27333f49535f6a6f7c848b90929892908c857f746d666d7a86929f92867a6d6e787f87837b6f6b60584e463d33291e150b00000000000000000000000007131d28313d474f555c6064676764615a50473d454d545c60686d72777a7c7c7b79736d675d554b4033291f1409000000000000000000000000000000000005101a232c33393c3d4040403f4a54606b75818e979f92867a6e61574d5053545658595b5d687884919ea99d908376655b5044372b1f1921272c2e2f2d2c28231d150c03000000000000000004111d2935414c5565717e8b99a39f92867a6d6053473a2d2014090000000000000000000003060a10192734414e5a6774818d998c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d57606d798390959f918c817c7876757677797c80858c89817a706c605b534b433931271e150b00000000000000000005121f2b3744505b656d7981888d8e8e8b8680796d685e564c4855626e7c8792999997948f8780786d675d554b43392f261b1111171c1f20222322211e1a14110d0802000000000000000000000000000000000000000000000000000000000c18232f3a4754616d7a86929b8f8275665c5144382c36424d576a7783909da5988b7e726564717e8b979285786a5f53473a2e211406000000000000000000000000000000000008141e2a36414c56606d7983908c8079747478828f9c9f92877b6e666c78818d8f82796d675d564d453d37312a21180e0300000000000000000000020c162029333b434b51575e6166686d6f706b6054483b333b41464f545b60686d747d848e939fa2a9a29892867c6e675d51453c311f150b01000000000000000004101c2834404b5464707d8a98a196918780786d685e636c717b82888c8f90908e8a837a6d675d5143392f24180c0000000000000000000000000000000000000000020e1a25303b45515c666d7a81827d756d675c5145382c2a36414c565e6163605c55534e463c31281d13070000000000000000000000000000000000000000000000000007121d27303c44505c666f7c8785828f9b988a7d7063544a3f34281c0a0000000000000000000000000000000000000000000000000000000000000000020c16202c363e4850575e61656c6f707171716f6d6866615f57534d45515d677783909d9b8e8275655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000c18242f3b4754616e7a87939faca095877b6e6154483b2f241917222d3844505b65717e8b97a1a2978b7e7165594f44382c1e1317232e38424f5963707d89958c8073685e52463a3025190d02000000000000000000000005121f2b3744505b656e7c8591969d98928e8d8e928b81786d6876828f9c998b7f72666c727d85867d6f6a60584e453b30271d12070000000000000000000000010c161f2b353d434b5153575a5b575550483e353b424a50565d6066686d6f706f6d66605d554b43392f21170d0300000000000000000000000000000000000b17222c363e44494a4d4d4d4d4d4f59616d7a85929f988d8074695e545b6061636466686a6875828f9ca89f9285796c605346392d2013161b1f2223201f1c18120b03000000000000000000010d19242f3a4754616d7a86929fa3998a7d7063574a3d31251a0e0202020000030607080a0f12161b222b37424d576875828e9a8a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3a47535f6974818d959e938c7f756f6a696869666d6f74797f858e857d736c655c554b433930271c12070000000000000004101d2935404b55606c77818e939a999292928d837a6d685e554d576774818e999a938a868a908c82796d675d554b41382d22191c22282b2d2e2f2e2d2a26201d19130c050000000000000000000000000000000000000000000000000000000713202d3946525e6876838f9c9285796d6053463a2d3a46525e697985929fa3968a7d7063616e7b889697887b6e6255483b2d22170b0000000000000000000000000000000000020e1925303b45515c676e7b86928d858180838f949f978e8174695e666c77808c8f82796d685e574f47423c332a2015090000000000000000000000040e172129313940454d5354565d60636360594f44383f444c525960666c727a818991969da5a8a09792867d706a5f554b40332a200d03000000000000000000000c18232e3a4653606d7985929fa199928c827a6e695e62696e757b7f828383817e786d685e554b4031271d120700000000000000000000000000000000000000000009141f2834404b545e686d7575706b605c554b40342925303b444c52545653514b47433c342a1f160c0100000000000000000000000000000000000000000000000000000b151e28343f4a54606a74818e8f939f9286796d6053473a2e23170c000000000000000000000000000000000000000000000000000000000000000008131e28323e48505a61696e74787b7d7e7e7d7c7a77736e69615e57514b556774818d9a9e9285786c605346392d2013060000000000000000000000000000000000000000000000000000000000000714202d3946525e687683909da9a7988b7f7265554c4135291d111b27333f4953606d7985919ea99d9083776b6054483a302519111c26303e4854606b77839092867a6d61564c41362a1e130800000000000000000000000613202d394653606c78839097a0989285818081858d8e82786d727f8b989d90837769606b707c84867c6f6a60574d43392e23180c030000000000000000000000040d19232b31394045474b4e4e4a49443e362c30383f444c5254565e61626362605c54514b433931271d0f06000000000000000000000000000000000004101c28333e485055575a5a5a5a5a5a5b5e68727e8b959f92867b6e6769666c6e6f71737476787a818e9ba8a298877b6e6154483b2e21150a0f1315161313100c070000000000000000000000000813202d3946525e6876828f9cab9a8d807467574d42362a1e120e0f0f060b10121315171b1f21272c343d47535f6977849193877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b87939f9b8e81756d625f585c545c6063676d727a818a8a80776d675d554b42392e2318100700000000000006131f2c3845515d67727e8b939d948f8685878d90837a6d675d535f697885929e93887e7a7d838e8f82796d675c53493f332724292d3338393b3c3b3a36312d2a251e170e08000000000000000000000000000000000000000000000000000005111d2935414c5665727f8c9898897c706356493d313b4854616e7b8798a2a995887b6e625f69788491988b7e726553493f33271b0f03000000000000000000000000000000000008141e2934404b555f696f7d8591928e8d90959d9791857a6e61575b656c74808b8f827a6e696059534e453c31261a0e020000000000000000000000050f171f272f353b4246484c52545656544f473d414950565e616b6f787e858e939ea1a8a49d9691857d706b60574e43392f21180e000000000000000000000007131f2c3845515c6775818e9b9f9387878f837b6e695e5e616a6f7375767674716d665e564c433a2f1f150b01000000000000000000000000000000000000000000030c18232e39424c565e616868636059514b43392f231e29323b414647494745403937312a22180d04000000000000000000000000000000000000000000000000000000030c17232e38424e58616e7b86929f9c908376675c5145382c1c110600000000000000000000000000000000000000000000000000000000000000010d1925303a44505a616c717b8185888a8b8b8a898684807b756e69625b515864717e8b97a197887c6f6255483c2e23170b00000000000000000000000000000000000000000000000000000000000005111e2a36414c5666737f8c99a8a99c8f8276675d5145392c201317222d3845515c67737f8c98a3a095897c7063564c41362a1e11151e2c38444f5964707d8a958d8073685e52463a3025190d0200000000000000000000091623303c4956636f7c8995a09f92857b7473757a80888e81776e7b8795a095887b6e61606a6e7b84857c6f695f554b4034281f14090000000000000000000000000711191f272f34383a3e41413d3c39332c23262e343a4145474c525455565553514a45403931271f150b0000000000000000000000000000000000000814202d3944505a61646666666767676868696c77839099998e8174747677797b7c7e7f818385878e939eabaa978a7d7064574a3d3124170903070909070604000000000000000000000000000005111d2935414c5665717e8b99a39d918477695e53463a2d211b1b1b1c1c171c1f202224262b2e32383f464f59616e7b88968f8276685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c566774818d99a095887b6e625b534e4f4b5153555d60686d757e868d81796d675d544a40342822190d0400000000000714202d3a4753606d7985929e988f827a787b81889083796d605b616e7b88979c8f83766d7079818e8f82796d655b50443d323035383f444648494846423b39363029201a120901000000000000000000000000000000000000000000000000010d1925303b4855616e7b88959a8d807367574d42363d495663707c8996aaa197867a6d60576874818e9b8e8275655b5044372b1f12050000000000000000000000000000000000020c18232f39434d57606b6f7c848a8f919292908c857c6f685e52535b606e737f8790837b706b625f574e42372b1e1206000000000000000000000000050d151d242931363a3b414547494948443f454d535b60686e747c838b92979da5a9a19e928d847b706b60594f453c31271d0f06000000000000000000000004101c2834404b5564707d8a97a1998c7f8690847b6e685e585f6266696a696864605c544c443a31281d0d03000000000000000000000000000000000000000000000007121d27303a444c52545b5b56544f45403931271d1720293036393b3d3a38342f2b2620180f06000000000000000000000000000000000000000000000000000000000006111c26303c46535e6974808d9a9a8d807367554b4034291c10040000000000000000000000000000000000000000000000000000000000000005111d2935414c56616c717e868d9197969798979a93908c87817b726d605c54626e7b8898a2988c7f7265544a3f34281c10030000000000000000000000000000000000000000000000000000000000020e1925303c4855626f7c8896a1ac9f92867a6d6054473a2e2317111b2834404b55616d7a86929fa79b8e8175685e5246392d20150c1c27333d4653606c78839092867a6d61564c41362a1e1308000000000000000000000d192633404c5966737f8c99a79a8d80746966686d747d868c80737784909d998c7f7266575f696e7c85857b6e675c51453b31261a0e02000000000000000000000000070d151d23292c2d31343431302d28221a1c23283035393a41464749494846444039352f271f150d030000000000000000000000000000000000000a1623303c4955616c7073737373747474757676777c86929f9387808183848687898b8c8e909297939399a4a6998c807366594d4031261a0e020000000000000000000000000000000000000000010d1925303a4754616d7a86929fa096877b6e6154483b2e23282828282923282b2d2e3032373b3d43485058606b74818e938a7d7063564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687784919e9d9184776a5f534743424045464b51565e616c717b848f82796d665c51443f342b1f160c01000000000b1824313e4b5764717e8a979f92867a6d696e747d868e81756d6263707d8a96998d807366676d78818e8e81776c60594f443b3a41454a5053555655534d4746413a322c241b1309000000000000000000000000000000000000000000000000000814212d3a46535f697784919d908477695e53463a3f4b5865727e8b98a59e918578675d5865717e8b989285796c605346392d20130600000000000000000000000000000000000007121d27313c454f59606a6f787e82848585837f7a6f6a60564c49505c636d727d8690857d746e6a5f53473a2e21140800000000000000000000000000030b12181f252a2d3035393a3c3d3a414551575f656c727a818790959ea2a9a49f97928a81796e6960594f473d332a1f150b000000000000000000000000000c18232e3a4653606d7985929e998c7f7d8691847a6d675c5355595c5d5d5b5753504a423a32291f160c000000000000000000000000000000000000000000000000000b151e29323a4146474f4f4a48443d342f271f150e171e252a2d2e302d2c29231d1a150e06000000000000000000000000000000000000000000000000000000000000000a151e2a36424d57626e7b8895988b7e7265584b3f2f23180c00000000000000000000000000000000000000000000000000000000000000000713202d3946525e68717e8792989ea198928e8a89898a8d918e867f756d665c606c7985929f9c8f8275665c5044382b1f12060000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7884919eaba3998a7d7164544a3f34281c1018232e3946525e6875818e9ba89f92867a6d6154473c32261b0f161f2b3744505b65717e8a968d8073685e52463a3024190d000000000000000000010e1b2834414e5b6774818e9aa4978b7e7164575d606b707c85887e73808d999d908377695e575f6a707d8a83796d60574d42362a1f140800000000000000000000000000030b12181c1f202427282423201c171011171e24292c3036393a3c3d3c3a38342e29241d150d03000000000000000000000000000000000000000a1724313d4a5764707e8080808080818182828384859299a399938c8e8f91929996979795918d8a8687939fa99c8f827669574d42362a1e12050000000000000000000000000000000000000000000813202d3946525e6876828f9ca8988b7e7265544a3f343434343535352e34383a3b3d3f4347484f545a626a707d87938f82756b6155443a2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8796a09b8e817568574e42373134383a40454c525a61696e7a838f82786d605b51463d31281d1307000000000f1b2835424e5b6875818e9b9b8e8275685e616b707d878b7e726965727e8b98988b7f72655c666d78828f8c80736b61564c41444c52545b606162615f5754524c443e362d251b110800000000000000000000000000000000000000000000000005121e2a36424d576673808d9995877b6e6154483b404d5a6773808d9aa69d9083766a5555616e7b889697887b6f6255483c2e23170b000000000000000000000000000000000000010b151f2a333d474f585f666d717578797877736d6860584e443f44525b626b707c838c87807c6e6255483b2f221508000000000000000000000000000001070c141a1e2124292c2d323b434c515b62696e777f858e939aa0a7a7a09a938e857d746d675f574f473d352b21180d030000000000000000000000000007131f2c3845515c6674808d9a9d9084777d869082796d605b524c4f50504e4a46443f38302920170d0400000000000000000000000000000000000000000000000000030c1720293036393a42423d3c383329231d150d050d14191e202123201f1c18120f0a030000000000000000000000000000000000000000000000000000000000000000030c1a25313b4854616e7b8794978a7d7064574a3d312417070000000000000000000000000000000000000000000000000000000000000004101c2834404a54616d7a859299a2a1969186817d7c7c7d80848b918b81786d665c667683909c9f9285796d6053463a2d20130600000000000000000000000000000000000000000000000000000000000006121f2b37434e586774818e9aabab9b8e8175665c5044382b1f12121d2935414c5663707d8996a0a3998c7f7266584e43372b1f130f1b27333f4953606d78849192867a6d61564c4135291c12070000000000000000010e1b2834414e5b6774818e9aa4978a7d7164575259616a6f7c86867b7d89999f95877b6e615458616b73808c7f73695f53463b3025190e020000000000000000000000000001070c101314181b1b171614100b05060b13191d20252a2d2e2f302f2d2c28231c18120b0300000000000000000000000000000000000000000916232f3c4956626f7c868d8d8d8d8d8e8f8f90919297a2aba49f999a9c999992908d8a8784817d7a828f9ca99e928578695f53463a2d21140700000000000000000000000000000000000000000005111d2935414c5665717e8b99a39b8f8275665c504441414141424242433f4446484a4c4e53555960636c717c859291847a6d61594f4432281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a89a8d8073675a4d443f3b3a3630353a414650575f686d79838e81746d63584e433a2f24180d03000000111e2b3744515e6a7784919d988c7f72655659616b717e8b867b6e65727f8c98988b7e7165545c666d7a8491887d70685e52464d565d60666c6e6f6e6966615e5650483f372d231a0d040000000000000000000000000000000000000000000000020e1a26313c4956626f7c8997988b7e7165544a403f4a546975828f9ca89b8e8275685b535f69788491988b7f7265544a3f34281c1003000000000000000000000000000000000000030d18212b353d464e545c6064686b6c6b6a66615d564e463d3340495159616a6f797f84827d7063564a3d3023170a0000000000000000000000000000000003090e1214191f29323b444c555d606d727b828b92979fa4a9a19e959087817a706c605d554d453d352b23190f06000000000000000000000000000004101c2834404b54626f7c8895a095887b717e888e81756e63594f444343413e3a38342e261e170e05000000000000000000000000000000000000000000000000000000050e171e252a2d2e3535302f2c272118120b030002080e111414161413100c070100000000000000000000000000000000000000000000000000000000000000000000000914212e3a4754616d7a8798968a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000006121f2c3844515c6673808d97a1a39991847c74716f6f7174797e858f8e82786d666774808d9aa298897c6f6256493c2d22170b000000000000000000000000000000000000000000000000000000000000030f1b26313e4a5764717d8a99a3ab9f9285796d6053463a2d20130d1925303a4653606c7884919eab9d9184776a5f53473b2e21150b17222d3844505c66727f8c988d8073685d5245392e23180c0000000000000000010d1a2734404d5a6773808d9aa5988b7e7265584b4f58606a707d87837a86929f988c7f7265564f59606d7984867b6e61564d41362a1e1105000000000000000000000000000000000406070b0e0e0a0a080400000002080d1113191d2021222322201f1c18120c07010000000000000000000000000000000000000000000815222e3b4754606a737f8b92979a9a9b9b9c9d9e9f9e9c9a9ea0a096918c898683807d7a777471727f8c99aaa297887b6e6155483b2e221508000000000000000000000000000000000000000000010d1925303a4754606d7a86929f9f9285796d60534e4e4e4e4e4e4f4f504a5053555759585f62666b6f767e86928f847b6e685d52473e3320160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3998d8073665a53504a4746423b3833363e454d565e676d7a838c7f726a60554b41352920150a000000121f2c3945525f6c7885929f978a7d7064574f59626c74818e82766c727f8c99988b7e726558545d686f7c8692857a6e615a50575f686d73797b7c7b78736d68615a51493f352b1f160c0100000000000000000000000000000000000000000000000913202d394653606c7885919b8f8275665c514444505c667784919da6998d8073665a4d576774818e9a8f8275665c5044382b1f120600000000000000000000000000000000000000060f19232b343c424a5153575c5e5f5f5d5954524c443d3427373f474f585f676d737775706b6054483c2f2216090000000000000000000000000000000000000207121d27313a444c565e676d757f8690949fa2a9a39f97928b837c746d686159514b433c332b23191107000000000000000000000000000000000c18232e3947535f6a7783909d998c8073737f8c8c80736b61564c41382d312d2c28231c150c050000000000000000000000000000000000000000000000000000000000050c13191d202128282322201c160c070100000000020507080a07060400000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c798592978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929ea99f92877c6f6a64626364666d717a828d8f81786d64717e8b97aa988c7f7265544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000a14212d3a4754606d7a86929faca297897c6f6256493c2f24180d131f2b3744505b65737f8c99a7a096887c6f6255493c2f221606111b28343f4a54616d7a869292867a6d60544a4034281c100400000000000000000c1926333f4c5966727f8c99a5998d807366544a464e58606b717e8b8083909c9c908376685d52515c67707d8a8174685e5246392d201407000000000000000000000000000000000000000001010000000000000000000104080d1113141616151312100c0700000000000000000000000000000000000000000000000006131f2b37434e58636d737e858b8e91939a94949992918f8e91969e91847f7c7a7774716d6867646f7c8998a2a9978a7e7164574b3e3025190d010000000000000000000000000000000000000000000813202c3945525d6875828f9ca298897c6f635b5b5b5b5b5b5b5b5c5d545c60616365686a6f72777c828b918a827a6e695e564c41352c210d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895aa9a8d81746762605b5454524d46443f38353c444c555d686e7b85877c6f675d51453c31261b0f04000013202c3946535f6c7986929f96897c6f635649505a606d79838a7e71727f8c98988b7f7265584c565f6a727f8c8f82756c61575f696e7a808588898885807a716c625b51473d31281d1207000000000000000000000000000000000000000000000005121f2b3744505b6574818e9a9285796d6053464653606d7986929fa5988b7e7265584b5764717e8a9a9285796d6053463a2d2013070000000000000000000000000000000000000000071119222a30394044464b4f515252504c4746413a322b252d353e464e555d60666a696360594f44382c201407000000000000000000000000000000000000000c18232f39434c565e686e79818b92989fa6a69f99928d857e786f6a615d564f454039312a2119110b020000000000000000000000000000000007121d2b37434e5865727f8b989e9184786c77828f887d70685e53493f3327201f1c17110a030000000000000000000000000000000000000000000000000000000000000002080d1113141c1c171613100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b66768390998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8997a1a99a8e81746a5f585656545c60686d77808c8e81746d6f7b8898a29c8f8275665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000613202c3945525d687683909ca9a9998c7f7366554b4035291d110f1b27333f4953616e7b8895a0a8998c7f7266594c3f3326190c0b17232e3846525e6874818e988c7f72665c5144382c1f150a00000000000000000a1724313d4a5764707d8a97a99c8f8276665c5044464f59626c748186818f9b9f92867a6d60544b55616b7682867b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000001050707090a090706040000000000000000000000000000000000000000000000000000030f1b27323d46515b636c717a7e828486878887868684838184919992857a706d676764615e56606d7985929fa79a8d817467564c41362a1e110500000000000000000000000000000000000000000004111d2935414c5664717e8a98a2998c807368686868676767686868696a666d6e707274787c7f8389908b847e756d685e574d443a30231a100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8898a29c8f8275716e6c6665615e5653504a4540393a434c565e69707d8784796d60584e43372b20160a0000121f2c3845525f6b7885929e96897c6f63564945515c676f7c878479727e8b98998c7f7266594c4e58606d7883908b7e71695e686e7b848d8c8481818388857e726d62594f43392f24180d0100000000000000000000000000000000000000000000030f1b27333f495364707d8a9898897c706356494855616e7b8899a3a3968a7d7063574a54616d7a879398897c6f6256493c2f24180d0100000000000000000000000000000000000000000710181e272e34383a3e4245464544403a39353028201b232c343c434b5153595d5c56544f473d33271c100400000000000000000000000000000000000004101c2934404b555e686e7a838f939fa2a9a19e948f87807a716c666058524c443e352f33302b251d140b00000000000000000000000000000000000f1b26313c4754606d7a86929f968a7d706d7a8591857a6d655b50443b31251a100c060000000000000000000000000000000000000000000000000000000000000000000000010507070f0f0a090704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5464717e8b938e8275685b4f4235281c0f020000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c98a9a297897c6f62584e49494a50565d656c737f8c8c7f726d7985929f9f9285796c605346392d20130600000000000000000000000000000000000000000000000000000000000004111d2935414c566673808c99aba99c908376675d5145392c20130b17222d3846535f697783909da89b8e8275685b4f4235281c0f06111c2935414c56636f7c89969184796d6053463c31261a0f00000000000000000815212e3b4854616e7b8797a19f9285796d6053463d47505a606d798386929fa3998a7e7164574b4f59636f7c897f7265594c3f3226190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b344049515a62676d7175787a7b7b7a7a797776747c8792978d80746a5f55575452515c6676838f9ca99d918477685e5246392d201307000000000000000000000000000000000000000000010d1924303a4753606d7985929f9d90837675757574747474757575767778797b7d7f8185888c8c88837e79716c615e564d453b32281e11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929f9e92857f7d7b7975726e6964605b54514b433e3a444d57606b727f8c80736a5f53473d32271b0f0300111e2b3744515e6a7784919d968a7d7063574a404b555f6a73808d80737e8a97998d8073665a4d44505c666e7b8692857b6e616d7a84918c80787474767c838a7f726b60554b4035291e130800000000000000000000000000000000000000000000000b17222d3a4753606d7a8692998d807366564d4a5763707d8a96aba995887b6f625548525e68778390998c7f7366554b4035291d1004000000000000000000000000000000000000000000060c151c23282c2d313538393837332e2d29241e16111a222a31394045474c514f4a48443d352b21160b000000000000000000000000000000000000030e18212c3845515c676d7a8490959ea5a59e97918a827c736d67605b544e46413a3b4241403c362f261d1007000000000000000000000000000000000a15202c3945525d6874818e9b9c8f82766a707d888f82776c60574d42362a1f150b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d394653606c77818a8c8276695c504336291d10030000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa79f9285796c6053463c3c3f444c535b606d73808d877d707683909da297887c6f6255483c2d22170b000000000000000000000000000000000000000000000000000000000000010d19242f3d495663707d8999a3ac9f92867a6d6053473a2d201408111b2b37424d576673808d99a89b8f8275685c4f4235291c0f000d1925303a4854606b778491968a7e7164584e43372b1c1207000000000000000714202d3a46525e697885919ea297897c6f6256493c3e45515c676e7c86929fa79b8e817468574e4854606b76838276695c504336291d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222e37404850555d606468676d6e6e6e6d676b696a73808d9592877b6e62594f47464b5466737f8c99a9a095877a6d6154473a2e2114080000000000000000000000000000000000000000000008131f2c3945515d6775818e9b9f9387828281818181818181828283848586888a8c8b8986837f7b77716d66615a524c443b332920160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b667683909da197928c8a8885827f7b76706c66605d555046423b454f59606c7782867c6f62584e43372b1f130600101c2936434f5c6976828f9c988b7e7265584b3f434e58606d7984867b7d89969a8e8174675b4e3f4a545f6a737f8c8f82756b74818e9083786c65676a6f7982877d70675d51453a2f24190d010000000000000000000000000000000000000000000006131f2c3945515d6775828f9c908377695e524c5865727f8b98a5a297877a6d6054474c566773808d9a908376675d5145392c20130600000000000000000000000000000000000000000000030b12181c1f2024292b2c2c2a2621201d19130c0810181f272f35383a4044423d3c38332b231a0f0500000000000000000000000000000000000009141f2c38434f59606d79839096a0a7a39f938e857e766e6a605d55504a423d4246484f4e4c4841392f22190f0400000000000000000000000000000004111d2935414c56626f7c88949f94887b6e6b74808d8b7f72695e53463e31271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000004060706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3744505b656c777d807c6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9ba89c908376655b5044372e343a4149505b606c78828f857a74818d9aa9988b7f726553493f33271b0f030000000000000000000000000000000000000000000000000000000200000814202d3a4753606d7986929faca3998a7d7063574a3d3025190d0e1a26313d495663707c8999a0958b7e7265584b3f3225180c0008131e2c38444f5966737f8c999083766a5f5347392e23180c0000000000000005121e2a36424d576875828e9ba9998c807366574d4236404b555f6a737f8c95a09e9184786a5f53474f59626f7c7a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101c252e363f434b515458555c60616161605d5558606d798390998f82766c61554b404956636f7c8997a2a7978a7d7164574a3e3025190d0100000000000000000000000000000000000000000004101d2935404b5563707d8a97a199938f8c8d8e8e8e8e8e8e8e8f909185838281807e7c7976736f6a64605c545046413a322921170e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a546673808c99a89b8e8181868c8f8b87827d78726d67615a534d453f44505b656e7b8682766a6054473b2e221508000d1a2733404d5a6673808d999a8d807467554b403c45515d67707d8a817c88959c8f8275695c4f42424e57606d7984918a7d707b87928b7e72665b5860676d7a8484796d60564c4135291d11040000000000000000000000000000000000000000000004101d2935404b5565717e8b9a95877b6e61544e5a6774818d9aa79f928578675d51454a5663707d899892867a6d6053473a2d201409000000000000000000000000000000000000000000000000070c101213181c1e1f1f1d191413110d080200060d151d24292c2d333736302f2c27211a1108000000000000000000000000000000000000020e1a26313b4854606b74818d959fa8a399928c817a716c625f58514c443f3b454d53555c5b59534b41342b21160a000000000000000000000000000000010d19242f3a4754606a7683909c9a8d8174686d798491867b6e61594f43392f24180c0100000000000000000000000000000000000000000000000000000000000000000000030709070c10131313100c070a07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49535b656c71736e6a5f53473a2e211408000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba89b8e82756853493f3327282f383f44505b666d7a848f82757e8b97aa9b8f8275655b5044372b1f120500000000000000000000000000000000000000000000020507080c0e0b0a06131f2c3845515d677683909ca9ab9a8d807467564c41362a1d110914202d3a4753606d7a8692959083796d6053473a2d20140700020f1b27323d4855616e7b889594887b6e62544a4034281c1004000000000000020e1a25303e4b5864717e8b99a49d908377695f53463a39434e58606d7883909da196887b6e6255484754606a6f6d685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242d313a4145474b4b515354555453514b515c666f7c8792948a7d70675c51454653606d7985929fa79a8d817467564c41362a1e1105000000000000000000000000000000000000000000000c18242f3a4653606d7985929e9d90837f808182838587898a8d8f928683807e7b7774706c65625f5853514a423e35302820170f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3c4956626f7c8996a09d9083767a7f848b918f8a847e79716c615f5750443f49535e69737f897c6f6256493c2f231609000b1724313e4a5764717d8a979c908376675d514539404b55616c7682877c89979d9083776a564c413c45515c67707d8a918479808c99887b6e62544e555d686f7d898073685d5245392c201307000000000000000000000000000000000000000003090e1218242f3b4754616e7b8793988b7e7165544b556976828f9ca99d9083776a554b414653606d798592998a7d7063574a3d31251a0e02000000000000000000000000000000000000000000000000000406070b0f121312110d0707050100000000030b12181d1f20262a292322201c160f080000000000000000000000000000000000000005121e2a36424d57636f7c89929da7a39992877f756d68615a534e45413a3a434d575f616868645d53463d32271b0f0500000000000000000000000000000008131e2b37434e5864717d8a969f92857a6d67707d8a8f82756b61554b4035291e13080000000000000000000000000000000000000000000000000000000000000000040a0f131516181c1f201f1c181a171312100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d384149535b606466625f574e42372b1e1206000000000000000000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9ba79a8e8174675b4e412d221d262d333f4a545d68707d898b7e7b8898a29e9285796c605346392d201306000000000000000000000000000000000000000003090e121415191b181714101d2935404b556673808c99a6aa9d918477685e5246392d201307131f2c3945515d6777838c89837b6e675c5145382c1f130600000b16212d3a46535f697783909a8d8074665c5144382c1f1207000000000000000914212e3a4754616d7a86939fa095887b6e6155483d313c44505c66717e8b97a9988b7e7265584b434e586062615e564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121b1f282f35393a3e4045474848474745404b545f6a737f8c959184796d60574d44505c6675828f9ba89d918477685e5246392d2013070000000000000000000000000000000000000000000007121f2c3844505c6674808d9a9e91847873747576787a7c7e808385898d8e8b8884807c78726d68605d555049413a322921180e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000615222e3b4754606a7784919d9f93877b6e72797e848d92918b847e766e69625a504a424d57606d79848175685b4f4235281c0f000815212e3b4854616e7b87969f92867a6d6053473a39434f59626f7c878285929f928578685e524639404b55616b76828f8c7f83909386796d6053464c56606b7581857a6d6054473a2d21140700000000000000000000000000000000000000050d141a1e21212d3946525e687783909b8e8275665c515c677884919ea89b8f8275685c4f4245515c6775828f9a8d807467574d42362a1e1205000000000000000000000000000000000000000000000000000000000002050605040000000000000000000001070c101314191e1c171614100b0500000000000000000000000000000000000000000714212d3a46535f6976838f9ca4a49a92877e726d615e565047433c3535414c555f696e75746f64584e43382c21160b000000000000000000000000000000010f1b27323c4653606d7884919e988c7f73676c75828f8a7d70675d51453a2f24190d02000000000000000000000000000000000000000000000000000000000003090e161b1f222323282c2d2c28232723201f1c17110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3841495053575955534e453c31261a0e02000000000000000000000000000000000000000000000000000000000000010e1a2734414d5a6774808d9aa79b8e8174685b4e413528141b222d38424c56606b74818e857a85929fa197887b6f6255483c2f22150a00000000000000000000000000000000000000060e141a1e212226282423211d18242f3d4a5764707d8a97a9aca095877a6d6154473a2e211407101d2935404b5564717e7f7c786e695f554b4034291c1004000005121e2b37424d5766727f8c999285796d6053463a2f24180c000000000000000713202d3946525e687683909ca7998c7f7266584e4338343f4a54616e7b8897a19b8e817568574d42464e545654524c443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d161d24292c2d2f34383a3b3b3b3a3939424e58606d788390968c7f73695f53464a5465717e8b98a8a095877a6d6154473a2e2114080000000000000000000000000000000000000000000003101c28343f4a54626f7c8895a096887c6f676869686d6f717376797c8084898e918d89847f7a736d67605b534c443b332920170d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5865727f8c97a29a8c7f73676d727980868f94918a827b716c605b544a45515c676f7c7b6e6154473b2e211408000714212d3a46535e697784919e998a7d7063544a3f343e47535f6a74818d87929f98877a6d6154473a39434f59626f7c8792859095928578675c5145434f59616e7b847c6e6255483b2f221508000000000000000000000000000000000000090f171f252a2d2e3236414d5666737f8c999285796d6053606d7986939fa79a8d8074675a4d41404b5565727f8b98918477695e53463a2d21140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070d110f0a090704000000000000000000000000000000000000000000000815222e3b4855616e7b88949fa89f93887e716c625b524c443e37312c3945515d676e7b8281746a6054483e33281c10050000000000000000000000000000000a151f2b3844505c66727f8c989e9285796d616e7b869184796d60554c4135291e130800000000000000000000000000000000000000000000000000000000060d141a21272c2f302e34383a38342e34302d2b28231c19130c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f383f44464a4d4847423c332a20150900000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a69b8f8275685c4f422d2217111c262f3a444f59606d7a848d8083909ca9988b7e7265584b3f31261a0f0200000000000000000000000000000000020a0f181f262a2d2e323531302d2822212e3b4754616e7b8797a1ada7968a7d7063574a3d302417080c18242f394956616c7172706c665f574d43392f23180c000000020e1a26313c4855626f7b8896978a7d7063554b4035291d100400000000000005111d2a36414c5665727e8b99a39d9184776a6054473a303846535f697885929e9e918478695e52463d4347494746413a32291e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d202123292c2d2e2e2e2d2c303c44505c666e7c869292867b6e615a504854616e7b8795a0a7978a7d7164574a3e3025190d01000000000000000000000000000000000000000000000c17232e384754606a7784909d998c7f736657565d60626466666d7073787d81878e93918c86807a716c655e564d453b33291f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d4754606d7a85929f9e9285796d60676d737b828c92948f867e746c665c544a4b55606a6f6e695e52463a2d2014070005121e2a36424d576774808d9a9a8e8174665c50443837434e58616d7a869299a395897c6f6256493c313e47535f6a75818e92989e9285786b554b403d46535f696e7a6e6a5f53473a2e211408000000000000000000000000000000000009121b212931363a3b3f413d4955626f7c889697897c6f6256626e7b8899a4a5988c7f7265594c3f3b4855616e7b889695877b6e6154483b2e23170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a6a0968d80736c615a5146413a322b262d3a4754606d7a848f897c6f62594f44382c21160b00000000000000000000000000000003101c28343f4a54606d7a85929f978c7f72676973808d8c7f72675d51453a3025190d010000000000000000000000000000000000000000000000000000070f181f262a32383b3c41404546454043403d3a38342e2a251e18120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d262d3337393e403b3a37312a21180e0300000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97ab9c8f837669544a3f33281c0f141d28323d45515d67717e8a87828f9ca89b8e827568584e43372b1f1206000000000000000000000000000000010a141c212a31363a3b3f413e3d39332c242d3a46525e697885919eaba6998d8073665a4d403025190d07121d2d3945505a61646563605b544d453b31271d1207000000000915212e3a47535f6a7784919b8e8175675d5145392c1f1306000000000000010d1925303a4754606d7a86929fa095897c6f62564c413636424d576976828f9ca196877b6e6154473b373b3c3a3936302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d111314181c1f20212221202028343f4a545f6a727f8b938f82756c61554c535e697784919da79a8d817467564c41362a1d11050000000000000000000000000000000000000000000006111c2b37434e5866727f8c999d908377695e5252545657545c6063656c70757b81879095928d857e776d685f574d453b31271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c3945525d6873808c97a1978c7f72675d60696e777f869196928b80786d665c50444e586062615e574d42362a1e110500020e1a25313d4a5763707d8a979e9285796d6053463a313c46525e6873808c97a1978a7e7164574b3e3137434e58616e7b87929f9f9285786c564c4137424d575f676d675f584e43372b1f120600000000000000000000000000000000060f1b242d333b4246484c4e4a48535f6a788491998c8073665664707d8a97aba4978a7d7164574a3e3a47535f69778491988b7e7165544a3f34281c10030000000000000000000000000000000000020507080c101111100d0909070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9ba79e9184796d605a50483f3630282025323f4b5865727e8b969083766b6155483e33281c10040000000000000000000000000000000b17232e3845525d6873808d989e92857a6d606d7a8592857a6d60564c41362a1d120700000000000000000000000000000000000000000000000000071119212931363d4348494d4b5153514b504d4a46443f38363029241d150d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d31332f2e2b2620180f060000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8899a39d908477665b5044382b1f120b16202935414c55616c76839086929fab9e9285786a5f53473a2e2114060000000000000000000000000000000a131c262e333b4246484c4e4b49453e362c2a36424d576975828f9ca8a99c8f837669564c41362a1d1105111d28343e48505658595653504a423b33291f150b010000000006121f2b37434e586774818d9a9286796d6053473a2d22170b000000000000000813202c3945525d6875828e9ba79b8e8174685e52463a313f4c5966727f8c99a3978a7d7064574a3d312e2f2e2d2a251e170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070c1013141515141417232e38424e58626d75828f948a7e71675d514d576773808d9aa99d918477685e5246392d20130600000000000000000000000000000000000000000000000f1b27323c4754616e7b87939f95877b6e61544847494b4a5053535b6063696e747c838d9397918b827a6e695f574d43392f23180c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606d7a85929e9e9184796d60585f656c727c849095928d81786d605b51464e545654524d453b30251a0e0200000913202d3a4653606d7985929f97897d7063564c413636414c56606d7a85929e998c7f7366594c402e323c46535f6974818e999f928679685d5246393c454d555d605d554e463c31261a0f02000000000000000000000000000000030e18212d363e454d5354595b57554f586774818d9a908376685e65727f8c98a5aa95887c6f6255493c37424d576774808d9a8e8275665c5044382b1f120600000000000000000000000000000002080e111414191c1e1e1d1a1615130f0b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9caa988c7f72665c51483e362a251e162734414d5a6774808d9a958a7d7063594f44382c20150a00000000000000000000000000000006111c2935414c56616e7a86929f978c7f736867727f8c8c8073685e5246392f23180c000000000000000000000000000000000000000000000000060f19232b333b42464f54565a545c605c545d5a5653504a46413a352f271f17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f20242622211e1a150e06000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929f9f9285796c605346392d2013060e19242f3a43505a636f7d899299a3ada197887b6e6255483b2d22170b0000000000000000000000000000050e1c252e3840454d5355595b575550483e332830404c5966737f8c99a6ab9e928578685e5246392d2013070c17222d363e45494b4c4946443f382f2921170d030000000000030f1a26313e4a5764717e8a97988a7d706453493f33271b0f0300000000000004111d2935414c5663707d8995a09f92867a6d61554b41353b4854616e7b86929f998c807366594d4033262321201e19130d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060708080806111c26303c46515b616d7a849191847a6d60584e56636f7c8997a1a095877a6d6154473a2d22170b00000000000000000000000000000000000000000000000a15202d3a46525e6976828f9c988b7f7265564c413c3e3f4446495053575f616a6f7880889299948f847b6e695e554b40342920150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a45525d68717e8b959f978d80736a5f545b606a6f7b839094938e81746d62584e4347494746423b33291f140900000006131f2c3845515c6674818e9a9b8e8175685e524638303a45515d67727f8c9a9b8e817468554b40342a36424d57626e7b87939f99877a6d6154473a333c434b5153514b433c342a20150a000000000000000000000000000000000915202a333e4850575e6165686361595763707d8a9893867a6d616774818e9aa7a298877a6d6154473a313d4a5663707d89989285796d6053463a2d2013090000000000000000000000000000050d14191e202126292a2b29272322201b16100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909da298887b6e61544b40362c2419131a2734414d5a6774808d9a9d9083776b6155483c31261b0f010000000000000000000000000000000d19242f3a46525e6874808d989f92867a6d616d798491867a6d61554b4034291c100400000000000000000000000000000000000000000000020b18212b353d454d53596063676a666d666b696763605c54524c4540393128221c140b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213171a1514120e0903000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d677784919da398887b6e6155483b2e22150608131e28313e4854606b75828f9ca6b0a9988b7e726553493f33271b0f03000000000000000000000000020c16202e37404a52575f61656864615a5045392d313e4a5764717d8a97a4ada197877a6d6154473a2e21140706101b242d34393d3e3f3d3938332d261d170f06000000000000000a14212e3b4754616e7a87969b8e8174655b5044372b1f1205000000000000010d1924303a4854606b7783909da3988c7f73675d51453b3a46535e6974818d969b8f8275685c4f4235291c1413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2a333f46525e68707d88938d80746a605453606c7985919ea7978a7e7164544a3f33281c0f030000000000000000000000000000000000000000000005111e2a36424d5664717e8a979c8f8276685d5245392e34383a3f44464d53585f666d737e87929a9691847b6e675c51453c31261a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935414c56606c788390989f92877c6f665b50585f696e79829096938b7f726a5f53473d3c3b3a36302920170d0200000004101c2834404b5463707d89969f92867a6d61544a3f3435414b55606d7a87939d908377675c5145382c313b47535f6a76828f9c95897c6f6256493c313139404547454039312a22180e03000000000000000000000000000000020f1a26313c46505a61696e7274706b6153606d798592998a7e71646976838f9ca99f928579685e5246392d3a4653606d79859297897c6f6256493c3025190e02000000000000000000000000080e171e252a2d2e323637373634302f2c27211c170e08020000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683909c9f928578695f5342392e241a12081926333f4c5966727f8c99a0958a7d7063584e43372b1d130700000000000000000000000000000008131e2a36414c56616e7b86929f988d81746a67727e8b8c8073675c5145382c1f160a000000000000000000000000000000000000000000000a141d2a333d474f575f616b6f7477797979787673706d66615e56514b433d332d261d150d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060b0d080806020000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b556874818e9baa978a7d7064574a3d2e23170c010c161f2c38444f59626f7c88949faba89b8e8275655b5044372b1f120500000000000000000000000008131e28323f49525c63696e7274716c6155493d302f3c4955626f7c8895a9b3a996897c706356493d3023160a0009121b22282d303132302d2b28221c140b0600000000000000000714202d3946525e687884919e9285786c605346392d2013060000000000000008131e2c38444f5964717d8a959f9e92857a6d60564c4136424d57616d7a848c8f8f83776a5d5144372a1e1107050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212935414c56606b73808d93877c6f665c515b6674818e9aaa9b8e8175665b5044382b1f120600000000000000000000000000000000000000000000020e1925303b4653606d7985929e92867a6d6054473a30282c2d33373b42464e545c606c717e88939f969083796d60574d42372b1d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a44505b666e7b86929f999082786c60594f565e676d7a84919792867c6f62594f44382e2d2a251f170e0500000000000c18232e3a4653606d7984919e998c7f72665c5044382f3a45515d677784919d9286796d6053463a2d2b37424e576875828e9b988b7f7265574d42362a2f35393a39352f281f180f060000000000000000000000000000000006121f2b37434e58616c717b7f817d7063575c6775828f9b8e817468677885919eaa9d9184776a564c41362c3845515c6675828f998c807366564d42362a1e1105000000000000000000000008121a20293036393b3f43444443403c3b38322d282219140d05000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9c9e9184776b574d4234281d10080a1623303d495663707d8998a29c8f82766a5f53473a2f24180d010000000000000000000000000000010e1925303b46525e6974808d989f92877c6f626d79849185796d6053473d32271b0f00000000000000000000000000000000000000000006111c262f3c454f5960696e767c80848586868583807d79736d68605d554f443f382f271f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0d0f0c18242f3e4b5864717e8b97a8998c7f7366544a3f34281c1003040d1b27323d4754606a76828f9ca7ab9e9285796c605346392d2013070000000000000000000000010d1925303a44515b636e737b7f817e7164574b3e312d3a4754606d7a8797a1ada4978b7e7164584b3e3125180b00000910171d2124252623201f1c17110a0200000000000000000005111e2a36414c566875828f9b97887c6f6255493c2f2216090000000000000002101c27333d4653606c78839099a2978c8073685e5246393b46525d686d7a7f8282807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1925303a444f59606d7883909083796d60585463707d8a98a29e9285796c605346392d201309000000000000000000000000000000000000000000000009141f2c3845515c6674808d9a998b7e7164564c4135291f22272b31363c424a505a616c737f8c949f958d8073695f5347392f24180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28333f4a545f69717e8b939d948c7f736b60574d555d686e7b8592998f82766b6054483b2f221e1a140d0500000000000007121f2b3844505c66737f8c989e9184796d60544a3f3335414b556874818e9b99897c6f6256493c2e2631424e5b6875818e9b9c8f8276695e53463a2f24292c2d2c29241d160d0600000000000000000000000000000000000814212e3a47535f6a717e868c897c6f63565565717e8b9a9185786a6d7a8697a1a89c8f8275695c4f42302834404b5465717e8b9a908377695e52463a2d2014070000000000000000000007111a242c323b4146474c4f5151504d4948443d39332a251e170e070000000000000000000000000000000000000000000000000000000000000000000000000000010e1a2734414d5a6774808d9a9e918478665c5044382b1f12060713202d3a4653606d7986929f9f94887c6f62554b4035291d110400000000000000000000000000000008141e2a36424d57616e7b86929f998f82766c66727f8c8b7e7165594f43382c1c120700000000000000000000000000000000000000000b17222d38424d57606b707b82898d9192989292908d8985807a736d676059504a423931281f160d04000000000000000000000000000000000000000000040607090908060503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101316161a1b1415212e3b4854616e7b8796a09c8f8276665c5044382c1f1206000b16212b37434e5863707d89959faba197887c6f6255483c2e23180c000000000000000000000005111d2a36414c56636d7380868c897c706356493d302c3945525d687885929eaba6998c7f7366594c403326190d000000060c11151718191613120f0b060000000000000000000000020e192530404d596673808c99988c7f7265594c3f3025190e02000000000000000b161f2b3744505b656f7c87939c9a92857a6e6154473b35414c565d686d737576736e63574b3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323d44515c666e7b85928c80736a5f55606d7985929fa197897c6f6256493c31251a0e020000000000000000000000000000000000000000000004101c2834404b54626f7c88959c8f8275685d5245392c20171b1f262a30383f44505a606c778390999f92877b6e62554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b17222d38424d57626d74818e949f93877d70695e554c565f69717e8a9594897c6f6356493c3025190e09020000000000000003101c28343f4a54616e7a86929f968b7e71665b50443a2f3f4b5865727e8b98988c7f7265544a3f342834414e5a6774818d9a9f93877b6e61554b4035291d2020201d18120c040000000000000000000000000000000000000815222f3b4855626e7c879299877b6e615454616e7b879397887c6f6f7c8895a9a79a8d8074675a4d4134232e3b4754616e7a879395877b6e6154473b2e23180c000000000000000000020b19232c363e444c5254595c5d5e5c5a56544f49443e3630292019100800000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b979f9285796d6053463a2d20130906131f2c3845515c6775828f9ca69a8e8174675d5145392c201308000000000000000000000000000000020e1a25303b46525e6873808d979f948a7e71686d7a859184776b605448392e23180c00000000000000000000000000000000000000030f1c28333f4a545f69707d858f949a97928e8c8b8b8c8f928d868079706b605b544b433a31281f160c03000000000000000000000000000000000000070c10131315161513120f0b06000000000000000000000001020201000000000000000000000000000000000000000000000000000000000000000002080d161c20222327282120212d3a46535e697784919e9f9285796d6053463a2d20130700040f1b27323c4854606b7683909da9a9988b7f7265544a4034281c1004000000000000000000000713202d3946525e68727f8c9293867a6d6053473a2d2935414c566a7683909da9a79a8d8174675a4e4134271b0e010000000005080a0b0c0a0606030000000000000000000000000000081825313e4b5864717e8b979c8f827569564d42362a1e110500000000000000030f1b27333f4953606a737f8c908d8781786d6053463a303a444c565d6066696966635c52473b2f23160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202834404a545f69717e8a92877c6f675c5c6675818e9ba9998c807366574d42362a1e120500000000000000000000000000000000000000000000000c18232e3947535f6a7783909d92867a6d6054473a3025190f141a1e262e343e44505b656f7c87939f998e8174675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3c45505a606d798290959991857b6e675d554d57616c7683909b8e817468564c4135291d11050000000000000000000b17232e3846525e6874818e989d9184786c60554b40353c4855626f7b88979c8f8275665c5044382b33404d5a6673808d99a4998c8073675d5145392c20131413100d0701000000000000000000000000000000000000010e1b2734414e5a6774818d9994877a6d6154525e68778390988c7f72717d8a97a4a5988b7f7265584c3f32252d3946525e68778390988b7e7165544b4034281c100400000000000000000a141d2b353e4850565e6165696a6a6967636059555046413b322b221a1209000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8795a098887b6e6255483b31251a0e04101c2834404b5564717e8a97a29f92867a6d6053473a2f24190d0100000000000000000000000000000009141f2a36414d56606d7a85929e9e92857a6d6874808d897c6f63544a4034281c100400000000000000000000000000000000000006121f2b3844505b666e7b8692979d928d85817f7e7f808285898e8d847d736c665d554c433a31281e150b00000000000000000000000000000003090e12181c1f20222321201f1b17110e0903000000000305060a0d0f0f0e0b080705020000000000000000000000000000000000000000000000000000050c131921272c2f3033352e2d2a2a36424d576774818e9aa298897c6f6256493c2e23180c00000a15202c38444f5964717e8a96a1a89c8f8275665c5144382c1f1206000000000000000000000714212e3a4754616d7a86929e918578675d5145392c242f424f5c6975828f9ca8a89b8e8275685b4f4235281c0f020000000000000000000000000000000000000000000000000000000a1623303d495663707c89969e918578695e52463a2d20140700000000000000000b17222d38414e58636d737f83807b756d665c5044382c323a434c5254595c5c5957524940352a1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18232e39424d57616c74818d9083796d605963707d8a97a19d908377695e53463a2d211408000000000000000000000000000000000000000000000007121d2b37434e5865727e8b98998b7e7165564c4135291d11090c151c2328333f49535f6a76828f9c9f9285796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a333f45515c676d7a839096979083796d675e56505a64717e8a99918478685e5246392d20130700000000000000000006111c2a36414c56616e7b86929f968b7e71675d514539394653606c7885919e9285796d6053463a2d323f4b5865727e8b98ab9f92857a6d6053473a2e23170c060401000000000000000000000000000000000000000004111d2a3744505d6a7783909d95887b6e62554d566673808c998f8276737f8c99a6ab968a7d7063574a3d30242a36414c5666737f8c998f8275665c5145382c1f13060000000000000006111c262f3d47505a61686e7276777776736f6b64615a524c443d342c241b120a0a09070705010000000000000000000000000000000000000000000000000000000000000714212d3a46535e697784919d988b7f7265574d42362a1e13080c18232e3a4653606d7985929fa2988a7e7164564c4135291d1104000000000000000000000000000000020e1925303b45525d68727f8b96a0978e81746b6f7c888d8174665c5144382c1f12060000000000000000000000000000000000000613202d394653606c788390989e938d807a757271727375797d82878f8780786d675d564c433930271c120700000000000000000000000000060e141a1d23282c2d2f2f2e2d2b27221b1a150c0701060b0f1213171a1c1c1b181514120e09030000000000000000000000000000000000000000000000050e161e252a33383b3d40423b3a3630313e4b5764717e8a97a8988c7f7265554b4034281c10040004101b27323d4653606d7984919eab9f9285796d6053463a2d201308000000000000000000000c1825323f4b5865727f8b989d9184776a554b4035292835424f5b6875828e9ba8a89c8f8275695c4f4236291c0f030000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a197877b6e6154473b2e211408000000000000000006111b262f3d46515b636d7276736e69605c544a3f342828313a4145474c4f4f4d4b4740372e24190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303c45505a606d7983908d80736b60606d7985929e9f95877b6e6154483b3025190d0100000000000000000000000000000000000000000000000f1b26313c4754606d7a85929c8f8276685e5246392d201409030a1117222d38414e5864717d8a97a2988a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b18212834404b555d686e7b849095959083796e68605954606d7a869396877a6d6154473a2e211407000000000000000000000d1925303b46525e6973808c959c91847a6d6053473a3744505b6574808d969286796d6053463a2d303d495663707c8999a3a2978c7f7266544a3f34281c10030000000000000000000000000000000000000000000005121e2b3845515e6b7884919e96897c6f63564956626f7c899792867a74818e9ba7a399887b6e6255483b2f2225303c4955626f7c88969285796d6053463a2d22170b000000000000000b17222d38424f59616c717a7f82848483807c77706c615e564e463e362d241b1617161413110d08050200000000000000000000000000000000000000000000000000000005121e2a36424d5766727f8c999c8f8276695e53463a3025190d07131f2c3845515c6774818e9aa89c8f8275685d5245392c2013070000000000000000000000000000000008141f2935414c56606d7884919d9d938a7d706a77839085796d6053463a2d201308000000000000000000000000000000000004101c2834404a5464707d8a95a0998e81756d6766656566666d70757b828a8c82796d685d554b42392e23180f060000000000000000000000080f181f262b2e34383a3c3c3b3937332d2b261f18120b11171b1f2023272828272522211e1a14100b050000000000000000000000000000000000000000020b16202830363d4448494d4e4746423b333b4754616e7b8796a09c8f8276675c5145382c1f130600000b161f2c3844505c66737f8c99a4a298897c6f6356493c3025190d010000000000000000000f1b2835424e5b6875818e9b9d9184776a5e514430252834414e5b6774818e9aa7a99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794a996897d7063564a3d3023170a0000000000000000000a141d2b344049515b63666966615f57504a42382e231f282f35393a404243403f3b352e251c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2a333e45515c676e7b8592887d70685e6674818d9aa7988b7f7265564c41362a1d110500000000000000000000000000000000000000000000000a15202c3945515d6774818e9a92867a6d6154473b31251a0e020006111b262f3c4754616d7a8796a0998c7f7366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18232e39434c565e696e7a838f949590837a706b615e5d6877849195887b6e6255483b2f2215080000000000000000000008141e2a36424d57606d78838e8f8b857b6e6154473b333f4953616e7b8488867f73675c5145382c2d3a4753606d7a86929fa99e918478665c5044382c1f12060000000000000000000000000000000000000000000004111e2a3744515d6a7784909d988b7f7265544a53606c788591998a7d7683909da99f9286796d6053463a2d20202d394653606c78849198897d706353493f33271b0f030000000000030f1c28333f4a54606b717e858c8f90918f8d89837d756e68605850483f362d2223242321201d1914110e090200000000000000000000000000000000000000000000000000020e1a25313b4754616e7b86929f93877b6e61564c41362a1f150b101c2834404b55636f7c8996a09f92867a6d6054473a2d21140600000000000000000000000000000000020d19242f3a44515c66707d8a939e9e91857a6d727f8c8a7d7063574a3d3025190d010000000000000000000000000000000006121f2c3844515c6676828f9c9f92867b6e615d555858545c60636a6e757e858f827a6d675d544a40342821180b0200000000000000000008111a212a31373940454648494846443f38373129241d151b22272b2d3034353534322e2d2a261f1c170e09030000000000000000000000000000000000000a141d28323a41464f54565a5b54524d453b3a46525e697784919e9f9286796d6053463a2d201308000003101c28343f4a54616e7a87939faa998c807366564c41362a1e1105000000000000000000101c2936434f5c6976828f9c9e9185786b564c41362a2734414d5a6774808d9aa7a99d9083766a5d5043372a1d10040000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0988b7e7265584b3f3225180c000000000000000000020b19222e3740495157595d5a55534d443f3830261c161e24292c2d33363633322f2a241c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212934404b555f69707d8a91847a6d65636f7c8996a19c8f8376685e5246392d201409000000000000000000000000000000000000000000000004111d2935414b55626f7c8895998b7e7165574d42362a1e120500000a14202d3946525e687784919e9b8e8175685b4e4235281b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303a444d575e686d79828c929590847d746e69666677839099887b6e6155483b2e22150800000000000000000000020e1a25303b45515c666d7a81827e7a6e685e5246392d3846525e696e797b7a736d63554b4034282c3945515d6776828f9ca69f9386796d6053463a2d20130700000000000000000000000000000000000000000000020f1c2835424f5b6875828e9b9b8f8275665c50505b6574818e9a8d807885929eaa9d918477665c5044382c1f1f2b3744505b6574818e9a8d8174655b5044372b1f1205000000000006121f2b3844505b66707d8792989c9d97929192908a827a6f6a615a51483f362f3031302e2d2925201e19140d08010000000000000000000000000000000000000000000000000914202d3a46525e6974818e99998d8073685e52463d31271d120c18232e394653606c7884919ea3998a7d7164574a3e2e23170c000000000000000000000000000000000008131e2834404a54616b75828f98a1978f82756e7b888d817467564c4135291d1105000000000000000000000000000000000713202d3a4653606d7985929f9b8f8275695e524b4b4c4a5053575f626c707b838f83796d665c51443e332a1d140a0000000000000000060f1a232c333c42464b515355565453504947423c352f271f262d3337393d404242413e3b3a36312d28211a150e060000000000000000000000000000000006111b262f3a444c525960636668615e574d4236424d576774818d9aa298897d7063564a3d3025190e0200000c17232e3846525e687783909daa9d908377685e5246392d2013070000000000000000000f1c2936424f5c6975828f9c9f928579685e5246392d2633404d596673808c99a6a99c908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998d8073665a4d4033271a0d0000000000000000000007101c252e3740464b4c504d4846423c342e261e150c13191d20212629292625231f19120a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18232f39434d57616c73808d8f82776c606c7884919e9f92867a6d6154473b3025190e020000000000000000000000000000000000000000040a0f1318242f3a47535f6a7683909c8f8376695e53463a2d21160b000005111d2a36414c56697683909c9c8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e28323b454d565e676d777f8790959187817b75727278859293867a6d6053473a2d201407000000000000000000000009141f2834404b545e686d7575726d685e564d41362a36424d575e666d6e6d67635b5143392e232935404b5564707d8a949d9d908377665c5044382c1f120600000000000000000000000000000000000000000000000c1825323f4b5865727f8b999e9285796d6053495364707d8a9991847a8797a1a89b8e817568544a3f34281c1b27333f495363707d8a989184786c605346392d20130900000000000613202d394653606c78839199a299938b8584868c928f857c716c625b51483e3b3d3d3c3a3935302d2a251f19130c04000000000000000000000000000000000000000000000005111e2a36424d56616e7b87929f92867a6d61584e43392f241812121f2b3744505b6573808c99a79a8e817467544a3f34281c100300000000000000000000000000000000010c18232e39424f59616e7b86929f9e938c7f727884918477685e5246392d201307000000000000000000000000000000000916222f3c4955626f7c8898a2988b7e7165574d423e3f3f44464e535a61696e79828e82786d605a50453c2f261b1106000000000000030e18212c353e454d53555c60626261605b53534d45403931292f383f44464a4d4f4f4e4b4846423b39332b2620180f060000000000000000000000000000000b17222d38414c565e616b7073756e695e52463a3e4a5764717d8a99a39a8d807367564c41362a1e1105000006111c2a36414c566773808d9aab9f93877a6d6154473a2e23180c0000000000000000000e1b2834414e5b6774818e9aa298877a6e6154473b2e2633404d596673808c99a6a89c8f8275695c4f4236291c0f030000000000000000000000000000000000000000000000000000020a15212e3b4854616e7b8794a19a8e8174675b4e4134281b0e00000000000000000000000a131c252e353b3e3f43403b3a373128231c150c03080d111314191c1c1a1916130e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313b45505a606d78828f8c7f726b6573808c99a3998b7e7165564d42362a1e110500000000000000000000000000000000000000070f161b1f22232b37434e5865717e8b9793877b6e6154483d32271b100200010d192530424f5c6875828f9b9c8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c162029333b444c555d656c737c838b91938d86827f7f828f97908376675d5145392c2013060000000000000000000000030c18232e39424c565e61686965605d564d443b3025303b454d545c6062605d5551494030271d242f3a4955616c75828c90908a7e7164544a3f34281c100300000000000000000000000000000000000000000000000714212e3a4754616d7a86929f97897d7063564c53606d7a8692968a7e8a97a9ac998c7f7266594c3f2e231717222d3a4753606d79859296897c6f6256493c31261a0e02000000000a1723303d4a5663707d8995a09f93877e78777a7f858f91877e726d625a504648494a494746413b3a363029241e160d0700000000000000000000000000000000000000000000020e1925303b46535f6973808d96988d81746a60554b4035292418121b27333f4953616e7b88959f9d908377665c5044382c1f1206000000000000000000000000000000000007121c27303e46535e69727f8c949f9f92877d75828f877a6d6154473a2e211407000000000000000000000000000000000a1724313d4a5764707d8a97aa95897c6f6256493c302e34383c424750575e676d78818d80746c61574d41382d22170b0100000000000915202a333e474f575f61676d6f6f6e6c65625f57514b433b333b41495053565a5b5b5a5855534d49443e37312a2117110a02000000000000000000000000030f1b27333f49535e686d767d80817b6e6154473b3a4754606d7a86929f9d908377685e5246392d2014070000000e1925303d4a5763707d8a99a4a49a8b7e7164544a4034281c100400000000000000000c1925323f4c5865727f8b98a796897c6f6356493c2e2333404d5a6673808d99a6a89b8e8275685b4f4235281c0f0200000000000000000000000000000000000000000000000000020b141b222f3c4955626f7c8895a29b8e8275685b4f4235281c0f0000000000000000000000010a131c232a2f323336332e2d2b261f17110a030000010406070d0f100d0c0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f29333e44505c666d7a8491877d70696e7b88949f9c8f8376695e52463a2d20160a00000000000000000000000000000000000109101920272b2e2f33323c4753606d7985929a8c7f7366594f44382c1e13080000081c2835424f5b6875828e9b9c8f8275695c4f4236291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e172029323a434c535b606a6f787e858a8f928f8c8b8f9490877d7063554b4035291d110400000000000000000000000007121d27303a444c52545b5c5854524c443b32291f29333b424b51535554514b4340372e1e151d2d3944505a606d787f83837e716c615542382e23170c0000000000000000000000000000000000000000000000000713202d3946525e6874818e989b8e8175685e52515d6776828f9c9083909da9a49a897d7063564a3d302317131f2c3845515c6775828f998d807366574d42372b1e1206000000000e1a2734414d5a6774808d9aa79a8d80746c686d727a828c92877f726c6259535556575654524c4746423b352f281f1910070000000000000000000000000000000000000000000009141f2b37424d57606d7984919a93877c6f675d51453f3628231d17222d3847535f697683909d9f9286796d6053463a2d2013070000000000000000000000000000000000000b151e2a36424d57606c78829098a29992867d828f897c6f6356493c30231609000000000000000000000000000000000b1825323e4b5865717e8b98a194887b6e6155483b2e23282c31373e454d555d666d78828b7e71695f53493f33271d120700000000020e1a26313c454f5961696e75797b7c7b79746e69605d554d453c454d535b60636768686765615f57554f47423c3328231c140c03000000000000000000000005121f2b3744505b656d7a82898d8578695e52463a3945525d687683909da095877a6e6154473b2e2114090000000814212d3a4754606d7a86939fac9b8e8275665c5144382c1f120600000000000000000815222f3b4855626e7c8895a0988b7f7265544b40342834404d5a6773808d9aa6a79a8d8074675a4d4134271a0e01000000000000000000000000000000000000000000000000000a141d262d343f4a5464717d8a97a49b8f8275685c4f4235291c0f000000000000000000000000010a12181e2225262a2722211e1a140c06000000000000000000030300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d182128343f4a545e686f7c8692857b6e697683909c9f93877b6e6154473d32271b0f020000000000000000000000000000000009131b222b32373b3c403c3b45515d6773808d999184776b6054483a3025190d0006101c2934404b556976828f9c9b8e8175685b4e4235281b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172029313a4149505860666d72797e8286898a8b8a88837d706b6054433a2f24180d01000000000000000000000000000b151e29323a4146474f4f4b4745413a3229201720293039404546484745413a312e251c0c1c28333e44515c666d727776716d625a504530261c110600000000000000000000000000000000000000000000000005111e2a36414c56616e7b86929f92867a6e61564c5565727f8b989590959fac9f93867a6d6054473a2d2114101c2934404b5564717e8b99918477695f53473a2e21140900000000101d2a3643505d697683909caa95897c6f625d61686d77808b93887e716c616062636463615e5654524d45413a312b22191007000000000000000000000000000000000000000000020e1a26313c45515d67707d8893999184796d605b51483f342e271e1b2b37424d5765727f8b9aa399887b6e6155483b2e221508000000000000000000000000000000000000030c1a25313b44505b666e7b86929fa298928a8f948a7e7164574b3e3124180b000000000000000000000000000000000c1925323f4c5865727f8b98a195887b6e6255483b2f221c1f262b333b434b545c666d7984867b6e655b5044392f24180c0100000006121e2b37424e57616b707b818588898785817b746d675f574e464d575e656c7073757574716e69646159534d453f342e261e150c03000000000000000000000613202d394653606c778290948f827669574d423635414c566673808c99a7978b7e7164584b3e31261a0f0200000613202c3945525d687783909daa9f9285796d6053463a2e23170c00000000000000000814212e3a47535f6a7783909d9c8f8275665c5145382c34414e5a6774818d9aa7ab988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000006111b262f383f44505c6674808d9aa79b8e8175685b4e4235281b0f0000000000000000000000000000070d121618191d1a1514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f17232e38424c56606a717e8a91837a6d717e8b97a2998c7f7265584e43372b1e130800000000000000000000000000000007101b252d343d4347494d4948444b55616e7b879396897c7063564c41362a1d120e1117202c3845515c677783909d998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f282f383f444e545c60676d7176797c7d7e7d7b766f6b60594f4431281d13070000000000000000000000000000030c1720293036393a42423f3a39352f2820170e171e272e34383a3b3a39352f281f1c130b17222834404a545c60666a6a65625a50483e331e150a00000000000000000000000000000000000000000000000000010d1925303a46535f69727f8b94988d8073685e5255616e7b88959f9d9fa7aa9d908477685d5245392c20130c18232f3a4754606d7a869295887b6e6255483b31261a0e02000000111e2b3844515e6b7784919ea398867a6d6053565e656c737f8892877e706a6d6e70706f6d6866615e56514c433d342b22190e0400000000000000000000000000000000000000000009141f2935414b55606b73808d93968e81756d635a5145403930292426313c4754616d7a87939f95897c6f6256493c2f2316090000000000000000000000000000000000000009141f28333f4a545f69717e8b939da29f979c988b7e7265584b3f3225180c000000000000000000000000000000000c1825323f4b5865727e8b98a295897c6f6256493c2f2316151a21293139424b545d676e7c8682776c60554b4035291d12070000000814212e3a47535f6a707d868e92989597918e8780796e695f584e555e696e787d808282817e7b76706c625f5751443f3830261e150b020000000000000000000a1724313d4a5764707d8a949b8e8175685b4e42302f3d495663707d8998a39b8e817568584e43372b1f1206000004111d2935414c566673808d99aaa298897d7063544a3f34281c10030000000000000006121e2b37424e5764717e8a959f9285796d6053463d3035424e5b6875818e9ba8a399897c706356493d3023160a000000000000000000000000000000000000000000000000000b17222d3841495058606d7984919ea79a8e8174675b4e4134281b0e00000000000000000000000000000002060a0c0c100d08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303a444e58616c73808d8f82786d7985929f9d9083776a6054473a3025190d0100000000000000000000000000040e19222d373f464e54565956544f46535f6975828f9b8e8175685e5246392e2318191c2328323b4753606d7986929f97897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d161d262d333c424a50555c6064666d6f7071716e696360594f473d321f160c01000000000000000000000000000000050e171e252a2d2e3536322d2c29241e160d050c151d23282c2d2f2d2c29241d160d0a050c18232e39424a5153595d5d585650483f362c220c03000000000000000000000000000000000000000000000000000008131e2a36424d57606c77828f9692867a6d615a535f697784919da9abb1aa9a8d807467564c4135291d110713202c3945525d6876828f998c7f7266574d42362a1e1205000000121e2b3845515e6b7884919e9f928679675d514c535b606d727f8b92867c74797b7c7d7c7a77736e69605d554e463d342b20160c020000000000000000000000000000000000000000030d18242f3a434f59606c78828f95938c7f726c625b514b423c35302b2d3946525e687784909d96897d7063564a3d3023170a00000000000000000000000000000000000000030b17222d38424d57626c74818e959fa8a3a9978a7d7164574a3e3124170b000000000000000000000000000000000b1824313e4b5764717e8a97a4978a7e7164574b3e2f24190d0f171f273039424b555f6a727f8b7e71675d5145392f24180c000004101c2834404b54626e7c8692989f99938e8c8e928d837b6f6a5f585d676e7b83898d8e8e8d8b88837d766e69625b504a423830261d140a0000000000000000000f1c2835424f5b6875828e9b9a8d8174675a4e41342d3a4753606d7986929f9e9185786a5f53473a2e2114080000010d19242f3d495663707c8998a2aa9a8e8174665c5044382c1f130700000000000000020e1a26313c4653606c7883909a978a7e7164594f4239333f4a546975828f9ca89f92867a6d6054473a2d211407000000000000000000000000000000000000000000000000030f1b27333f49535b606a717e8b96a1ab998c7f7366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e28323c46505a606c78828f8f817874808d9aa095897c6f62564c4135291d1307000000000000000000000000000a15202b343f495158606266636059534d5763707d899592867a6d61544b40342824252a2e343b444f5963707d89999e9285796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141b222730383f444b5153545c6062646564615f57544f473d352b210d040000000000000000000000000000000000050c13191d202128292521201d19130c0400030b12181c1f202221201d18130c04000007121c2730394044464c50504b4a453f362d241a10000000000000000000000000000000000000000000000000000000020e1a26313b44505b656e7b8491978e81756c6158576773808d9aa6b3aea2988a7d7063574a3d2f24190d04111d2935414c5665717e8b99908377695f53463a2d211509000000111e2a3744515d6a7784909d9f9386796d60534649505b626c727f8c9184818588898a8987847f7b746d6760584e463d32281e130800000000000000000000000000000000000000000007131d28313d44505b666d79839095918b7f726d605c544e45413a373236414c566774808d9a96897c6f6356493c30231609000000000000000000000000000000000000000006111c262f3c45505a606d79839096a0a7a297897c6f6256493c2f23160900000000000000000000000000000000091623303c4956636f7c8996a8998d807366564c4135291d110b0d151e27303a434e58606c778385796d60554b4035291d10040006131f2c3845515c6675818e98a29f9387817f81858c90857c6f6a5f606d7a8490959a99928d8b8c908a827b726d605c544a42382f261b11060000000000000000111e2b3844515e6b7784919e9a8e8174675b4e412d2c3845515d677683909ca197887b6e6255483b2f2215090000000813202d3a4653606d7985929fab9e9285796d6053463a2f24180d010000000000000009151f2b3744505b656f7c88939c8f82766b60544a403844505b667783909daa9c8f8276685d5245392c20130700000000000000000000000000000000000000000000000005121f2b3744505b656c717c86929fa8a3998a7d7064574a3d3124170a0000000000000000000000000000000000000000020608080b0e101011100f0d0a0707040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202b343e44505b666d7983908e81787b88949f9b8e8174685e52463a2f24180d040000000000000000000000030f1b27323c46515b626a6f736f6b615e5754606b778390998c7f73665c51453830313036383f444d56606b75828e9b978d8073665c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e262e34394045474b51535657585755534d48433d342b23190f0000000000000000000000000000000000000002080d1113141c1c181413110d080100000000070c101313151413110d0701000000000b151e272e34383a3f44433e3d3a342d241b12080000000000000000000000000000000000000000000000000000000009141f27333f49535e696e7c8592938a7e716a605864717e8a97a4b1ac9f9285796d6053473a2d201408010d1924303a4754616d7a869295887b6e6155483c31261a0e020000101c2936434f5c6976828f9ca499877a6e6154473f44515a636d74818e918e918a86848486898c86807a6f6a60584e443a3024190d040000000000000000000000000000000000000000010c161f28333f4a545d676d7a838f9493877f746d665f58524c4743403f3f4c5865727f8b9898887b6e6155483b2e2215080000000000000000000000000000000000000000000a141d2a333f45515c676e7a8491959f9f9285796d6053463a2d201307000000000000000000000000000000000714212e3a4754616d7a8796a19c908376685d5245392c2015171c20232428313c44505b656f7c877f72675d5145392c1f1306000713202d3a4653606d7986929fa49a8c7f7473747a808791857c6f696774808d969f9f9287817e80838a90867e746d665c544a41382d22170f0600000000000000121f2c3845525f6b7885929e9b8e82756853493f332935404b556673808c99a9988b7f7265584c3f31261a0e02000006121f2c3844515c6675828f9caca197897d7063554b4135291d110400000000000000030f1b27333f4953606a73808d9394897d70665c5147434653606c7985929fa2988b7f7265564c4135291d11040000000000000000000000000000000000000000000000000613202d394653606c777e859298a2ac9f92867a6d6154473a2e211407000000000000000000000000000000000000040a0f121415181b1c1d1d1d1c19171413110d0804010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e192228333f4a545d676e7b84918e827a83909c9f92867a6d61554b41352921160a000000000000000000000006131f2b37434e58626d727c807c756e69615e5964717e8b969184796d6053463e3d3d3f42464a50575f686f7c87939992857a6d60544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151c23282f34383a404546494a4b4a4846423b38322b22191107000000000000000000000000000000000000000000010507070f0f0c0707040100000000000000000406070807060401000000000000030c151c23282c2d33373732312e29221b12090000000000000000000000000000000000000000000000000000000000030b17222d38414d575f6a6f7c859192867c6f6a6063707c8996a3b0a69b8e8175675c5145382c1f1306000813202d3946525e6875828f998c7f7266574d42372b1e120600000e1b2734414e5a6774818d9aab96897d7063564a3d44505b656d79828f9b91847e797878797c80858d847c6f6a60564c41352920150a000000000000000000000000000000000000000000040d17222d38424b555d686d7a828d92938b80796e6a605d56544e4d4c4b4b5764717d8a979285796c605346392d201306000000000000000000000000000000000000000000020b18212934404b555e686e7b838d92978e8175665c5044382c1f1206000000000000000000000000000000000713202d3946525e687884919e9f92867a6d6054473c32261b21282c2f303636333f49535f6a758185796d6053473a2d201407000916232f3c4956626f7c8998a39f93867a6d66676d737c8490857b6e6d7986929fa1978b7f747173777d848e8b80786d665c53493f332721180b02000000000000121e2b3845515e6b7884919e9d908376655b5044372b2f3d4a5764707d8a97a99b8f827568574d42362a1e1205000004101c2834404a5465727e8b9aa4a99b8e8175675d5145392c20160b00000000000000000b17222d38414e58606c77818f959183786d605c544e4f57626f7c8898a29f92857a6d6154473a2f24190d01000000000000000000000000000000000000000000000003101c2936434f5c6976828b9297a2aaa49a8f8276685e5246392d20130700000000000000000000000000000000070c10151a1f21222528292a2a2928262421201d1913110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071017222d38424b555e696f7c86928f84808d99a3988c7f73675d51453d32271b0f03000000000000000000000815222e3b4754606a727f878c89827b736d6862606d798491978b7e7164594f48494a4c4d52545c60696e7a84919992877d70685d5242392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171d23292c2e34383a3c3d3e3e3b3a36312c27211910070000000000000000000000000000000000000000000000000000020300000000000000000000000000000000000000000000000000000000030b12181c1f20262a2a2524211d1811090000000000000000000000000000000000000000000000000000000000000006111b262f3b454e585f6a6f7c859092857c726d666f7b8895a2ab9f94897c7063554b4034291c10040005111d2935414c5664717e8a97908377695f53473a2d21150a00000b1825313e4b5864717e8b97a8998c7f7366564c424d57606c77818e938f91857a6d66666d6f737a808a857c6f685d52463c32261b0f0300000000000000000000000000000000000000000006111c262f39434c565d686d78808991928d837c736d68626058595858585a65717e8b988f8275665b5044382b1f120600000000000000000000000000000000000000000000060f18232f39434c565e696e79818689857b6e61544a3f34281c10030000000000000000000000000000000005111d2a36414c566874818e9ba3998b7e7164584e43372b232c33383c3d4343403a414e58626e7b877e7265584b3f3225180c000a1724303d4a5763707d8a96aa9e928578675d5d606a6f7a8390847a707c8998a29e9285796d65666b7079818c8d81786d655b50443e332a1d140a000000000000101d293643505c6976838f9c9f9285796c605346392d2e3b4854616e7b8797a29e928578695f53463a2d2114070000000c18232e3b4754616e7b87939fac9f92857a6d6054473d32271b10040000000000000006111b262f3d44505b656d79838f938d80746e62605859606974808d9aa1978c8073685e5246392d1e130800000000000000000000000000000000000000000000000000091623303c4956636f7d87929ea1a39f93877c6f62564c41362a1d11050000000000000000000000000000030b12181c1f262b2e2f3234363737363533312d2c2924201d19130e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a434d575f6a707d86929186939faa9e92857a6d60594f43382c1f1307000000000000000000000916222f3c4955626f7c888d92938f86807a746e6966727f8b979083776b615455565759565e61666d717b84919692877f716b61564c4130271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c12181c1f23282c2d2f3132312e2d2a261f1b160f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c101213191d1d181715110c060000000000000000000000000000000000000000000000000000000000000000000a141d29333c464e58606a6f7b838d92867f7975747e8a97a4a4999083766b605443392f23180c0000010d1925303a4653606d79859295887b6e6155483c32271b0f03000815222e3b4855616e7b8895a09c8f8376685d5246535f69727f8c938e828f8d80736a5f6063686d747d86847a6d61584e43372b1f1206000000000000000000000000000000000000000000000a141d28313a434c565d666d737d848d929087807a746f6a6866656465666c75818e93897d7063544a3f33281c0f03000000000000000000000000000000000000000000000007121d27313b444d575e676d747a7c796e695f5342382e23170c0000000000000000000000000000000000010d1925303e4a5764717d8a97a29c8f83766a5f53473b302c353e44484a4f504d474547535f6a768283766a5d5043372a1d10000b1724313e4a5764717d8a97a49e918578655b515860686e7a839082797e8a97aa9b8f8275675c5961676d757f888e81776c605a50453c2f261b110600000000000d1a2734404d5a6773808d9aa298887b6e6155483b2f2d3a46535e697885929ea197887b6e6155483b2e2215080000000714202d3a46525e697783909daaa2988b7e7265594f44382c20150a00000000000000000a141d27333f49535d676d79818d938d80766f6a69696b707b86929f9991857a6d60564c4135291d0c01000000000000000000000000000000000000000000000000000915222f3b4854606b727f8a919699928c7f736a6054443a3025190d0100000000000000000000000000060c151d23282c31373a3b3e414343444342403d3a39352f2c29241e1a140e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28313b454e58606b707e8792939aa4ada1978c80736b6054483b2f221509000000000000000000000815222e3b4754606a767c80858a8f928d86807b76726f798591958a7d7063616263646668696e72787e8591948f867e716d62594f443a2f1e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1013181c1f202324252422211e1a140f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070c11100b0b09050100000000000000000000000000000000000000000000000000000000000000000000020b17202a333c464e5860696e788087908b85818085929ea49f93877c6f63594f4431271d120700000008131f2c3845515c67717e8b928c7f7366584e43372b1f1306000714212d3a46535f697784919d9f92867a6d61544d57616e7b86928e81798391877c6f6259565d606b707d8781756a5f53473b2e21150800000000000000000000000000000000000000000000020b161f28313a434c545c606b707a80868e928d86807c78757372717273767e88938f82756b605442382d22170b000000000000000000000000000000000000000000000000010b151f29323b454d555d60686d6f6d675f574d4230261c11060000000000000000000000000000000000000814202d3a4753606d7985929f9f94887c6f62564c4136343e474f55575c5d5a54524c4e57626f7c7c6e6255483b2f221508000a1723303d4a5663707d8996ab9f9285796c60534e565e686d7a838d807d8a96a39a8e817467554f555d606d727f888d80736c61574d41382d22170b01000000000a1623303d495663707c8996a0988b7e7165554c41352a36424d576a7783909da9978a7d7064574a3d3124170a00000005111e2a36424d5766737f8c99a7aa9d9084776b6054483c32261b0f0400000000000000020b17222d38414b555d676d788088908d827c787676787d8491989892877d70685d52443a3025190d000000000000000000000000000000000000000000000000000007131f2c38434f59626d727e848a8b877f736d63584e4332281e1308000000000000000000000000020a11171e272e34383c4347484b4e4f5050504f4c4a4745413a39352f2a261f19140b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b161f29333c464f59616c707e879298a0a8a59f92867c6f6356493c302316090000000000000000000006131f2b37434e58606a6f74797e82868b8f8d88837f7c797f8c989083766e6e6f70707275787b7f848b928e89827b716c625a50473d32281e0c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070c101313161718171514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18212a343c464e575e666d737c838a8f8e8d92979c9a928d80736b6054473d321f150b0100000004101c2834404b55616c74808d9184776a6054473b2e2215080005121e2a36424d5766727f8c9aa3998b7e716457525e6975818e92867a707d898f82766b60545259616b727f877c6f6255483c2f2215090000000000000000000000000000000000000000000000040d161f28313a424a505960686d737b81868b8f8d888482807f7e7e80838b928d837a6d61594f442f261c110600000000000000000000000000000000000000000000000000030d172029333b434b51565e6162605d554d453b311e150a0000000000000000000000000000000000000006131f2c3845515c6774818d99a49b8e8174685e52463c3c464f596163696966605d564c54606a6f6e6a5f53473a2e211408000815222f3b4855626e7b8899a3a398877b6e6154474c565d686d7a848d808d9aa69c8f8276665c514b515b636d727f8b8a7e71695f53493f33271d1307000000000613202d394653606c7884919e9b8f8275675d5145382e31434f5c6976828f9ca5988c7f7265594c3f3226190c000000020e1a25303c4855626f7b8895a0aca095897c7063584e43372b20160a000000000000000006111b262f3a434b555d666c737c838b8f8985838384899196948f867e706b60564c4132281e13080000000000000000000000000000000000000000000000000000030f1b27323d47515b626c71797d7e7b736d635b51463c3220160c020000000000000000000000030b141c222830394045464e5355585b5c5d5d5c5b595754524c4745413a36312a251f17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d17212a343d474f59616c707d8691969c9b938f837b6e6154483b2e21150800000000000000000000030f1b27323c464e585f62676d71767a7e83868b8e8c898684919a958b7e7a7b7b7c7d7f8284878c8e8b86817c766e69615a50483f352c20160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090a0b0b0807050200000000000000000000000000000000000000000000000000000000000406070b0e100e0e0c080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f19222b343c454d545c606a6f767d83878b8e8f8f8d8980776c60594f43352b210d0300000000000c18232e3943505a606c778089887c6f6255493c2f22160900020e1a26313b4854616e7b87939f9c8f8276695e54616e7b87928e81756b75818e897c6f63584e4f59606d79847e7165584b3e3225180b000000000000000000000000000000000000000000000000040d161f2830383f444f565d60696e747a7f8286898b8d8c8b8b8b8d8d8a8680796d685e52473d331d140a000000000000000000000000000000000000000000000000000000050e172029313a40454c52545653514b433b33291f0c030000000000000000000000000000000000000004101c2934404b55616e7b87939f9f92867a6e61584e43434e58616b707676736d685d564e586062625f584e43372b1f1206000713202d3a4653606d7986929faa978a7d7064574a444c565e686e7b8586929fab9f9285796d60534645515a626d73808c867b6e655b50443a2f24180d0100000005121f2b3744505b65727f8b969f92857a6d60544a3f3435424e5b6875818e9ba79a8d8074675a4d4134271a0e010000000915212e3a47535f6a7783909daca79c8f82756a5f53473d32271b0d0400000000000000000a141d28313a434b545b606a6f787e83888b8e8f90908e8c88827c706c61594f443a2f20160c020000000000000000000000000000000000000000000000000000000a16212b353f49515a61676d70716e69635b514940342b200e050000000000000000000000030c151d262d333e434b5153585f626567696a6a69686664605d5654524c46423b363028221c140b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18222b353e47505a616b707c848c8f8e8a817a6e695e52463a2d20140700000000000000000000000a15202b343c464e53555c6064686d72767a7e818487898b8c8e8f8f8b878788898a8c8b8a8784827e7a75706b615f5750483f362d231a0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314181b1d1b1a18140f0901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222b333b424b515860626b70767b7f818383817c746c655b50463d3223190f00000000000007121d27303e44505b656c737c817e7165584b3e3225180b00000914212d3a46535e6975828f9a9f93877b6e615566727f8c98897d70636e7c878f82756a5f5347515c676d7a716c62564a3d3124170b00000000000000000000000000000000000000000000000000040d161e262e343d434c52575e61686d72767a7c7e808282838382807e7a746d675e564c41352b210b0200000000000000000000000000000000000000000000000000000000050e171f282f353a414647494745403a312921180d0000000000000000000000000000000000000000000c18232f3946535f6975818e99a3988e81746a5f534747535f6a707d8283807a6d685d524e545655534e463c31261a0f020006121f2c3844515c667683909ca69a8d807367584e43434c565f69707d88939fa6a2978a7d7063594f4448515b606c77818f83776c60554b4135291d1307000000030f1b27333f4953606d7984919e988b7f72665c50443b31414e5b6774818e9aa79a8e8174675b4e4134281b0e0100000006121f2b37434e5866727f8c9aa4aa9e94887c6f62584e43382b1f160c0100000000000000020b161f283139424a505860666c71777b7f81828383817f7b766e6a615a50473d32281e0e0400000000000000000000000000000000000000000000000000000000040f19232d373f4850555d606465615f57514940372e22190f0000000000000000000000000a151e262f383f444f555c60656a6e7174767677767573706d6865605d56534d46413b332d261d170f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019232c353e485059616a6f797f83827d756d685e574d42362a1e12050000000000000000000000040e19222b343c43474b5153565e6165686e7175787a7c7e80818282838383838281807e7d7a7875716d67636059534d453e362d241b110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104060708070706030000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f20252829282724201a130b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000710192129303940454e54596163696e72757676746f6a605b53493f342b211107000000000000000b151e27333f49535b606b6f74716c62564a3d3124170b000005121e2a36424d57626f7c87939f998c8073675d677683909286796d606a75828f877b6e62554c4b555e686d68625a50453a2e2115090000000000000000000000000000000000000000000000000000040c141c2328313a41454d53565d6065676d707274757676767574716d68605d554c443a3023190f000000000000000000000000000000000000000000000000000000000000050d161d24293036393a3c3a39352f281f180f0600000000000000000000000000000000000000000007121d2b37424d57616e7b86929f9f93877c6f625a504855626f7b868f908d837a6d60564c48494847433c332a201509000004101c2834404a5466737f8c99a79d9184776a5f53473a444d57616b73808c949ea89c8f82766b6054483f44505b656d79848b7e71675d51453a2f24180d010000000b17222d3845515c66707d89929e9184786d60564d433a414c566875828e9ba6998d8073665a4d4033271a0d00000000030f1a26313c4854616e7b87939faca69b8f82756a6054473e31281d13070000000000000000040d161f272f383f444e545b6064696e727476767675726e6a625f5750483e352b20160c00000000000000000000000000000000000000000000000000000000000007101b242d363e434b5153575855534d4540372e251c1007000000000000000000000006111c263038424a505961676d72777b7e8182838383827f7d7a76726d68615f57524d443f382f29211a110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a232c363e474f5860676d727675706b605d564d453b30251a0e02000000000000000000000000071019222a3137394045474c5254565e616468686d7072737475767676767675747372706e686865605d55544f46423b332c241b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080d11131415141312100c060604000000000000000000000000000000000000000000000000000000000000000000000000070d151d24292c2d3135363534302b251d150b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f171e272e343d43474f55575e616568696967626058504941382d22190f0000000000000000030c17222d384149505960636865625a50453a2e2115090000020e1a25313b47535f6a75828f979e9285796d606d7a8692908376665c626f7c898e8174675d51454c565e615e5650483f34291d1105000000000000000000000000000000000000000000000000000000020a11171f282f353b42464c5254555d6063656768696a69686764615e56514c433a32291e110700000000000000000000000000000000000000000000000000000000000000040c13181e252a2d2e2f2d2c29241d160d0600000000000000000000000000000000000000000000010e1a26313c46535f6973808d96a0998f82766c61574d535f6a717e8a93958e8174685e52463c3b3a37312a21180e030000000c18232e3b4855626e7b88959fa095887c6f62544b403c454f59606c78828f96a09f94897c6f63594f433f49535d676f7c87857a6d60554b4135291d110400000006111b2834404b54606b73808d94968b7f72695e554b4445525d687783909da8988b7f7265584c3f3225190c00000000000a15212d3a46535e6976828f9ca8aa9e93897c6f625a50433a2f24180d010000000000000000040d151d262d333d424a5053575f626567696a696866625f58534e453e362c23190d040000000000000000000000000000000000000000000000000000000000000009121b242c31394045474a4b4846423b332e251c130a0000000000000000000000061017232e38424a545b606b70797e83888b8e8f90908f8e8c8a86837f7a746e69615e56504a423b332c2317110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a242c353e464e555d60656968636159524c443b33291f1409000000000000000000000000000007101820262b2f34383a4146474c525458565e61636566676869696a6a696868666563615e565854514c48443d36312a211a12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315191d20212121201f1c171312100c070000000000000000000000000000000000000000000000000000000000000000000711191f272f35393a3e414341403c372f271d130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c151d232832373e44484d5354585b5c5c5a56544e443f382f261b100700000000000000000006111b262f383f444f54565b585650483f34291d110500000009141f2b37434e58616e7b85929f978b7e72676f7c89998d80746754606a768390867a6d605447444c5254524c443f362d22170c010000000000000000000000000000000000000000000000000000000000060d161e242931363a4145474b515356585a5c5c5d5c5c5a5754524c45413a312920170c00000000000000000000000000000000000000000000000000000000000000000001070d13191d20212320201d18130c0400000000000000000000000000000000000000000000000009141f2a36424d57606d798491999f948a7e71695e554e58616c75818e9a92867a6d6154473a2f2e2b2620180f06000000000714212e3a47535f697683909da79a8d8074665c5145383e44505b666d7a849198a29c8f82766b6054483e414b55606a73808c7f73675d5145392c201306000000000c18232e39424f59606d78828f9492867b6e675d55504e56606d7a86929fa096887c6f6255483c2f221509000000000005121e2a36424d5764717e8a96a1aca59c9083766c61554b4135291d1104000000000000000000030b141c22282f383f44464d5355585b5c5d5d5b5955534e47423c332c231a110700000000000000000000000000000000000000000000000000000000000000000009121a1f272f35393a3d3e3b3a36312a211c130a0100000000000000000000040e182228343f4a545c666c737d848b90959899928f8c8a89898a8c8f8b86817b746e68605b544d453e3528221c140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232c343c434b5153595c5b57554f45413a322921170d03000000000000000000000000000000060e151b1d23292c3036393b4146474b4c52545658595b5c5c5c5d5d5c5c5b59585754524c4b4745413a38322a261f180f080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151b1f2224292c2d2e2e2d2c2823201f1c18120d07010000000000000000000000000000000000000000000000000000000000060f19232b31394045474b4e504e4d4841392f251a0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121820272b33383b4246484c4e50504e4948433d332d261d140a00000000000000000000000a141d262d333d4348494e4b4a453f362d22180c01000000030f1b26323c46525e69717e8b929e9184796d717e8b978c7f7366595865727e8b8b7e7165544a4041464746413a322d241b110600000000000000000000000000000000000000000000000000000000000000040c13191f252a2f35393a404547494b4d4f4f50504f4d4b4746413a352f281f170e05000000000000000000000000000000000000000000000000000000000000000000000002080d111314161413110d070100000000000000000000000000000000000000000000000000030e1a26313b45515c676f7c87929f9f92857b6e675c53505a616e7b8793998b7e7164584b3e31251f1a150e06000000000006121e2b37424d5764717e8a96a19e9285796d60544a3f333f4a545d686f7c86929f9f94897c6f635a50433a434e58606d7883857a6d6054473a2d2114070000000007121d27303d44505c666d79828d929083796d67605c585f68717e8b99a39e9184776a5f53473b2e2115080000000000020e1a25313b4653606d7984919ea8ab9f948a7e71675d5145392c20130600000000000000000000020a11171d262d33383c4247484c4e4f50504e4c4847433c37312a211a11080000000000000000000000000000000000000000000000000000000000000000000000080d151d24292c2d31322e2d2a261f180f0a0100000000000000000000000a15202a343c44505c666d78808a91969d9a938d86827f7d7c7d7e7f82858a8e87817b726c665e574f473f332d261d140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a222b31394045474c504f4a48443e35302820170f050000000000000000000000000000000000040a0f12181c1f252a2d3036393b3e414647494b4d4e4f4f505050504f4e4d4b4a4746413e3a39352f2c27211a140e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720272b2e2f35393a3b3a3a38342e2d2c28231c18130c04000000000000000000000000000000000000000000000000000000030e18212b353d434b5153585b5c5b59534b41372b201408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151b21282c31363a3b3f424343413c3b383227221b140b020000000000000000000000020b141b222732383b3c413e3d3a342d241b110600000000000a15202a36424d57626c74808d93968c7f72727f8c988b7e72655854616d7a878f8275665c514438393a39363029201b120900000000000000000000000000000000000000000000000000000000000000000001080d141a1e24292c2f35393a3d3f414243434342413e3a39363029241e160d0500000000000000000000000000000000000000000000000000000000000000000000000000000105070709070604010000000000000000000000000000000000000000000000000000000009141f2934404b55606a727f8b929d979083796d655b51535f697683909a8d8074675a4d4134271a0f0903000000000000020e1a26313c4653606d7984919ea1978a7e71665b50443838424c565f6a717e8b939e9d9083766c61554b403d44505c666f7c877f7265584c3f3225190c00000000000b151e28343f4a545c676d78808b928f8279716d66696a6f7a84919e9f948b7f7265584e43372b1f120600000000000009141f2c3844505c66727e8b96a0aba69e9184796d6054473a2d211407000000000000000000000000060b141c22282b31373a3b3f41434343423f3b3a37312b2620180f0800000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f20242522211e1a140e06000000000000000000000000030f1b26313c46515b606d78818d929ea0979288807b7672717070717275797d82898e857f786e69615951443f382f261d140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810191f282f35393a3f43423d3c383329241e160e05000000000000000000000000000000000000000001070c1013191d20252a2d2e3036393a3d3f40414243434343434241403f3d3b3936302d2c29241e1b160e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c232832373b3c414547484746443f3d3a38342e29241d160d0802000000000000000000000000000000000000000000000000000915202a333d474f555d6064686968645d53483c3024180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f171c1f252a2d2e32353636342f2e2c272117110a0200000000000000000000000000020a111721272c2f303532312e29221b1209000000000000040e1a25303b45505a606c77818c9292867b727f8c988b7e716558525e6877839085796d6053463a2d2e2d2a251e170e0900000000000000000000000000000000000000000000000000000000000000000000000003090e13191d2024292c2d303234353637363534312e2d2a251e19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18232f39434e58626d74808d939d958e81776c605c545765727f8b988e8174685b4e4135281b0e00000000000000000009151f2c3844515c66727e8b95a09d9184786c60544a3f343a444e58626c75818e969f958a7e71675c5145383f4a54606a748183766a5d5043372a1d100000000000030c17232e38424b555c666d747e868e8f847d797676777c8390969f959082786d6053463c32261b0f0300000000000003101c28343f4a54606d78849199a4a69f968d8073675a4d4034271a0d00000000000000000000000000020a11171c1f262b2e2f323436373635332f2e2b26201a150e0600000000000000000000000000000000000000000000000000000000000000000000000000000001070c10131417181514120e09030000000000000000000000000006121f2b37434e58636d74818e939ca29892857d746e69666463636466666d70767c838c8b827b706b625b504a42382f261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d161d24292c2d323635302f2c282119130c0400000000000000000000000000000000000000000000000004080d1114191e2021252a2d2e3032333435363637373635353332302e2d2a2521201d1913100b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e262e343d4347494c5154545453504a4a46444039352f281f19130c040000000000000000000000000000000000000000000000020e1a26313c454f5960676d717476746f64594d4034271a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10141a1e2121252829292723221f1b160b060000000000000000000000000000000000060b161b1f2223282524211d181109000000000000000009141f29333f44505b656c777f868b8c83797f8b988c7f7266594c566774818e887c6f6255493c2f22201e19130d0500000000000000000000000000000000000000000000000000000000000000000000000000000001080d1113181d1f2023252729292a2929272421201e19130d08010000000000000000000000000000000000000001030200000000000000000000000000000000010406070a0b0b09060503000000000000000000000000000000000000000000000000000000000007121d27313d46515b606c77818d929f938d80746d665f5763707d89968e8174675b4e4134281b0e01000000000000000004101c2834404a54606d7884919da0958a7e71665c50443b323c46505a606d7a8491999e9184796d6053463a38424e58616d7a7c6f6255493c2f22160900000000000006111c263039434b545c606d727b81898e8a8583838488909598928d837a6d665c5044382a20150a00000000000000000c17232e3844505c66707d87939c9b9490857d6f6356493c30231609000000000000000000000000000000060b0f151a1e21222528292a2a282622211f1a150e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0b080705020000000000000000000000000000040f19222e3a47535f6a727f8c939ea59f92867d706b615e5757565657545c60646b6f787f878f857d726d605b544a42382f261c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c12181d20202629282423201c160d08020000000000000000000000000000000000000000000000000000000105080d111414191d2021232526282929292a2a29292826252421201e191413110d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f444e5456555d606161605c545753514a45403a3129241e160e060000000000000000000000000000000000000000000006121e2b37424e57606b70797e81838174685b4e4135281b0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191b1d1d1b1615130f0a0400000000000000000000000000000000000000040a0f1315161b181715110c06000000000000000000020d172027333f49535b656c727a7e7f7d797d8a978e817467574d5965727f8c8a7e7164574b3e312418110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070c10131416181a1c1c1d1d1c1a181413110d08020000000000000000000000000000000000010407070e100e090907030000000000000000000001070d1113141718181613120f0b06000000000000000000000000000000000000000000000000000000010b151f2b343f44505b656c77808b9299928d81786e6963626e7b88958b7f7265584c3f3225190c000000000000000000000c18232e3944505c66707d89939e9d9183786d60574d4236343e45525d68707d87939f968b7e7265584b3f303d46525e686d6f6a5f53473b2e211508000000000000000a141e273139424a505b62696e757c81868a8d8f90908f8e8b8680796d685d544a3f3428180e04000000000000000006111c28343f4a54606b727f8a8f8e8a837b6f6b6054483b2f221509000000000000000000000000000000000003090e121415191b1c1d1d1b191514120f090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202d39444f59626f7c86929fa59e938a7e716b6159524d4a494a4b4a50535960666d737d8591877f746c665b544a42382d2217110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d101314191d1c171614100b050000000000000000000000000000000000000000000000000000000000000000010507080d11131416181a1b1c1c1d1d1d1d1c1b1a18171414110d080604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a5058606268676d6e6d6d666864605c54514b433e353028201810070000000000000000000000000000000000000000000814212e3a47535f6a707d858b8e8f8276695c504336291d1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080c0f10100e090907030000000000000000000000000000000000000000000000030709090e0b0b0905010000000000000000000000050e17222d384149535b60686d7172706e7b8897908377695f535865717e8b8c7f7266594c3f3326190c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0c0e0f1010100f0e0b07070501000000000000000000000000000000000002080d1113141b1d1b1615130f0a0400000000000000070c13181d202124252422201f1b17110d080200000000000000000000000000000000000000000000000000030d192227333f49535b656c747f879195938e837b74706e6f7c8994887b6e6155483b2e2215080000000000000000000007121c28343f4a54616b75818e97a0958b7f72695e52463e3335414c56606b73808d959c8f8276695c4f433635414c565e61625f584e43372b1f130600000000000000020c151f2730383f4451565e616a6f757a7d8082838382817e7a736d675d564c42382e231706000000000000000000000c17232e38424f59636d727e83817d786e6960594f44382c1f130700000000000000000000000000000000000000020608080c0e1010100f0c08080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323c4955616c76839099a3a4998f82756c61594f46423e3d3d3e3f44464f545c606b707b84918c80786c665b544a3f3328231a0e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070c100f0a0907040000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0c0d0e0f10101010100f0e0d0c0a0807050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c606a6f75787a7b7a797774706d66605d555045413a322a221910070000000000000000000000000000000000000004101d2935404b55626e7c8692979b8f8376695c504336291d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f38414950565e616466646c78859295887b6e62585764717e8a8d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021272a2823221f1b160f0700000000030b12181d24292c2d3032312f2d2b27221b19130c0400000000000000000000000000000000000000000000000000071017222d384149535b606d727c838c92959087817d7b7c828f8f8275695f53473a2d21140800000000000000000000000c17232e38424f59616d7a8591999f92867b6e615a50453c313a444f59606d798391908a8073675a4d4032303a444c525455534e463c32261b0f030000000000000000030d151e262e343f444d52586062676d70737576767674716d68605c554c443a30261c11060000000000000000000006111c26303d47515b636c717675706c655f574f473d32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5864707d8a959fab9f93877b6e625a50463e363030302e34383d424a505960696e7b84918d81786c665b50443f352b20170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d747c81858787878684817d79736d67615a524c443c342b2219110700000000000000000000000000000000000006131f2c3845515d6775828e98a19d9083776a5d50442f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f383f444c525458595b6574818d9a8d81746a605665727e8b8c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000020507080a0b0a09070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292c2d343635302f2c27211910080000030c151c23282f35393a3d3e3e3c3937332d29241e160e060000000000000000000000000000000000000000000000000006111b262f384149505b626a6f797f858b90928e8a88888f90857b6e61574d42372b1e1206000000000000000000000006111c26303d46525e68707d87929f988e81756c61574d4339323d45515c676f7c86837e776c60554d443b30323a4146474947433c342a20150a00000000000000000000030c141c2328323b42464e54555d60646668696a696765615e56514b433a32281e140a0000000000000000000000000a151e2b353f49515a6164696863605b534d453d352b21160a0000000000000000000000020507080c0f1006050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a7783909da7aa9b8e82756a5f53483e342a25232323282b30383f444f575f696e7b85928e81786c605b51473d32291e140a00000000000000000000000000000000000000000000000000000000010507070b0d0f10111110100e0c0a0707040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2c38444f59606d7880898e9297949a93918e8a857f79716c605d564e463d342b2319100600000000000000000000000000000000000714202d3a4753606d7986929faa9d9184776a564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013131514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d262d333a4146474b4953626f7c889393877c6f68606674808d8b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000002080e111414171717151312100b06030000000000000000000000000000000000000000000000000000000000000000000000000000020c1620283035393a4143413c3b38322b221a1208030c151e272e343a4145474a4b4b4946443f383530282017110a020000000000000000000000000000000000000000000000000a141d262f383f44515860666d727a7f8386898a8b8a88837c6f695f53453c31261a0e020000000000000000000000000a151e2a36414c56606b727f8c949e938a7e71695f554b413834404b55606a6f787674716d675e564d41362a3035393a3c3b37322a22180e040000000000000000000000020a1117202930363d43474c5154575a5c5d5d5c5b5854524c454039302820160c02000000000000000000000000030c19232e373f485055575c5b57535049413c332b23190f0400000000000000000002080e111414191c1d13120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a0aba2988a7d7063574e42362c221a1617171c1f262e343d454d575f696f7c86928d80746d62594f443b30261c11060000000000000000000000000000000000000000000000000002080d111314171a1c1d1d1e1d1c1b19171413110d0805010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3b4854606b74808d929b9e95918b8988898b8f8c857e756d685f584f473d352b22180e05000000000000000000000000000000000916222f3c4955626f7c8899a3ab9e928578685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f2022211e1a140e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22273035393a3e47535f6a75818e9691847a6f6a6c788491887c6f6255493c2f221609000000000000000000000000000000000000000000000000050b1014191e202123242322201f1c1712100c0600000000000000000000000000000000000000000000000000000000000000000000000008131e28323a4145474e504e4948433d342c241a0c0b151e27303940444b51545758575553504946413a3228231c140c030000000000000000000000000000000000000000000000020b141d262d333f464e545c60676d72777a7d7e7e7d7b766f6a5f574d42332a1f150900000000000000000000000000030c1925303a444f59606c77828f959f92867b6e675d53493f3839434e586066717e817e796e685e5246392d25292d2e2f2e2b26201810060000000000000000000000000000060e171f252a32383a4145474a4d4f50504f4e4b4746413a342e271e160e04000000000000000000000000000007111c252e363e45494b504e4a46443f382f2a21191107000000000000000000060b14191e202126292a201f1b17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586774808d9aa7ac9f9285796d6053463c31201b1009060b10151c2328333c454d57606a717e8a928b7f726b60564d42382e23170b0200000000000000000000000000000000000000000000050b1013191d2021242628292a2a2a2928262421201d1914110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54636f7c89929d9e948f847f7c7c7d7f82868d8a827a6f6a60594f473d342a20170c020000000000000000000000000000000a1723303d4a5663707d8996abada197877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c151d23282c2d2e2d2b261f180f0b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e25292d2e37434e58616e7a84919691847c7777808c9184776a6054473b2e2215080000000000000000000000000000000000000000000000080f161c1e252a2d2e3031302f2d2b28231f1c17110a03000000000000000000000000000000000000000000000000000000000000000000010d1924303a444c52545a5d5b56544f463e362c1e14121c273039424a51555d6063656462605b53524c443e342e261e150c030000000000000000000000000000000000000000000000020b141b2227343d424b51555d6065686d707171706e69625f584e453c3121180e03000000000000000000000000000008131e28323d44505b656d79839095989083796d655b504941393c464e5465717e8b8b847a6e6154473b2e211d202122211f1b150e0600000000000000000000000000000000050d141920272b2f35393a3d4042434343413e3a39353028231d150c04000000000000000000000000000000000a131c242c34393d3e43423d3937332d261d180f070000000000000000020a11171e252a2d2e3236362d2b27221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a7885919eaba99c8f8276665c5144382c1f1209000000030a1117212a333b454e58616c74818e93877d70695e544a3f34281d140a000000000000000000000000000000000000000003090e161c1e24292d2e31333536373737363533302d2c2924201e19140e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c6675828f9ba2988f827872706f7072757a80868f847c6f6b60594f463c32291e140a000000000000000000000000000000091623303c4956636f7c8996aab3a995887c6f6255493c2f2216070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e272e34383a3b3a37312a211d140b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b13191d2026323c46525e686f7c858f94918984848c928b7e7164584e43372b1f13060000000000000000000000000000000000000000000109111921272c3036393b3d3e3d3c3a38342e2c28231c150c08020000000000000000000000000000000000000000000000000000000000000004111d2935414c565d6067696863605950483e30261c18232e39424a545c60676d7071716f6c65615d5650443f3830271e150c030000000000000000000000000000000000000000000000020a1117222b303940454c5154565d6063646564615f57534e463c332a1f0f06000000000000000000000000000000020c162027333f49535d676d7a839096958e81776c605b534b433c3d4a5663707d89968d8073665a4d4033271a13141615130f0a0400000000000000000000000000000000000002090e161b1e24292c2d31333536373634322e2d29251e18120b030000000000000000000000000000000000010a121a22282d30313635302d2b27221b140b060000000000000000020b141c22283036393b3f42433937332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8897a1ada5998c7f7266544a4034281c10040000000000060f182129333d46505a606d79849192857b6e665c50443c2f261b1106000000000000000000000000000000000000050d141a21282c3035393a3e40424344444343413f3d3a39352f2d2a251e1a150d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929f9f92867a6d6663626365686d737b828d867d706b60584e443b30261c110600000000000000000000000000000815222e3b4855616e7b8898a3aea4978a7e7164574b3e2e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202930394045464846423c332f261d11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1115202a36414c565f6a6f7b82888c8e8e8e8b867f736c6156463c32271b0f0300000000000000000000000000000000000000000009131b232b33383b4146474a4a4a4846443f3a38342e261e19130d050000000000000000000000000000000000000000000000000000000000000713202c3945525d686d7476746f6b615a5042382e231e2834404a545c666d737a7d7e7e7c78736d68615a504a423930271e150b000000000000000000000000000000000000000000000000000610191e272e343a4145474c52545657585755534d47433c342a21180e0000000000000000000000000000000000050e17222d38414c555e686e7a849195938d80746c655d554e47434956626f7c89958f8276695c4f4336291c10070908060300000000000000000000000000000000000000000000040a0f13191d20212427292a2a29282521201d19130c070000000000000000000000000000000000000000000810171d212324292824201f1b17110a020000000000000000000a141d262d333b4146474c4f5046443f382f261b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a9b3a3968a7d7063574a3d2e23180c00000000000000060f17212b343e45515d67707d89939082786d60574d41382d22170b0100000000000000000000000000000000070f171f252a33383a4146474a4d4f505051504f4e4c4a4745413b3936302b262019130c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8898a29b8e8275685e545556565e61696e78808b867d706a5f564c42382e23170c03000000000000000000000000000713202d3a4653606d7986929faca79a8d807467554b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29323b424b515355534d4541382f23190f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050e1925303b444e585f696e757c7f8182817f7b736d635a5045342b20150a00000000000000000000000000000000000000000007101b252d353d44484c52545657565553504a46443f38302a251e170e070000000000000000000000000000000000000000000000000000000005111e2a36424d56606d7a8183817c716c61544a3f342826303844515c666d7880868a8b8a8885807a716c605c544b433930271d120700000000000000000000000000000000000000000000000000070c151d23282f35393a4145474a4b4b4a4846423b37312a22180f0600000000000000000000000000000000000006111b262f3a434c565e686e7b838f94928d80776d676058534e4b5564717d8a978f8376695c504336291d10030000000000000000000000000000000000000000000000000000000001080d111314171a1c1d1d1c1b181413110d08020000000000000000000000000000000000000000000000060c111417181d1b1713120f0b060000000000000000000006111c262f383f444c5254595c5d53504941382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b3a994887b6e6155483b2e2215070000000000000000060f19222935404b55606b74818e948c7f72695f53493f33271d1207000000000000000000000000000000071119212931363e44484c525457595b5c5d5d5d5c5b595754524c4746413b37312a251e160e070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996aa988c7f7265564c494a4c52575f666c737f88857c6f685e544a3f34281e150a0000000000000000000000000006121f2c3844505c667683909da9a99d908376675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303b444d545c60615f57524a41352b21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323c464e575e616a6f72747574726e69635b52483e3422190e040000000000000000000000000000000000000000040f19222d373f474f54565e6163646362605c5453504a423e363029201911090000000000000000000000000000000000000000000000000000000714202d3a46525e6975818d908e887e71665c5044382b2e3842505a606d78828d9298989597918c857e746d665c554b42392e2318100700000000000000000000000000000000000000000000000000030b12181e24292c3035393a3d3e3e3d3b3a36312b262018100600000000000000000000000000000000000000000a141d28313a444c565e696e7a828d93928d81796f6a625f58555d6773808d998e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000010406070a0d0f1010100e0b0707050100000000000000000000000000000000000000000000000000000005080a0b100f0a0605030000000000000000000000000b17222d38424a50565e61656969605b53493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9ada19786796d6053463a2d201307000000000000000000071018242f3a434f59616d7a859292867b6e655b5044392f24180c0100000000000000000000000000071119232b333b42464f55565d61646668696a6a6a69686663605d5654524c47423c3630282018120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a3978a7d7064574a3d3d41464d545b606d727f8b847a6e665c50443c30261c110600000000000000000000000003101c28343f4a546773808d9aaaac9f9286796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d565e666d6e69645c52473d32271c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202a343c454d53585f626668686765615f57524940362d2210070000000000000000000000000000000000000000000a15202b343f4951596063686e7071706f6d6664605c545046413a322b231b120901000000000000000000000000000000000000000000000000000814212e3b4754616e7b86929c9a9184786d6053463a2e343f4a54616c74818e949f938e8886878a8f8a80786d675c544b40342822190d030000000000000000000000000000000000000000000000000000070c13191d2024292c2d303132312e2d2a261f1b150e06000000000000000000000000000000000000000000020b161f28323b444d575e686d78808891938e837c746e6a6867676d798592958a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b60686e7275766c655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b556b7884919eabab9e928578675c5145382c1f13060000000000000000000007131d28313d46525d68727f8b969083776c60554b4035291e1308000000000000000000000000050f19232b353d454d53596163686d71737576777776767472706d6865615e56534e46413a3229231d150d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a396897c706356493d30363b424a505b626d727f8c82786d60584e42382e23170c010000000000000000000000000c17232e3d4a5663707d8998a2aea398897c706356493d2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e696e797b746e64594f44382c20150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18222a333b42464e5355595b5b5b5855534d4540372e241b10000000000000000000000000000000000000000000030f1b27323d46515b626b70767a7d7d7d7b7975706d66615a524c443d352d241b1309000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a99a3a196897d7063554b40343844505c66717e8a939c918c817b797a7d82898d82796d665c51453f342b1f150b01000000000000000000000000000000000000000000000000000001080d1113191d20212324252422211e1a140f0a040000000000000000000000000000000000000000000000040d162029323b454d565d666d737d848c929187817b777574757a818e969083786c605346392d20130600000000000000000000000000000000000000000000000000000000000000030506080b0e0f101110100f0d0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c737a7f8282776c605346392d201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677986929facaa9e9184776b554b4034281c100400000000000000000000010c161f2935414c56606d798491948b7e71675d51453a2f24190d0000000000000000000000030d17212b353d474f575e616b70767a7d80828383848382817f7d7a77726e68625f57524c443e342f271f160e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a296897c6f6356493c302a2f383f44515b636d75818c80736a60544a3f34281e13080000000000000000000000000613202d3a4653606d7985929fabaa998c807366554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e58616e7b848880746b6054483c31261a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061018212931363c4347484c4e4f4e4c4846423b332e251c120900000000000000000000000000000000000000000006131f2b37434e58626d727d8387898a898885827d78716c615e564f473e362d251b12090000000000000000000000000000000000000000000000000d192633404c5966737f8c99aba89b8e8174675c5145383a4653606d7884919d948c7f746e6d6e70757d858f82786d605b51463d31271d1207000000000000000000000000000000000000000000000000000000000104080d111314171818171514120e09030000000000000000000000000000000000000000000000000000040e172029333b444c545c606b70797f868c918e8884818182858e938e847b6e665b5044382b1f12060000000000000000000000000000000000000000000000000000000000060b0f121315181b1c1d1d1d1c1b19171414110e08050200000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d57606c787f868c8f887c6f6255493c3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798699a3afaa9d9184776a5e51442e23180c000000000000000000000000040d1924303a44515c66717e8a969184796d60554c4135291d12070000000000000000000009141f29333d474f5960696e767d82868a8c8e8f9090908f8e8c8a86837f7a756e6a615e5650454039312820170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a996897c706356493d3023262d333f49515b606d7983877c6f665c50443a2f24190d01000000000000000000000006131f2c3845515c6775828e9baba99c908376675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a76828f92897d7063574e42372b1c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f252a31373a3c3f4142413f3b3a363129211c130a000000000000000000000000000000000000000000000815222e3b4754606a727f88909596979892928f8a847e756d68605950483f372d241b110800000000000000000000000000000000000000000000000d1a2734404d5a6773808d9aa6ab9f9285796d6053463a414c5664717e8a95998f82776c626061646b707b838e81746d63584e43392f24180c03000000000000000000000000000000000000000000000000000000000000010407070a0b0b0a080705020000000000000000000000000000000000000000000000000000000000050e172129323a424a505960676d737a8085898c8f8e8d8f8f8c87817a6e695e544a3f33281c0f03000000000000000000000000000000000000000000000000000002080d11171b1f2022252729292a2a2928262421201e1914110e0902000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6974808c9298998c7f7366564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0b5aa9d9084776a5d5144372a1e070000000000000000000000000008131e2834404a54606c788491968c7f73675d5145392e23180c000000000000000000020e1a25313b454f59606b707b828a8f929995908c888787888b8e9293908c86817b746d68615a514b433a322920170d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8797a2968a7d7063574a3d30241c2228374045515d676f7c8783786d60554c4135291d1207000000000000000000000004101c2834404b5564717e8a99a3ac9f92867a6d6053473a2d2014090000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c89949c8f82766a5f5347382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a20262b2e2f33353534322e2d2a261f170f0a01000000000000000000000000000000000000000003050916232f3c4956626f7c87939a9f9691898585878b908a827a6f6b625a51493f362d231a0f06000000000000000000000000000000000000000000000e1a2734414d5a6774808d9aa7a79f988a7d7064554b4046525e6876828f9c92867b6e655b53545960696e7a848c7f726a60554b4035291f1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f17202830383f444f555d60686d73787c8082838483827f7b746d685e574d42382d22170b0000000000000000000000000000000000000000000000000000040c13191b22272b2d2f313435363737363533302e2d2a25201e1a140e090300000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b87939fa29d908376685d5246392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1adaa9e9184776b5e51442f24180c00000000000000000000000000020c18232e3944505b66717e8b9692857a6d60544b4034281c1004000000000000000005121e2a36424d57606b707d858f949c98928b837f7c7a7a7b7e81868d9399928e87817a716c605c554c443a32291f160b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d687885929f988b7e7165584b3e32251817252935404b555f6a73808b7f72675d5145392f24180d0100000000000000000000000c18232e3a4754606d7a86929faca3998a7d7063574a3d30251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a999f94887b6e62544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e151b1f2122262828282522211e1a140d060000000000000000000000000000000000000000060b0f12131c2835424f5b6875818e9aa49e91847c79797b7e838a8f857d716c625b51483f352c21180d030000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa79f95908e8175675d51454754616d7a86929a8e8174695f5349474f575e686e7b85877c6f675d51453c31261a0e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d161e262e343d434b51565e61666c6f737577777775726e69615e564d453b2f261c110600000000000000000000000000000000000000000000000001070e161e24292d3337393b3e41424344434342403d3b3936302d2a251f1a140d07010000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a9aa4ac9f93867a6d6154473a2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0b5ab9e9185786b554b4035291d10040000000000000000000000000007121c28333f4a54606d798491988c7f72665c5145382c1f140900000000000000000714212d3a46535e69707d8692979f9892867e78726f6e6d6f71757b8087919699938e857e746d675d564c443a31281d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56697683909c998c7f7366594c402e23181318242f3a434e58606d7984857a6d60554b4035291d100400000000000000000000000713202c3945525d6875828f9caaab9a8d807467574d42362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939f9a8d8073665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f121515191b1c1b191514120e090300000000000000000000000000000000000000020a11171b1f201f2b3845525e6b7885919eac978a7e716a696e71787e858f877e726d625a50473e332a1f150b0100000000000000000000000000000000000000000e1b2835414e5b6874818e9ba79d908390867a6d6053474b5864717e8b9995887b6f62574d413d454d565f69707d8884796d60574d42372b20150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c141c2328313940454c52545b606366686a6b6a6966615f57524c443b33291d140a000000000000000000000000000000000000000000000000030b121820283035383f4446484b4e4f5050504f4e4c4a4746413b3a36302a261f18130c0400000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a9aa4afa4998a7e716453493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8699a4afab9f928578675d5145392c1f130600000000000000000000000000000b17222d3844505c66727f8c989184796d6053463c31261a0e0200000000000006131f2b37434e58616e7b859298a29992867d716c656261616264686e747c8490959f97928a81796d685e564c433a2f261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d192430414d5a6774808d9a9b8e817468544a4034281c10131d28313c45515c67707d898073675d5145392c201306000000000000000000000004111d2935414c5664717e8a98a3aa9d918477695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687683909d9e9184786c605346392d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090c0e0f0e0c080705020000000000000000000000000000000000000000020b141b22272b2d2b273946535f6c7986929fa295897c6f625e61656c717a828d887f726d62594f453c31271d120700000000000000000000000000000000000000000e1b2834414e5b6774818e9aa5988b7e8b8b7e7164574d4b556774818e9a9083776a5f53453b333b444d57616b74808d8073695f53473c31261a0e0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171f272f353a41464a505356595c5d5e5d5c5955534d46413a322921170b020000000000000000000000000000000000000000000000040d151d2429323a414549505355585a5c5c5d5d5c5b595754524c4746423b363129241d160d07000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939facab9b8e8174655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677986939facada297867a6d6053473a2d201407000000000000000000000000000006111c28343f4a54616d7a8692968b7e7164574d42372b1e12050000000000000815212e3b47535f6a75828e97a19f92877d706b605b53545455565e616a6f7a839095a09e938e827a6d685e554c42382d22170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081824313e4b5764717e8a979d908377665c5144382c1f120c161f2834404b55606b768285796d6053473a2d2014070000000000000000000000010d19242f3a4754606d7a86929faca095877b6e6154473b2e21140a000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c5666727f8c99a196897c706353493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d33373937332d45525f6c7885929fa396897d706356535b60686e77808b8b7f716b61574d43392f24180c02000000000000000000000000000000000000000e1a2734414d5a6774808d9aa296897d838f8276695e53515d67778491998c7f7266584e433834323c454f59606d7984867b6e61574d42372b1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d151d24293036383f4446494d4f5051504f4c4846423b35302820170f050000000000000000000000000000000000000000000000040d161f272f353e444c52535b6062646768696a6a69686663615e5654524d46423b352f281f18120b0300000000000000000000000000000000000000000000000000000000000000000713202d3946525e687783909daaab9e9185786c605346392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b556b7885929eabb3a995887b6e6255483b2f2215080000000000000000000000000000000c17232e3846525e6874818e9b908376695f53463a2d21150a0000000000030f1c28333f4a54626f7c88939ea1978d80746b605950494747484d525860686e7a839097a19d9490837a6d675d544a3f33281e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87969f9286796d6053463a2d2013080d18232e39434f59626f7c897e7164574b3e3124180b0000000000000000000000000813202c3945515d6775828f9ba9a7978b7e7164584b3e31261a0f0300000000000000000000000000000000000000000000000000000000000000000000000000010d1925303c4855626f7b8896a09a8d8174655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0a080400000000000000000000000000000000040600000000000000000000000000000000030608090e10100f0d0a060603000000000000000000000000000000000000000000000006111b262f383f4446443f3844515d6a7784909da5998c7f7266574d50565e656c737e87877d70695f554b4035291e140a000000000000000000000000000000000000000d1a2633404d596673808c99a4978a7d7e8b877b6e615453606d7a869397887c6f62554a46443f38343e45515d67717e8a8175695f5347392f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181e252a2d3338393c4042444444423f3b3a363129251e160e050000000000000000000000000000000000000000000000030c161f283139404550565d60656c6e717475767776767573706e6865615e57534d45413a3128231d150c050000000000000000000000000000000000000000000000000000000000000005111d2a36414c5666737f8c99a7ada197887c6f6255493c2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f44505d6a7783909daaafa396897c706356493d3023160600000000000000000000000000000006111c2a36414c5663707d899694887b6e6155483c31261b0f030000000006121f2b3844505b6674818e9aa59e91847a6d60594f443f3b3a3c41464e565e686e7b85919ea59f959083796d665b50443c30261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697884919e99897c6f6356493c3025190d07121d27303d4754606a707d776c605346392d20130600000000000000000000000004111d2935414b5564717d8a97a2a89b8e817568584e43372b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7784919d9e9184786c605346392d201309000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e11141417171614100b05000000000000000000020608080d10120d0d0a0702000000000000000000040a0f1315161a1c1d1c1a1713120f0b060000000000000000000000000000000000000000000b17222d3841495053504941414e5b6874818e9baa9c8f8376695f53464c535b606c717e88867b6e675d51453d30261c11060000000000000000000000000000000000000b1825323e4b5865717e8b98a4988b7f79858d8073665c55626f7b889a9285796c60575653504a443f38404b55616c7683867b6e62554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c13191c22282b2d30333537383736332e2d2a261f19130c040000000000000000000000000000000000000000000000000a151e28313a434b515a62686d72787b7e818283838382817f7d7a76726e69615f57514b433e342e271e170e06000000000000000000000000000000000000000000000000000000000000010d1925303b4855626e7b8895a0aca9998c7f7266554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c2935424f5c6875828f9ba8b1a5988b7e7265584b3f2e23170b000000000000000000000000000000000d1925303a4653606c788491998c807366584e43372b1f1206000000000613202d394653606c7985929ea8998c7f72675d51473d332d2e30363d444c565e69707d8a939ea7a0958f82786c60584e42382e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774818e9a998c7f7366564c41362a1e11050b151e2b37434e58616b706c655b5044372b1f1205000000000000000000000000010d18242f3a4653606d7985929fab9e9185786a5f53473a2e211507000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586673808c99a197897c6f6256493c31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000050b1014191e2021242423211c17100800000000000003090e1214151a1d1f1a1917130e0800000000000000060b161b1f222327292a292723201f1c17110a02000000000000000000000000000000000000030f1b27333f49535b605b534f474b5764717e8a98a29f93877b6e61554b4149505a626c727f8b83796d60594f42382e23170b0000000000000000000000000000000000000a1723303d4a5663707d8996aa9a8d80737f8c85796d605764707d8a978f82756e696863605c54504a423b43505a626f7c878074675d5145392c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f202326292a2b2a292622211e1a140d080200000000000000000000000000000000000000000000000006111c26303a434c555d606c717a7f84888b8d8f8f90908f8e8c8a87837f7b746e69605d5550454039302920180f070000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a7784919daaa99c8f8376675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa6b3a79a8d817467544a3f34281c100300000000000000000000000000000008131f2b3744505b6573808d999184786a5f53473a2e211508000000000915222f3c4855626f7b8897a1a096877b6e61554b4135272221252a323b434d57616b74818e98a3a79f948c7f736a60544a3f34281c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303d4a5764707d8a999c908376685e5246392d201308030c1b27323d464f596163605b53493f33271b0f030000000000000000000000000007131f2c3845515c6774818e9ba9a197887b6f6255483c2f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c4855626f7c8896a0998d807366574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000810161c1f252a2d2e3131302d28221a120800000000060e151a1e2122262a2c2726231f19120a02000000020a111720272b2e2f3436373634302d2b28221c140b08020000000000000000000000000000000005121f2b3744505b656c6560594f4753606d7a85929fa49a8d8073675d51453f44505a626d74808d80746b60544a3f34281d120700000000000000000000000000000000000815212e3b4854616e7b8798a29b8f82757a868a7e71645965717e8b938f827d7b7874706d66605c544d453e47535f6a758285796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213161a1c1d1e1d1c191514120e090300000000000000000000000000000000000000000000000000030c17232e38424c555d676d757e858c91969797928f8c8a89898a8c8e908c86817b746d67615a514b423b322a21191007000000000000000000000000000000000000000000000000000000000006121f2b37434e586673808c99a8ac9f92867a6d6054473a2d2114090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97aab4a99c908376665c5044382b1f1206000000000000000000000000000000030f1b27333f4953626f7c889696887c6f6255483c3025190d010000000b1824313e4b5764717e8a97a99e918477695e53433a2f231714192029313b454f59616e7b86929faca69f92877c6f665c5044382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914212d3a4754606d7a86929f93867a6d6154473a2f24190d100a15202b343e474f555753504941382d22170b000000000000000000000000000004101c2834404b5563707d8996a1a9988c7f7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a7784919d9d908477695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000008111a21282c30363a3b3d3e3c39332c241a0e050000060f1820262b2e2f33373933322f2a241c140a0000020b141b222732383b3c41434342403d3938332d261d19130c040000000000000000000000000000000613202d394653606c786f6b605349515d6774818e9aa79e9285796d6053473d3f48515b606d7882877d70665c5044392e23180c00000000000000000000000000000000000613202d394653606c7885929f9d91847774818d83776b6164717e84868a8e8a8885817d78716d665f574f47434e58626f7c887d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606090d0f1111110f0c080705020000000000000000000000000000000000000000000000000000000a151e28343f4a545d676d79818b92979e97928b85827f7d7c7d7e7f8284898d8e878079706c605c544d443c332a22190f0600000000000000000000000000000000000000000000000000000000020f1a26313c4855626f7c8896a0aca3998a7d7064574a3d31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8898a2aeab9f9285796d6053463a2d201307000000000000000000000000000000000b17222d3847535f6a778491998c7f7366564c4135291d11050000000c1925323f4c5865727f8b98a59b8f827568574d4231281d11080e171f29333e46525e6973808d9aa4afa3999083786d60544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6776838f9c998b7e7165564c4135291d1e1d1c1b19222c353e44484a46443f382f261b11060000000000000000000000000000000c18232e394653606c7884919ea99c8f8276675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586673808c99a095887b6e6155483b2e23180c0000000000000000000000000000000000000000000000000000000000000000000000050e1a232c33383b4246474a4a49443e362c20170c02060f18212a31373a3b404345403f3b362e261c0e04000a141d262d333d4347494d4f504f4d4a46443f382f29241e160e0500000000000000000000000000000c1825323f4b5865727e7d6f655b504b55626f7c88959fa2978b7e7165594f43383f44505c666d7a8583786d60554b4034281c10040000000000000000000000000000000005121f2b3744505b657683909d9f9286796e7b868a7d7063616c71787a7d81858b918e89847e786e6960594f4647545f6a76828174685b4e4135281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303844505c666d79828f939f9e948f857f7a7572717070717275787c80858c8d847d746d665e564d453c342a21180f05000000000000000000000000000000000000000000000000000000000a15212e3b47535f6a7784919eaaab9a8d807467574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929facaea298887c6f6255493c2f24180c0000000000000000000000000000000006111b2b37434e586773808d9a908377685e5246392d2013070000000c1825323f4b5865727e8b98a59a8d8174675a4e413127160c00050d17212a36424d57616e7b87939facaba0958b7e71665c5044382b1f1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b5566727f8c999c8f8276685d5245392c2b2a2a29282726252c33383c3d3937332d261d140a0000000000000000000000000000000007121f2b3844505b6673808d9aa79f92867a6d6053473a2d2014090000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c4855626e7b8895a0988b7e7265554b4034281c100a0a0a09070604000000000000000000000000000000000000000000000000000000020d17202c353e44484d525457575550483e32291e13080e18212a333c4247484d50524d4b4740382e20160c06111b262f383f444e54565a5c5d5c5a5653504a423e35302820170f0500000000000000000000000000101d2a3743505d6a768383786c60544a535f6a7683909da99d9083776b60544839343f4a545e68717e8a7f72675c5145382c1f130600000000000000000000000000000000030f1b27333f49536773808d9aa399897c6f74808d83766b606164686d7074797f848d93918b837b706b60584e434e58626f7c7b6e6155483b2e2215080000000000000000000000010507080a0d0f101110100f0e0c0a07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424f59606d78828f949e9e948f827a726d67656463636465686a6f747a7f858e8a80786e685f574e463c332a21170d0400000000000000000000000000000000000000000000000000000006121f2b37434e586673808d99a8aa9e918477695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b6676828f9ca9b4aa988c7f7265554b4035291d1004000000000000000000000000000000000f1b26323d495663707c899893867a6d6154473a2e2114060000000a1724313d4a5764707d8a97a99a8d8174675a4e412e23180c0000050f1a25303b46535f6976828f9ca9b1a79e9184786d6053463a2f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3b4855626e7b88959f92867a6d6054473c313837373635343332312f2e2d302d2b27221b140b0200000000000000000000000000000000030f1c28333f4a54626f7c8895a0a3988a7d7063574a3d31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a7784909d9c8f8275675c5145382c1f16171717161413100c070603000000000000000000000000000000000000000000000008131e29323e474f55565e616464615a50443a3025190d151f2a333c454d5355595d5f5a58524a4032281e130b17222d3841495058606267696a696763605b545045413a322921170e050000000000000000000000000b1824313e4b5764717e8a7d71665b504e5864717e8a97a1a095897c6f63554b403538424c56616c758285796d6053463a2d20130700000000000000000000000000000000000b17222d3e4a5764717d8a97a7988b7e726e7b86897d70665c565d6063676d72798088929590867d706a5f554c4754606a6f6e695f53463a2d21140700000000000000000002080d111414171a1c1d1d1d1d1c1b19171413110d08060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606b74808d949fa0958f82796e68605d555756565759586062686d737a81898d837a6e695f584e453c33291f160b020000000000000000000000000000000000000000000000000000030f1b26323c4955626f7c8896a0aca096887b6e6155483b2e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5466727f8c99a9b3a89c8f8275675d5145382c1f1307000000000000000000000000000000000a13202d3a4653606d7985929a8a7d7064574a3d2e23170b0000000915222f3c4855626f7c8897a19b8e827568554b4034281c1004000009141f2a36424d5765717e8b98a8b2aca0968a7d7064554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a47535f6a7784909d998b7e7165584e4345454443434241403e3d3c3b3a38342e261e1a12080000000000000000000000000000000000000b17222d3847535f6a7784909daa9a8d807467574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5866737f8c999f9285796d6053463a2d212324242322201f1c1815130f0a040000000000000000000000000000000000000000010d1925303a444f596163696e70716c61564c41362a1b111a26313c454d575f62666a6c66635c52443a3025190f1b27333f49535b606a6f7476767573706c66615a524c443b332920170d0400000000000000000000000613202d394653606c788484786c60534953606d7985919ea79b8e8175675d514538303a44505a626f7c857c6e6255483b2f22150800000000000000000000000000000000000614212e3b4754616e7a8795a09a8e81746873808d83786d60565254555d60676d747e87929892867c6f675d51454e586062615f574d42362a1e120500000000000000040a0f14191e2021242729292a2a292927252321201d191312100c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c66707d89929da3999183796d675e56514b4a494a4b4c4e54565d60686d757d858f847b6f6a5f574e453b31281d140a0000000000000000000000000000000000000000000000000000000a15222e3b4754606a7784919eaaa8988b7e7265544a4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3c4955626f7c8897a1adac9f9285796d6053473a2e23180c0000000000000000000000000000000006131f2c3845515c6675828f998d807366544a3f34281c100300000613202d394653606c7885929e9c908376675c5145382c1f13070000030e1a26313b4854616e7b8796a1acb2a89c8f8275675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5866737f8c999d9083766a5f5352525151504f4e4d4c4b4a494746443f38302c241a1005000000000000000000000000000000000006111c2b37434e5866727f8c99a49e918477695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000020f1a26313c4855616e7b8895a098897d706356493d302e303131302f2d2c2923221f1b15100b0500000000000000000000000000000000000005111e2a36414c56616b70767b7d7e71685e5246382d22171e2b37424d575f696e737678736e63564c4135291d121f2b3744505b656c747c80828382807d78716c605d564d453b32291f160c010000000000000000000006121f2b3844505b66717e8a7e71655b50515c6673808c99a49f9285796d6053473a2d323e4754606a6f7a6e6a5f53473a2e21140800000000000000000000000000000000000714202d3946525e687784919d9d918477686d7a858b7f72685e52474b51555d606c717e8b939891847a6d605447464e545555534d453b31261a0e02000000000000060e151b1e252a2d2e31333536373736353432302e2d2a25201f1c18120f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7883919da49f92877c6f675d554c45403e3d3d3e3f43474c52565e616b707a828d857c6f6a5f574d433a2f261b1106000000000000000000000000000000000000000000000000000006131f2b37434e586773808d9aa8a89b8f8275665c5144382c1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7885919eabaea2988a7d7064544a4034281c100400000000000000000000000000000004101c2834404b5465727f8c98908376665c5044382b1f1206000005121f2b3744505b6574818e999f9286796d6053463a2f24180d0300000914212d3a46535e697884919eabb7ac9f92867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222c363e4855626e7b88959f95887c6f62555f5f5e5d5d5c5b5a595857565453504a423e362c22170c0000000000000000000000000000000000000f1b26323c4754616e7b87939fa096887b6e6155483b2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000a15212d3a47535f697783909d9a8d807367564c41393a3c3d3d3d3c3a38342f2e2b26201c160e0903000000000000000000000000000000000713202d3946525e68707d83878a877a6d6153493f33271b212e3a47535f696e7b8083858073685e5246392f241d2935414b55606c7780898d8f908f8d89847e756d685e574d443b31281d130700000000000000000000030f1c28333f4a54606d798483786c60534a54616e7b87939fa298897d7063564a3d302b37434e5860686d685f584e43372b1f1206000000000000000000000000000000000005111e2a36414d566774808d9aa096877a6d68717e8b857a6d615b5147454b515a616c75828f9b968d807366574d424347494846423b33291f140900000000000009101820262b3036393b3d40424344434342413f3d3a3936302d2c28231c1b16100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5865717e8b95a0a3998d81746a5f554b433b352f30303132373a41454c525960686e78808c857c6e695e554b41382d22170d0400000000000000000000000000000000000000000000000000030f1b27323c4956626f7c8996a1ab9f9285796d6053463a2d201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6574808d9aa8b2aa9a8e8174665c5144382c1f1308000000000000000105070709080603000c18232e3c4956626f7c89989286796d6053463a2d2013070000030f1b27333f4953626e7b87939f98897c6f63554b4035291f1409000005121e2a36424d576975828f9ca8b5aea3998a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e4850565f697783909d9a8d8074676c6c6b6b6a6a6968676665646261605c5450483e33281c110500000000000000000000000000000000000a15202d3a46525e6976828f9ca8988b7f7265554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d5766727f8c999d908377685e52464647494a4a4a494745403c3b37322c27211a140d050000000000000000000000000000000714212e3a4754616d7a879095998b7f72655b5044372b1f222f3b4855626e7b868c9092867a6d61554b403529202c3945515d67727f8c929a9c938f8b8b8e8b827a6e695e564d433a2f24180e05000000000000000000000b17222d3844505c66727f8a7d7064584e525e6976838f9caa998c7f7366594c403327323c464e565e615e564e463c31261a0f020000000000000000000000000000000000020e1925303d4a5763707d8a98a2978a7d70646c78838e81756d62594f474045505a63707c899a9e918578695f53463a3b3c3b3a36312921170d03000000000009121b222a31373b4146474a4d4f505050504f4e4c4a4746413d3a38342e2c271f1c17110b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a7783909da79f92877b6e61584e4339302924232324272b2f353a41464f565e666c747f8b847b6e675d53493f33271f160c01000000000000000000000000000000000000000000000000000a15222e3b4754606a7884919eaba298897c6f6356493c3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953636f7c8996a1adab9e9285796d6053463a3024190d000000000002080d1113141615130f0a0713202d3a4653606d79869298887b6e6155483b2e2215080000000b17222d3847535f6a74818e959a8d8073675d51453b31251a0e0200020e1a2531414d5a6774808d9aa7b3b4ab998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3944505a61686d727f8c999f928579797978787877767675747371706f6e6d66615a5045392d211408000000000000000000000000000000000005111e2a36424d5764717e8a98a29c8f8276675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4855626e7b88959f93877a6d61544c5254565757565553514b4947433c38332a251f170f0800000000000000000000000000000613202d394653606c7985929e9d9184786c6053463d3227222f3b4855626e7b88969d988c7f73675d5145392f232d3a4754606d7a85929f9d938e827e7f82868f837b6e685e554b40352920170d0200000000000000000006111c28343f4a54606d798583766a60544d5765727f8c98a59b8e8174685b4e4135282b343c444c5254524c443c342a20150a000000000000000000000000000000000000000814202d3a4753606d7985929f9a8d817467656f7c878b7e726b60595047434653606d7986939f97887b6e6155483b2e2f2e2d2a261f170f06000000000009121b242d343c43474c5254575a5c5c5d5d5c5c5a585654524c4a4644403938322c28231c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a0ac9c8f8275695e52463c31271e181617181b1e242930363d444c545b606d727f8b83796d655b50443d31281d13070000000000000000000000000000000000000000000000000006131f2b37434e586773808d9aa8aa998d807366564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d394653606c7884919eabada1978a7d7064564c4135291c1106000001080d13191d202122211f1b150e131f2c3845515c66768390968a7d7063574a3d3024170a00000006111b2b37434e58606d79828f949285796d60574d42362a1e12050000091925323f4c5865727f8b98a5b2b5a89b8e8275685b4f4235281c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303c4955616c717a7d808d9aa2979287868585858484838281807f7e7d7c7a79716c6155493c3023170a0000000000000000000000000000000000020e1a25303b4753606d7985929f9f92867a6d6053473a2d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000915212e3a47535f697784919d9a8a7e716457565e616364646362605c5555544e48443d363029211a11060000000000000000000000000005121f2b3744505b6574818e9aa0968a7d7063594f44382c212e3a47535f6a7884919e9e9285796d60554b403429313e4b5764717e8a98a29a8e81757272757b828e847a6e675d51453f32291f1408000000000000000000000c17232e3845515d677380897c6f62574d56636f7c8996a29b8f8275685c4f423529222b323a41464746413a322a22180e030000000000000000000000000000000000000006131f2c3845515d6775828f9b9e9184786a5f6a73808d877d706b625a534e4a525e687985929f96897c706356493d302322211e1a140d06000000000006101b242d363f464e53565e61646668696a6a6968676563615e565753514a48433d38342e27221b140b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d566773808d9aa7a49a8a7e7164564d42342a1f150c070a0a0f13191e252a323b424a505b636d727f8c81776c60584e433a2f24180c03000000000000000000000000000000000000000000000000030f1b27323d4956636f7c8996a1aa9d908377685e5246392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3744505b6573808d99a4afa99b8f8275685d5246382e23170b00040c13191e252a2d2e2f2e2b262018101c2834404b546774808d998c7f7266594c3f3326190c000000000f1a26313c45515c676d7a82898d8d8073695e53463a2d21140700000b1825323e4b5865717e8b98a4b1b6a99d9083766a5d5043372a1d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d878a8c8e939da299928c8888888888888989898a8a8a8987877e7164574a3e3124170b00000000000000000000000000000000000009141f2c3945515d6774818e9ba3988a7d706453493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576773808d9a9a8e8174676164686d6f7070706f6d6766625f58554f46423b332c2417110a020000000000000000000000030f1b27333f495363707d8997a19c8f82766b6054483d2f262b37434e586673808d99a1978b7f72675c51453b3134414d5a6774808d9aaa95897c6f6565696e78818e83796d605a50443b3025190e0400000000000000000006111c2935404b55616e7b868275695f5354616e7a8794a19b8e8275685b4f4235281920293036393a3936302920180f06000000000000000000000000000000000000000004101d2935404b5565717e8b99a196887b6f62606d788390867d716c625f58545c616e7a8798a296897c706356493d30231614120e09030000000000000c17222d363f4850585f62686e70737576777676757472706d686763605c54544f46443f38332d261d19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697784919daa9f93867a6d6154473b3021180d0300000001080d131920292f383f44515b636d74808c7f726a60554b4135291e150a000000000000000000000000000000000000000000000000000a13202d394653606c7884919eab9f93877a6d6154473a2d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953616e7b87939facac9f92867a6d61544a3f34281c10040d161e24293036393a3c3b37322a221818232e3e4b5865717e8b988e8174675b4e4134281b06000000000915202934404b555e686d757c8081817b6e6154483b2e21150800000b1824313e4b5764717e8a97a4b1b7aa9d9184776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d828180818e98a2998c7f7c7b7b7b7b7c7c7c7c7d7d7e7f80817d706356493d3023160a00000000000000000000000000000000000004101d2935404b5563707c8996a19a8e8174655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313d4a5663707d89989e918478696c71777a7c7d7d7d7c7977736f6a636059524d453e3627221b140b0200000000000000000000000b17222d3a4653606d7985919e9f94897c6f63594f42382d26313c4855626f7c8895a09e9184796d60574d423635424e5b6875818e9ba194877b6e61575f666d78828e81756c62564d41362a20150a000000000000000000000d18242f3946525e697581867b6e615554606d7a8793a89a8d8073675a4d4034271a171e252a2d2e2d2a251e170e06000000000000000000000000000000000000000000000c18242f3a4754616d7a86929f998c7f72665c666e7b8592867e756f6a6867666d73808d99a197887b6e6255483b2f22150805020000000000000005111d28343e48505a626a6f757a7d80828383838382817f7d7a7774706d6663605953504a443f382f29241e160d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7b8795a0aa9d918477685e5246392d20130600000000000002080e171d262d333f49515b606d7882877c6f675d51453d30261c110600000000000000000000000000000000000000000000000005121f2b3744505b6574808d9aa9a49a8a7e716453493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846535e6975828f9ca7aea3998c7f72665c5044382b1f160c161f282f353a4146474947433c342a2016232f3c4956626f7c899a8f8276695c4f432d22170b00000000030c18232f39434c565e616b6f7375756e695e53463a2d21140700000b1724313e4a5764717d8a97a4b0b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4855616b707574737985929f9d9083776f6f6f6f6f6f6f6f707171727374706b6054483b2f221609000000000000000000000000000000000000000c18242f394653606c7884919e9e9185786c605346392d2013090000000000000000000000000000000000000000000000000000000000000000000000000000000914202d3a4753606d7986929f96887b6e717e8387898a8a89888684807c76706b615e57504840332d261d140a000000000000000000000006121f2b3844505c6674808d9aa69c8f82766b60544a3f33282e3b47535f6a7784909da1978c7f72695e53463e32414e5b6874818e9ba295887c6f6255545c666d7a848b7e71685e52463c31261b0f0400000000000000000007121d2a36424d5763707c898074675d54616e7b8894a1968a7d7064574a3d3124170d13191e2021201e19130d0500000000000000000000000000000000000000000000000713202d3946525e6876828f9c9d908377695f5f69707d87928b827c77747374797f88939f9e9285796c605346392d2013060000000000000000000815212d3945505a626c717c82868a8d8e8d8d8d8e8f8d8b898684817d79746f6b64605c545049413d352f281f17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a8a89b8e817568564c41362a1e11050000000000000000050b141c2228373f44505c666d7a8484796d60594f42382e23170c010000000000000000000000000000000000000000000000030f1b27333f4953636f7c8997a1ac9b8e8175655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b2a36424d5763707d8a95a0acab9e9184786d6053463d33271c151e28313a41454c525455534e463c32261b202d3a4753606d7a86939083776a53493f33271b0f030000000007121d27313a444c52596063666868615e574d42362a1e120500000c1825323f4b5865727e8b98a5b1b6aa9d9083776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c38444f59616368676774808d9aa0958a7d70636262626262636364656566686360594f44382c2013070000000000000000000000000000000000000007121f2b3744505b6573808c9aa197897c6f6256493c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6776828f9c988b7e71788182838485888b9092908d88837d756e69615a52443f382f261b11060000000000000000000003101c28343f4a54636f7c8996a19f94897d70665b50443b302b37434e5866727f8c9aa49f92867b6e615a50443b404d5a6773808d9aa4978a7d7164574a545e686f7c87857b6e61584e43372b21160b000000000000000000010e1a25303b4854606b7784857a6d605c66717e8b979a9184796d6053463a2d201307080d11131413110d080200000000000000000000000000000000000000000000000005111d2935414c5664717e8b989f95887b6e6157606b717e87928f8884818081848c939aa1978d8073665b5044382b1f12060000000000000000000a1724303d4956616c717e878f9286838180808081828486898d918d8a85817c76716d66605b534f45413a3128231c140c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6a5998c7f7266594c3f3025190d01000000000000000000020a11172528343f4a545d686f7c8781746b60544a3f34281d13070000000000000000000000000000000000000000000000000b17222d394653606c7884919eab9e9285786c605346392d2013080501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a25313b4653606c7883909da8aca1968a7d7064594f44382c1d1d27303a434c51565e61625f584e43372b1e202c3945515d67788591918578655b5044372b1f120500000000010b151f28323a41464f54565a5b5b54534d453b31251a0e0200000c1926333f4c5966727f8c99a5b2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e474f55575c55626f7b88949f9d9083776b615555565656575758595a5b56544f473d32271b100300000000000000000000000000000000000000030f1b27333f4953616e7b87939f998d807366574d42372b1e1206000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b5566737f8c999b8e81756c74757677787b7f83898f94949089827b706c635c504941382d22171007000000000000000000000b17232e394653606c7884919ea69d9083786c60564c41362a323c4854616e7b87939fa2988f82756c61564d423e4b5865717e8b98a99a8d807467574d4c565f6a73808c81746a5f53473d32271b100300000000000000000009141f2c38444f5965727f8b7e7265666d7883909d93887d70665c5144382c1f120600010507070705010000000000000000000000000000000000000000000000000000010d1925303a4754606d7a86929f998c7f72665859616c717e879296918e8d8e91969fa19892857a6d61544a3f33281c0f030000000000000000000b1825313e4b5864717e8b9299918477747473747475777a7c8084898e928e89837e78716c656059524c433e342e261e170e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9ba8a4978b7e7164584b3e31251808000000000000000000000000061317232e38424c56606a737f877c6f665c50443a2f24180d01000000000000000000000000000000000000000000000006121f2b3844505b6674808d9aa9a197887c6f6255493c30251913110d080b090706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b3744505b65717e8a96a0aca89d9083766b6054483d2f26232e39434c555d60686d6f6a5f53473a30251d2935404b55697683909286796c605346392d2013060000000000030d16202830353d4348494d4e4f4846423b33291f14090000030f1b27333f49536773808d9aa6b3b5ab998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c353e44484a4f535f6a7683909c9f958a7d70635a504949494a4a4b4c4d4e4948443d352b21160b0000000000000000000000000000000000000000000b17222d3846535e6976838f9c9d918477695f53473a2e2114090000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3c4956636f7c89999e9185786a6869696a696e72767c828a9297938f857e736e605b53493f332722190d0400000000000000000006121f2b3744505b6573808d9aa9a0958b7f72685e52463d312d3a46535e697683909caa9e948b7e71695e52463f4855626f7b8897a19d908477695e53464e58606d7983877c6f62594f44382c1f150900000000000000000002101b27323d4754616e7a8683776a6e78818e95928c7f726c61544a4034281c100400000000000000000000000000000000000000000000000000000000000000000000000813202c3945515d6775818e9b9d9184776a60545a626c717d858f949b9a9b9ea09d9691867d6f685e5242382d22170b00000000000000000000111e2b3844515e6b7784919ea096877a6d6766676869676d7073777c81868e92908a847e78706b605d564f443f38302920180f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909daaa396897d7063564a3d3023170a0000000000000000000000000006111c26303a434e58606d798483786d60554b4035291d11040000000000000000000000000000000000000000000000030f1c28333f4a5463707c8997a1a9998c7f7366564c41362a21201d191a18161413100c070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606d7884919ea7ab9f95897d7063594f42382d2834404b555d676d747a7c6f62564c41362a1d242f424e5b6875818e99877a6d6054473a2d211407000000000000040e161e252932383b3c4042423b3a36312921170d03000005121f2b3744505b6576838f9ca9b6afa3998a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a232c33383c3d434e5864717e8a96a19d9083766c61544b403c3d3e3e3f40413d3b38322b23190f0400000000000000000000000000000000000000000006111b2a36424d5764717e8b98a095887b6e6255483b3025190e0200000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929f97887b6e625c5c575f61656a6f767e85909497928a80746c655b50443f342b1f160c010000000000000000030f1b27333f4953636f7c8997a1a79f92857a6e61594f433a2f36424d5765727e8b99a4a69f92857b6e615a50454653606c7985929ea095877b6e61544845515c67707d8982756b6054483c31261a0e020000000000000000000b16202d3946525e687582897c707b838e93928a7f736d63594f42392e23180c00000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5563707d8996a095897c6f6256505a626b707b82898e92979495908c847c6f6b60564c412f261c1106000000000000000000000f1c2835424f5b6875828e9ba8978a7d70645a5a5b555d6063676a6f757b81878f94918a837d746d686159504a423a322a2119110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885919eaba295897c6f6256493c2f23160900000000000000000000000000000a141e28313d45515c66707d897f72675d5145392c2013060000000000000000000000000000000000000000000000000b17222d394653606c7884919ea99d908376685e5246392f2e2d2a25272523201f1c181413110d0705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505c66717e8a959faba79c9083766b60544a3f332c3845515c676d7981868377685e5246392d202734404d5a6773808d94877a6d6154473a2e21140700000000000000040c131921272c2f303335352e2d2a251f170f050000000613202d394653606c7985929fabb8ac9f92867a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a21282c2f313c4653606d7884919e9f958a7e71665c51453a2f3132323335302f2c272119110700000000000000000000000000000000000000000000000e1a25313b4753606d7985929f998c7f7266564d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677683909d988b7e726558504d53555860626c717a828e939f928c80776c605b51473d31281e13080000000000000000000b17222d394653606c7885919eaba2978e81756b60554b4035313b4754616e7a86939faca2978f82756c62574d44505b6674818e9ba7988b7f7265564c414b55606b7582897d7063574d42372b1e120600000000000000000005111e2a36414c5664717e8a817d85909590867e736d635b51473e30271c1207000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a4653606c7884919e9a8e8174686159515961696e767d8185878786847f796f6a60594f443a301d140a00000000000000000000000c1926323f4c5965727f8c98ab9a8d807367554b4e4b515356586062696e747c828b92959087817a706b605c544c443c332b231a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929faca295887c6f6255493c2f2216090000000000000000000000000000020c161f2834404b54606b758285796d6053473a2d20140700000000000000000000000000000000000000000000000006121f2b3844505b6674808d9aa99f93867a6d6154473c3c3a39363034322f2d2c292320201d1813110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b28343f4a54606c7883909da5ab9f94897d70665b5044392f3a4653606d79838d92877a6d6154473b302526333f4c5966727f8c94877b6e6154483b2e211508000000000000000002080d161b1f222327282821211e1a140d05000000040e16222f3b4855626e7b8897a2adb2a99c8f8276685d5245392c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810161c20232b3844505c66727f8b97a29e9184796d60564c413529252627282322201b160f0700000000000000000000000000000000000000000000000009141f2c3945515d6774818e9a9d908376695e52463a2d201408000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b556773808d9a9b8e827568584e4346484e545a61686e78818e939c928d80746d62594f433a2f24190d04000000000000000006121f2b3744505b6574818e9aaaa99e93897d70675d51453e333946525e687683909ca99f92858b7e71695f544a4a5464707d8a98a39c8f8276685d5245434f59626f7c878275695f53473a2d211408000000000000000000010d1925303b4753606d7985868692928d837c716c635b52493f352c1e150b000000000000000000000000000000000000000000000000000000000000000000000000000008131f2b3844505b66737f8c999f92867a706b605d55575e616b7075797a7b7a77726d6760584f473d32281e0b020000000000000000000000091623303c4956636f7c8999a39d908376675d5145404547494e54565e616a6e767e859095938e847d736d665e564e453d352b231a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b657986939faca295897c6f6256493c2f231609000000000000000000000000000000040d18232e39424f59626f7c887e7265584b3f3225180c000000000000000000000000000000000000000000000000030f1c28333f4a5463707c8997a1a4998a7e7164544a494847464143413e3c3a38342f2d2c2924201e1913100b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3844505b65707d89939eaaa69d9083786c60554b40353f4c5865727f8b959a8b7e7164574d42362a25323e4b5865717e8b94887b6e6155483b2e22150800000000000000000000040a0f1315161a1b1c1514120e0903000002080d16202b37434e5865727e8b98a9b3ada1968a7e7164564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10141c28343f4a54606d7a85929fa0968b7f72685d52453c31261a1a1b161613100b040000000000000000000000000000000000000000000000000004101d2935404b55626f7c89959f93877b6e6154473b3025190e0200000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3e4b5764717e8a979e9285786a5f53473a3d434750565e666d78818e949d928b7f726b60554c41352920150a0000000000000000030f1b27333f495363707d8a98a2aea4999184796d605a50453b36414c5665727f8b98a89d918485867b6e665c504753606d7a86929f9f92867a6d6054473d47535f6a7481867b6e6155483b2e221508000000000000000000000815222e3b4854606a76838f93918b80796e6a615a524940372d231a0c030000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a86929f9892857d746d675f5753596063656c6d6e6d6766605d554e463d352b20160c0000000000000000000000000714202d3a4753606d7986929f9f92867a6d6053473a393a3d43474d52585f626c717b838e9397918880786d685f574f473d352b231a11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c798698a3aea396897c706356493d3023160a0000000000000000000000000000000007121d27303d4754606a707d786c605346392d201306000000000000000000000000000000000000000000000000000b17222d394653606c7884919eab9b8e8175665b57565554524c4f4d4b494745403d3a39352f2d2a251e1c16100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27333f4953606b75828f98a2aca0958b7e71675d51453c424f5c6975828f9c9c8f8276695e5246392e23313d4a5764707d8a95887b6f6255483c2f221509000000000000000000000000030709090d0f0f08070502000001070c13191f28323a47535f6a76838f9ca9b0a69e9184796d6053463a2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b17232e3845515d6773808d98a29e92857a6d60574d42372b1e150a0a090703000000000000000000000000000000000000000000000000000000000c18242f394754606a7783909d9a8b7f7265564d41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000715222e3b4855616e7b8897a197887b6e6255483b32373e444d545c666c78828f959f92877d6f675d51453c32271b0f0400000000000000000b17222d3a4753606d7985929fac9f93878e81746c61574d42383b4855616e7b8896a0a0968c808c82786d60584e515d6775828f9ca3998a7e7164574b3e434e58626e7b878174675a4e4134271b0e000000000000000000000916232f3c4956626f7c8994948b7f746d675f57504840372e251c1108000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e6875818e9ba197928a81796e6960584f54535b606161605d5553514b433d342b23190e0400000000000000000000000006131f2c3845515c677683909ca399897d7063564a3d2f2d32373b42464e535a62696e79818b939a938d827a6e6a60594f473d352b23190f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b657985929faca3968a7d7063574a3d3024170a00000000000000000000000000000000000b151e2b37434e58616c706c665b5044382b1f12060000000000000000000000000000000000000000000000000006121f2b3844505b6674808d9aa89e9285796c64636362615e565c5a585653514b4a4745403a3936302c271f1c17110a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414f59616e7b86929fa7a79e9184796d60584e42434f5c6976828f9c9f93877b6e61544b403428303d4a5763707d8a95887b6f6255483c2f221509000000000000000000000000000000000002020000000000030b12181e2429313a444f59626f7c88949faba99f948b7e71665c514538281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935404b55616d7a86929fa1978d8073695f53463d30261c11060000000000000000000000000000000000000000000000000000000000000007121d2b38434e5865727f8b989c908376685e5246392d20140900000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697885929f988b7e7265584b3f312b323b424b545b666d798391999991847a6d60584e43372b21160a000000000000000006131f2c3845515d6776828f9ca99c8f82878a7e71695e544a3f3a46535f697784919ea8988c7f838c7f736a60564c5565727f8c98ab9b8e817568574d423c47535f6975818275695c4f4236291c0f000000000000000000000c1926333f4c5966727f8c998f82766d605c554e453e362e251c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36414c56636f7c8995a0a196918e847b6f6a615950495053545453514b47454039312b221910070000000000000000000000000004101c2934404b556673808d99ab998d807366564c413529272b30363c434750575e676d747f8892999490847c6f6b60594f473d352b22180e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495f6c7885929faba4988b7e7165584b3e3225180b0000000000000000000000000000000000030c1b27323c46505a6164605b544a3f33281c0f0300000000000000000000000000000000000000000000000000030f1c28333f4a54636f7c8996a1a197897c7171706f6f6d686b69676562605c555753514b4746413a38332c28231c150c09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3d46525e69727f8c959faaa1968d80736a5f544a3f4e5b6774818e9aa4998c7f73665c5145382d303d495663707c8994887b6e6155483b2e2215080000000000000000000000000000000000000000000000030d151d242930353c434c56606b75818e9ba6aaa1978f82786c60544b403428160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18242f3a46525e6873808d98a29f92867b6e61594f42382e23170c01000000000000000000000000000000000000000000000000000000000000010f1b27323d4754616d7a86929f93877b6e6154473b3025190e020000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576976838f9c9b8e817568574d42372b293039424a545d676f7c86929f968d81746a6054473d32271b0f020000000000000004101d2935404b5565727f8c98a99c9083808d857b6e665c50443f424d576774818d9aa79c8f827b86877c6f685d5455626f7c8895ab9e918478695e52463a424d57626e7b7a6d6054473a2d211407000000000000000000000c1926323f4c5965727f8c988d8174655b514b433c332c241c130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303b4854606b7783909d9e91848591857c706b615a50444647484745403a39352f281f1910070000000000000000000000000000000c18232f3d4a5663707d8999a39d908376685d5245392c201f252a31373f454d555c606d727e8792999691857d706b60594f473d342a20170c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d45515e6b7884919eaba6998c7f7366594c40332619090000000000000000000000000000000000000a15202b343e4750555753504a42382d22170b0000000000000000000000000000000000000000000000000000000b17222d394653606c7884919ea99b8e817e7d7d7c7b7a79777674716f6d676763605d5554524c48443d38342e261e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a36424d57606d78839098a2a89f92877c6f665b50444b5764717e8a98a29e9185796d6053493f33303c4956636f7c8994877a6e6154473b2e21140800000000000000000000000000000000000000000000010b151f272f353a41454d555e68707d89939eaaa29892857b6e665b5042392e231804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2a36414c56616d7a86929fa3998f82756b60544a3f34281e1308000000000000000000000000000000000000000000000000000000000000000a16202d3946525d6875818e9b998b7f7265564d42362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000020e1a2631404d5a6773808d9a9e918578695f53473a2d21272f38424b555f6a73808c969f93877c6f62594f43382c1e130800000000000000000c18242f3c4955626f7c8897a19f92867b849082786d605a50473e4b5764717e8a97a99f9286797f8c847a6d665b54606d7a8799a3a196877b6e6154473b3c47535f696e6d685d5245392c201307000000000000000000000a1724303d4a5763707d8a979184786c60534639312a211a120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e2c38444f5965727e8b979f93867d8490867d716c61594f463c3b3a39352f2c29241d160d07000000000000000000000000000000000714202d3a4753606d7a86929f9f92867a6d6054473a2d21141920262b333b434b515b626c717e87929a9792867d706b60594f463c32291e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061d2a3743505d6a7683909da9a79a8e8174675b4e4130251a0e020000000000000000000000000000000000040e19222c353e44494a46443f382f261c110600000000000000000000000000000000000000000000000000000006121f2b3844505b6674808d9aa89e938e88888a898887858482807e7c797673706d6765615e56544f46443f38302a251f170f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1a25303b44505c666e7b86929fa5a3999083786c60584e4753606d7a86929fa1978b7e71655b5044392e3d4a5663707d8998867a6d6053473a2d2014070000000000000000000000000000000000000000000007121d27313940454c52575f676d7a84919ea5a09892867d6f695e544a3f30271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a46525e6873808d97a29e94897d70665c50443a2f24190d0300000000000000000000000000000000000000000000000000000000000005111d2935414c5663707c89969c8f8376695e52463a2d2014090000000000000000000000000000000000000000000000000000000000000000000000000000091824313e4b5764717e8a97a197887b6e6155483d2f261d262f3a434e58606d7984919e9a8f82766b6054483a3025190d01000000000000000713202d394653606c7985929ea3998a7d7c878d80746c62594f474855616e7b8897a1a398897c78828f82786c605c5d687986929fa896897c706356493d37424d575f62605d564c4135291d1104000000000000000000000714202d3a4753606d79859296897c6f6256493c2f23180f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27323d4753606d7985929e998e817a8390877e716b60584e453b302c2924201d18120c0400000000000000000000000000000000000613202c3945515d677683909ca3998a7d7064574a3d30251a0e151a212930394045515a616c717e88939f9892867d706b60584e443b30271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8a99c90837669574d42362a1e120500000000000000000000000000000000000007101a232c33393c3d3938332d261d140a00000000000000000000000000000000000000000000000000000000030f1c28333f4a54626f7c8996a09f92877c7c7d7f808285878a8d8b898683807d7a75716d6863605953504a423d363129211a110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f28343f4a545f69727f8b939ea89f958c7f726a5f554b515d6773808d97a29d9083786c60544a40343d4a5764707d8a928578675c5145382c1f1306000000000000000000000000000000000000000000000c18242f39434b51565d60696e79829096a19f9691867d706b60574d42382d1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2a36414c56616d7a85929fa69d9183786d60564c4135291f1409000000000000000000000000000000000000000000000000000000000000010d1924303a4854606b7784919e93877b6e6154473b31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c8899a3988b7e7165594f41382d221d28313c45515d67727e8b979f94897c6f63564c41362a1e11050000000000000005121f2b3744505b6576828f9cab9a8d80747f8c8b7e716b61594f46535f697885929eaa998c7f727b858d80746d66636d7a8799a3a4978a7d7164574a3e313c454d535554524c443a3024190d010000000000000000000006131f2c3945515d67727f8b928c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2c3945515d67737f8c989f92867a7a8390877d706a5f574d43392e231813100d070100000000000000000000000000000000000004101d2935404b556673808c99aa9a8d807467574d42362a1e110a0f171e272e343f48505a616c727f8b929d9892867d706a5f564c42392e23180f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1a2734414d5a6774808d9aa7ab9f928578695e52463a2d2014070000000000000000000000000000000000000008111a22282d30312d2b28221c140b0200000000000000000000000000000000000000000000000000000000000b17222d384754606a7784919ea3998a7d7170727476787b7e8184888c908d8a86827e7a75706b65605c544f46423b332c231b13090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17232e38424d57626d75818f96a0a79f92877c6f675d514b55616d7a85929fa0958a7e71665c51443a3e4b5864717e8b9184776b554b4034291c100400000000000000000000000000000000000000000004101d2935404b555d60686d737b8390959d98928c847c706b61594f453b2f261c0c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1925303a46525e68727f8c96a0a0958b7f72685d52453b31251a0e0300000000000000000000000000000000000000000000000000000000000008131e2c38444f5966727f8c99998b7f7265574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929f9d9083766b6053493f33271e1f2935404b55606d7985929e9b8f8275685e5246392d20130600000000000000030f1b27333f49536673808d99a69d90837777828f877d706b6059504d576a7683909da89b8e8275707d878d80787170737e8b97aba5988b7e7265584b3f32333c4247484745413a32281e1308000000000000000000000004101d2935404b55626d74808c8b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616d7a86929f988c80737a8491867c6f695e554b40342820170d020000000000000000000000000000000000000000010d18242f3c4956636f7c8998a29d918477695e52463a2d201406050c151d2328363e48505a626d73808d949f9892857c6e685e544b40342821170d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5ada297877b6e6154483b2e21150800000000000000000000000000000000000000000810171c202324201f1c17110a0200000000000000000000000000000000000000000000000000000000000006111c2b37434e586673808d99a79b8e817566656769696e7174777b7f84898e928f8b86827d77726d666059534d453e352d251b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303c45515b606d7a849198a2a3999083796d605b51525e68717e8b949e9e9184796d60564c413f4c5966727f8c8f8275695c4f422f23180c0000000000000000000000000000000000000000000006131f2c3845515d676d747a8086909596918c8680796f6a61594f463d33291d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2a36414c56606d7984919ea69e92857a6d60574d42362a1f140900000000000000000000000000000000000000000000000000000000000002101b27323d4754616e7a86929d908376695f53463a2d21150a0000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c667784909d9f95897d70655b50443a302519242f3945515c6774808d9a9f92867a6d6154473a2e23170b00000000000000000b17222d3e4a5764717d8a97a49f93867a6d7a8491867d706b615a515c6975828f9ca89d9084776b717e8b8d837e7c7f86929faca7978a7e7164574b3e312a31373a3b3a3935302820160c020000000000000000000000000c18242f3943515b646e747f827b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3946525d6874808d999e9285796e7b8591857b6e675c51453e32291e13080000000000000000000000000000000000000000000713202d3a4653606d7985929fa095877b6e6154473b2e23170b00030b1218242d363e48515b606d78828f96a09791847a6e665c51453e33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a8b2a9978a7d7064574a3d2f24190d010000000000000000000000000000000000000000050b1014161713120f0b060000000000000000000000000000000000000000000000000000000000000000000f1b27323d4855626f7c8895a09f9285796d605a575e6164676a6e72777c81878e93928f89847e78706b615e574f473f372d251b120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2a333f45515d676f7c869299a3a0958e81756d62594f56626c75828f97a0968b7f72685e5246414d5a6774808d8d8073675a4d4034271a07000000000000000000000000000000000000000000000714202d3a4753606d7a81868c9296918a847f7a736d675f584f473d342b21170b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1925303a45515c67717e8a949fa1978d8073695e53463b31251a0e020000000000000000000000000000000000000000000000000000000000000b16202d3946525e6875828f9b95887b6e6155483c32261b0f0000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b546875828e9ba79d9083786c60564c413529221d2934404b55626f7c8997a2998b7f7265544a3f34281c1003000000000000000615222f3b4855626e7b8895aca49a897d706f7c8692867d716c605d556874818e9ba79f9285796c6c727f88918b898c9298a3aba095887b6e6255483b2f22262b2e2f2d2c29241e160e040000000000000000000000000007121d27313f49535c646d72766e695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2935414c56616e7b86929f978c7f726f7d879083796d60594f443a3025190b02000000000000000000000000000000000000000006121f2c3844505c6675828f9ca7978b7e7164544a3f34281c1003000007121b232c363f44505c666d7a849199a1969083786d605a50453b30251a0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8796a0aca69a8d807367564c4135291d11040000000000000000000000000000000000000000000004080a0a06060300000000000000000000000000000000000000000000000000000000000000000000000a16212e3b47535f6a7784919da297897c7063564d525457575f62666b6f757b8187909495918b837d756e69615951493f372d241a0f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18212935414c555f6a707e87929fa49e938b7f726b6058505a616e7b8591989e92857a6d615a50454d566976828f8b7e7165584b3e3225180b0000000000000000000000000000000000000000000006131f2c3845515d676d7a80869091847d77726d68605c554e463d352c22190f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2834404b55616c76828f98a39f92867b6e61574d42362a1e120500000000000000000000000000000000000000000000000000000000000005111e2a36414c5663707d8996998c7f7266584e43372b1c1106000000000000000000000000000000000000000000000000000000000000000000000000000c18232e404c5966737f8c99a69f958b7e71685e52463e342a20232f3a4653606d7985929f9c8f8275665c5044382b1f1206000000000000000714212e3a4754616d7a879aa4ac988c7f726a707e8792877e746d67626675828f9ca8a398877a6d606d727e869095999fa3a7a0999083776a5f53473a2e211a1e212221201d19130c040000000000000000000000000000010b151f2d37414a535b636669615e574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a46535e6974818e999e9285796d727f8c8d80746b61564c41362a1d140a000000000000000000000000000000000000000003101c28343f4a5465727f8b98a89b8e8275665c5044382b1f120600000009111a2428343f4a545d686f7c87929f9f958d80746c61574d42362a20160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d687784919eaaaa9d908377685d5245392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5866737f8c9aa49a8d807367574e46474a4e5355596063696e747c838c9298959189827b706c625b51493f362c21170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f19242f3a434e58616c727f8b929ca49f92877d706a5f57525e696f7c86929a978e81746c61574d525e69788591887b6e6155483b2e2215080000000000000000000000000000000000000000000004101d2935404b555d686d737b838d918a837d766f6a625b5049413930271c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18232e3943505a626e7b86929fa3988e8174695e53463a2d211408000000000000000000000000000000000000000000000000000000000000010d1925303b4653606c7884919d9084776a5f5347382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000071724313e4a5764717d8a97aba29791857a6d615a50463c32281f2b3844505c6676838f9c9f9285796d6053463a2d201307000000000000000713202d3a4653606d7986939fa39a8d8174676c717e8b928a8079726e6e7885929eabaa94877b6e61626c717c838a8f9298959591877d7063574e42372b1e121214151413110d080200000000000000000000000000000000030d1b252f3841495157595c54524d453b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2a36424d57626e7b87939f978c7f726d75828f887d70685e52463d2f261b110600000000000000000000000000000000000000000c17232e3b4855616e7b8896a09f9285796d6053463a2d20130800000000091217232e38424c56606a737f8c959f9d928a7e71695e52463e32281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c566874818e9ba7ac9f92867a6d6054473a2e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4854616e7b87939f9e9184776a5f53473b3e4247484f54575f616a6f787f8691979d938f857d726d625b51483e33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313c464f59626d73808d929ca39992857c6e695e5756606a717e88939a938a7e70695f5654616e7b87918478695f53463a2d21140700000000000000000000000000000000000000000000000c18242f39434c565d606a6e78808b93908a827c726d605b534a42392e23181108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303e47535f69727f8c949f9f92867b6e6154483b3025190d0100000000000000000000000000000000000104060706040100000000000008141f2b3844505b66737f8c9995887c6f62544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8899a49e92858681756c61584e443a312828343f4a546774818d9aa298887b6e6255483b2f2215080000000000000006121f2c3844505c6677838d9298988d807367626c727f8c918d847f7b7b818e97a1ada894877b6e615a616a6f787d8286888887847d706b6054453c31261a0e060808070704010000000000000000000000000000000000000009131d262f373f464a4c4f4846423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b47535f6a75818e999e92857a6d6e7a8592857a6d61594f41382d22170b00000000000000000000000000000000000000000614212d3a47535f697784919ea297897c6f6356493c3025190d010000000006111c26303a444e58606c78839099a39f92857b6e615a50443a2f24190d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3e4b5864717e8b97a7afa3998a7d7164544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212d3a46535e697683909ca096887b6e6255483b31373a3d43484d53585f666c727c8591959e9792887f726d625a50453b30251a0e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343e47515b636e73808d929fa29791847b6e695e5758616c727f88929992857b6e685e5965727f8b8d807467574d42362a1e1205000000000000000000000000000000000000000001050907121d27313a444c52575f666d747f87939490867f736c655c544a403428231a0e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2b37424d57606c78828f96a1998d807367564c41362a1d110500000000000000000000000000000001070d10131413100d070b09080706030f1c28333f4a54616e7a86929a8d8073665b5044382b1f13070000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939f9f9286818b7e716a5f564c433a312a2e404d596673808c99aa968a7d7063574a3d3024170a0000000000000003101c28343f4a54606d7980868a8a867c6f625a626d727f8b92918c88888e939da9ada196867a6d6053585f666c7176797b7b7a77706b61594f44332a2015090000000000000000000000000000000000000000000000000000000b141d252d353a3e3f433b3a36302921170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b37424e57626e7b87929f978c7f7368717e8a8e81756b6053493f33271b0f030000000000000000000000000000000000000006121e2b37424d576774808d9aa9998c807366564c41362a1d110500000000000a141e28323d44505b666f7c87929fa2988f82756c62564c4135291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7b8795a0acab9b8e8174665c5044382b1f12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5765717e8b98a3998c7f7266564d41362b2e32383c42464e545b606a6f7b839196a09a938b7f726c61574d42362a21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222c353f49525c636e73808c939aa19691847b6e695f585a626d727e87929791837a6e68626b768390887b6e6255483b31261a0e0200000000000000000000000000000000000000060c11151718151f28323a41454e545c606d717e889398928b80776d665c51443f352c20160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1a26313c44505b666e7a8491979e918478685e5246392d2013070000000000000000000000000000040c12181d2020201d18191716141312100c17222d3846525e6875818e9b9184786c6053463a2f24180d0b0b0a0a090706040000000000000000000000000000000000000000000000000000000006131f2c3845515c667884919ea3998a7d85867c6f685e564c433b33333f4c5966727f8c99a4978a7e7164574b3e3124180b00000000000000000c17232e3845515d676d747a7d7d7b6f6a5f535b636d727e87929795949a9da5afab9e918478675d514e545b6064676d6e6f6e686361594f473d3321180e03000000000000000000000000000000000000000000000000000000020b131c232a2e3133362e2d2a251f170f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1a26313c47535f6974818e989f92857a6d6c76828f897d6f655b5044372b1f160b00000000000000000000000000000000000000020e1a26313d4a5763707d8a98a39d908376685e5246392d2013060000000000020c162028333f4a545f6a73808d97a19e948b7e71685d52453b31261a0e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697784919daaab9e9285796d6053463a2e23180c00000000000000000000000206080808070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b4754606d7a86929f9c908376685e5246392d21272c31373c424a505860696e7a849197a29f93887e70695e52463d32271b0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a232d37404a525c636e737f889298a09691847b6f6a615a5b626c717e86909590837a726f717d898f82766a5f53473a2a1f1409000000000000000000000000000000000000000911171d2124252b2923282f353c424a505a626c727f8c939f928d81786d605b51473e32281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009152028333f4a545e686f7c85929796877a6d6154473a2e21140700000000000000000000000000040d161d24292c2d2c292426242321201f1c171c1c2a36414c56636f7c899596897d7063554b4035291d1818171716151413100c07070604010000000000000000000000000000000000000000000004101c2834404b546976828f9cab988b7f7e8b847a6d685d564d453e383f49536673808c99a4978b7e7164584b3e3125180b000000000000000006111c2935414c555d60686d70716e695f584e515b636c717d858f949ea1a9aaaaa59b8e817468554b424a5053555c606162615e56554f473e352b210f060000000000000000000000000000000000000000000000000000000000010a11181e2225262921201e1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202b37424d57616e7b86929f978d8073696e7b879083786c6053463d33271c1002000000000000000000000000000000000000000914202d3a4753606d7986929f9f93877a6d6154473a2e23170c000000000000040d17222d38424e58606d7984919ea69e92857a6d60574d42362a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d576673808c99a8ada197897d7063554b4034281c1004000000000000000003090e1214151414110e090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914202c3945525d6875828f9b9f93867b6e6154473b30251b1f262b2f383f444e575e686e7b85929aa49a92857b6e61594f43382c1d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111b252e38404a525c636d727e8691969e9691847c706c605c5a616c707b838d9290857f7b7e8592867b6e61574e42372b180e0300000000000000000000000000000000000009121b22292e31323836302f2c2930383f44505a626d74818e959c938e81746d635a50443a3025190d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b17222d38424c565f6a6f7c858d8e85796d6053463a2d201307000000000000000000000000010c161f282f35393a39352f32312f2e2d2c2823292925303b4854606b7783909b8e8174675d5145392c25252524242322201f1d18171413110d08010000000000000000000000000000000000000000000c18232e414d5a6774808d9aa79b8e8175828f837a6d685f5750484344505b6575818e9baa978a7d7064574a3d3124170a0000000000000000000d19242f3a434c51565d606364615e574e4649515a626b707b828b91979b9d9d9c93897c6f6356493c3f44464b5153555554524c48443e352c23190f0000000000000000000000000000000000000000000000000000000000000000070d121618191c1514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1a26313c46535e6974808d979f92867b6e6974808d8a7d7164594f44382c1e13080000000000000000000000000000000000000006131f2c3845515d6775828f9ca49a8a7e7164544a3f34281c100300000000000006111c262f3c45515d67717e8b95a0a2978d8073695f53463b31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303c4855626f7c8896a0aca99b8e8174675c5145382c1f150900000000000003090e151a1e212221201e1a140f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5664707d8a97a1998b7f7265564c41362a1e141a1d262d333d454d565f69707d88939fa2978f82756b6054483a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121c262e38404a525b636c717c848f939e9691867e746d67605a61696e7980868d928b888a918a7e71695f53453c31261a0600000000000000000000000000000000000007101b242d343a3d3e44433d3c38332c2e343f48515b606d798390999e938c7f726c61564c41352921160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3b444e58606a6f7a80827d6f665c5044382c1f120600000000000000000000000007121d2831394045474540413f3e3c3b3a38342e3635353438444f5965717e8b9792857a6d6053473b313132313130302f2d2c29242421201d19130e090300000000000000000000000000000000000000071925323f4c5865727f8b98a59d9084777a8590837a6e69615a544f4c54606c7884919ea298897c6f6256493c2f23160900000000000000000008131e28313a41454c5254575754524d453c3f48505961696e777e858a8e90918f8b81746b6054483b33383940454648484746413b38332c231a11070000000000000000000000000000000000000000000000000000000000000000000106090c0c10080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2a36424d57616d7a85929f988e81756b6e7a869083776b6054483a3024190d0100000000000000000000000000000000000004101d2935404b5565727e8b98a79b8e8175665c5044382c1f1206000000000000000a141d2935404b55606d7884919da89f92867b6e61574d42362a1e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212e3a47535f6a7784919dabab9f9285796d6053463c31261a0e0100000000050d141a1f262b2e2f2e2d2a251f1b150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a4653606d7985929e9c8f8376685e5246392d20130b141c2228333b444d57616b74818e98a29e94897c6f63554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141c262e384049515a616a6f7a818b929798928880796f6a615e5f666d737b8185888988847e716c62574d42332a2015090000000000000000000000000000000000040f19222d363f454a4b51504a48443d352e28363f45515c676f7c87929f9f93887d70685e52463d33271c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d29323c464e5860686e73756f6b60544a3f34281c10030000000000000000000000010d18242f39434b5153514b4e4c4a494746443f434342414140404753606d798592988b7e7164574d423e3e3e3e3e3d3d3c3a39352f312d2c29241e1a140b060000000000000000000000000000000000000a1724303d4a5763707d8a96ac9f928679707d8790837b716c636059565e66707d8996a19f9285796d6053463a2d201307000000000000000000010c161f282f353a4145474a4a4746423b33363f474f575e656c72797e818384827e776c60594f44382c2b2e34383a3b3c3b3936302c28211a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1a25313b46525e68727f8c969e93897d706874818d897d7063564c4135291d1105000000000000000000000000000000000000000c18242f3b4854616e7b8795a09f9285796d6053463a2d20130900000000000000020b18242f3944505c66717e8a96a0a3998e8175695e53463a3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5866737f8c99a3ada2978a7e7164574d42372b1e1308000000050f171f252a31373a3b3b3a36302b2620181008000000000000000000000000000000000000000000000000000000000000000000000000000000000008131f2c3845515c6674808d9a9f92867a6d6154473a3025190d0a11172129323b454f59616e7b86929fa69b8f8275675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a141c262e373f48505860686d757e858e9299938d837c756e69636060696e74797c7d7c78716c625a50453b3121180e0300000000000000000000000000000000000a16212b343f485056585e5c56554f473f372e2934404b555f6a73808d97a19a92857a6d61594f44382c21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17202a343d464e565e6167686360594f42382e23170c00000000000000000000000004101d2935404b555d605d555a5957565453504a504f4f4e4d4d4d4c515c6773808c988f8276695f534a4b4b4b4b4a4a4948474540413e3a39352f2a251f17110a02000000000000000000000000000000000915222f3c4855626f7b889aa4a399887c6f717e8b90857e756f6b6968686d7883909da59c8f8275665c5144382c1f120600000000000000000000040d161e24293035393a3d3e3b3a3630292d353e454d535b60676d7175777776716c655b50473d32271f23282c2d2e2f2e2d2a251e1c161008000000000000000000000000000000000000000000000000000000000305060a0c0c0a07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2935414c56606d7984919e9d9083786d6e7b888e8275685d5246392d201306000000000000000000000000000000000000000714202d3a46525e697783909da297897c706356493d31261a0f020000000000000007121d28343f4a54606c7884919ea99f92877b6e61564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c4754616e7b86929faca99c8f8276695f53473a2f24190d0000030d17212930363c4247484746423b37322a221a11080000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b54626f7c8895a0998b7e7265564c41362a1d1105060f172029333e46525e6874808d9aa89f92867a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a141c252e363e464e565d606c717a81878e92959087817b75706d666765666d6f706f6c66615a50483f332a1f0f060000000000000000000000000000000000030f1b27323d46505a62656b6963615951493f342b2f39434e58606d7a85919ea1978e81746b6054483d32271b0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18222b343d444c52545a5b56544f463d30261c11060000000000000000000000000613202c3945515d676d67696765646261605c545d5c5c5b5a5a59595855616d7a869293877b6e615457575858585757565553514b4e4a4745413a363127221b140b020000000000000000000000000000000714202d3a4753606d7a86939fab978a7e716c73808c928a827c787575767a818f959f9e93897d7063544a4034281c10040000000000000000000000040c13191e24292c2d30312e2d2a251f232c333b414950555c6064686a6a6965605b53493f352b2116181c1f20222221201e1914100b05000000000000000000000000000000000000000000000000000000060b0f1213171919171312100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1925303a45515c67707d8a949f958c7f726976838f867a6d6154473a2d22170b0000000000000000000000000000000000000005121e2a36424d576673808c99a99a8d807367584e43372b1f120600000000000000010b17232e3844505b66727e8b97a2a3998d8074685e5246392d20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202d3a46525e6975828f9ba7ac9f93877b6e61564c4135291d12070009141f29333b42464d535554524d47433c342c231a1007000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3947535f6a7783909d9c8f8276685e5246392d20130800050e17212a36414d56626f7c8896a1a3988a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a131c242c343d444c525a62686d747b81868b90938e87827d79767372716d686362605b5450483f362d21180e00000000000000000000000000000000000007131f2c38434f59626c717776706b635b51463c3227313c45515d67727f8b97a19e93897d7063594f43382c1e1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019222b323b4146474d4f4948433d342b1e150a000000000000000000000000000714202d3a4753606d7978767472716f6e6d666a6a696868676766666565656874818e998d80736664646464656464636362605d555a5754524c46423b332d261d140b02000000000000000000000000000006131f2c3845515d677885919ea6998c8073666c77808a928f8985828183868f939ea0968f82756b605442392e23180c0000000000000000000000000001080d13191d2021242421201e1a141a20292f383f444b5153575b5d5e5c5853504941382d23190f0c10131315151414110d0802000000000000000000000000000000000000000000000000000000020a11171b1f2023262623201f1c17110c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2834404b55616c76828f989f92867b6e717e8b8b7e716453493f33271b0f03000000000000000000000000000000000000020e1a25303c4956626f7c8997a19e9184776a5f53473a2e211408000000000000000006111c28333f4a54606d7985929eab9f92867a6d6154473c32261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d5663707d8a95a0aca49a8d8073685d5245392e23180c010e1a25303b454d52575f62615e57534e463d352c22190d0400000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37434e5865727f8b989f92867a6d6154473a3025190d0100060f1925303b47545f6a7884919eaa998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121a222b323a414550565d61696e747a7f83878a8c8d898682807f7e7a6d605553504a423e362d241b0f060000000000000000000000000000000000000915222f3b4854606b717e84837d726d63584e43372b2935414b55606d7985929ea59c9083766b6054483b3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920293036393b40423c3b38322b22190c03000000000000000000000000000f1c2835424f5b6875818583817f7d7c7a797877767675747473737272727171717b8693918478707071717171717170706f6d676a6764605d56534d443f382f261d140a000000000000000000000000000004101d2935404b556a7683909da89b8e817568656c737e869095918f8e8f92999e9e9590847a6d60594f4430271c120700000000000000000000000000000002080d11131417171414110e090e171d262d33394045474b4e50514f4b46443f382f261b11070004060708090807050100000000000000000000000000000000000000000000000000000000040b141b22272b2d303332302d2c28231c18120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18232e3943505a616e7b86929f989082786d7a878f8275655b5044372b1f1205000000000000000000000000000000000000000913202d394653606c7884919ea096887b6e6255483b3025190d0100000000000000000b17222d3845515c6774808d9aa7a2988b7f7265584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303b4653606c7883909da8ac9f92857a6d60554b4034281d1207121e2a36424d575e61696e6e69625f584f473d342b1f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000f1b26313c4754606d7a86929f998b7e7165564c41362a1d1105000008141f2b37434e586875828e9ba79b8e8174685b4e4135281b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081019202830353e444c52575f61686e72767a7d7f81818281807e7a6d685d5246443f382f2c241b120900000000000000000000000000000000000004111d2935414c56636f7c88918f897f726a6054473b2e242f3a45515d6773808c99a79f94897c6f63564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e171e252a2d2e3435302f2c272119100700000000000000000000000000000b1825323e4b5865717e8b908d8c8a8987868584838282818080807f7f7e7e7e7e7e8391968c7f7d7d7d7e7e7e7e7d7d7c7b7a787674716d68615e57504941382f261c110600000000000000000000000000000c18242f424e5b6875818e9ba89c908376695b606c717c838b90959798999897928c837a6e685d52473d321e150b000000000000000000000000000000000000010407070a0b0807050200050b141b22272f34383a3e424444433e3937332d261d140a0000000000000000000000000000000000000000000000000000000000000000000000000000040d161d262d3337393d3f3f3d3a38342e28231d150c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303e47535f69737f8c959f948c7f7377849185796c605346392d2013060000000000000000000000000000000000000005121f2b3744505b6574818e9aa8998c7f7266564c41362a1d1105000000000000000006111c2834404b55626f7c88959faa9d9083776a5f53473b2e2115090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b3744505b65717e8b96a1aca2988c7f72675c5145392f24180c14202d3a46525e696e777b7b766f6a60594f463c31281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c3945525d6875818e9b9c8f8276685e5246392d2014090000020f1b26323f4c5966727f8c99a59b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e161e2429323a41464d53565e6165686d70737475757573716d685e564c4138332d261d1a1209000000000000000000000000000000000000000713202c3945525d6876828f9a9c91887c6f6255493c2f222935404b55616e7b88959fa69b8f8275685e5246392d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e2021272823221f1b160f070000000000000000000000000000000713202d3a4653606d798491979897959a939291908f8f8e8d8d8c8c8b8b8b8b8a8a91959c918c8a8a8a8a8b8b8b8a8a8988868583817e7a746e69605b534a42382d22170b0000000000000000000000000000071a2733404d5a6673808d99a69d9083766a5d5a616a6f787e83878a8c8c8b89857f796e685e564c41352b210c03000000000000000000000000000000000000000000000000000000000000020a11171d23292c2d3135373736322d2b27221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f383f44464a4c4c4a46443f38342e271e180f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2b37424d57606d798391999f92877d75828f887b6e6155483b2e22150800000000000000000000000000000000000000030f1b27333f495364707d8a98a39c908376685e5246392d2013080000000000000000000c18232e3947535f6a7683909da9a095887c6f6255493c31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606d7984919ea8aa9e9184796d60554b4035291e1315212e3b4854616e7b838887837c706b60584e433a2f24190d04000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5663707d89969f92867a6d6154473b31261a0e0000000a1825323e4b5865717e8b98a49c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c1319202830353b42464c5254565e616366676868686664615e564c443a2f28221c140b0800000000000000000000000000000000000000000714212d3a4754606d7a86929f9f92857a6d6054473a2d21242f3946535f697683909da99f93877a6e6154473b2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e1114141a1c1615130f0a040000000000000000000000000000000006131f2c3845515c666e7c858f949b9fa29f9f9d9d9c9b9b9a9a99999898989797979da0a39c9997979797979897979696959791908d8a85817b726c655b544a3f33281c0f03000000000000000000000000000c1825323f4b5865727e8b98a49b8e8174685b505860666d71777b7e7f7f7e7c79726d665e564d443a3023190f000000000000000000000000000000000000000000000000000000000000000000060b12181c1f2024282a2b2925201f1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a414950535659595653504a454039302a21191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1a26313c45515c666f7c87929f9992867d828f897d7063564a3d3023170a00000000000000000000000000000000000000000b17222d3a4753606d7a86929f9f93867a6d6154473a3024190d01000000000000000007121d2b37434e5866727f8c99a7a7998d807366574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844515c66717e8b95a0aca1968b7f72675d51453a3024191d293643505c6976838f959490867d706a60564c41352921160a0000000000000000000000000000000000000000000000000000000000000000000000000000030d19242f3a4653606c7884919d998b7e7265574d42362a1c110600000b1724313e4a5764717d8a97a49b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e161e242931363b4146474c525457595a5b5c5b5a5754524c443a32281e17110a020000000000000000000000000000000000000000000a1723303d4a5663707d8999a39b8e8174675d5145392c201d2a36424d5766737f8c99aca4998b7e7265584b3f2e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080d0f0909070300000000000000000000000000000000000004101c2834404b545f6a6e7a82898e92989a9d9fa2aaa4a5a6a6a6a5a5a5a4a4a4a4a9a9a8a8a5a3a3a4a3aaa39f9e9c9b9a9997969598928e867f776c665b5044382b1f1206000000000000000000000000000a1724303d4a5763707d8a969992897c6f6356494e545c6065696e717273716f6d66605c544d443b32281e11070000000000000000000000000000000000000000000000000000000000000000000001070c101314181b1d1e1c1813120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a434c535b6063666563605c54514b433c332b231a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2834404b54606a73808c959f98928a8f938b7e7164584b3e3125180b000000000000000000000000000000000000000006131f2c3945515d6775828f9ca4998b7e7165564c4135291d11040000000000000000000f1b26313c4855616e7b8895a0aa9d918477695e53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b2834404a54606d7884919da6a99e9184796d60564c4135291d1426333f4c5966727f8c939e9892867c6f685d52453d32271b0f040000000000000000000000000000000000000000000000000000000000000000000000040a0f12151f2b3744505b65727f8c989d908376695f5346382d22170b00000b1724313e4a5764717d8a97a49a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191f262a3036393b4146474a4c4e4e4f4e4d4b4746413a322920160b0600000000000000000000000000000000000000000000000c1926323f4c5965727f8c98ab978a7e7164554b4135291d1a26313c4956636f7c899aa4ab9b8e827568544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424e575f686e757c81868a8d9092989697999a9b9b9c9c9c9d9d9d9c9c9c9b9b9a9998979695989291908e8d8c8a8988878685858480796c605346392d201306000000000000000000000000000815212e3b4854616e7b878d8c8880736b605448424a5053575e616465666563605c54514b423b322920160c00000000000000000000000000000000000000000000000000000000000000000000000000000406070b0f1111100b060503000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d656c707272706d66605c554d453d352c241a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18232e39424e58606d78839097a29f979b988b7e7165584b3e3225180b000000000000000000000000000000000000000004101d2935404b5565717e8b99a49c8f8276685d5245392c2013070000000000000000000a15212d3a46535f697784909daaa095877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3944505c66707d8a949faba1978c7f72685d52463c2f261b25323e4b57636d74818e95a09891847a6d60584e43382c21160a00000000000000000000000000000000000000000000000000000000000000000000060e151b1f212227333f4953616d7a86929f95887b6e61544a3f33281c0f03000b1825323e4b5865717e8b98a8988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d141a1e252a2d3035393a3d4041424242403e3a3936302920170d040000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a499887b6e6155483b2f241814202d3a4753606d7a86939faa9e918477665c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0a0907060400000000000000000000000000000000000000000000000000000000000000000007121d27303c454e565e616a6f757a7d80838587898b8c8d8e8e8f909090909090908f8f8e8d8d8c8b89888786848382807f7e7d7c7a79797878736c665b5044382b1f1206000000000000000000000000000714212d3a46535e69717e807f7c736e63594f43383f44464d5354575959585653504a454039302920170e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d686d777d7f7f7d79726d675f574f473e362c231a1007000000030506080908060503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303d44505c666e7b859299a3acaa978a7d7164574a3e3124170b0000000000000000000000000000000000000000000c18242f3a4754616d7a86939f9f92867a6d6054473a2f24180d01000000000000000005121e2b37424d576773808d9aaba7988b7e7265584b3f3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c28343f4a54616c76829099a3a99e92857a6d61584e41382d22222e3a46515b606d79839098a1968e81746a6054483d32271b0f03000000000000000000000000000000000000000000000000000000000000000009101820262b2e2f332d3846525d6874818e9b998c7f73665b5044382b1f130806101c28343f4a5466737f8c99a096887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e14191e2025292d2e30333435353533312e2d2a251e170e05000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d999f9386796c605346392d2013131f2c3945515d677884919eab9f9386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e111414161717151313100c0704000000000000000000000000000000000000000000000000000000000000000b151e2a333c444c52586062676d707476797b7c7e7f808182828383838383838382828181807f7e7d7b7a79787675747271706f6e6d666b6b66605b544a3f33281c0f030000000000000000000000000005121e2a36424d57616c7173726f6a635c52463d3234383b4246484b4c4c4b4946443f38342e271e170e0500000000000000000000000000000000000000000000000000000000000000000002030404030100000000000000000000000000000000020507080d1012110f0b070604000000000000000000000000000000000000000000000005111e2a36424d57606d7a82898c8c89857f796e69605950483e352c22190f05060b0f121315161513120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e28343f4a545e69707d87929aa4a298897c6f6356493c302316090000000000000000000000000000000000000000000713202d3946525e687683909ca3998b7e7164554b4135291d11040000000000000000020e1a26313d4a5763707d8a99a3a89b8e817568564c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3842505a626f7c87929fa8a2978d80746a5f53493f33271e2a353f45515d676e7c86929f9f93877c6f62594f44382c1f14090000000000000000000000000000000000000000000000000000000000000009121b222a31373a3c403d3b414c56626f7c89959e9184786c6053463a3025190d1018222c3844505c6675828f9c9d9184776a5f53473b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e1114191d2021242627282928272421201e19130d0500000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c999f928578665b5044382b1f12101d2935404b556a7683909da9a499877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10141a1e202123242422201f1c1813100c070000000000000000000000000000000000000000000000000000000000030c18212a323b41464e54555d606467666c6e707172737475767676767676767676757574737271706f6d686b6968676664636261605c545e5a53504a42382d22170b0000000000000000000000000000020e1a25313b45505a61646766625f58524a40342b282c31363a3b3e3f403e3c3a38342e28231d150c050000000000000000000000000000000000000000000000000000000000030608090c0f101111100e0c0808060200000000000000000002090e1114141a1d1e1e1c181413100c070100000000000000000000000000000000000000000714202d3a46525e6974818e94999897928c837b706b615a50473e342b21170c11171b1f20222322201f1b17110e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17232e38424d57606b717e8893999f9285796d6053463a2d20130700000000000000000000000000000000000000000005111d2a36414c5665727f8c98a79b8f8275675d5145392c2013070000000000000000000914212d3a4754606d7a86929faa9e918477685d5245392c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303e47535f6a73808d96a0a99f92877c6e655b50443b3025232935404b555f6a727e8b949e9a9083766b6054483b31261a0e020000000000000000000000000000000000000000000000000000000000060f1b242d343c4347484d4948444854606a7783909d96897d7063564c41362a1c141a222a343c4653606d7985929e968c7f7265584e43372b1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080d11131417191b1b1c1b1a181413110d08020000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a979f928679685e5246392d20161018242f43505c6976838f9ca9a994877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161c1f252a2d2e3031302f2d2c28231f1c18120c0600000000000000000000000000000000000000000000000000000000060f18202930363d43484c515457545b60616364666768686969696a6a6a6969696868676665646362615d565d5b5a595756555453514b514d46443f382f261c110600000000000000000000000000000009141f29333e485055575a5955544e4640382e221c1f252a2d2e31323332302d2b28231c18120b0300000000000000000000000000000000000000000000000000000000040a0f121515191b1c1d1d1d1b181514120e0904000000000000050d141a1e2021262a2b2b2825201f1d18120b06000000000000000000000000000000000000000814212e3b4754616e7b87939f948f87878b90867d706c61594f463d33291e181b22272b2d2e2f2f2d2b27221b1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303b454f59626c727f8791968e8175665c5145382c1f1306000000000000000000000000000000000000000000010d1925303b4855616e7b8895a09f92867a6d6054473a2f24180d0100000000000000000613202c3945515d677784909daaa096877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2b37434e58606d79849199a4a3998f82776c60564c41362a22242f39434e57626d75828f989f94897c6f63574d42362a1e120500000000000000000000000000000000000000000000000000000000030d18212d363f464e53555a56544f474e5865727e8b979b8e8275685e5246392e231f252a343c46505a64707d8a979e9184796d6053473c32261b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0d0e0f0f0f0d0b0707050100000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8795a099877a6d6154473c31281f1c1d2935414b556a7683909da9a197867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111921272c30363a3b3d3e3d3c3a38342e2c28231d17110a03000000000000000000000000000000000000000000000000000000060e171e252a32383a4145474a4a5053545658595a5b5b5c5d5d5d5d5d5d5d5c5c5b5a5a5958565554524c504f4d4c4b4a494746454045403938332d261d140a00000000000000000000000000000000030d17212c363e45494b4d4c4947433c342e261c10141a1e21212426262523201f1c17110c0700000000000000000000000000000000000000000000000000000000050b10151b1f21222628292a2a29282522211e1a15100c07000000080e171f252a2d2e3337383735312d2c29241d17110a0200000000000000000000000000000000000c1825323f4b5865727e8b999c8f827a7a7f8590877e706b61584e453b302723292d3337393b3c3b3937332d2a251f170f09010000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e29333d47505a626d727d8489857b6e61544b4034281c1004000000000000000000000000000000000000000000000814212d3a46535f697783909da3988a7e7164554b4135291d1104000000000000000004111d2935414c556875818e9ba8a896897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1a26313c45515d676f7d87939fa79f948b7e71685e52463f342a1f27313c45515b616e7b85929f9b8f8275695f53463a2d2115090000000000000000000000000000000000000000000000000000000009141f29333f4850585f6266636059534e53606d7985929f92867a6d61544a4034282c31363e464e58616c7682909c928a7d70675c5145382a20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697784909d978a7d7064584e433a312c28282c3945515d677784919eaa9e918578675d5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b232b33383b424647494a4a484645403a38342e28231c150c06000000000000000000000000000000000000000000000000000000050d141921272c2f35393a3d3f444648494b4c4d4e4f4f505050505050504f4f4e4e4d4c4b4a484746414342413f3e3d3c3b3a38342e332d2b28221c140b020000000000000000000000000000000000050f1b242c34393d3e403f3c3b37322a221c140a090e12141518191918161312100b060000000000000000000000000000000000000000000000000000000000070c161c20262b2e2f32353637373634322f2e2b261f1c18120b0308121a202930363a3b40434544423e3a38352f28231c140c02000000000000000000000000000000020f1b2835424e5b6875818e9b99897c6f6d727a8390877d706a60574d43392e2f34383f444648494846443f38363029211b130a020000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17212b353f48515b626b70797c7a6e695e5342392e23180c000000000000000000000000000000000000000000000006121e2a36424d5766737f8c99a89b8e8275675d5145392c2013080000000000000000010d19242f3f4c5965727f8c98a5a4988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202935404b55606b73808d95a0a69f92857a6e615b51463c31281f2a333f46525e69727f8b959f93877b6e6155483c31261a0e020000000000000000000000000000000000000000000000000000020e1a26313b45505a626a6f73706b625f58535d6773808d99998c7f73665c51443834383b42464f585f6a717e8b94938d80736b61554b403429180e04000000000000000000030506100c070704010000000000000000000000000000000000000000000000000306070a0e100606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5765717e8b959b8e81756a5f554b433d383434383f4754606d7a86929fa89b8f827568554b4035291d1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b242d353d44484d52545657575553514b46454039342e261e18100800000000000000000000000000000000000000000000000000000002080e161b1e24292c2d2d3338393b3d3e3f404142434343434343434343424241403f3e3d3c3a39353035343331302f2e2d2c282327201f1c17110a020000000000000000000000000000000000000009121b22282d303134332f2e2b262019100a0200020507080b0c0d0b090706030000000000000000000000000000000000000000000000000000000000030b121821282c31373a3c3f4243444443413f3b3a37312c28231d150c111a242c333b4246474d5051514f4b47454039342e261e140a00000000000000000000000000000004101c2934404b556a7784909d9286796d61686e798290867d6f695e554b403439404549505355565553504946423b332d251c140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232d363f49515961676d6f6d685e574d4230271d1207000000000000000000000000000000000000000000020a11171c26313b4855626e7b8895a09f92867a6d6054473a3025190d010000000000000000081723303d4a5663707d8996a3a6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18242f3a434f59606d79839097a2a2978f82756d62584e433a2f26212a36424d56606c7883909d998c807366574d42372b1e1206000000000000000000000000000000000000000000000000000005121e2a36424d57626c717c807c766f6a625f58616e7b87929e9184796d6053463e3f44464d5359616a6f7c8692938e81786c60594f43392f2318060000000000000000060b0f12131c191413110d08020000000000000000000000000000000000000000060b101213171a1d13120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b4653606d7883909893877c6f675d554e4644403f4446515a63707d8a99a3a0968a7e7164574b3e2f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222d363f474f54575e6163646362605c5453514b443f38302a221a120900000000000000000000000000000000000000000000000000000000040a0f13191d202122282b2d2e303133343535363636373737363636353534333231302f2e2d292428272624232221201f1c181a13120f0b06000000000000000000000000000000000000000000000910171d212424272622221f1b150e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d232833383c4347484c4e4f5050504e4b4847423c38342e271e181a232c363e454d5254595d5e5e5b5853514b443f3830261c1106000000000000000000000000000006131f2c3845515c677885929e918578665c5e676d7a8391857b6e675c51453e434b51535b60616262605b53524d453f372e261c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b242d373f474f555c6062605d564d453b311e150b000000000000000000000000000000000000000000060c141c23282b2d3a47535f6a7784919da2988a7e7164564c41362a1d110500000000000000000915222f3c4855626f7b8895aaa79b8e8174685b4e4135281b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313d45515c676e7b85929aa49e948b7f726a5f564c41382d2225303b44505b66707d89949d908477695f53473a2e21140800000000000000000000000000000000000000000000000000000714212d3a46535f69717e868d89827c756e6a63606975828e9b978a7e7164594f4a4a5053575e616b707c8491928c81786d665b50473e31271d1207000000000000020a11171b1f20292621201d19130c040000000000000000000000000000000000020a11171c1f20242729201f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c3844515c666f7c8692989183796d67605853514a4a50535b626c76828f9ca49a9184796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343f4850596063696e7071706f6d6664605c55504a423c342c241b1209000000000000000000000000000000000000000000000000000000000001080d111314171c1f2021232526272828292a2a2a2a2a2a2a29292827272625232221201d191c1a19181716141313100c0706060300000000000000000000000000000000000000000000000000060c111517181a191615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e272e343e44484e5355595b5c5d5d5c5b5855534d464540393028231f2b353e4850575e61666a6b6a6864605d55504a42382e23170b00000000000000000000000000000714202d3a4753606d7a86989e9184776b54555d686e7b859083796d60594f444c555c60656c6e6f6e6c65615e57514940382e241b0e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d353e434b51535654524c433b33291f0c0300000000000000000000000000000000000000000610181e262e34383a3d434e586673808c99a89c8f8275685e5246392d20140900000000000000000714212d3a4754606d7a8798a2a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2834404b555f69707d88939fa49f92867c6f685d53493f33272428333f4a54606b75828f9c95887b6e6255483b2f22150700000000000000000000000000000000000000000000000000000815222e3b4855616e7b868d92948f87817c75706c666f7c89959d9083766b605557545c6063696e757d859190877f776d665c544a3f352c1f150b010000000000020b141b22272b2d36332d2c29241e160e08000000000000000000000000000000070c141c23282b2d3034362d2b28221c140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a545f6a707d8692959082796f6a63605c54545c60636d727e8b949f9f93887d70665c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c46505a626b70777b7c7d7d7b7976716d67605c544e463e362d241b1209000000000000000000000000000000000000000000000000000000000000010406060b0f1213151618191a1b1c1c1d1d1d1d1d1d1d1c1c1b1b1a191817151413110d080e0c0b0a0908070604000000000000000000000000000000000000000000000000000000000000000005080a0b0d0c090806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e27303940454f55585f626568696a6a696765625f5753514b423e342e28313d47505a61696e7376787775716d67605c544a3f34281c1003000000000000000000000000000714212d3a4754606d7a87939e9184776b5e4c565f69707d8a8d80746b61554c565e676d73787b7c7b78746e69625b524a40362c20170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b232c3039404546494745413a312921170d0000000000000000000000000000000000000000040d18222a30383f4446494c4a55626f7c8896a09f92867a6d6154473b30251a0e02000000000000000613202c3945525d687985929fa99c908376695d5043362a1d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18232e39434d57616b727f8c929da29891847a6d655b50443f3728222d38424f59626f7c8995988b7f7265584c3f2f24180d01000000000000000000000000000000000000000000000000000714212d3a46535f696e7c80858a8f938e87827d78736f7783909d95897d7063626466666d70757b818a918b837c726c655c544a42382d231a0d030000000000000a141d262d333739433f3a39353028201a1209000000000000000000000000000710191e262e34383a3d41433938332d261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424e58606b707d858f9490847c75706d666868666d70767f87929f99928b7f726b60544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58626c717d8387898a8a8885827e79726d665f5850483f362d241b110800000000000000000000000000000000000000000000000000000000000000000000030606080a0b0c0d0e0f1010101010101010100f0f0e0d0c0b0a090707050100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273039424b515961636a6f72757677777674726e6965605c544f444039303a434f59616c717b80838484827e79726d665c5044382b1f1206000000000000000000000000000714212e3a4754616d7a87949e9184786b5e514d57616b74808d8a7d70675d545e686d797f8488898885807b726d635c52483e32291e14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000109111a1e272e34383a3c3a39352f281f170f0500000000000000000000000000000000000000010c161f2a343c424a5053565956545f6a7784919ea3998b7e7265574d42362a1e12050000000000000004111d2935414c566b7885919eaa9d9083776a5d5044372a1d110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303b454f59636d74808d939ea0968f82776c605b51493f332d262f3d4754606a7683909b8e817568554b4035291d10040000000000000000000000000000000000000000000000000005121e2a36424d575f6a6e74797e82878b8f8f8984807c797e8b979c8f82766e6f717275797d81868e8b847e786f6a605b534a42392f261c110800000000000006111b262f383f44464f4c4745413a322c241b12090000000000000000000000050f19222b30383f44464a4d5046443f382f261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303c464f59606b6f7b828a909187827d7976757576797d828b92999590877f726d62594f42392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a717e88909596979691918f8b857f786f6a615a50483f372d231a0e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070b0907060401000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39434b545c606b70777b7f8182838383817e7b77716d666159514a4239414c55606b717e858c9091918e8b857f786d6053463a2d201307000000000000000000000000000714212d3a4754606d7a87939e9285786b5f4a454f59606d798491847a6d605c666d7a838c8e8481818387867f736e635a50443b3025190d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c151d23282c2d2f2d2c29241e160d05000000000000000000000000000000000000000008131e28313c464e545c6063656360596673808c99a79c908376695e52463a2d20150a00000000000000010d19242f44515e6b7784919eaa9d9184776a5e5144372b1e1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e29333e47515b606c78818f949e9e948d80746d635b51443f382f2b37434e5864717e8a98918478675d5145392c20130600000000000000000000000000000000000000000000000000020e1a26313b454e585f62676d71767b7f83868a8d8d898583909b9b948a7d7b7c7d7f8285898c88837e79726d6660585049413930271d140a000000000000000b17222d38414950535c5954524c443e362d241b0f06000000000000000000020d17212b343c424a5053575a5c53504a42382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2a343d474f5960696e767e83898e8f89858382818385899094928f8a837c726d625b51473d30271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56626f7c87929a9e938e88858485888c8b837c716c625a51493f352c20170b020000000000000000000000000407090a0e090806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070b0e100f0f0d090400000000000000000000000000000000000000000002080d11131417161413100d070e0d0d0d0c0c0c0c0c0c0c0c0c0c0c0c0c0b090706040100000000000000000000000000000000000000000000000004101c2834404b555c666d757d83888c8e8f90908f8e8b88837e79706b605c544b4345515d67707d8792979d969189837f7e7b6e6154483b2e211508000000000000000000000000000714202d3a4753606d7a86939f928578665c504445515d67707d898e81746b606d7882908e81787474767b828b80736c61564c41362a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202321201d19130c040000000000000000000000000000000000000000010d19242f3a434e585f666d7072706b60626f7c8895a09f93877b6e6154483c32261b0f0000000000000000081e2a3744515d6a7784909daa9e9184776b5e5144382b1e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17212c353f44505b666d78828f949e9d928c7f726d625b504a423a31323d4753606d7a869296867a6d6053473a2d201407000000000000000000000000000000000000000000000000000009141f29333c464e53555c6064696e72767a7d808486898b8d8e8f8f908a88888a8b8885837f7b76716d66605c544e443f382f271e150b02000000000000030f1b27333f49535b606966605d5650483e362d21170d03000000000000000009141f29333c464e545c60636769605b544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18222b353d474f575e616c71787d8185898b8d8e8e8f8f8e8c8a86827d776f6a625b51493f352b1e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e6875828f999f958e817b7877787b80858e867e716d625b51473e33291d140a00000000000000000000050b101316171b1615130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314181b1d1c1b1915100902000000000000000000000000000000000000050c13191d2021242220201d181c1b1a1a191919191919191919191919191818161413110d0806030000000000000000000000000000000000000000030e18212c3845515c676d78818a9095989b9b979291909192908b847d746d665d554b4a54606d7a859199a29791847c7672716e695e53463a2d211407000000000000000000000000000613202d394653606c7986989f9386796d605346404b55606b74818e887d7066727f8b9184796d66676a6e78818a7e71685e52463b31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c101313161413110d080100000000000000000000000000000000000000000004111d2935414c555f6a6f787c7f7d70635f6a7784919da49a8c7f7265584e43372b1c120700000000000004111e2a3744515d6a7784909daa9d9084776a5d5144372a1e11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a2328333f4a545c666d78828e939c9f93887f726d605b544c433d373945515d6775828f94877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000030d18212a333c43474b5153565e6165686d7174777a7c7e8081828383838281807e7c7976726e6965605c54504a423d332d261d150c030000000000000005121f2b3744505b656c76726d68615a50483e33291f140900000000000000020e1a25303b454e5860666d7074766c665b5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019232b353d454d535a61656c7074797c7f818283838381807d7a75706b625f5851493f372d231a0c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939f9d9083786e696a696e737a818b887f726d62594f453b2f261c11060000000000000000080f161c2022232822221f1b150e070000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f20242829292825211b140c0300000000000000000000000000000000050e161e252a2d2e312f2d2c2924282827262626262626262626262626262625242321201d1915120f0a0400000000000000000000000000000000000009141f2c38434e58606d79828e939da09b938f8985848384868a8f918a80786d675d54505c6673808c97a19f92857b6f6b6664615e574d42362a1e12050000000000000000000000000005121f2b3744505b657985929f9a877a6d6154473a434f59616d7a859184786d7984918c8073675d575f666d7883857a6e61574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090706040100000000000000000000000000000000000000000000000613202c3945515d676f7c84898b7e71645866737f8c99a79d9083776a5f5347392e23180c00000000000005111e2b3844515e6b7784919ea99d9083766a5d5043372a1d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081117222d38424b545c666d78818c929f9a938b7f736c665d554f47433c404b556673808c95897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000060f18212a3137394045474d5254565e616467676d6f71737475767676767473716f6d6666625f5753514b443f383027221b140b0300000000000000000613202d394653606c78827f7a716c625a50453b31261a0e0100000000000005121e2a36424d57606a6f787d8082786c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071119232b333b424650535b6063666d6f7274757676767573706d68636159544e463f372d251b11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a99a4988b7f72665f575f62686e757f87887f726b61574d42382d22170b0100000000000008111921272c2f30352f2e2b262019100a010000000000000000000000000000000000000000000000000000000000000000000000070d151d23292c2d3134363635312c261e150c020000000000000000000000000000020c1620283036393a3e3c3a39352f353433333333333333333333333333333332312f2d2c2924211f1b150e0903000000000000000000000000000000020e1a26313b4854606a73808d949ea49b918b827c797776777a7d8287908d82796d665c54606d7984919ea8998c7f736960595754534d453b31251a0e0200000000000000000000000000030f1b27333f495f6b7885929e95887b6e6255483b3d46525e68727f8c8b7f727d8996897c7063554e545c666e7b868174695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a849196897c6f6256616e7b88959fa095887c6f62544a4034281c1004000000000004111d2935414c566b7885919ea99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f39424b545c666d75808a92989f918b80786d676059534e48474b5865717e8b95897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000060f1820262b2f34383b4246474c525457555d606264666868696a696968666462605c5455534d46454039342e261e17110a0200000000000000000005121f2b3744505b6576838c857e716c62574d42362a1d12070000000000000714202d3a46525e696f7c848a8d8578665b5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071119212931363e41495053545c6062656769696a69686663605d56554f47433c342d241b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98ab96897c6f63544d53565e616d727e87887d70695e544a3f33281d12070000000000050f19232b33383c3d413c3b37322a221c130a010000000000000000000000000000000000000000000000000000000000000000000710191f272f34383a3e414342413d3730271e1409000000000000000000000000000008131e28323a4146474a494745404342414040403f3f3f3f3f3f3f3f3f3f3f3f3f3e3c3a39352f2e2b26201a140d05000000000000000000000000000005121e2a36424d57626f7c87939fa69d928b7f756f6c656a676d70757c838e8f82786d665b626f7c8896a1a196877b6e61574f4a4846423b33291f14090000000000000000000000000000000b17222d44515e6b7784919e96897c6f6356493c36414c56606d798491857a808d94877b6e6154484b545f697380867b6e6155483b2e22150800000000000000000000000000000000000000010507070b0d0f101111100f0e0c0907060400000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b9695887b6e62555f697683909da79a8d8074665c5144382c1f140900000000000713202c3945525d687885929fa79a8e8174675b4e4134281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d273039424b545c606e737e8690959f928d827a706b625f585554535765717e8b97887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000060e151a1d23292c30363a3b4146474a4b515356585a5b5c5c5d5d5c5b5a585553514a4847423c38342e28231c140c060000000000000000000000030f1b27333f49536774818d92887e71695f5346392f24180d0100000000000815212e3b4854616e7b8591969184786b544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f171f252a2f383f44464a505356585a5c5d5d5c5b595754524c48443e37322a221b120901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a195887b6e625548474c525b626c717e8a857b6e665b5044392f23180c00000000000b16212b353d44484a4e4947433c342e251c130a0000000000000000000000000000000000000000000000000000000000000000050e19222b31394045474b4e504f4d49423930261b1004000000000000000000000000010d1925303a444c5254575553514b4f4f4e4d4d4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b494745413c3a37312a251f170f05000000000000000000000000000714212d3a46535f6975828f9aa4a2988d80746d63605b555d60646a6f79818c8e81786c6065727e8b98a89e918478695e53453e3b3a36312921170d03000000000000000000000000000000061e2a3744515d6a7784909d978a7d7164574a3e303a45515c66717e8a8c80829093867a6d605347424d57616d7a857d6f6356493c30231609000000000000000000000000000000000003080d111314171a1c1d1d1d1d1c1b18161313100c070400000000000000000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9c95887c6f62555765727f8b99a39e9285796d6053463b3025190e00000000000714212d3a4754606d7a8798a2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b151e273039424b515c636c717b838c9298948f847d756e6a65626060616974818e9285796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000003090f12181c1f252a2d3035393a3e404547494b4d4e4f5050504f4e4d4b494644403b3a37312c28231d17110a02000000000000000000000000000b17222d3f4b5865727e8b9a92867b6e61554b4035291d10040000000004111d2935414c566774808d989e9184776b5e51442d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1d262d3337393f4446494c4e4f5050504e4d4a4745413a38332b26201910090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a194887b6e6155483b4146515a616c73808d82786c60554b4034291d120700000004101c27333d474f54565b55544e4640372e251c1208000000000000000000000000000000000000000000000000000000000000020d17202b343d434b5153575b5c5c5a544c42372c21150900000000000000000000000005111d2a36414c565e616462605d555c5b5b5a595959595959595959595959595958575654524c4847433c36302921170d030000000000000000000000000815222e3b4855616e7b87939fac9f92857a6d605b53504c51545860666d74808c8d80736c6673808d99a69c8f827569574d42332e2d2a251f170f0500000000000000000000000000000003101d2a3643505d697683909c988b7f7265584c3f3234404b54606c7883908586929386796c6053463c46525d686d7a6f6b6054483b2f221509000000000000000000000000000000060c1013191d2021242628292a2a2929272523201f1c1812100c07000000000000000000000000000000000000000000000000000000000000000000000004101d2a3743505d6a7683909d96897d70635654616e7a86929fa1978a7d7064564d42362a1c1106000000000916232f3c4956626f7c8995aaa9978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e2730394045525a61696e7980868f94969189817b76726f6d6c6e717b86928e8275665c5044382b1f1206000000000000000000000000000000000000000000000000000000000000000001070c1014191e2025292d2e2f35393a3c3e4041424343434341403e3c3a38342e2e2b261f1c18120b060000000000000000000000000000000616232f3c4956626f7c8999988e8174675d5145392c201306000000000713202c3945525d687884919e9e9184786b5e51452f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b141b22272b2e34383a3c3f414243434342403d3a39352f2c28211b150e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a995887c6f6255493c363f48505a606d78838b7e71675c5145392e23180c0000000713202c38444f59606368625f58514940372e241a0e05000000000000000000000000000000000003060707060401000000000009141f29333d464e555c6064676969655e54493d3125190d0000000000000000000000000713202d3946525e686d716f6d676a696867666666666666666666666666666666656462605d5655534e46423b33291f14090000000000000000000000000c1825323f4b5865727e8b9aa4aa9a8d8074685d5246444145474e545c606e73808d8a7d706974818d9aa79a8d8174675a4e413127211e1a140d0500000000000000000000000000000000030f1c2936424f5c6975828f9c998c7f7366594c40332e3944505b65707d8a9292989386796d6053463a414c565d676d6760594f44382c1f130700000000000000000000000000030a11171c1f25292d2e313335363737363534322f2d2c28231f1c18120d0701000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828f9c988b7e716558525e6876828f9ca99c8f8275695e5246382d22170b000000000b1824313e4b5764717e8a97a4a197887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e272e34404850575f676d737b82898f94938e87827f7b7a797a7e859193877c6f62544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000004090e1114191d202124292c2d2f31333535363736363533312f2d2c2823211e1a15100c0700000000000000000000000000000000000713202d3a4653606d7986929f92857a6d6053473a2e23170b000000000714212d3a4754606d7a8796a19e9285786b554b4035291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f23282b2d2f3234363637363533302d2c29241e1c160f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8796a1978a7d7064574a3d30363e44505c666e7b8684796d60544b4034281c100400000916222f3c4854606b70746f6a635b524940362c20170d020000000000000000000000000000060c1012131413110d07010000020e1a25303b454e5860676d7174767570655a4d4135281b0f0200000000000000000000000714212e3a4754616d7a7e7c7a787776757473737372727272727272727272727272716f6d6867625f58524d453b30251a0e0200000000000000000000020f1b2835424e5b6875818e9baca398897c6f63564c413735393d424b515c606c77818e857b6e74808d9aa6998c807366594d4033261a120e09030000000000000000000000000000000000020f1c2835424f5b6875828e9b9a8d8074675a4d413427333f4953616b7683909da294877a6d6154473a3a444c555d605d554f473d32271b0f03000000000000000000000002080c151c23282c3035393a3e40424344444342413f3c3a38342e2c28231c18130c0400000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9a9a8e817467584e5664717e8a97a19f92867b6e61544a3f33281c0f03000005111e2a36414d566774808d9aa79e918578695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d2328363e454d555c60696e767c82888c91938f8b888786878b9190887f716a5f5342382e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000205080d111314181d20202325272829292a2a2928272522201f1c1814120e09040000000000000000000000000000000000000006131f2c3845515c677783909d988a7d7164544a3f34281c10030000000815222e3b4855616e7b8894a89f928679675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12171c1f20232527292a2a2928262421201d1913100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687885919e998c7f7366564c413529343f4a545f69727f8c7f72665c5145382c1f130800000a1723303d4a5663707d817c736d635b52483e32291e1408000000000000000000000000070c11171c1f2020201d18130c040005111e2a36424d57606a6f797e81838275695c4f4236291c0f0300000000000000000000000713202d3946525e6876828886858382828180807f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7c7a77746f6a615e574d42362a1e12050000000000000000000004111d2a3744505d6a7783909daa9f9286796d6053463a30292c30394045505b656d79848f827673808c99a5988c7f7265594c3f3226190c0200000000000000000000000000000000000000010e1b2834414e5b6774818e9a9a8e8174675b4e4134222d38414f5963707d8a95a095887b6e6255483b323a434b5153514b433d352b21160a0000000000000000000000050d13191e262e34383a4146474a4d4f505050504f4e4b494645403a38342e29241d160d09030000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a969d9184776a605453606d7985929ea3998c7f73665b5044382b1f140900010b14202d3946525e687784909daa9b8e827568574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b1218242c333c434b51575f626b6f767b8084878a8c8e8e8e8e8b88837d716c62584e4330261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070d11131416181a1b1c1d1d1d1c1b1a18161312100c07060200000000000000000000000000000000000000000004101c2834404b556774818d9a9b8e8174665c5044382b1f12060000000815222f3b4855626e7b8895a1a399867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060b10121316191b1c1d1d1d1b1a171413110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414d566875828e9b9c8f8376685d5245392c2e38424d57606d788385796d6053463a3025190d01000713202d3a4653606d7985877f736e635a50443b3025190c02000000000000000000030b12181c23282c2d2d2c29241d160d0a0714202d3a46525e696f7d848a8e8e8174685b4e4135281b0e02000000000000000000000005111d2a36414c56606d7981878d908f8e8e8d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a898784807c756e695e52463a2d2014070000000000000000000005121e2b3845515e6b7884919eaa9d908377665c504438281e20272e343f49535d676f7c878a7e727f8b98a5988c7f7265594c3f3226190c0000000000000000000000000000000000000000000d1a2733404d5a6673808d999b8e8175685b4e423528262f3e4855616b7783909d968a7d7063574a3d313139404547454039312b23190f0400000000000000000000060e171e252a30383f44464c525457595b5c5d5d5c5c5a585653514b46444039352f281f1a140e0600000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919e95897c6f6257515c6773808c97a19e9184786c6053463b31251a0e0007121d28333f4a54616e7b8795a0a2988a7e7164574b3e31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121a212a303940454d535960636a6e73777b7d80818282817f7c766f6b625a50463c321e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607090b0d0e0f101010100e0d0b0907060400000000000000000000000000000000000000000000000000000c18232e3e4b5764717e8a979e9285796d6053463a2d2013090000000815222e3b4855616e7b8894aaab94887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090c0e0f1010100f0d0a070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303e4b5865717e8b989f92867a6d6054473d3326303b44505c66707d897d7164564c4135291d11050006131f2c3845515c67737f8c8c80736c61564c41362a1e140a0000000000000000030c151c23282e34383a3a39352f281f1c130814212e3b4754616e7b859196998a7d7064574a3d3124170a000000000000000000000000010d1925303a45515d676d747b808487898b8d8e8f909191919292929292919190908f8f8e8d8c88827b6e6154483b2e2115080000000000000000000005121f2c3845525f6b7885929ea89c8f827569544a3f342816151d232d38414b55606a74808d857a7d8a97a3988c7f7265594c3f3226190c0000000000000000000000000000000000000000000c1925323f4c5865727f8b989b8e8175685b4e4235281d2c38444f5964717e8a97998c7f7366584e43372b2f35393a39352f281f19110700000000000000000000060f18202930363e424a5053565e61646668696a6a6968676562605c5453514a45403a312a261f180f060000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8b959a8e81746a5f5355606d7a85929ea1968a7d7063574d42362a1d12081118242f3844505b66727f8c99a79f92867a6d6053473a2d2014090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f181e272e343c42474f54585f6266696e717374757574726f6a63605950483f342a200c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3b4754616e7b8796a097897c6f6356493c31261a0e0200000714212d3a4754606d7a8798a3a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8796a0998b7e7165594f44382c28343f4a54606b75828276685e5246392d2013070004101c2834404b55616d7a86928a7e71685e52463d30261c1106000000000000000b151e272e34383f44464745403a312e251c111d2a36414c566774808d979f92867a6d6054473a2d2114070000000000000000000000000008131e2935404b555d60696e73777a7d7f80818283848485858585858585848483828281807f7e7d7b6e6155483b2e2215080000000000000000000005121f2b3845525e6b7885919ea89b8e8275685b4f422e23170b121b262f3a434e58606d7a858d807c8995aa998c7f7366594c403326190d0000000000000000000000000000000000000000000a1723303d4a5663707d8997988e8174675b4e4134281c28333e4955626f7c88959d9083766a5f53473b3126292c2d2c29241d160d0700000000000000000000060f18212a323a414650545c6064686d717375767777767574726f6d6664605c54514b433e36312a2117110a02000000000000000000000000000000000000000000000000000003101c28343f4a54606d7883909892877b6e625b515d67727f8c95a09b8f8275695e5346392e23181319232935404b55606c7884919ea69b8e8175675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151d232831373d43484e5355575e6164666768686765625f58544f473f362d22180e0000000000000000000000000000020507080907070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070604000000000000000000000000000000000714202d3a46525e697784919e9a8d807367574e42372b1e120600000713202c3945525d687985929fa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697784919d9d9083776b6054483c32272e38424f59626f7c877a6d6154473a2e21140700000c18232e3946525e6874818d92857a6e61594f42382e23170b00000000000007121c27303940444a505353514b4340372e1d14202d3946525e687884919e9d908377685d5245392c2013060000000000000000000000000008131e28323a434b51575f6266686d707273757676777878787878787878777776767574737271706e695f53463a2d2114070000000000000000000004111e2b3744515e6a7784919da89b8e8275685b4f4235281c070a141d28313d45525d68727f8c867c8898a2998d8073665a4d4033271a0d0000000000000000000000000000000000000000000714202d3a4753606d79858a8b897e7164584b3e312518222f3b4855626e7b88959f95887c6f62574d42362a1c2020201d18120c0400000000000000000000040e18212a333c444c525a61666d71767a7d80828383838382817e7c7975716d66605d555046423b3328221c140b0300000000000000000000000000000000000000000000000000000b17232e3844505c666e7c8692998f82766d625955606d798391989f92877b6e61554b4034281c1e2429353d45515d67717e8a96a19e94897c6f62554b4035291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181f262b32383c4347484d535457595b5b5b5b5855534e48433d352d241b100600000000000000000000000003090e121415151413110d0805010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10121312100c07000000000000000000000000000005111e2a36424d576774818d9a9e9184776a5f53473a2e211409000004111d2935414c566b7784919ea5988c7f7265594c3f32261907000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576673808d99a095897d7063584e43372b26303d47535f6a6f7c6f685e5246392d201307000007121d2a36414c56626e7b87938f82756b60544a3f34281c120700000000000c18232e39424a51545c60605d555149402f261b212e3a4754616d7a8796a19c8f827569564c4135291d1104000000000000000000000000010d1925303a444c5254575555565e6163656768696a6b6b6b6b6c6c6c6b6b6b6a6a69686767666563615f574d42362a1e12050000000000000000000003101d293643505c6976838f9ca89c8f8275695c4f422e23180c020b161f2935414c56606d79848d8086929f9a8e8174675b4e4134281b080000000000000000000000000000000000000000000613202c3945515d676d7a7d7e7c716c6156493d302414212e3a4754616d7a8799a39a8e8174695f5346392e23181413100d070100000000000000000000020c16202a333c464e565e616c71787e83868a8c8e8f90908f8f8d8b8985817d79726d67615a534d453e332d261d150d040000000000000000000000000000000000000000000000000006111c28343f4a545f6a707e8793948c7f726b60595c666f7c869298998d8073675c5145382c24292f353e47505a606d7984919ea3998f82766a6054433a2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151a21272c31373a3b4246484a4d4e4f4f4e4c4847433c38322b231b12090000000000000000000000060b0f141a1e20212221201e1913110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f201f1c18120b03000000000000000000000000020e1a25303e4a5764717d8a99a096887b6e6255483b3025190e0200010d19242f434f5c6976828f9ca79a8d8174675a4e412e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313c4955626f7c8896a09c8f82766a6054473e30262b37434e58606b6f6b60564c4135291d11050000000d1925303a47535f6975828f93897d70665c5044392e23180c0000000004101c2834404a545c60666d6d67635b5141382d22232f3c4956626f7c8995a89b8e8175685b4e422f24190d0100000000000000000000000005111d2a36414c565e616462605d555c5b5b5a5b5c5d5e5e5e5f5f5f5f5f5e5e5d5d5c5c5b5a59585755534d453b31261a0e0200000000000000000000010e1b2834414e5b6774818e9aa79d9083766a544b4034281c1004040d1924303a45515c66717e8b8585929e9c8f8275695c4f423024190d01000000000000000000000000000000000000000004111d2935404b555e686d71716f6b615a5045392d2113202d394653606c7986929f9f92867b6e61544a4034281c1006040100000000000000000000000008131e28323c454e585f686d757e848b8f92999995918d8b8a898a8b8d8f8e8a847f79716c615f5750443f382f271f160d04000000000000000000000000000000000000000000000000000b17232e38424e58616c717e889292877d706b625a5f6a707d868e918f85796d6053463a2d2f353a41455059616c73808d96a19f92877c6f62584e4331281d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e161b20262b2e31363a3b3e40414242413f3c3a37312c272119100900000000000000000000020a11171c1f252a2d2e2f2e2d2a25201d19130c050000000000000000000000000000000000000000000000000000000000000000000000000000090c151c23282c2d2c28231c150c030000000000000000000000000914212e3a4754616d7a86939f998c7f7266564d42362a1e11050000081a2734414d5a6774808d9aa79c8f827669544b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212e3b47535f6a7784919e9f94887c6f62594f42382e26313c464f59606360594f443a3025190d0100000008131e2b37424d57636f7c89959083786d60544a4034281c110600000006121f2c3844515c666d74797a736d6353493f332724313d4a5764707d8a97a39b8e8174685b4e4135281b08000000000000000000000000000713202d3946525e686d716f6d676a696867666666666666666666666666666666656462605d5655534e46423b332a1f14090000000000000000000000000c1926323f4c5965727f8c98a59e918578665c5145382c1f13060008131e2834404b54606d7984919297a19d9084776a564c4135291d11040000000000000000000000000000000000000000010d18242f3a434c565e61646563605950483e34281d121f2b3744505b657784919ea3998e8174665c5144382c1f120600000000000000000000000000010d1924303a444d575f6a6e7a828a91969c9f95908984807e7d7c7d7e8082858a8f8c857e766e69615a504a423931281f160c0300000000000000000000000000000000000000000000000006111c26303c46505a626c717e879192867d716c605d606b707c8184827e776c605346393a3b41454c515a616b717e8a929d9f958c80736a5f54463d321f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f151a1f21252a2d2e313334353534322f2e2b26201b160f0700000000000000000000020b141c22282b30363a3b3c3a3936302d2a251e170e0900000000000000000000000000000000000000000000000000000000000000000000000009121b1e272e34383a38342e271e150b0000000000000000000000000713202d3946525e687783909d9d908376695e52463a2d20140800000b1825313e4b5864717e8b97ab9e918477665c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5866737f8c99a39c8f82766b61544a3f34282a343d474f5456544f473d32281e130800000000020e1a26313c4854606b768390958b7e71665c5144382e23170b000004101c2834404b54606d788186867f73655b5044372b25313e4b5864717e8b97a49b8e8175685b4e4235281b0f020000000000000000000000000714212e3a4754616d7a7e7c7a787776757473737372727272727272727272727272716f6d6867625f58524d453b30251a0e0200000000000000000000000a1723303d4a5663707d8996a89f9386796d6053463a2d20130700020c18232e3945515c66737f8c98a1a99f928578685d5245392c20130700000000000000000000000000000000000000000007131d28313a444c5254575856544f473e362d22170f1b27333f49536875828f9bab9f9286796d6053463a2d2013070000000000000000000000000005111d2935414c565f696e7c848f949ea19c928c837c777471707070717376797d82878e8b827b716c605b544b433931281e150b020000000000000000000000000000000000000000000000000a141e2a333e48505a626c717d858f92867e746d6760606a6e757776716c655b50444246484c52555d606c707d86929fa0959083786d60584e43342b200d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090f12141a1e21212426282828282522211f1b150f0a0400000000000000000000000a141d262d33383b424648484746413a39363029201b120a02000000000000000000000000000000000000000000000000000000000000000000020b1b242d303940444644403930271c1207000000000000000000000005111d2935414c566673808c999f93877b6e6154473b2f24190d01000916222f3c4955626f7c8899a39f9286796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4754616e7b86929f9f948a7d70665c50443b30252b353d43484948433d352b20160c02000000000009151f2c38444f5964717d8a969184796d60544a3f34281c10030006131f2c3845515c6673808c929184786c605346392e23323e4b5865717e8b98a49b8e8275685b4f4235281c0f020000000000000000000000000713202d3946525e6876828886858382828180807f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7c7a77746f6a615e574d42362a1e120500000000000000000000000714212e3a4754616d7a8796a0a499887b6f6255483c2f221508000007121d2834404b54616d7a86929faca297877a6d6054473a2d211407000000000000000000000000000000000000000000010c161f28323a4146474a4b4948443d352d241b100b17222d3f4c5865727f8b99a3a197877b6e6154483b2e211508000000000000000000000000040f19222d3946525d686e7b8591969ea59c918c80786f6b67646363636466676d71757c818790857e746c665c554b433930271d140a000000000000000000000000000000000000000000000000020c18212c363f48505a616b707a828b928b8179716c666062686a6964605b53494f4d5354565d60676d747e8692989e9691837a6d665c50463c3222190f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090e121415171a1b1c1c1b191515120f0a0400000000000000000000000006111c262f383f44464d52545554524c4746413a322d241c140a0200000000000000000000000000000000000000000000000000000000000000000a141d2d363f424a5153514a42392e23180c0100000000000000000000010d1925303c4956636f7c8997a29a8b7e7265564c4135291d1104000713202d3a4653606d7986929fa399887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202d3946525e6875828f9ba69d9183786d60564c41362a232b32383b3c3b38322b23190e04000000000000030f1b27323d4653606c788491968b7e71665c5044382b1f160b000713202d3a4653606d7985929e96897c6f63554b403428323e4b5865717e8b98a49c8f8275695c4f4236291c0f0300000000000000000000000005111d2a36414c56606d7981878d908f8e8e8d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a898784807c756e695e52463a2d20140700000000000000000000000713202d3946525e687784919eab978b7e7164584b3e2f24190d0100000c18232e3946525e6874818e9ba9a995897c6f6256493c2f23160600000000000000000000000000000000000000000000040d1620283036393a3e3e3c3b38322b231b12090614212e3b4754616e7b86929d9d9285796c605346392d2013060000000000000000000000000a16202c38444f59616d7a849197a1a89e938c7f736c6660595857565758555c60646a6e757c838c8a80786d675d554b43392f261c1106000000000000000000000000000000000000000000000000060f1a242d363f48505960686e777e858d8e857e78726d676562605c545c5b5b5c575e6164686d727a818a92989f948f847b6e685e544a3f342a20100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0d0e0f0f0e0c0908060300000000000000000000000000000b17222d38424a5053575e6162615e5654524c443e362e261c140a0100000000000000000000000000000000000000000000000000000000000006111c262f3f4850545c605c544a4034281e130800000000000000000000000813202d3a4653606d7985929f9c8f8276685d5245392c2013070006131f2c3845515c677783909dab978a7d7164574a3e3124170800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414d5663707d89949fa0958c7f72685e52463d2f2621272c2f302f2c272119100700000000000000000a161f2b3844505b66727f8b979184786d6053463d33271c10030916232f3c4956626f7c8997a29a8d8174675c5145382c313e4b5864717e8b97a49c908376695d5043362a1d0800000000000000000000000000010d1925303a45515d676d747b808487898b8d8e8f909191919292929292919190908f8f8e8d8c88827b6e6154483b2e211508000000000000000000000005111d2935414c566874818e9ba79a8d807467564c4135291d1104000007121d2a36414c5663707d8997a1a4978b7e7164584b3e2d22170b0000000000000000000000000000000000000000000000050e161e252a2d2e3132302f2c2721191109000714202d3a46525e69727f8b90908c7f72665b5044382b1f12060000000000000000000000030f1b27323c4854606b75818e96a0a9a2978e81756d605b544f4b4a494a4b4b5153585f626a6f7880878d81796d675d554b42382d2217100600000000000000000000000000000000000000000000000008121b242d363e474f565e656c717a80868d8b847f7a75726e6d6669686868696a696e71757a7f858e939f98928c827a6e695e564c42382e22190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b6065696e6f6d6866615e56504840382e261c13090000000000000000000000000000000000000000000000000000000000000b17222d3842505a62666d665c51443a2f24190d000000000000000000000006121f2b3844505c6675828e9b9f92867a6d6054473a2f24180c0004101c2834404b556773808d9aa6998c807366594d403025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303b4854606b7683909ca69f92857a6e61584e41382d221b1f2223221f1b160f07000000000000000000030f1c28333f4a54606d798592968a7e7164594f44382c2015090c1825323f4b5865727e8b98a99f9285796d6053463b30313e4a5764717d8a97a49d9084776a5d51442f24190d010000000000000000000000000008131e2935404b555d60696e73777a7d7f80818283848485858585858585848483828281807f7e7d7b6e6155483b2e2215080000000000000000000000010d1925303e4b5864717e8b97a89d908377685d5245392c2013060000000d1925303a4653606d7985919ea79a8d80746753493f33271b0f030000000000000000000000000000000000000000000000050c13191d202124252322201b160f07000005111e2a36424d56636d727f83837f776c60544a3f33281c0f03000000000000000000000006131f2b37434e5863707d89939ea8ab9e92857a6d615b504a423e3d3d3d3e4045474e535860666d737d858f82796d675c544a3f332822180d0300000000000000000000000000000000000000000000000009121b242c353d444c535b60686d737b80858b8b85827e7b7977767575757676787b7e82858c919799928d867f776d685e564d443a30261c100700000000000000000000000000000000000000000000000000000000000000040607090706040100000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c1112100a0a08040000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c72777b7b7a78736d68625a524a40382e251b110700000000000000000000000000000000000000000000000000000000030f1c28333f4a54626c71796d60554c4135291d12070000000000000000000003101c28343f4a5464717e8b9aa3998a7e7164554b4035291d1004000c18232e3d4a5764707d8a97a79c8f827569564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2c38444f5963707d89949fa2988e81746a6053493f33271c11151615130f0a0400000000000000000000000b17222d3845515d6773808c989083776b6054483c31261a0e0d1a2734404d5a6773808d9aa6a2978a7d7164564d4236313d4a5764707d8a97a39e9185786b564c4135291d110400000000000000000000000000020c18242f39434b51575f6266686d707273757676777878787878787878777776767574737271706e695f53463a2d2114070000000000000000000000000815212e3b4854616e7b8796a09f92867a6d6054473a2d21140900000008131f2b3844505c6674808d9aa99c908376655b5044372b1f120500000000000000000000000000000000000000000000000002080d11131417181615130f0b04000000020e1925303b44515b636d727777726c655b5042382d22170b0000000000000000000000000815222e3b4754606a7683909ca5afa3998c7f73685e52443f382f3030302f34383c43474e545c606b707b838f82796d665b50443e342a1f150b0100000000000000000000000000000000000000000000000009121a232b323b414950565e61696e73797e83868b8b88868483828182828385878b8e9298928f8b86807a726c655d564d443b32281e150a000000000000000000000000000000000000000000000000000000000001070c101314151413100d07010000000000000000000000000000000000000000000000000000000000000000000000060d121518191d1e1c171614100b05000000000000000000000000000000000000000000000000000000000814202d39444f59606c787e8487888784807a716c635c524a40372d23190e0500000000000000000000000000000000000000000000000000000006121f2b3844505b66717e8074675d5145392e23180c01000000000000000000000b17232e3b4754616e7a87939f9b8e8275675d5145382c1f1306000714212e3a4754616d7a8795a09e918478685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c27323d4854606b7683909aa49f93877c6f655b5044382d22170b090907030000000000000000000000000006111c2935404b55616d7a869295897d7063574e42372b1e13081b2835424e5b6875818e9ba8a99c8f8275695e5246382d3d4a5663707d8996a39f928679685d5245392c201306000000000000000000000000000007121d27313940454d5355565e6163656768696a6b6b6b6b6c6c6c6b6b6b6a6a69686767666563615f574d42362a1e12050000000000000000000000000714202d3a46525e697784919ea3998a7d7063574a3d31261a0e02000003101c28343f4a54626f7c8997a19f9285796c605346392d2013060000000000000000000000000000000000000000000000000000010507070b0b0909070300000000000009141f29323f49515b62656a6a66605b53493f2f261c11060000000000000000000000000916232f3c4956626f7c89949fabac9f92867a6e61564c41332d2624232423292c31373d424a515960696e79828f81786c605a50463c31271d12070000000000000000000000000000000000000000000000000009111920292f383f444c52575e61676d71767b7e8285878a8c8d8e8e8f908f8f8e8d8b8886827e7a746d68605b534c443b322920160c0300000000000000000000000000000000000000000000000000000000030b12181d1f202220201d18120b060000000000000000000000000000000000000000000000000000000000000000010911181e2224252a2b292423201c170b060000000000000000000000000000000000000000000000000000000a1623303c4955616c75818b91919092918d857e736e635c52493f352b20160c0200000000000000000000000000000000000000000000000000000613202d394653606c7885867a6d60554b4034281d1207000000000000000000000614202d3946525e687683909d9f9285796d6053473a2e23170b000713202d3946525e687784909da196877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c38444f59626f7c87939fa49a9083786c60544a3f33281c0f0300000000000000000000000000000000000c18242f3946525e6874818e9a8f82756a5f53473a3024190d1c2936434f5c6976828f9ca9a29e92867b6e61544a3f333c4956636f7c8996a2a398877a6d6054473a2d2114070000000000000000000000000000010b151f272f353c4247484c525456585a5b5c5d5e5e5e5f5f5f5f5f5e5e5d5d5c5c5b5a59585755534d453b31261a0e0200000000000000000000000005121e2a36424d576774818e9aab9a8d807467574d42372b1e12060000000b17232e394653606c7985929ea298887b6e6155483b2e221507000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202e373f495156585d5d5953504941382d1d140a00000000000000000000000004111d2935414b556773808d9aa6b0a99c8f8376685e52443a30221c141617181c1f262b303940444f565e676d79828d80736c61584e43392f23180c0300000000000000000000000000000000000000000000000000070e171d262d333a41464d52555d6065696e7175787b7d7f8082828383838281807e7c7976716d68615e565049413a322920170e0400000000000000000000000000000000000000000000000000000000070d151d24292c2d2f2d2c29241d17110a0200000000000000000000000000000000000000000000000000000000000009131b23292e313237383631302d282217110a02000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a938f8483868f94928b80736e635b51473d32281e130800000000000000000000000000000000000000000000000000000815222e3b4855616e7b888c7f72675c5145392f24180e0500000000000000000005111e2a36414c5666737f8c99a2988a7d7064544a3f34281c100305111d2a36414c566773808d9aa896897d7063564a3d302317080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27333d4754606a74808d96a09f958a7e71665b5044382b1f1206000000000000000000000000000000000007121d2a36414c56626e7b879393877b6e62564c4135291c111d2a3743505d6a7683909da29792938c7f72665b5044383b4855626e7b8895abaa95887b6e6255483b2f221508000000000000000000000000000000030d151d242931373a3b4146474a4c4d4e4f505151525252525252525151504f4f4e4d4c4b4a4846423b332a1f140900000000000000000000000000020e1a25303d4a5764707d8a99a39e918477695f53473a2e21140700000006121f2b3844505b6675818e9baa978a7d7164574a3e2e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1c252e373f464a4b50504c46443f382f261b0b020000000000000000000000000613202c3945515d677784919daab2a6998c7f7366564c4132281e110a0a070c10151a1e272e343d444d555d676d79828a7e716a5f554b4034291e150b0000000000000000000000000000000000000000000000000000050b141b222730353b42464b5153565e616568696e7072747576767676757473716f6d6765615d56524c443f382f2820170e05000000000000000000000000000000000000000000000000000000000710191f272f35383a3c3a39352f27221b140b020000000000000000000000000000000000000000000000000000000008121b252d343a3e3f4445433d3c393327221b140b020000000000000000000000000000000000000000000000000e1b2835414e5b6874818e8f8278767b828e93928d80736d62594f443a3025190d03000000000000000000000000000000000000000000000000000915222f3c4855626f7b889184796d60554b40352920170d030000000000000000010d1925303c4955626f7c8896a19b8e8174665c5044382b1f1206010d1925303d4a5663707d8998a3998c7f7366594c403025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b37434e58606d79849198a29d9184786c605346392d2013060000000000000000000000000000000000010d1925303a47535f6975828f9a8d8174685d5245382e23171d2a3744505d6a7783909d9e9285879184786c6053463b3a4754616d7a8799a3a396897d7063564a3d3023170a00000000000000000000000000000000030b12181f262b2e3036393a3d3f40424343444545454545454545444443434241403f3e3d3b3a36312a21180e0300000000000000000000000000000914212d3a4754606d7a86929fa096887b6e6255483b2f24180d010000030f1c28333f4a5464717e8a97a8998d807366554b4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c252d343a3d3f44443f3937332d261d140a000000000000000000000000000714212d3a4754606d7a86939facb0a396897d7063564a3d3023160c00000000040a0c151c2328323b434c555d676d7983867c6f675c51453d30271d12070000000000000000000000000000000000000000000000000000020a11171e25293036394045474d525458575e616465676869696a696868676462605c5554524c46413a332d261d160d0500000000000000000000000000000000000000000000000000000000030c19222b31394045474847454039332d261d140a00000000000000000000000000000000000000000000000000000006101a242d373f464a4c50514f4a49443e332d261d140a000000000000000000000000000000000000000000000000101d2a3643505d69768390887c6f696e78818e93928b7f726b60564c41362a1f150b010000000000000000000000000000000000000000000000000714212e3a4754616d7a87968b7e72675d51453d32291f150b0100000000000000000815212e3b47535f6a7884919e9e9285796d6053463a2d20130a000814202d3a4753606d7986929f9b8f827568564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1b27323d45515d676f7c869298a096897d706356493d3023160a00000000000000000000000000000000000008131e2b37424d57636f7c899592867a6d60544a3f34281c1e2a3744515d6a7784909d9e91848390897d7063574d423946525d687986929fa4978b7e7164584b3e3125180b000000000000000000000000000000000001070c151a1e21252a2d2e303234353637383838383939393838383737363534343332302e2d2a261f180f060000000000000000000000000000000613202c3945515d6776828f9ca8988b7f7265554b4035291d10040000000b17222d3b4754616e7a8796a09c908376675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131b23292e31323737332d2b27221b140b02000000000000000000000000000916232f3c4956626f7c899aa4afaea194877b6e6154483b2e211508000000000000030b12182029313a434b555d676e7b8583796d60594f43392e23180c02000000000000000000000000000000000000000000000000000000060b13191f252a2f35393b4246474b4d525457595a5b5c5d5d5c5c5b5a585553514b4746413a363027221b140b0400000000000000000000000000000000000000000000000000000000000b151e2b343d434b51535553514b443f382f261b110600000000000000000000000000000000000000000000000000000c17222c363f495156585d5e5c575550443f382f261b11060000000000000000000000000000000000000000000000101d2a3643505d6976839086796d60666d77818e9492877d70685e52463e31271d12070000000000000000000000000000000000000000000000000713202d3946525d687885919184796d60584e443a31271d1207000000000000000006131f2b37434e586774818d9aa197897c706356493d32261b0f0306131f2c3845515c6776828f9c9e918478685e5246392d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202935404b555f6a707d8691969a8c7f7265594c3f3226190c000000000000000000000000000000000000020e1a26313c4854606b768390988c7f72665c5044382b1f1e2a3744515d6a7784909d9f92857f8c8f8275695e524639414c566b7884919ea6998c807366594d4033261a070000000000000000000000000000000000000003090e1214191d202123252728292a2b2b2b2c2c2c2c2c2b2b2a2a2929282726252422211e1a140e060000000000000000000000000000000004111d2935414b5565727f8c98a89c8f8276675d5145392c2013060000000614202d3946525e687784919e9f9286796d6053463a2d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d2224252a2a26201f1b17110a0200000000000000000000000000000a1723303d4a5663707d8996acb6ada093877a6d6054473a2d2114070000000000000000070e171f283039434c555f69707d8780746b60554b4034281f14090000000000000000000000000000000000000000000000000000000002080d141a1d24292c30363a3b3e4246484a4c4d4f4f5050504f4e4d4b494745403a3935302a251e17110a02000000000000000000000000000000000000000000000000000000000007121d27303d464e555d6062605d55504941382d22170b0400000000000000000000000000000000000000000000000005111d28343e48515b62656a6b6964615a504941382d22170b00000000000000000000000000000000000000000000000f1b2835424e5b6875818e867a6d605c656d78828f9691857a6d615a5043392f24180c02000000000000000000000000000000000000000000000005111d2935414c566874818e968d80736a60564c43392f24180c0000000000000000030f1b26323d4a5663707d8998a29a8d807467584e43372b1f130604101c2934404b5565727f8c98a196877a6e6154473b2e2114060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18242f3a434e58606b707d848a8c887c6f6256493c2f231609000000000000000000000000000000000000000915202c38434f5964717d8a969184786d6053463c31261a2a3744515d6a7784909d9f92867c8892877b6e61544a4044505d6a7783909da79b8e8174685b4e412e23180c0000000000000000000000000000000000000000000206080d11131417191a1b1c1d1e1e1f1f1f1f1f1f1f1e1e1d1c1c1b1a1918171514120e09030000000000000000000000000000000000010d18242f3b4855626e7b8896a09f92867a6d6053473a2d22170b00000005111e2a36414c566774818e9aa398897c6f6356493c2d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c121518181d1d1913120f0b06000000000000000000000000000000000b1724313e4a5764717d8a97a4b0ada093867a6d6053473a2d201407000000000000000000050d161e27313a434d57606b7380897d70675c51453b30251a0e02000000000000000000000000000000000000000000000000000000000002090e12181d20252a2d2e30363a3b3d3f4142434343434241403e3c3a38342f2d29241e19130b06000000000000000000000000000000000000000000000000000000000000000c18232e39434e5860676d6f6d67605b53493f332721160b0000000000000000000000000000000000000000000000000814212d3945505a626d72777876706c605b53493f33271b0f03000000000000000000000000000000000000000000000b1825323e4b5865717e8b897c6f63585c666d7a8491978e81756c61554b4035291f14090000000000000000000000000000000000000000000000010d1924303d4a5764707d8a9692877c6f685e554b4035291d100400000000000000000a13202d3a4653606d7985929f9e9184786a5f53473b2e211509000c18232f3b4855626e7b8896a0968a7d7063574a3d2e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313c464f59606b6f797d7f7d6f6a6054483b2e22150900000000000000000000000000000000000000030f1b27323d4653606c788491968a7d7064584e43372b1e2a3744505d6a7783909da399867984918c7f73665c5144424f5c6875828f9ba89c90837669554b4034281c10040000000000000000000000000000000000000000000000010507070a0c0d0f1010111212121212121212111110100f0e0d0c0b0a0807050200000000000000000000000000000000000000000714212e3a47535f697784919ea3988a7d7064544a3f33281c0f030000010d1925303e4b5864717e8b97a8998c7f7266544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c11110c0605030000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0ada194877a6e6154473b2e21140800000000000000000000040c151f28313b454f59606d788384796d60574d42362a1f14080000000000000000000000000000000000000000000000000000000000000001070d1014191e2021252a2d2e3132343536363736353534312f2d2c2923201d19130d08020000000000000000000000000000000000000000000000000000000000000004101c2834404b55606a6f797b7a726c655b50443d32271b100500000000000000000000000000000000000000000000000a1723303d4955616c727f8384827d746c655b5044372b1f1205000000000000000000000000000000000000000000000714212d3a4754606d7a858d81746a5f565d68707d8993938a7e71675d51453b30251a0e0300000000000000000000000000000000000000000000000813202d3a4653606d7884919991847a6d675d5145392c1f1306000000000000000006131f2c3845515c6675818e9ba196887c6f6255493c31261a0e100714212e3a47535f6a7784919e998c807366544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343d474f5960676d71726f6b60584e43382c1f110e09030000000000000000000000000000000000000a161f2b3844505b66727f8b978f82766a5f53473a2f242a3743505d6a7683909dab94877a808d9184796d605346404d5a6773808d9aa69e918478675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576773808d9aa99b8e8174665b5044382b1f12060000000815222e3b4855616e7b8896a19c8f8275665b5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a9b3aea195887b6e6255483b2f2215080000000000000000000000030d161f29333d44515c666f7c878073695e52463b3025190e0200000000000000000000000000000000000000000000000000000000000000000104090e1114141a1e202124262728292a2a292928272522201f1c1813110d080200000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676f7d8588857f776c60594f44382c21160b00000000000000000000000000000000000000000000000b1824313e4b5764717e8a90918f8a80776c605346392d201306000000000000000000000000000000000000000000000613202c3945515d67727f8c867c6e685e56606b74818e989184796d60574d42362a1f1509000000000000000000000000000000000000000000000006121f2b3844505c66717e8b94969083796d6053473a2d20140700000000000000030c151d2834404b5464717d8a98a3998c807366574d42362a1e1d1d1d1c1e2b37424e576774818d9a9c8f8376665c5044382b1f1207010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222b353d464f555c6064666360594f463d3228231c1a150e060000000000000000000000000000000000030f1c28333f4a54606d79859294887c6f62554c4135292a3643505d697683909ca194887b7c88958a7e7164584e434b5865727e8b98a59f9386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313d495663707c8997a29e9285796c605346392d2013090000000714212d3a46535f697884919e9f9285796c605346392d2013070000000000000000000000000000000000000000000000000000000000000000000003050607060300000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8797a1adb0a4978a7d7164574a3e3025190e000000000000000000000000040d18212834404a54606a7481867b6e61564d41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000020507090e12141517191a1c1c1d1d1d1c1b1a18161413100c07050100000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79849197928c80736b6054483d33271c1000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9a9e9c928b7f7265584b3f3225180c0000000000000000000000000000000000000000000004111d2935414c55606d78828f837a6d685f59616e7a8592968c8073695e52463c31261a0e030000000000000000000000000000000000000000000003101c28343f4a54606c77829097958c7f7265594c3f3226190c000000000000000b151e272e343a4753606d7a86929f9d908377695f53463a2d232a2a29292926313d4a5763707d8a989f9285796d6053463a2d2018120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a232b343d434b5153575956544f473d3a38342e2b261f180f0800000000000000000000000000000000000b17222d3845515d6773808c988d8174675d5145382d2236434f5c6976828f9ca295887c7783909083766a5f5347495663707c8996aaa49a887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913202d3a4653606d7985929fa197897c6f6356493c31261a0e02000005121e2a36424d576875818e9ba297887c6f6255493c2f24180c0000000000000000000000000000000000000000000000000000000000000105060b0f12131312100b060000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687885929eabb3a6998d807366564c41362a1b1106000000000000000000000000060f18232e39424e58616d7a858174685e5246392d201407000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0c0e0f101010100f0e0d0b090706040000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a19f92897d7063594f44382c1c1207000000000000000000000000000000000000000000000b1824313e4b5764717e8a939d9f9d9184776a5e5144372b1e1104000000000000000000000000000000000000000000010d19242f3a44505c666d798390837a6e69615e68737f8c9792867b6e61574d42372b1f150900000000000000000000000000000000000000000000000b17232e3844505b656e7b858e8f877c6f6255483c2f22150900000000000007121d273039404546515d6775828f9ca095887b6e6155483b342e373736363535353a4753606d7986929f98887c6f6255493c2f29241d1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a222b30394045464a4c494845464746443f3837312a211a12080000000000000000000000000000000006111c2935404b55616d7a869292867a6d6053493f332736424f5c6975828f9ca396897d727f8b94887c6f62564c4854616e7b8798a2ac968a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6675818e9ba9998d807366574d42372b1e12050000020e1a26313f4b5865727e8b98a9998c7f7266554b4035291d100400000000000000000000000000000000000000000000000000000002080d1114171b1f20201f1c17110d080200000000000000000000000000000000000000000000000000000000000005111e2a36414c566875818e9baab4a99c908376685e5246382d22170b0000000000000000000000000007121c27303c46525e687380877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a197929083776b605448392e23180c000000000000000000000000000000000000000000000613202d394653606c77818a9095999185786b5e5245382b1f12050000000000000000000000000000000000000000000008131e28343f4a545d676e7a838f847b716c61606d798592988e8174695f53473c31261a0e020000000000000000000000000000000000000000000006111c27333f49535e696e7b81827e706a5f53473b2e2115080000000000000c18232e39424b5153575564717e8b99a3988c7f7265564c454044444343434242424145515d6775828f9c988b7f7265584c3f39352f2a251f170f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810191e272e34383a3e43484b51535453504a47423c332c241a1108000000000000000000000000000000000c18242f3946525e6874818e988b7f72655b5044372b35424f5b6875828e9ba4978a7d717a86928e8174685e524653606c7985929fa5988c7f7265594c3f32261908000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5464717e8a99a39d918477695f53463a2d2114080000000915222f3b4855626e7b8897a19c8f8276675d5145382c1f13060000000000000000000000000000000000000000000000000002080d14191e2022272b2d2d2b28231c19130c050000000000000000000000000000000000000000000000000000000000010d1925303e4b5864717e8b98a2aeac9f93867a6e6153493f33271c1106000000000000000000000000000b151e2a36414c56616d7a7c6f685e5246392d20140700000000000000000000000003060708080605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9a9e928585897d7063544a4034281c100400000000000000000000000000000000000000000005121f2b3744505b656c747d838788877f7265594c3f3226190c0000000000000000000000000000000000000000000000010b17232e38424b555e686e79828c867e756e6867727f8c9792877b6e61574d42372b1f140900000000000000000000000000000000000000000000000b17222d38414d575e696e7476706c61584e43372b1f1206000000000004101c2834404b545c606462616d7a86929f9c908376685e53514b515050504f4f4f4e4e4e4b5565727e8b989b8e827568574d474540393630292119110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151d2328333d474f54555c6061605c54534d453e362c23190f0500000000000000000000000000000007121d2a36414c56626e7b87939184786c6053463b3034414e5b6774818e9aa5988b7e7274818e92867a6d61554b505b657783909da79a8e8174675b4e413025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3a4754606d7a86929fa095887b6e6155483b3025190d0100000814212e3a47535f697885919e9f9286796d6053473a2d201409000000000000000000000000000000000000000000000000060b13191e252a2d2d3337393a38342e2a251e160e0500000000000000000000000000000000000000000000000000000000000814202d3a4753606d7a85929fabafa4998b7f72655b5044382e23170b02000000000000000000000000030c1925303a46525e686d6f6b60564d41362a1e110500000000000000000000060b101213151513120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9b978a7e7d8a8175665c5144382c1f1206000000000000000000000000000000000000000000030f1b27333f49535b606c70767a7c7a726d62574a3e3125180b00000000000000000000000000000000000000000000000006111c26303a434c565e676d787f878a817b726d6d7a8592998e8174695f53473b30251a0e010000000000000000000000000000000000000000000006111b262f3b454d575e61686964615a50463c32261b0f03000000000006131f2c3845515c666d706f6d6876828f9c9f93867a6d61605c545e5d5d5c5c5c5b5b5b5b5a5a616e7b87959e918578695f5653514b46423b332b23190c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1a25303b454f596063676d6e6d66625f5750483e352b21160b000000000000000000000000000000010d1925303a47535f6975828f96897d7063574d423634414d5a6774808d9aa5998c7f726f7c89958c8073675d5149536774818e9aa79c90837669564c41362a1d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d6876838f9ca7988c7f7265564c41362a1d1105000006121e2b37424d576875818e9ba398897d7063564a3d30251a0e02000000000000000000000000000000000000000000020a11171e25293036393b3f444646443f3836302820160c02000000000000000000000000000000000000000000000000000000000613202c3945515d6774818d99a3aeab9d9184786c60544a3f34281d140a0000000000000000000000000008131e2935414c565e616360594f443b3025190e020000000000000000020a11171c1f202221201f1b17110b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9b95887c788585796d6053463a2d201307000000000000000000000000000000000000000000000b17222d384149505a6164686d6f6d68625b51463a2e221609000000000000000000000000000000000000000000000000000a141e28313b444c555d666c737c838c857f787073808d9992877b6e62574d42362a1d130a03000000000000000000000000000000000000000000000a141d29333b454d52545b5c575550483e342a20150a0000000000000713202d3a4653606d797d7c7a79777e8b98a4998b7e716e6d666b6a6a6a69696868686867676767697783909d97887b6e6462605d55524d453d352b1e150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57606b6f76797a79756e69615a50473d33271c100200000000000000000000000000000008131e2b37424d57636f7c89958f8275695e5246392e404d5a6673808d99a69a8d80736a7683909285796d60544a5865717e8b98ab9e928578685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5665727f8c98a89c908376685e5246392d2013070000020e1a26313f4b5865727e8b98a89a8d807367574d42362a1e12050000000000000000000000000000000000000000060b141b222730353b41464749505353504a46413a32281e13080000000000000000000000000000000000000000000000000000000004111d2935404b55616e7b86929fa9aca0968a7d70665c50443b2f261c1106000000000000000000000000020d1925303a444c525456544f473d32291f14080000000000000001090c141c23282b2d2f2e2d2b27221b17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9b95887b7582897c6f6356493c302316090000000000000000000000000000000000000000000006111b262f383f445055565e6162615e5651493f35291e120600000000000000000000000000000000000000000000000000020c161f29323b434b545b606a6f797f858c847d767a8692998e8174695e52463a2f241c150c07010000000000000000000000000000000000000000020b172129333b4246484e4f4a49443e362c22180e040000000000000613202d394653606c79858887858483909dab9c8f827b7a797978777776767675757574747474747474808c99978b7e72716f6d67615e574f473d30261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e696f7d83868785817b716c61594f44382c1e1308000000000000000000000000000000020e1a26313c4854606b76839092877b6e61544a40343f4c5966727f8c99a59b8e817468717e8a968b7e72665c5055626f7c8899a3a297877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303b4855616e7b8896a09f92867a6d6154473a2f24180c0000000915222e3b4855616e7b8896a19d908377695e52463a2d20140700000000000000000000000000000000000000080f181d262d333a41464c5254535b60605c54524c443a3025190d01000000000000000000000000000000000000000000000000000000010d18242f3a46535f6974818d97a1ada89d9083786d60574d42382d2217120701000000000000000000000008131e28323a4146474948443d352b20170d02000000000000010a131b1e262e34383a3b3b3937332d27221b140b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9a95887c727f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000a141d262d333e44494c5254555a54524c443b3025190e020000000000000000000000000000000000000000000000000000040d1720293139424a50585f666d727a81868a837c818e9b92867b6e61554b40352e261e18130c040000000000000000000000000000000000000000050f17212930363a3b41433d3c39332c231a10060000000000000005121f2b3744505b6573808d9492919095a0ab9f948f8887868585848383838282828181818181808080828f9c9c90827f7e7c7a756e6960594f42382e23170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b86909398928e867e716b6054483a3025190d010000000000000000000000000000000915202c38444f5964717e8a968c8073665c5144383f4c5865727f8b98a59b8f8275686d7884919184786d605353606d7986929fa996897c6f6356493c30231606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090d0f0814212d3a47535f697784919da3998b7e7164554b4035291d100400000814212d3a47535f697884919ea095877b6e6154483b2f23180c0000000000000000000000000000000000010a111a212a2f383f444c52565e6166656c6d66615e564c41362a1d11050000000000000000000000000000000000000000000000000000000007131d2a36424d57616d7a85929ea5aca0958b7e72695e544a3f33282418120b0300000000000000000000020c1620283035393a3c3b38322b23190e05000000000000000a131c252d30383f4446484846443f38332d261d150d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9a96897d707d8a8174675b4e4134281b070000000000000000000000000000000000000000000000020b141b2227333a444c555d6067615e564c41362a1e1105000000000000000000000000000000000000000000000000000000050e171f282f383f444e545c60686d747b81878984919e998d8073675d51453f383029241d160d070000000000000000000000000000000000000000050f171f252a2d2e353631302d28221a11080000000000000000030f1b27333f4953606d79828c92979b9ea1a9a69f9c95949892919190908f8f8f8e8e8e8e8d8d8d8d8d8f949e9f94908b8b8986817b706b60544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b989fa29f9892877d7063564c41362a1d1105000000000000000000000000000000030f1b27323d4653606d7884919185796d6053463c3e4b5864717e8b97a49c9083766966727f8b968a7e716459515c667783909da5988b7e7265584b3f2e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f131516191b16151e2b37424d576773808d9aaa9b8f8275675d5145382c1f1306000006121e2b37424d576774818e9aa7988b7e7265554b4034291c1004000000000000000000000000000000010a131c232c333b414950565e61686e72767979756d685e5246392d20130700000000000000000000000000000000000000000000000000000000010e1a26313b46525d68717e8a939da6a79e92857b6e665b50443f3629241d150d0903000000000000000000040e161e25292d2e302f2c27211911070000000000000006101c252e373f424a50535554535049443f382f271f150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99978a7e717b8883766a5d50432e23180c000000000000000000000000000000000000000000000000020a111e2a36414c565e676d746e685e5246392d20140700000000000000000000000000000000000000000000000000000008111a20283036393c424b51565e61696e757c82898f949f92857a6d6055504a423d352f281f1910060000000000000000000000000000000000000000050d141a1e202128292423201c171008000000000000000000000b17222d3845515d676d787f858a8e92979ca4aba8a09d9d9e9e9d9d9d9c9c9b9b9b9b9a9a9a99989796959fa39f96918f8e8d8c857d70665c5044382c1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a0a8aaa299918477685e5246392d201307000000000000000000000000000000000a161f2b3844505c66727f8b978a7d7164584e433e4a5764717d8a97a49d9084776a606d7a85929083776b6054546774818d9aa79a8e817467544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151b1f2122262823221f26313d4a5663707d8998a29f9285796d6053473a2d20140a0000020e1a26313e4b5764717e8a9aa49c8f8275675c5145382c1f13060000000000000000000000000000010a131c252d353e454d535b60686d737a7f838686817a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000009141f2935414c56616c74818e949fa7a2978f82786c605b51483f352f271f1a140f0b060502000000000000040c13191d20212322201b160f0700000000000000030e18222e37404951545c606261605b535049413931271e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97988c7f727a8785786b554b4034281c10040000000000000000000000000000000000000000000000000713202d3946525e686d79807a6e6154473b2e211408000000000000000000000000000000000000000000000000000007101a232c323a4146474c4f504c52575f626a6f757c828f98978b7f7267605c544f45403a312b2217110a020000000000000000000000000000000000000003090e1214151b1c171614100b05000000000000000000000006111b2935404b555d666d72797e82858d929ca8a0969190919192929291919191908f8f8e8d8c8b8a898892999e9184828180807f7f796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798491969fa2a9a095877a6d6154473a2e2114070000000000000000000000000000000003101c28343f4a54606d7a85928f83766a5f53473d4a5763707d8a96a39e9185786b5d6773808d95897d7063585864717e8b97a89d908377665c5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121820262b2e2f33352f2e2c272d3a4753606d7986929fa2988a7d7063574a3d31261b0f0300000914212e3a4754616d7a87939f9f9286796d6053473a2d22170b00000000000000000000000000000a131c252e373f474f575f656c727a80868c90908a857e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000030d1924303a44505a606d79829095a0a79f948d80736d625a51454039312a251f1b1714120e0903000000000002080d1113141615130f0b0400000000000000000a15202a34404a525b62666d6e6e6c65605b534b433930271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001091623303c4956636f7c89969a8d807479868679675c5145382c1f13060000000000000000000000000000000000000000000000000714212e3a4754616d7a848b7f7265584c3f3024190d01000000000000000000000000000000000000000000000000030c19222c353e444c5254595c5d5c5a5753585f626a6f7986929d918479726d666059514b433d3428231c140c030000000000000000000000000000000000000000020507080e100a0a080400000000000000000000000000000c18242f39434b545c60676d717578808d99a79d9184838485858585858584848383828180807f7d7c7c87929b8e817574737372716d665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666e7b848c929799999286796d6053463a2d20130700000000000000000000000000000000000b17232e3845515d6773808d94887b6e62554b404956636f7c8996a29f928579675c616e7b86928f82756a5f55616e7b8896a19f9286796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c232832373b3c40423c3b38322c3845515c6776828f9caa9a8e817467584e43372b1f120600000713202d3946525e687783909da2988a7d706353493f33271b0f0300000000000000000000000007111c252e374049515961696e777f858d928e88837e79716c6256493d3024170b00000000000000000000000000000000000000000000000000000000000008131e28323e45515c676d7a8390959fa69c928b7f726c635b514b433c36312b2722211e1a140d060000000000000105070709090703000000000000000000030f1a26313c46525c636d72797b7b78726c655d554b42392e23180d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070b0e0f15212e3b4854616e7b87989c8f8275788586796d6053463a2d2013070000000000000000000000000000000000000000000000000d1a2733404d5a6673808d8f837669564c4135291d11050000000000000000000000000000000000000000000000000a151e2b343e474f565e6165696a696763605c5558606775818e9b9691857f78706b605d554e463e342e261e150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139424a50555c6064686e7b8895a09a8d807777787878787878787777767575747372717076828f9c9184786a67666665605c544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545f696e7980858a8c8c898074665c5144382c1f1206000000000000000000000000000000000006111c2935404b55616e7b86928d8074675d51454955626f7c8895a2a298867a6d605e6874808d94887c6f62575f697884919ea398887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e343c4347494c4e4948433d3434404b5565727f8c98a99e9185786a5f53473a2e211507000005111d2a36414c566773808d9aaa9a8d8174655b5044372b1f12050000000000000000000000040f19232e374049525b636b707b828b928d86817c76716d66625a5045392d211509000000000000000000000000000000000000000000000000000000000000020c16202934404b555d686e7a8390949da49f93877e726d605d554e46423b37332d2d2a261f180f060000000000000000000000000000000000000000000006121f2b37434e58636e737f848887847e776d675d544b40342820160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d111314181b1c1a202d394653606c7985929e9184777885877a6d6154473a2e211407000000000000000000000000000000000000000000000003101d293643505c6976838f928578685d5246392d201307000000000000000000000000000000000000000000000006111c26303d474f5961686d7275767674706d67605c5563707d8996a097928b847d746d67605850443f3830271e150c030000000000000000000000000000010407070e0e0b080300000000000000000000000000000000000000010b151f2730383f444b5153575f6a7784909d9d9184776a6b6b6c6b6b6b6b6a6a6969686766656465727e8b9a96887b6e6259595853504a42382e23170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424d575f676d73797d7f7f7d746e64544a4034281c10040000000000000000000000000000000000000d18242f3a46525e6974818e9285796d6053474855616e7b8894a1aa94877a6e6156616e7b86928e8174695e576875828e9baa978a7e7164574b3e312418090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303940444e5355595b56544e463d323b4855626e7b8897a1a197887b6f6255483c2e23180c0000010d1925303d4a5663707d8998a39e9184786c605346392d20130a00000000000000000000000b16212b353f49525c636d727d85908e86817b746f6a64605c5450483f34291d110500000000000000000000000000000000000000000000000000000000000000040e18232f39434c565e686e7a828d929ea19993887f746d675f58534d46443f3b3a36312921180d030000000000000000000000000000000000000000000815212e3a47535f6a73808c919796918b82796d665c51453e32281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d202125272827242b3744505b657783909d93867a7884877b6e6154483b2e211508000000000000000000000000000000000000000000000004111d2a3744505d6a77839097877a6d6154473a2e21140700000000000000000000000000000000000000000000000c17232e38424f59616b707a7f828382817d79726d665e606c7884919e9c8f82898781796f6a615a504a423930271e150c03000000000000000000000002080d1113141b1a18140f0901000000000000000000000000000000000000030d151e262e34394045464e5866737f8c99a096887b6e625f5f5f5e5e5e5e5d5c5c5b5a595857616e7b8793988b7f7265544a4b46443f3830261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303c454d555d60676d707273706b645c5242392e23180c0000000000000000000000000000000000000007131d2a36424d57626f7c88948b7e7165594f4754616e7a8794a1a295887b6f62555e6974808d92867b6e615665727f8b98aa9a8d8073675a4d4030251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a51585f6266686260584e43383a47535f6a7885929ea9988c7f7265544a4034281c100400000814202d3a4753606d7a86929fa196897c6f6256493c31261b0f0300000000000000000004101b27323d47515b636e737f88918a817b746e69625f5853514a423f362d22170c01000000000000000000000000000000000000000000000000000000000000000007121d27313a444c565e686d78808a91969f9a938c81796f6a615e575350494846423b33291f14090000000000000000000000000000000000000000000915222f3c4855626f7c87929ea19b98948f82786d605a50443a2f24190d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d161d24292c2d31343534312d333f49536874818e9b99887c7884877a6d6154473a2e211407000000000000000000000000000000000000000000000003101d2a3643505d6976839095897c6f6256493c2f2316070000000000000000000000000000000000000000000003101c28343f4a54606b707d858c8f908f8d8a857f786e69606574808d9a978b7e7c838c847c716c605c544a423930271e150a00000000000000000000040c13191d2021282724201a130b0200000000000000000000000000000000000a141c222a32373b3c40424855626e7b8895a0998c7f7266564c525252515150504f4e4d4d4c525e697683909c8f8275665c50443a38342e261e150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2a333c434b51555d60636666636059524a4130271c120700000000000000000000000000000000000000010e1a25303b47535f6a76828f9083776b60544753606d7a8699a4a296897c6f635656616e7b86928d8073685e626f7c8898a29c8f827669574d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c606a6f73756f6a6054483b37434e586875828f9ba89c8f8275665c5144382c1f1206000006131f2c3945515d6776838f9ca8998d807366584e43372b1f12060000000000000000000713202c38444f59636d73808c8e847d756e69615e57534e46444039302d241b1106000000000000000000000000000000000000000000000000000000000000000000010b151f28323b444c565d666d747d848d92989f938e837c746e6963605b5355534d453b31261a0e020000000000000000000000000000000000000003101c28343f4a546774818d99a39b918b89908d80746c61564c4135291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121b1f282f35393a3e4142413e3a393f4c5966727f8c99978b7e7885867a6d6053473a2d2014070000000000000000000000000000000000000000000000020f1c2935424f5c6875828f978a7e7164574b3e2f24180c0000000000000000000000000000000000000000000006121f2c3844505c666f7d8692979c9d999497928b837b706b636f7c89979c8f8276787f86867e736d665c544a423930261c11060000000000000000040e161e24292c2d3533302b251d140b0000000000000000000000000000000008121c262e343c4347494d4e48535f6a7784919d9c908376685e524645454544444342424140424d5666727f8c999285796d6053463a2d28231c150c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212a313a40454b515357595956554f4741382f1e150b00000000000000000000000000000000000000000009141f2b37434e5863707d8a95897c6f63564c53606c7986939fa3978a7d706457525e6974818d92867a6d61606c7985929f9e928578695e52463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d747c7f817c6f6256493c313f4c5865727f8b98aa9f9285796d6053463a2d201307000004101d2935404b5566737f8c99a99d9184776a5f53473a2e21150a0000000000000000000916222f3b4854606b727f8c8a817a706b615e57524d47433c38342e271e1b12090000000000000000000000000000000000000000000000000000000000000000000000030d162029323b444c545c606b707a80868d9298959187817b746f6c6564615f574d42362a1e12050000000000000000000000000000000000000006121f2b3844505c667784919d9f958b7f7c83908a7e70685d52453b31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242d313a4145474b4e4f4d4b4745414a5763707d8a969a8d8079858579675d5145392c1f13060000000000000000000000000000000000000000000000010d1a2734404d5a6773808d998d807366554b4035291d10040000000000000000000000000000000000000000000713202d3a4653606d78839198a19a938c87888a9090857d706c6c7985919e93877b6e727c838b80786d665c544a42382e23171007000000000000020c1620283035393a41403c362f261d1108000000000000000000000000000005101a242e3840464e5355595b5553576673808c999f93867a6d6154473a2f38373736363534303b4855626e7b889698897c6f6356493c2f2418110a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f181f282f35394045474a4c4c4a48443d352f261d0c03000000000000000000000000000000000000000000020f1b26323c4653606c7884918e8175685e52505b657985929fa4978b7e7164584d57616e7b86928d8073685e6676828f9ca197877b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57606d7881888c877a6d6154473a2f3c4955626f7c8898a2a298887c6f6255493c2f2216070000000c18242f3c4956626f7c8997a1a096887c6f6255483c32261b0f000000000000000003101c28343f4a5463707d87857e756d686159534d46423b37322c28231c150c0900000000000000000000000000000000000000000000000000000000000000000000000000040e172029323a424a515961686d737b80868b8f92928e86817c7874716e695f53463a2d211407000000000000000000000000000000000000000713202d3a4653606d7986929f9d9083776f7a8491857a6d60574d42362a1e140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c252e363f434b5154585a5b5a5754514b4854616e7b87979c9083788684776a554b4035291d100b0500000000000000000000000000000000000000000000000b1824313e4b5764717e8a9a908376675d5145382c1f13060000000000000000000000000000000000000000000a1724313d4a5764707d8a95a09f93887f7b7b7e838a92867e706c74818e9b998c7f726a6f79828d81786d665c544a3f342822190c03000000000008131e28323a4145474e4c4841392f231a1005000000000000000000000000000c17222c36404a52585f626668625f58626f7c8895a0998b7e7165554b4035292b2a292928272e3a47535f6a778491998c807366554b4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d161d24292f35393a3d3f403d3c38332c231d140b00000000000000000000000000000000000000000000010a151f2b3744505b65717e8b92867a6e61544a5e6b7885919ea5988b7e7265584b525e6973808d92867a6d6166737f8c99a9968a7d7063574a3d30241708000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f6974808d93918578685e5246392d3a4653606d7985929faa988b7f7265584c3f2f24180d0100000713202d394653606c7985929ea8998c807366584e43372b1b11060000000000000006121f2c3844505c6677848f827b736d68605c544f45413a312b231c18120b03000000000000000000000000000000000000000000000000000000000000000000000000000000050e172028303940444f565d60696e747a7e8286898c8e8e8984817e7b6e6155483b2e221508000000000000000000000000000000000000000714212e3a4754616d7a8799a39a8d8074686f7c878d8073695e53463b3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232e37404850555d606467686764605d5551525e697885919e92867b888276695c4f432f27201c160e09030000000000000000000000000000000000000000000814212e3b4754616e7a87939286796d6053473a2e23170b0000000000000000000000000000000000000000030f1b27333f49536875818e9ba7998d80736e6e71767e8590877e70717d8a999d9184776a676d78818d81786d665c50443f342b1e150b00000000010d1924303a444c52545b59534b41352c21160b00000000000000000000000005111c28333e48525c646a6f73756e6a5f5f6a7784919d9b8f8275675d5145392c1f1d1d1c1b1f2b37434e586673808d99908376675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d24292c2d303333302f2c27211a110b02000000000000000000000000000000000000000000030b12181d27333f4953606d7985928c7f73665c505e6b7784919ea5998c7f7266594c4d57616d7a85928d80736863707c8999a3998c7f7366594c402f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b87939d9084776a564c41352b3844505c6676838f9ca89b8e817568554b4035291d1004000006121f2b3844505b6675818e9bab9d9184776a5f5347382d22170b000000000000000713202d3a4653606d7880868d86807a726d666059524c433d3528231d150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000050e161e272e343e434c52575e61686d72767a7d80818390918d867e7164574b3e3124180b000000000000000000000000000000000000000815212e3b4854616e7b8794ab998c7f72666a74818e867b6e61564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b354049515a62676d71747574716d67605d55576975828f9c988c808c8073665a4d4038322c27211a150e0600000000000000000000000000000000000000000714202d3946525e6876839099897d7063544a3f34281c10030000000000000000000000000000000000000005121f2b3744505b657784919ea197877b6e6161646c717b838f867d707a86929f95887b6f62666d74808d81786d605b51463c30271c120700000004111d2935414c565d6068645d53473e33281c100400000000000000000000000814212d3945505a646e737c80817c6e62586673808c999f92867a6d6053473a2d22170b0f0f1a26313c4956626f7c899792867a6d6054473a2d21140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d12181d1f202426262323201c160f0800000000000000000000000000000000000000000000030d151d24292c2d3845515c67737f8c9184796d60535d6a7783909da6998c807366594d46525e68737f8c92867a6d616d7a86929f9b8e827568564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c999c8f8376695c50433028343f4a546773808d9aa69e918477675d5145392c2013060000030f1c28333f4a5464717e8a99a3a096887c6f6253493f33271b0f0300000000000006121f2c3844505c666d737b81878d857f786f6b605d564f4740342e271e150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000040c151c2328313a41454d53565d6065686d70737a828f938b7e716c6155493d302417090d0c07060401000000000000000000000000000814212e3b4754616e7a8794aa988c7f7265616e7b868d8174685e5246392d20160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d47515b636c717a7e8182807e7a736d67605866737f8c999e91848a7e7164574a47433d38332b261f180f080000000000000000000000000000000000000005111e2a36414c5664717e8b968d8174665c5044382b1f150a000000000000000000000000000000000000000613202d394653606c7986939f9e928578695e555a61696e79828f867c76838f9c998c8073665c606e74818e81756d63584e42392e23180c0000000713202c3945525d686d746f64594f44382c21160a00000000000000000000000a1723303c4955616c7380888c877a6d6055626e7b8895a0988a7d7064544a3f33281c0f030913202d394653606c788491998a7d7063574a3d31251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314171919171614100b0500000000000000000000000000000000000000000000030d151f272f35383a3f404b55616d7a86928a7d7164585d697683909ca79a8d8074675a4d414c56606d7985918d807369677683909d9e918477685d5245392c2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9b9d9083766a53493f33272e3e4b5764717e8a97a49f93867a6d6053473a2d2014070000000b17222d3a4754606d7a86929fa8998d8073655b5044372b1f120700000000000003101c28343f4a545c60686e747c838c8b837d746d6860595145403930271e150b0200000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181f282f353b42464c5254565d666d79828f948e81746c625a5045392d2115161a191413110d070100000000000000000000000714212d3a4754606d7a8798a3998c7f73665e6974818e867a6e6154473d32271b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59636d737e858b8d8e8d8a8680796f6a6263707d8a99a09691877b6e615b54544e48443d37312a211a120a020000000000000000000000000000000000020e1925303b4653606d7984919184796d6053463d32271b0f050000000000000000000000000000000000000714212d3a4754606d7a8799a49e9184786b574d50575e676d79828f847a7f8c999d9184776a5f5c606d78828c7f726a60544a4034281d120700000714212d3a4754606d7a81746b6155483d32271b0f0400000000000000000003101c28343f4a5464717e8a92928578675d535f6a7783909d9b8e8174665b5044382b1f120605121f2b3744505b6574818d9a8d807467574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0c0d0a0907040000000000000000000000000000000000000000000000010b151f2731394045474c4d4b525e6874818d8f83766a5f5c6976828f9ca79a8e8174675b4e4145515d67727f8b92867b6e6673808d999f93867a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9c9d918477655b5044372b2f3c4955626f7c8895a9a49a887c6f6255493c2f2216090000000613202c3945525d6876828f9ca99e9184786c605346392f24180d010000000000000c17232e38424a50565e616a6f7980879189817a706b635b514b433930271d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d161e242931363a41454e58606c78818f949185796d605a50483e34281f2223272521201d18130c04000000000000000000000613202d394653606c7986929f9a8d80736757626f7c888c7f7266584e43372b1d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4854606b737f8b92989a9b9a98928d847c716c606d7a86939f9d9184776f6c66626058554f47423c332c241c140a01000000000000000000000000000000000008141f2c3845515c67717e8a948a7d7064584e43372b21170b0200000000000000000000000000000000000714202d3a4753606d7a8699a39e928578675d51454d555d676d79828f827d8998a095887b6e62555c666d7984877c6f665c5144392e23180c00000d1a2734404d5a6773808a7d7063594f44382c20150a00000000000000000006121f2c3844505c667683909d9185786b564e5866737f8c999e9285796c605346392d201309030f1b27333f495363707d8997918477695e53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139434b5153595a585256626e7b8793887c6f62566875828e9ba89b8e8175685b4e42404b55606d7984918e81746a707d8999a39a897d7063564a3d302317090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9b9f9285796c605346392d2d3a4753606d7a8697a1ac978a7e7164574b3e3124180b00000004111d2935414c5665727f8b98a7a196897c7063554b4035291d100400000000000006111c2630383f444d525860666d737d85908e847d736d605c554b42392f261b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191f252a2f3a47535f6a727f8c93988b7f72675d51483f362c272b2e2f33322d2c29241d160d0600000000000000000005121f2b3744505b657884919e9b8e8175685b5f6a76839084776a605447392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c5663707d88939fa2a198928f8e9191877e726d687783909d9d90837e7c79746f6a636059534d453e362e261c130a000000000000000000000000000000000004101c2834404b55616c7683908f82766a6054473e33291d140a00000000000000000000000000000000000613202c3945515d677986929f9f93867a6d605447434b555d676d7a838c7f85929f998c7f736657545d676f7c8783786d60544b4034281c100400111e2a3744515d6a77839083766b6054483c32271b0f0600000000000000000713202d3a4653606d7986929f928679685e5255616e7b88959f97897c6f6356493c31261a0e020b17222d3a4653606d79859296877b6e6154483b2e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f39434b555d606567635c535f6975828f8d8174685d6874818e9ba79b8e8275685b4f423944515c66707d8a92877c6e6d7a86929f998c7f7366594c4031261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9aa298887b6e6155483b2e2c3945515d677885929ea6998c7f7366594c403326190d000000010d19242f3b4854616e7b87959fa89b8e8174675d5145392c20150a000000000000000a151e262e343b41464e545c606b6f7a828d91877f756d675c544a41382d22170b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d141f2b37434e58626e7c86929f92867a6d60554b40362d2b32373b3c403f3a39352f281f180f060000000000000000030f1b27333f4953697683909c9c90837669565865727e8b897c6f62544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d687683909aa4a19792868282848a918b7f726d73808d9aa095908b8885817c76706b615f57504840382e251c120900000000000000000000000000000000000c18232e3943505a626f7c8792897c6f625a50453b2f261c11060000000000000000000000000000000004101d2935404b556b7884919ea49a897c6f6356493d434b555d686e7b858685919e9d908377695e5255606a73808b7e72665c5145382c1f130600121e2b3845515e6b788491897c6f63584e43372b21180e05000000000000000714212d3a4754606d7a8799a399877a6d6154535f697783909d9a8d807367574d42372b1e120606121f2c3844515c6674818e988b7e7265544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b555d676d72736e63585763707d8992867a6d606774818d9aa79b8f8275685c4f4234404a54616c76828f8f82756b7683909c9c8f827569574d42372b1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a99a3978a7d7064574a3d312935404b556a7784919da79a8d8074675a4d4134271a0e010000000814202d3a46525e697683909da99f92857a6d6053473c31261b0f01000000000000030c151c232830363c424b515960686e78808c938c81796d665c53493f33271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b47545f6a75828f989c8f8275685d52433a2f2d343d4347494d4c4745413a312a21180e0500000000000000000b17222d414e5b6774818e9a9e928578685d54606d7a868d8174665c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939fac9e92857c7575787e85908c7f72707d8a999f92858284888c89837d756e69615a524a40372e241b0f050000000000000000000000000000000007121d27303e4754606a73808c8f82766c61574d42382d22170f06000000000000000000000000000000010d18242f424f5c6975828f9cac998c807366584e4339434c565e69707d879197a1a095877b6e61544e58606d788484796d6053463a2d20130700101d2a3743505d6a7683908f82766a6054473e332a20160c020000000000000613202d394653606c7986939f96897d7063564d5765727f8c9a9d918477695f53473a2e21140804101c2834404a5464707d8a988f8275665c5144382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676d797f8073675a54606b7783908c7f72656773808d9aa69c8f8275695c4f422e3942505a626f7c8793897c6f73808c999e928578695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929f9a8d807467584e43372b2f43505c6976838f9ca79b8e8174685b4e4135281b0e0200000005121e2a36424d5765727f8c98a7a2988b7e7164584e43372b1e130800000000000000030a11171f252a303940454f565e666d747f8b928e82786d655b5044392f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a54626f7c88949e998c7f7266564c41312d363f464e54565a5854514b433c332a20170d0200000000000000061926323f4c5965727f8c98a197877a6d61545d6875828f85796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8999a4ab998c7f726a656c717a828f8b7e717a86929f928579787b7f848a89827b716c635c52493f362d21170b02000000000000000000000000000000000b151e2b37434e58606d7882908a7e71695e544a3f332821180e0400000000000000000000000000000007192633404c5966737f8c99a89d9184776a6054483c3a444d57606b727f8c949ea7988b7e7265544a505c66717e8a7d7164574a3e3124170b000f1b2835424e5b6875818e94887c6f625a50453c32281e130800000000000006121f2b3844505b667784919d998d807366574d54616e7b87939f96887b6e6255483b3025190d010c18232e3a4653606d7985929285796d6053463a2d2013090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606d79838c8276695c4f5964717e8a9184786c6673808c99a69c8f8275695c4f4236303e47535f6a74818e908378707c8998a197887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e6875828f9b9e9184776a5f53473a2f36434f5c6976828f9ca89b8f8275685c4f4235291c0f02000000020e1a25303b4854616e7b87959faa9d9083766a5f53473a2f24190d000000000000000000060c14191e272e343d444c545c606d737e87928e81776c60554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c6674818e9aa696897d7063564a3d2f343f48505860626665605d554e453c32291e1408000000000000000a1723303d4a5663707d8996a896897c7063565665717e8b897c706356493d2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97aba399877b6e615b60686d79828f877d76838f9c98897c6f6e72787d848c867e736e635b51483e33291d140a00000000000000000000000000020507080c1b27323c44505c666e7b8592857b6e665b50443d332a20160d0300000000000000000000000000000915222f3c4855626f7c8895a0a095897c6f62574d42373b454f59626d75828f97a19b8f8275665c514a54606d79848175685b4e4235281b0f000b1825313e4b5864717e8b998f82766c62574e443a3025190d010000000000030f1c28333f4a546774818e9a9d908376695f53525e697683909c998c7f7266564c41362a1e110507131f2c3845515c6775818e98897c706356493d31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d6873808d8f8275685c4f53606d7984918a7d7066727f8c99a59c8f8276695c4f43362b37434e58616e7b86928b7e717986929f978b7e7164584b3e3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56636f7c89949e96887c6f62564c413536424f5c6975828f9ca89b8e8275685b4f4235281c0f02000000000914212d3a46535e697683909daa9f95887c6f62564c4135291d120700000000000000000002080c151d2328323b424a505b636c717e87938b7f72675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929fa197877a6d6154473a313c46505a626a6f73726d675f574e443b3025190c030000000000000714212e3a4754616d7a8796a1988b7f72655854616e7a878c807366554b4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a39f9286796d6053565e676d79828f867c7f8b98998c807366666c70797f868a80736d635a50453b2f261b11060000000000000000000002080e111414191d2028343f4a545e69707d888f82786c60594f463c32281f150b02000000000000000000000000000815212e3a47535f6a7784919da79b8e8175695f53473d333d47515b616d7a85919e9f9285796d605346515c666f7c7a6d6054473a2d211407000814212e3b4754616e7a8692948b7e716a5f564c41362a1d11050000000000000b17222d3d495663707d89959f95887b6e62554d5765727f8b999c908376685e5246392d20130704101c2834404b5564707d8a978d807367574d42372b1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86928f8275695c4f505c66727f8c8f827669727f8c98a59c8f8276695c4f433626323c46525e68727f8c92857a76838f9c9a8e817467564c41362a1d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a4854606b75828f989a8d8174685d52453c333f49536976838f9ca79a8e8174675b4e4134281b0e010000000005121e2a36424d5765727e8b98a3a79a8d8174685d5245392e23180c0100000000000000000000030b1218202930383f44515a626c717e889285796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8997a29e928578685d52463937434e58626c717c807f796e6a5f564c41362a1e150a0000000000000713202d3946525e687884919e9b8e81756856525e687783908376675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a99f9386796d60534c555c676d798390847c88959d908377695f60666d727c858c7f726c61574d41382d22170b000000000000000000050d14191e2021262a22232e38424d57616b73808c8c7f726b60584e443a31271d140a0000000000000000000000000006121f2b37434e5865727e8b97a19f93877b6e62594f4339353f46525e6873808d9aa298897c6f6356494a54606b6f6d675d5145392c201306000714202d3946525e6875818e9b92867c6e685e5246392d2013070000000000000613202d394653606c7883909d998d8073675c5154616d7a86929f93867a6d6154473a2f24180c000c18232e3a4653606d798592918477695f53473a2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b988f8376695c504a54606d7a8592877b6e727f8b98a59c8f8275695c4f4236292a36414d56606d7984918e81747f8c999d918477685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2c38434f59616e7b86929f92857a6d60584e443a44505b657784909dac998c807366594d4033261a0d0000000000020e1a25313b4754606d7a86929fac9f92867a6d60554b4034281d1307000000000000000000000000070e171e262e344048505a626c727f8b8a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a99d9184776a564c41353a47535f6a717e878d8b847c6e685e52463e30261c1106000000000005111d2a36414c566875828e9b9d918477685e52566773808d867a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8797a2a499877a6e6154474b555d676e7b858e8183909d95887b6e61545c606a6f7b848b7e71695e53493f33271c110600000000000000090e171f252a2d2e33362f2e2b303b454f59606c78828f877d706a5f564c43392f261c1106000000000000000000000000030f1b26313c4653606d7985919ea4998f82756b60554b403536414c5664717d8a97a8998c7f7366544a424f596063605d554c4135291d11040005111e2a36414c56626f7c89939891847a6d6154473a2e21140700000000000005121f2b3744505b65707d8a939e9184796d6055525e6876828f9c998b7e7165554b4035291d100407131f2c3845515c6674818e96887b6e6255483b3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e9b9084776a574d45525d6874808d8d8074727e8b98a59b8f8275685c4f42352925303b45515c66707d8a93887d7c8998a095877a6d6154473a2e2114090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27323d46535e69717e8a92988d80746a5f564c454653606c7985929fa49a8a7d7164574a3e3124170b0000000000000914202c3945525d6875818e9ba7a2988c7f72675c51453a2f24180d01000000000000000000000000050c151c2328363f48505a626d74808b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9ba89c908376695d5043303c4855626f7c8692999691847a6e615a5042382e23170c0000000000010d1925303f4c5965727f8c989f93867a6d61545663707d898a7d7063574a3d3024170809080603000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697885929eab96897c6f635649434b555e69707d878e84919e998c7f736659515860696f7c86867b6e655b5044382e23170c00000000000009121a20293036393b40433c3b3732333e44505b666d7a8491857c6e685e554b42382d221711080000000000000000000000000a151f2c3845515c67717e8b949f9e93897d70675d51453e343b4854616e7b8796a19c8f8276665c5044474f545654514c433a2f24190d0100010d1925303b4754606a74818e96968f8275695c4f4236291c0f000000000000030f1b27333f4953616b75818e96978b7f72675d515665717e8b999b8f8275675d5145392c1f130604101c2834404b5463707d89968c7f7265564c41362a1d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d928579695e53464c56616e7b8792857a717e8b98a49b8e8275685b4f4235281f2834404b54616b75828f91847a85929f978a7d7164574a3e3025190e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212a36424d57616c73808d9292877c6f685e56514f58626f7c8898a29f93877b6e6154473b2e21140800000000000004111d2935414c56636f7c89959faa9e9184796d60554b4135291d110400000000000000000000000000030a1117242d363f48515b606d78837d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2a3743505d6a7683909da89c8f8275695c4f42363e4a5764717d879399a0968f82766c61544a3f34281c100300000000000816232f3c4956626f7c8998a29a8a7d70645753606d7a868d8073665a4d40302519191515120f0a04000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576875828f9baa998c7f7366564c41434d57606b73808c9196a09e9184776b60554e575f6a707e8a82776c60544a3f34281c10030000000007101a242c323b4146474c504847433c34333f4a545d686f7c8691847a6d675d544a3f3328231a0f05000000000000000000000004101c2834404b55606c77839098a29e9184796d605a50463d3a46525e697884919e9f9285796d6053463d4448494745413a31281e130800000008141e2b37434e58616d7a848f938e8174675b4e4134281b0e000000000000000b17222d38414f59616d7a8491989185796d605954606d7a86929f92867a6d6053473a2d201407000c18232e394653606c788491908376685e5246392d2013080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2b3845515e6b7884919e98877b6e61544846535e6975818e8b7f727e8b98a49a8e8174675b4e41342818232e39424f59616e7b86928e81828f9c9a8d817467564d42362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1a25313b45505a636e74808b9291847a6d68605c59606a73808d9aa69c8f8376695e52463a2d201407000000000000010d1924303a4854606b7683909da7a1978b7f72675d5145392c20130600000000000000000000000000000006121b242d363f44505c666d7a796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919da99c8f8276695c4f43363c4955616c717e8792999f948a7e71665c5044382c1f130800000000000713202d3a4653606d7986929f9a8d80736756515d6777838f827669564c413529272622211f1b15110c05000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313e4b5864717e8b98a39c8f8276685d52453b454f59606c78828f97a2a096897d7063584e4e58616c74818b7e71665c5044382c1f1206000000040f19222c363e444d5254595d55534e463c3238424c565f6a717e8b9082796d665b50443f352c21170c0300000000000000000000000c18232e3944505b656e7b86929fa0968e81746c61584e463c424d576875818e9ba298887c6f6255483c383b3c3a39352f281f160c01000000020f1b27323d46525d686e7b8286827a6d6154473a2e2114070000000000000006111b262f3e46525e686f7d8692978d80736b60565d6875828f9c988a7d7064574a3d312417070007121f2b3844505b6673808d92867a6d6154473a2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b7784919e978a7d71645349424d57626f7c899184777e8b98a49a8d8073675a4d4034271a1d27303e46535e69737f8c938e84919e9d918477695e52463a2d20140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333e48525c646e747f879190837a716d66696b707c86929f9f948a7d7064574d42362a1e11050000000000000008131e2c38434f5964707d8a959fa99e9185796d6054473a2d2114070000000000000000000000000000000009121b2428343f4a545e686d6d675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919da99c908376695d5043303945505a626c717e87929f9e9184786d6053463a3025190d010000000006131f2c3845515c6676828f9c9d908376685d52556774818e8578685e5246393334322f2e2b26201c170e090300000000000000000000000000000000000000000000000000000000000000000000000914212d3a4754606d7a86929f9f92867a6d6054473c3d44505b666e7b85929fa59c8f82766a605447505a606d798484786d6053463a2d2013070000000a15202b343e4850565e616669625f584e43372f3a444e58626c74818e8f81786c605b51473d33291e150a000000000000000000000007121d27333f49535f69717e8b929c9d928a7e716a60584e463e4a5764707d8a96a0988b7e7165584b3e322f302d2c29241e160d0400000000000a16202935414c565e696e7679766d685e5246392d20130700000000000000000a141d2a36414c56606b717e879293877d6f685e5664717e8b979a8d8074675a4d412e23180c00030f1c28333f4a54626e7b88948b7e7165554c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828f9c9a8d8174655b50444754606a768390897d7f8b98a5998c7f7366594c40332619151e2a36424d57606d798491969196a0a095877b6e6154473b2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212c36404a525c646d727d848d90847e797676787d8491989f958f82766c6155453b30251a0e0200000000000000020f1b27323d4955616c77839099a4a1978e8174685b4e4135281b0e0000000000000000000000000000000000091217232e38424c565e61605d554b4035291d1004000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2a3743505d6a7683909da99d9184776a574d4236333e48505a626c727f8b929d968a7e7164564c41362a1d11050000000004101c2834404b5466737f8c999f92867a6d60545865727e8b877a6d6154473d3f403f3c3b37322d28221a140e06000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6774818e9ba3988b7e7165584e43373f4a545e69717e8b939e9f94897c6f62594f45515d67707d8a7e7164584b3e3125180b0000030f1b27323d46505a61686e73766f6a5f53473b2e323c46505a606d7984918d80746d62594f453b30261c110600000000000000000000000b17222d38414d57616c73808d939d9f92867c6f6a605850454653606d7984919e9a8d8174675a4e4134272321201d19130c04000000000000040d1924303a444d575e61666d66615e564c41362a1d11050000000000000000020b1925303a444f59616c717e879291847a6d685e616d7a87969d9083776a554b4034281c1004000b17222d3847535f697683908f8275675d5145392c201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c999e9184786c605346434e5864707d8a8f827f8c98a4988b7e7165584b3e3225180c1a25313b45515c66707d89939ea0a8a7978b7e7164544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a242e38404a525b626b707980868d8a8583838489919699928d837a6d615a504433291f14090000000000000000000a16212d3944505a626f7c87939c9792877e7165584b3e3225180b00000000000000000000000000000000000006111c26303a444c525453514b43392f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca89f928579695e52463a2d363e48505a626d74818e949c8f8276685e5246392d20130700000000000c18232e3c4956626f7c8997a2998a7d70635756626f7c89897c6f6256494a4c4d4c4847433c39332a261f180f0700000000000000000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88939e9c8f83766a5f53473b38424d57616c75828f97a29c8f82766b6054484b55616c76828175685b4f4235281c0f000006131f2b37434e58616c717b7f827c6f6255483c2f2a343f45515d67707d88938b7f726b60574d42382e23170c030000000000000000000006111b262f3c45505a606c77818e939c9892857c6f6a615a524c515c66717e8a92988f8376695c504336291d1413110d0801000000000000000008131e28323b454d53545c605c54524c443a3025190d0100000000000000000008131e29323d46505a616c717e869190837a6d6860687784919e928578675c5145382c1f13060006111c2b37424d5764717e8a92867a6d6054473a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c88949f96897c6f63574e424653606c78849188818e9bab96897d7063564a3d30231709141f2834404b54606b74818e97a1ada89b8e8175665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c262f384049515960676d737b8185898c8e8f908f8e8b87807a6d685d52483e3320170d0200000000000000000004101c28333e4754606a737f8b8f8c857d716c62564a3d3124170b000000000000000000000000000000000000000a151e29323a4146474745403931281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99aaa298877b6e6154473b2e2d363e48515b606d7882909892867a6d6154473a2e21140700000000000713202d3a4653606d7985929f9a8d8074675754616d7a878a7e7164575357595a5955534e49453e36312a211911080000000000000000000000000000000000000000000000000000000000000000010d19242f3a47535f6a75828f999f93877c6f62574d42363b45505a616e7a85929f9e94897c6f635a5043505a616e7b796d6053473a2d20140700000815222e3b4754606a717e868c867a6d6053473a2d202935414b55606b74808d92877d70695e544a3f34281f150900000000000000000000000a141d2a333e44505b656c78818d929f9792857c716c605d565154616c727f86898984776b5e5144382b1e1106040100000000000000000000020c162029333b42464a5053504a46413a32281e130800000000000000000000020c17202b343e48505a616c707c848e90837a716d6776838f9c9786796d6053463a2d20130700000e1a26313c4653606d7884918a7e7164564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a76828f999b8e81756a5f534744505b66727f8b9386939fa399887b6f6255483c2f2215090c18232e39424f59616d7a85929ea6ab9e9285796c605346392d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f373f474f555d60696e74797d8082838382817e7b746d685d564c41362c220e0500000000000000000000000b17222b38434e58636d737f83807a706b625a50453a2e21150900000000000000000000000000000000000000030c1720293036393a3a39352f281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a98a3aa978a7d7064574a3d31262d363f44515c666e7b8692998a7e7164574b3e3124180b000000000006121f2c3844505c6675828f9b9d918477695f535e6878858c7f72655c6063666765625f58555046423b332b231a1108000000000000000000000000000000000000000000000000000000000000000008131e2b37434e58626f7c87939f9a8e8175695e53463d333e46525e68717e8b949f9c9083766c61554b47535f696e6d675d5145392c2013060004101c2834404b54626f7c8792918477675d5145392c1f242f3a434f59606d7a859292857b6e665c50443c31261a0e0400000000000000000000020b182127333f49535b666c77808a92989792867e746d68605d555a636d727a7c7d7b6e6154483b2e2115080000000000000000000000000000040e1721293136383f4446443f3836302820160c020000000000000000000000050e19222c363e48505a616a6f7a818990857e79767683909d928578675c5145382c1f1306000009151f2b3844505c66707d8a8f8275685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58626f7c87929f93877b6e625b51474a54606d7985929399a49f9286796d6053463a2d20130707121d27303d46525e68717e8b949faaa197897c6f6353493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d252d353d434b51575f61676d70737576767574716e69605d564c443a30241a10000000000000000000000000050f1b27323d46525b636d7276736d68615950483f34291d11050000000000000000000000000000000000000000050e171e252a2d2e2d2c29241d160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929fa6998d807366574d42372b242834404a545e69727f8c978d8174675a4e4134271b0e010000000003101c28343f4a5465727e8b98a096887b6e6155566a77848d807366666d707273726f6a64615a534d453d352c231a100600000000000000000000000000000000000000000000000000000000000000010f1b26323c47535f6a74818e979f92877b6e61584e413836414c56626c76828f989f948a7d71675c51454d575f61605d554b4035291d11040006131f2c3845515c6675828f998f837669554b4035291d1d28313d45515d67727f8c969083786d60574d42372b20150a0000000000000000000000060f17222d38414a545b656c737e86909598928a817a726d6765626161686d6f706e695e52463a2d201407000000000000000000000000000000050f171f252a2e34383a38342e2a251e160e050000000000000000000000000007101a242c363e4750585f676d747d838a8b8583839095988e817468554b4034281c1004000003101c28343f4a54616c75818e867a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c47535f6a727f8c94998f82766d62595047515d6774818e9aa4ab9d908377665c5145382c1f1306000b151e2935414c56616c76828f98a2a99a8d8073655b5044372b1f12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131b232c313a41454d53555c60636668696a696865615e57524c443a32281e1108000000000000000000000000000a16202b344049525b62656966615d564f473f362d22170c01000000000000000000000000000000000000000000050c13191d202120201d18120c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6775828f9ba79d908477695f53473a2f24232e39424d57606d7985928f8376695c504336291d100300000000000c17232e3b4854616e7b8795a0988b7f7265555d6976838e81746d73797d7f807f7c77716c615f574f473e352c22180d03000000000000000000000000000000000000000000000000000000000000000a15202b37434e58616d7a85929e998e81746a6053493f333b44505a616e7b86929f9e9184796d60564c454d535553514b433a2f24180d01000713202d3a4653606d7986929b8f8275685c4f422f2418161f2935414c55606d798491958c8073695f53473d32271b0f01000000000000000000000006111b262f38424a535b606c717c838c9298938e857f7a74716f6e6e70747c716c62574d42362a1e120500000000000000000000000000000000050d141a1c23282b2d2b28231c19130c0500000000000000000000000000000008121b242c353e464e555d606b70787e83888c8e908f8d867b6e6255483b2e23180c000000000b17232e3842505a606d79828b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b37434e58606c77828f95948b7f726b615a534e5564717d8a97a4a99a8d817467544b4034281c100400030c1925303a44505a616e7b86929fa79e9184786c605346392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109111a1f282f353c42464b515356595b5c5d5c5b5854524d45413a322820160c0000000000000000000000000000040f19222e3740495156585c5954524c443e352d241b1106000000000000000000000000000000000000000000000002080d1113141413100d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b5563707d89959fa095887b6e62564c4135292027303b45515d6774818d9184776a5e5144372b1e110400000000000614212d3a46535e697784909d9c8f8276675d5c6975828e81747980858a8c8d8c88837e766e6960594f473e342a1f150b01000000000000000000000000000000000000000000000000000000000000040f1b26313c46525e68717e8a939f93877c6f655b50443c323f46535f69727f8c95a0968c7f73685d52454247484745403a31281d130700000915222f3c4855626f7b88989b8f8275685c4f4235291c0d19242f3a45515c67727e8b9892877b6e61584e43372b1d12070000000000000000000000000a141d262f384149505a616a6e797f868e9297928b85817e7c7b7b7c81867e7165584b3e30251a0e02000000000000000000000000000000000003090e11171c1f201f1c17110d0802000000000000000000000000000000000009121b232c343c434c515960666c71777b7f828383807b6e695f53473a2e1d12070000000006111c26303e45515d676d787f807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1b26323c44505b656d7a83909492877d706c625f575a616e7b8894a1a1978a7d7063574a3d2e23180c00000008131e28323e46535e69727f8c959fa196897c6f62544a4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d161d24293137394045464a4d4f50504f4e4b4746423b35302820160e0400000000000000000000000000000007101c252e373f464a4b504d4746413a322c231b120900000000000000000000000000000000000000000000000000000105070707060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a4855606b7783909da59a8d8073685d52453c3228202935404b5564717d8a9185786b5e5245382b1f1205000000000005121e2a36424d576673808d999f92867a6d605b6875828e817c848c8f8885838485898a827b706b61594f463c31271d1207000000000000000000000000000000000000000000000000000000000000000a15202a36414c56616c74818e959a9083786c60584e433937424d57606d788390999f92857a6d6054473a3a3b3a39352f281f160c0100000a1623303d495663707c89969c8f8376695c50433024190d131e2934404b55606d7a8592998e81756a605447392f23180c000000000000000000000000020b141d262f383f4450585f666d737b81878d9297928e8b898888898d8d8174675a4e4134271b09000000000000000000000000000000000000000000060b10121312100b0600000000000000000000000000000000000000000009111a222a313a41454f545b60646a6e72757676746e695f574d42372b1e0b0000000000000a141e2935404b555d666d72736e63574b3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a152027333f49535d686d79828e9392867e756e6a6867676e7b8895a99e9285796d6053473a2d201407000000020c16202a36424d57606d78839098a29a8d8074665c5144382c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181f262b2e34383a3d4042434342413e3b3a363029241e160e0400000000000000000000000000000000000a131c252d343a3d3f43403a39353028201a110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2c38444f5963707d89939d9f92857a6d60584e443a322a252f3b4855626e7b889184786b5e5145382b1e12050000000000020e1a25313c4956636f7c8997a1988a7d7064536976828f8586918e827c787677797d838c857d706b61584e43392f23180c03000000000000000000000000000000000000000000000000000000000000040d1925303a44505a606d79839097958b7f726a5f554b42383c44505c666f7c87929f988b7e7265584b3f322e2d2c29241d160d040000000a1623303d495663707c89969d9083766a564c4135291d110c18232f3945515d6774818e9b93897c6f62554b4034291c1004000000000000000000000000020b141d262d333e464e545c60696e747b80858a8e91939a94949691897d7063564a3d3023170a000000000000000000000000000000000000000000000003060706030000000000000000000000000000000000000000000000000810181f282f353d424a5053585f626568696967625f574d453c31261a0e000000000000020c18242f3a434b545c606566635b52473b2f23160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b17222d38414c565d676d79818a929288817b7775747476808d99a1978d8073675c5145382c1f130600000000040e1a25313b44505c666e7b86929f9e9285796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d141a1d23282c2d30333536373635322e2d2a251f19130c04000000000000000000000000000000000000010a131b23292e313236332e2d29241e160e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101c27333d4854606b74818e95a0978d80736a60564c443c3630313a4754616d7a879083776a5d5044372a1d11040000000000000913202d394653606c7985929e9b8e8174655b6577839092928e81776f6a6a666d7077808c877d706a5f554b4034291f14090000000000000000000000000000000000000000000000000000000000000008131e28323e45515c676e7b85929992867c6f675c544a3f383f4a54606a737f8c92998e8175685b4e42352820201d18130c04000000000916222f3c4955626f7c88959e928578685d5245392c201307121d2935414b5564717e8a979b8e8175675c5145382c1f130600000000000000000000000000020b141b2227343c424b51575e61696e74797d81848688898887847e716b6054483c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d161e24292f383f44464e5355595b5d5c5a55534d453c332a2015090000000000000007131d28313a424a5053585957524940352a1e130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3a434c555d676d757e858d928e8884818080838d929c9891857a6d60554b4034291c1004000000000009141f28343f4a545f69717e8a939a978a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181c1f20232628292a29282521201e1a140d08020000000000000000000000000000000000000000010911181d222425292621201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c38444f59606d7a8391979f92877c6f685d564e46423f3e3f4754616e7a878e8275685b4f4235281c0f0200000000000006121f2b3844505b6674818e9a9e9185786c606c7985929e9184796d655f585c60656c737f8c867c6f675c51453b30251a0e00000000000000000000000000000000000000000000000000000000000000020c16202934404b555e69707d8792989083796d665b504a423a424e58636d737f878b8b8073665a4d4033271a13110d070100000000000815212e3b4854616e7b8798a197877a6d6054473a2d21140a0d18242f3b4754616e7a87979f9286796d6053473a2d2014070000000000000000000000000000020a1117222a303940454d53575f61676d7074777a7b7c7c7a77716c61594f44382c201407000000000000000000000000000000000000030709091012100c07060400000000000000000000000000000000000000000000000000040c13191d262d33383c4347484c4f50504e4847423c332a21180e0300000000000000010c161f2830383f44464c4d4b4740372e24190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28313a434b555d606c717b80868d91918e8d8d90949a9691867d70685d5243392f23180c000000000000030b17232e38424d57616c727f878d8d8b8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c101313171a1c1d1d1c1b181414110e0902000000000000000000000000000000000000000000000000060d121518181d1a1413110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27333d45525d686e7b8592979991847a6d685f58524d4c4b4c505863707c898b7f7265584c3f3225190c00000000000000030f1c28333f4a5463707d8997a197897c6f626e7b8897978a7e71675c534e51535b606d75818e84796d60574d42362a1d120700000000000000000000000000000000000000000000000000000000000000050e18232f39434d57606b707e8792958e81786c605b544c443d46515b636d737c7f7e796d6053463a2d2013070401000000000000000613202d394653606c7985929f96897c706356493d32261b0f0714202d3946525e687885929e98897d706356493d3023160a00000000000000000000000000000000060f181e272e343b42464d53555d606467676d6e6f6f6e6864615a50473d33271c100400000000000000000000000000000000040a0f1315161c1e1d191312100c0700000000000000000000000000000000000000000000000001080b141c22282b31373a3b3f424343413b3a37312a21180f06000000000000000000040d161e262e34383a3f403f3b352e251c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b161f28313a434b515a61696e747a8084888c8e8f908f8d8a847c706b60564c4131271d12070000000000000006111c26303c45505a636d727c80807e7b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f10100f0e0b080705020000000000000000000000000000000000000000000000000000000106090b0c100d07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212935414c565f696f7c8591969690837a6f6a615e575958585a616a74808d867b6e6154483b2e21150800000000000000000b17222d3a4653606d7985929e9a8d807367717e8b989285796d60554b414449505b606d79838c8073695e5246392e23180c000000000000000000000000000000000000000000000000000000000000000007121d27313b454f59616c707e8792938e80746c665e564f464449515b606d79807b6f6a5f54473b2e22150800000000000000000005121f2b3744505b657683909d998d807366584e43372b1f1409111e2a36414d566a7683909d998c7f7266594c3f3326190c0000000000000000000000000000000000060c151d232831363c42464b515357555d60626262615e565550483e352b21160b00000000000000000000000000000000070f161b1f2223292b2a25201f1c18120b03000000000000000000000000000000000000000000000000020a11171c1f262b2e2f32353636342f2e2b2620180f060000000000000000000000040c151c23282c2d3233322f2a241c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f28313a404550575e61686e73787c7f81838382817d786f6a60594f443a2f1f150b0100000000000000000a141e2a333e48515b636b6f7374726e695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d19242f3a434d575f6a6f7b848e939590837c736e6967656465676c707c868d8174695e52463a2d201407000000000000000006121f2c3844505c6674818e9b9e9184776a7683909a8e8174665c504339383f45515d676f7c87867b6e61544b4034281c100400000000000000000000000000000000000000000000000000000000000000010b151f29333d474f59616c717e8692938d80786d68605953504a4e56616e7b88867c6f6255493c2f221609000000000000000000030f1b27333f49536673808d999d9083776a5f53473b31251a0d0e192530424f5c6975828f9c9a8e8174675b4e4134281b0e000000000000000000000000000000000000030b12181f252a3137394045474a4b515355565554524d49453e362c231a0f0500000000000000000000000000000007101921272c2f30363837322d2c28231c150c0400000000000000000000000000000000000000000000000000060b0f151a1f212226282a292722211e1a150e0600000000000000000000000000030a11171c1f20252625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f282f353e454d52565e61656c6f727476767674706c6660584f473d32281e0d03000000000000000000020c18212c36404951596063666765615e574d42362a1e12050000000000000000000000000000000000000000020507080c0f10100f0c080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070c0e0f0e0b070704010000000000000000000000030607090a0a090706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313c454e585f696e79818990959186807b767372717274777d859083796d60574d42362a1e1205000000000000000003101c28343f4a5463707d8a98a096887c6f7b8793978a7d7164544a3f312d35404b55606a73808c8074665c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000030d17212b353e47505a616c717d8590928d827a706b63605c54585f68727f8b8f8275695c4f4236291c0f030000000000000000000b17222d3c4956626f7c8996a095887c6f62574d42362a1f160c1c2835424f5b6875828e9b9c8f8275695c4f4236291c0f0000000000000000000000000000000000000000070c141a1f262b2f35383a3d4045474849494746413b39332c241a1108000000000000000000000000000000040e19222b32383b3c4345433f3a38342e271e160e04000000000000000000000000000000000000000000000000000003090f121415191c1d1d1b1514120e090300000000000000000000000000000000060c101213191a1916130e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d2429333b42464c52535b60626568696a696764605b544e463d352b20160c0000000000000000000000060f1a242e3740474f54565a5a5854524d453b30251a0e0200000000000000000000000000000000000003090e121415191c1d1d1c191514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314181b1c1b181413110d080100000000000000060b101213161717151312100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a333c464e575f676d747d83898e928d8683807f7e7f80848a8b837b6e675d51453b30251a0e020000000000000000000c17232e3a4653606d7985929f998c8073808d9a97877b6e6154483b2e242f3a434e58606d798485796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000050f1a232c353e48505a616b6f7b828c928f847d75706d6668696a6f7a84919285786b5f5245382c1f12050000000000000000000613202d394653606c7884919e9a8e8174695e53463d31281e151b2835424e5b6875818e9b9c8f8376695c504336291d1000000000000000000000000000000000000000000003090e141a1d24292c2d2f35393a3b3c3c3b3936302d28221a1208000000000000000000000000000000020c16202b343d4348494f51504c46444039302820160c02000000000000000000000000000000000000000000000000000000020608080c0f10100e0808060200000000000000000000000000000000000000000306070c0d0c0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c1318202930363b414649505355595b5c5d5c5a5753504a423d342b23190d0400000000000000000000000008121c252e353d4448494d4d4b4846423b33291f1409000000000000000000000000000000000002080d141a1e212125282a2a282522211e1a140f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b13191d2021252829272421201d19130d0802000000020a11171c1f2022242422201f1c17110f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18212a343c454d555d606b70767d8185898b8d8d8c8b8b8b89847f786e695e554b4033291f14090000000000000000000006131f2c3845515c6775818e9b9d91837a86929e928578695e53463a2d1d28313c45515c676f7c7b6e665c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000008111a232c363e48505960696e787f868f9189827d79767575777c8390969083776a5d5144372a1e110400000000000000000005121f2b3744505b65727f8b979f92867b6e61594f433a30261e162936424f5c6975828f9c9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000003090e12181d1f2024292c2d2f2f2f2e2d2a251f1c1710080000000000000000000000000000000008131e28323d464f54565c5e5d5853514a423a32281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070e171f252a3036383f4446494c4e50504f4e4a46443f382f2b2219110700000000000000000000000000000a131c232b32383b3c40413f3b3a36302921170d0300000000000000000000000000000000050c13191f252a2d2e3235373635322e2d2a261f1b160d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e24292d2e32343534312d2c29241e19130c0400090c141c23282b2d2f31302f2d2b28231c1b160e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18222a333c434b515960636b7075797c7e80818281807f7c79726d665e574d433a2f21170d020000000000000000000004101c2834404b5563707d8a97a0958e818e989c8f827569574d42362a1e1f2834404b55606a6f6e695f544b4034281c1004000000000000000000000000000000000000000000000000000000000000000000000008111a242c363e474f575e666d737b82898f8f898583828284889095928a7e7164574b3e3124180b00000000000000000000030f1b27333f4953606d7985929e988e81746b60564c423830281f2b37424d576a7683909d9b8e8175685b4e4235281b0f0000000000000000000000000000000000000000000000000001070c101314181d202022232221201e1914110c0500000000000000000000000000000000010d1924303a444f596063696b6a65605c544c443a3025190d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1e252a2d3337393c3f41434343413d3938332d261d191007000000000000000000000000000000010a111921272c2f303334322e2d2a251f170f0500000000000000000000000000000000060e161e252a31363a3b3f424343423f3b3a36312c272119140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22283035393a3f4142413e3a39352f29241e160e06131b1e262e34383a3c3d3d3c3a38342e2b27201a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071018212a313940454f54596063676d6f727474757574726f6d66605c544d453b31281d0f050000000000000000000000000c18232e3a4653606d7985929e9e938e939e998d8073665a4d4031251a18232e39434e586062615f574d42392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000008111a242c343d454d545c60696e757c82878c8f908f8f9192908d867f726c6155493d3024170a00000000000000000000000b17222d3845515d67717e8b949f93887d70685d544a4239312b2d3a47535f697885929f9a8d8073675a4d4034271a0d000000000000000000000000000000000000000000000000000000000406070d1013141516161414110e080200000000000000000000000000000000000005111d2935414c56606b6f767876726d665e564c41352920150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e14191b22272b2d2f323536373634312d2b28221c140b07000000000000000000000000000000000000070f161b1f222327272521201e1a140d0500000000000000000000000000000000060f18202830363b4246484c4f50504f4c4846423b38322a251e170e060000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d333a4146474b4e4f4e4b4745413a3530282017111b252d30383f4446494a4a4846443f3837322b261f180f070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f181f282f353d44484f54555c60626567686868676562605c54514a423b33291f160c0000000000000000000000000007121f2c3844505c6674808d9aa59e9b9ea5978a7e7164574b3e312418121d27303d464e545655534d453c30271d1207000000000000000000000000000000000000000000000000000000000000000000000000000008121a222b333b424a50575f626b6f757b7f82858687878684807b726d625a5045392d211508000000000000000000000006111b2935404b55626c76828f979a91847a6d665c544b433d3837404b55616e7b8897a29a8a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000010406070809090807050200000000000000000000000000000000000000000713202d3946525d686f7d8284837f786d685e52463c31261b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e11171b1f20222628292a292724201f1c17110a020000000000000000000000000000000000000000040a0f1315161a1a181514120e090300000000000000000000000000000000030d18212a323a41464d5354585b5d5d5b5855534d48443d3630292017110a0300000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f444c5254585b5c5a5754524c45413a3228231c252d373f424a50535557575553504a47433d37312a2118120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d161d242932383d44484b515356585a5b5c5b5a585653504a444039302921170d040000000000000000000000000003101c28343f4a54626f7c8996a0aaa8aaa399887c6f6255483c2f22150b151e2b343d4347494847423c332a1e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000081019212930383f444d53596063696e7276787a7a7a7977736e69625b51483e34281d11050000000000000000000000000c18242f3943505a616e7b859198968f82786d665d554e46444247515d67737f8c999f93877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a868f91908b837a6d61584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121316191b1d1d1c1b1713120f0b06000000000000000000000000000000000000000000000000030709090d0e0c080705020000000000000000000000000000000000010b151f2a333c444c52575e6165686a696865615f57544f46413b3228231c150c0400000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a50565d616567686764605d56524c443e342e262d373f4951545c6062646362605c54544e47423c3329231d150d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c121821272c333839404547494b4d4e4f4e4d4c4946443f38342e271e170f050000000000000000000000000000000c17232e384754606a7784919daab3ac9f9286796d6053463a2d2013070c19222b32373b3c3b3a37312a21180c030000000000000000000000000000000000000000000000000000000000000000000000000000000000070f171e262e343c42474f54575e616569676d6e6d6d6666615e5751493f362c22170c0000000000000000000000000007121d27313e46525e696f7d869298948e81786d67605853504e535b606d7984919e9a8f8275685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c89989e9d958f82766a5f53473a2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506090c0e1010100e0a06060300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000007121d27313c454d565e61696e7275767675726e69636059524c443e342e261e160d05000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b60686d72747574716d68605d5650443f3830333f49515b62666d6f70706f6d66626058534d453f342f271f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d161b21272c2f34383a3c3f41414242413f3c3a38342e28231c150c050000000000000000000000000000000006111c2b37434e5866737f8c99a6a9a19d908377675c5145382c1f130607101920272b2e2f2e2d2b261f180f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c141c232831373d44484d535459555d606161605c5454524d453f372d241b100600000000000000000000000000010b151f2a36424d56606b707d869197938e81796f6a63605c575f626d73808d969f93877c6f62564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8592989f9f94887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f39434d575f686d747b7f828383827f7b756f6b615e5650443f3830281f170e0500000000000000000000000000000000000000000000000000000000000000030e18222b3844505b666c727a7e8182817e7a746d68615a504a42393b45515b626d72797c7d7d7c79746f6a615f575145403931281f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b10161c1d23292c2d2f323435353534322f2d2b28231c18120b030000000000000000000000000000000000000f1b27323d4855616e7b88949fa197928a7e7164554b4034281c100400070f151b1f222322211e1a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720262b32383b4246484c4b5153545453514a4746423b332d251b1209000000000000000000000000000000030d1925303b444f59606b707d858f94938f847c756f6d66696a6e757f8b929f938d80736a5f53443a3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d68707e868e929894897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090b0d0d0c0b09060503000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a100e0c0a09070604010003020101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b555f696e7a81868b8e90908e8b88827c756e68615a504a423a312920170e050000000000000000000000000000000000000000000000000000000000000a15202d3945505a606c787f868b8e8f8d8a85807a706c605c544b43424d57626d727f85888a8a8885817c756e69625b514b433a31281f160c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1012181c1f20232527282928272523201f1c17110c0700000000000000000000000000000000000000000a15212d3a46535f697683909c9e92857e716c615543392e23180c020000040a0f1315161514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151a21272c31363a3b3f40454747474644403b3a363029201b1309000000000000000000000000000000000009141f29323d474f59606b6f7a828a91969187827c797776777b818b9199928c81776c60584e4332281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56616c707c8286888882796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12151518191a19181513120f0b06000000000000000000000000000000000000000000000000000000000000000000000000050b101416171d1b1917151413110d08100f0e0e0d0d0d0d0c0c0c0c0c0c0c0b0b0b0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676e7b848e92999791898686898e89817a706c605c544b433b322920170e0500000000000000000000000000000000000000000000000000000000030f1a26313d4955616c74808c92989a9b9a98928d857e736d665d554b46525e69727f8b9297979697928e89827b726d605c554c433a31281e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10131416181a1b1c1b1a19161312100b060000000000000000000000000000000000000000000005121e2a36424d5764717e8b979f92857a6d605a50453328221c140b04000000030608090808060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e161b1f252a2d2e2f35393a3b3a3a38342e2d2a251f170e09000000000000000000000000000000000000020d17202b343d474f5960686e777e848b90938e8985838384888e93928e877f776c655b50463c3220160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a44505a616a6f757a7b7b766d665c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11151b1f2122252627262522201f1b17110e080200000000000000000000000000000000000000000000000000000000000000000810161c2023242a2825242221201d191d1c1c1b1a1a1a1a1919191919181818181817161514120e090604010000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d798491969f9e91857c797a7d81878e857e736d665d554c443b322920170e0400000000000000000000000000000000000000000000000000000006121f2b37434e5864717e8a929fa3a198928f8f91928a80786d675d554b54616e7b86929ea199928c8a8b8f8f867f756d675d554c433a30271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e0e0f0f0e0c09070603000000000000000000000000000000000000000000000000020e1a26313b4753606d7985929f988b7e7165584e453e332d261d160d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0f141a1e212124292c2d2e2e2d2c2823201e1a140d050000000000000000000000000000000000000000050e19222b353d474f565e656c71797e83878a8d8e8f8f8f8e8d8a86817c726c655b53493f342a200e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323e4850585f62676d6f6e69605c544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b171c20262b2e2f32333433322f2d2b27221b19140b0600000000000000000000000000000000000000000000000000000000000008111a21282c2f30363432302f2d2c29242a2928272727272626262625252525252525242321201e1a1413110d0701000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b96a0a8998c7f736a6d70757c838c8a80786d675e564d443b322920160d0300000000000000000000000000000000000000000000000000000815212e3a47535f6a7784919ea4a197918682828489908d82796d675d55596673808c98a39f92877f7d7e82878f8b81796d675d564c42392e23180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c3845515d6774808d9a9d9083766a5f5750443f382f281f170e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415181d1f202121201f1c1814110e090200000000000000000000000000000000000000000000071019232b343d444c535b60676d71767b7d808182838282807d7a746e6a605b534941382d22180e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202c363e464e53555d6062625f57514b42392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111722282d31373a3c3e40403f3e3c3937332d2a251f17110a0200000000000000000000000000000000000000000000000000000005101a232c33383c3d43413f3d3c3a39352f37363534343433333333323232323232323231302e2d2a2520201d18130c040000000000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e9ba8a396897d706360636a6f787f888d82796e685e564d443b32281f150b02000000000000000000000000000000000000000000000000000915222f3c4855626f7b8896a0ab9e91857b7575787d838c8f82796d675d556a7783909daa9b8e81757072757b828a8e82796d685d544b40342821180b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0d0f1011100f0c080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949f95887c6f69615a504a423a312920180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507070c10131414141312100c07050200000000000000000000000000000000000000000000000000071119222b323b414950555d6065696e7073757676767573706d68625f58504941382f261b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1a232c343c43474b51535555534d45403930271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c222833393c4347484b4c4d4c4b4846443f38363028221c140b0400000000000000000000000000000000000000000000000000000b16212c353e44484a504e4c4a48474541444343424141404040403f3f3f3f3f3f3f3e3e3e3d3b3a36302d2c29241d160d070100000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909daaa295887c6f6255585f666d737e868f837a6e685e564d443a31271d140a000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a8a9988b7e7169656c70787f879082796d665c677986929fa5998c7f726665696e757e8690837a6d665c51453f332a1d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080d111314171a1c1d1e1d1c191414110e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909c9c90827b706c605b544b433b322a21181007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080707060400000000000000000000000000000000000000000000000000000000000007101920292f383f444b5153565e61646668696a69686764605d56534e443f382f261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a222a313739404547484847423c342e271e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d333e45494e535558595a59585553504946413b332d261d160e0500000000000000000000000000000000000000000000000004101c28333e474f55575d5b58575554514c51504f4f4e4d4d4d4d4c4c4c4c4c4b4b4b4b4b4a494846423f3a39352f281f18120b03000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa296897c6f63564e545c606c707d8690847a6e695e564c43392f261c11060000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5a197867a6d605b60666d737d868f82786d606d7a8699a3a4988b7e7165575f616c717c848f82786d605a50453c2f261b11060000000000000000000000000000000000000000000000000103030200000000000000000000000000000000000004080e1114191d20212426282a2a2a282621201e19140d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8b979f9490857e736c665d554d443c332a221810070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e171d262d33394045474d5254575a5b5c5d5c5b5a5754524c47433c332d261d140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101820262b2f35393a3c3b3a373128231d150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f445055585f62656667666562605b53524d443f382f2820170f0500000000000000000000000000000000000000000000000714202c38444f5961636967656362605d555e5d5c5b5a5a5a5a5959595958585858585858575654524d4b4745403a3129241d150d030000000000000000000000000000000000000000000000000000000004101d2a3743505d6a7683909da9a3978a7d7064574a4a505a616b6f7c8591847b6e685d554b42382d2217100600000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a49e928578675d51545c606b707c858d80746c677986929fa4978a7e716457535a616a6f7b848e81746c62574e41382d22170b00000000000000000000000000000000000000010406070b0e10100f0d0a0706040000000000000000000000070c1014191e20252a2d2e31333536373735322e2d2a251f19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a26313c4753606d7985929f9f97928a80786d675e564d453c342a22180f060000000000000000000000000000000000000000000000000000000205070809070605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b141b22272f35383b4246474a4d4e4f504f4f4d4a4745413a373127221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1d24292c2d2f2f2e2b261f18120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a505a61646a6f71737372716f6c65615e56504a423a322921170e05000000000000000000000000000000000000000000000916232f3c4855616b70767472706f6d676b6a6a69686767676666666665656565656565656463615e575853514b433f352f271f150b01000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8a5988b7f7265584c3f445059606a6f7d8691837a6d675d544a3f332822180d04000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a99e928578665c514a5059616a6f7c868b7e716a7884919ea4978a7e7164574b50585f696e7b848b7e716a5f53493f33271c12070000000000000000000000000000000001070d111314181b1c1d1c1a171312100c0700000000000002080e12181c1f252a2d3036393a3d4042434443423f3b3a363029241e160e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6774808d999f93888e8d82796e695f574e463c342a21180f0500000000000000000000000000000000000000000000000003090e121415151413120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171d24292c30363a3b3d404243434342403d3a3935302b262017110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12181d1f202222211e1a150c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b606c71777b7e7f807f7e7b78736e68605b544c443b332920170d040000000000000000000000000000000000000000000a1724303d4a5763707d83817f7d7b7a79787776767574747373737372727272727272717171706e696965605d555145403931271d1207000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6a79a8d817467554b403e474f58606b707e879082796d665b50443e342a1f160c010000000000000000000000000000000000000000000815222f3b4855626e7b8897a29f9386796d605346444f58606a707d87867c6f76838f9ca4988b7e7165584b464e575e696f7c86867b6e655b5044392e23180c000000000000000000000000000000040c13181d202124272929292724201f1c18120c060000040a0f14191d23282c3036393b4146474a4d4f5051504f4c4746423b35302820170f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55616e7b87939f9387818b8f837b6e695f584e463c332a21170e05000000000000000000000000000000000000000000060c11141a1e21212221201f1b17110e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b12181d1f252a2d2e3133353637363534312d2c29241e1a150b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314151514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212b3844505b666c747e84888b8c8d8c8b8885807b726c665d564d453b32291f160c0c08080602000000000000000000000000000000000815222f3b4855626e7b888e8b8a888785858483828281808080807f7f7f7f7f7e7e7e7e7e7d7c7b7876726d67625b514b43392f24180c000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a8a99d908376675c5145383d464f59616c727f8c8f81786c605a50463c31281e13080000000000000000000000000000000000000000000713202d3a4653606d7985929fa49a887b6e6255483e464e58616b727f8b847a74818d9aa5988b7f7265584c3f454d575f6a717e8a82776c60544a4034281c100400000000000000000000000001070d161d24292c2d313436363533302d2c28231c17110a0b10151b1e252a2e34383b4146474c525457595b5d5d5d5b5954524d45413a322921170d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3946535f6975828f9b9a8d807f8890847b6f6a5f584e453c332920170d04000000000000000000000000000000000000000910171d1f252a2d2e2f2e2d2b27221b1a140b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1014191e2021242728292a2928272421201d19130f0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060709080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c38434f59606c78818a9196989997929192928d867f786d685e574d443b31281d1c191514120e090300000000000000000000000000000814212e3a47535f6977839098969598929191908f8e8d8d8d8d8c8c8c8c8b8b8b8b8b8b8b8a898785827e79726d605d554b4035291d10040000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a1ac9f9286796d6053463a343d474f59626d74818e8d80736c61584e433a2f24190f06000000000000000000000000000000000000000006121f2b3844505c6675828f9baa988b7e7265554b403d464f59626d75818e82757e8b98aa998d8073665a4d403b454e58616c74818b7e71665c5144382c1f150a0000000000000000000000030b12181f282f35393a3e41434342403d3a38342e28231c15161c20262b3036394045464d5254565e61646668696a6a6865615e56524c443b33291f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36424d57636f7c89959e9285797e8891857c6f6a5f574e453b322920160c02000000000000000000000000000000000009121a22282d31363a3b3c3a3937332d2a261f17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e111414171a1b1c1d1c1c1a171413110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b4854606b74808d939e9e938f888584868a8f928c827a6e695e564c433a2f24282622211e1a15100b0500000000000000000000000006121e2b37424d5763707d8a939a9fa29f9e9d9d9c9b9a9a9a999999999898989898989898979697928f8b857e756d675d5145392c1f13060000000000000000000000000000000000000000000000000000000714212d3a46535f697884919eaba398897c6f6356493c30353e47515b606d7983908a7e716a5f554c41352921180c030000000000000000000000000000000000000003101c28343f4a5464717e8a98a29b8e8275675c5145383e47515b606d79838a7e7c8898a29b8e817568544a3f343c46505a606d798484796d6053463c32271b0f03000000000000000000030d151d2329313a4145474b4e4f504f4d4a46444039342e261e1f272c32373b41464b5153565e6165686d70737576777675726e69605d564d453b31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1a26313b4854606b7683909d978b7e727f8b92857c6f6a5f574d443b32281e140a0000000000000000000000000000000009121b242c34393b424648484746443f38363128231c140c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0d0f1010100f0d0a070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57636f7c87939f9e948f817b78787a7d828a918f837b6e685e554b41353735322f2e2b26201c170e090300000000000000000000020e1a26313c4855616b727f889094999b9e9fa2aaa2a2a3a6a6a6a6aaa29f9e9d9b9a989795989291908f8e8b82796d6053473a2d20140700000000000000000000000000000000000000000000000000000005121e2a36424d576875818e9bacaa998c807366564c41362a353f45515c676e7b8592867c6f675d51453f332a1e150b00000000000000000000000000000000000000000b17232e3a4753606d7a85929f9f9285796d6053473b353f45515d676f7c87857b85929f9d908377665c504438343e45515d67717e8a7e7165584e43372b1f13060000000000000000010b151f272f343f434b5154575a5c5c5c5a5753514a443f3830282c33383c43474c52545c6064686e72767a7d8082838483827f7b746d685f574d433a2f24180d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c38434f5964717e8a969d908377727f8b92857c6e695e564d443a30261c11060000000000000000000000000000030c1b242d363e45494d5354555453504946423b342e261e160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e6976828f9aa49c8f82776e69676d70767d859091847a6e675d51454443423f3b3a37312d28221a140e060000000000000000000009151f2c38444f59636d727d83888c8f919298959596969c9e9f9d94989291908e8d8b8a8987868483828180807d7063574a3d3024170a000000000000000000000000000000000000000000000000000000020e1a26313e4b5864717e8b9aa4a99d908376685e5246392d2934404b555f69717e8a91847a6d605b51453c30271c1207000000000000000000000000000000000000000613202c3945515d6773808d99a2978a7e7164574d423635404b55606a73808c81828f9c9f9286796d6053463a2d35404b55616c768384776a6054473b2e221508000000000000000007121d273139404551555d6064676969686663605c54504a423c34383d44484e54565e61666d71757b7f83868a8c8e9090908e8c86817a6e695f554b41352920150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d4653606d7884919e95897c6f727f8c91847b6e685e564c42382e23171007000000000000000000000000000a151e2d363e485055575e616261605b53534d443f3830281f160d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87939f9f95887b6e655f5d60646b707a83909083796d605b5151504f4c4847423c39332b261f180f0700000000000000000003101c28333e47515b636b6f767c7f82848587888889898f949590888685848382807f7d7c7a79787675747473706b6155483c2f231609000000000000000000000000000000000000000000000000000000000914212e3b4754616e7a87939fac9f93867a6d6154473a2e232f39434d57616c74818e8f81756d62574d42392e23180c0200000000000000000000000000000000000004111d2935404b55616e7b86929f9c8f8275695f53463b3039434e58606d78838e83909da398887b6e6255483b2d2f3a43505a63707d887c6f6255493c2f22160900000000000000040d18232f39434b515b62676d717476767573706d66605c544e454044464f55585f62686e73797d82868c909399999b9c9d9d9b99928e847b6e675d51453c32261b0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161f2b3844505c66727f8b979b8f82756d74808d91847a6e685d544a3f342822190e04000000000000000000000006111c26303e48505a6164696e6f6d6c65615f57504a423a31281f150b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b9aa49d908376695f5351535961686e7982908f81756d62575d5d5b5955534d49443e37312a211910070000000000000000000b16212c353f49515960636a6f727577797a7b7c7c7d828f90837b79787776757372706f6e6c656a696867666361594f44382c201407000000000000000000000000000000000000000000000000000000000714202d3946525e687783909daaa4998a7e7164544b40342827313b45505a606d7984918b7e72695f544a4034281e140a000000000000000000000000000000000000010d18242f3a46525e6974818e999f92877b6e61574d4236313c44515c666f7d8990959faa988b7e716553493f3327313e4854606b707d706a6054473b2e221508000000000000010c161f2934404b555c606d727a7e81828382807d79726d665f574f4a51535961636a6f747a80858a8f92999d9fa4aba8a9a7a6aba39f969184796d60584e43372b1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606d7a85929e93877b6e6c78818e90837a6d665c50443e342b20160c02000000000000000000000c17232e3842505a616c71787b7b7a79746e69605c544b433a31271d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aac998c807366574d45474f565e676d7a84918b7f72696a6a6a6865625f57555046423c332b22190f06000000000000000005101a232d373f474f54585f6266686b676d6e6f6f707c89959082796d6b6a686765646261605b535c5b5a5a57554f473e33281c10040000000000000000000000000000000000000000000000000000000005111e2a36414c566673808c99a9ab9b8e8175665c5145382c1f2a333e45515d67707d8892867b6e665c51443c30261c110600000000000000000000000000000000000007131d2a36424d57626e7b86929f998e8174695e52463c2f34404a54606b74818e98a2a89b8e8175655b5044372b2c38444f59616b706b61584e43372b1f130600000000000007131d28313a45515c676d757f858a8d8f8f8f8d8a847f786e6a6159545c60646b70767c81868c92979c9fa3aba5a8a19e9c9a9998989899968e81746a5f5347392f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3845515d67737f8c97998d8174686d7983908f82786d605a50463d32281e130800000000000000000003101c28343f4a54616c717e8487888785807b736d665d554b43392f261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a3643505d697683909ca4978a7d7164574a3e3e444c555d686f7c8792867b7576777675726e6964615a534d453d342b21180c03000000000000000008111c252d353d43484e5355595c555d606262636a778390948e81756c61555a585756545350494f4e4d4d4a48443e352c21160b0000000000000000000000000000000000000000000000000000000000010d1925303c4956626f7c8996a1ab9f9285796d6053463a2d22212935404b55606b74808d9083786d60584e42382e23170b020000000000000000000000000000000000010e1a25303b47535f6973808d969f92867b6e61584e41382e39424f59616e7a86929fa99e9185786c605346392d27323d474f59616361594f463c32271b0f030000000000010d18242f3a43515b606d79818b908a868484868a90918b837c706b6160666d71777d82888e92999ea1a9a29f9c999696918f8d8c8c8b8b8c8e90877c6f62554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935404b55606d7a85929f92867a6e676e7b85918d80736c61584e443a3024190e05000000000000000006121f2c3844505c66717e8a91929797918d8680786d675d554b42382d22170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da295897c6f6256493c323b444c56606a73808d908382838483827f7b76706c615f574e463d332a1e150b0000000000000000000a131c232b32383c4347484c4f4c515455555865727e8b98938a7e71675c514c4a494746443f424141403d3c38332c231a10050000000000000000000000000000000000000000000000000000000000000813202d394653606c7884919eaba2978a7d7063544a3f33281c242f3a434f59606d7984918c7f736a5f544a3f34281e130800000000000000000000000000000000000009141f2b37424d57606d7984919e998d81746a5f53493f33303d46525e6873808d97a2a197897c6f6256493c31262b353e474f5557554f473e342b20150a00000000000004111d2935414b55626d75818e8e837d7978787a7e838d9290867d716c6d72797e83898f949b9fa39f9c9998928f8c8987848281807f7e7e7f8184878175675d5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18242f3a45525d6873808c97988d807368696f7c86928b7e716a60564c41352920170d02000000000000000713202d3a4653606d7985918c85878e9398928c82796d675d544a3f332820160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b7884919ea195887b6e6255483b38424c565d676d757e8a959087848383858788837d766e6960584e453c30271d12070000000000000000010a101921272c31373a3c3f42414547484954606d7a86929e9184796d60544a3f3c3b3937332d353433302f2c28211a11080000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6574818d9aa9a99a8e8174665b5044382b1f1d28313d45515d67707d8a92867c6f665c50443a3025190b020000000000000000000000000000000000020e1a26313c45515d67717e8a939f92877c6f655b50443c3136414c56606d7a85929ea9998d807366574d42372b232c353e44484a48443e352c22190e040000000000000613202c3945515d67727f8b8e8178706d67676d7178808b9092877e747a7f848b90959c9f9e9b9992908c8885827f7c7a787674737271727274777b7f796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2935414c56606d7a85929f92857a6d616a727f8b92867c6f685d52463f33291f1409000000000000000916222f3c4955626f7c888c7f787b818c939a948f82796d665b50443e32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b7884919ea194887b6e6155483b3f4a545d686d79818a8c928f82787677787b7f848a837b6f6a60574d42392e23180c02000000000000000000070f161b20262b2e2f332f35393a3b45515d6775818e9b968b7f72665c5044382e2d2b27222827272423201c1610080000000000000000000000000000000000000000000000000000000000000000030f1b27333f495363707d8997a2ab9e9285796c605346392d22171f2935414b55616c75828f9083786d60564c41362a1d140a0000000000000000000000000000000000000915202935404b55616c75818e96999083786c60574e4339303b45525d68727f8c97a29d918477695f53463a2d21232c33383c3d3c38332c231a1007000000000000000714212d3a4754606d7a858f82786d66605c5d60666d737e8b92928781858c91969d9e9a97928e8a86837f7c7976726f6d686967666565656667696e736d675d5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a45525d68737f8c97988c807368626d75818e91847a6d615a50453b30251a0c030000000000000a1623303d495663707c89877b6e6e757f88939f948f82786c60594f443a2f24190d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da295887c6f6255493c44505c666d7a838e87808692877b6e6a696e7279818c857c6f695f544b4034281f140900000000000000000000040a0f151b1f21222624292c2d35414b5564707d8a989e9184786d6053463a30251f1b171b1a1a171614100b05000000000000000000000000000000000000000000000000000000000000000000000b17222d3a4653606d7985929faba197897c6f6353493f33271b18242f3a43505a616e7b86928b7f72685e52463c2f261b11060000000000000000000000000000000000030d18242f3a43505a606d79849198948b7e716a5f554b403435414c56606d7a85929fa095887b6e6155483c32261b21282c2f302f2c28211a110800000000000000000b1825313e4b5864717e8b867b6e665c54565e6165686e73808c99928e92979d9996918d8985817d7a76726f6d666663605d565a5959585859575e6166605d554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935414c56606d7985929e92857a6d61606d7984918f82756c62574d42362a1e150b0000000000000815222f3b4855626e7b88887b6e616d727f8b919c948c80736b61564c41352920160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a3643505d697683909ca396897c70635649414c56606d78828f887e74818d8d8174675e61676d747f88857b6e665c51453b30251a0e020000000000000000000000040a0f12151519191d20242f3a4653606d7985929f968a7d7064564c41362a1d110b060e0d0a09070400000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c6675818e9baaa99a8d8074655b5044372b1f131d28313e47535f6974808d92857a6d61584e41382d22170b01000000000000000000000000000000000007131d28313e45515d676f7c86929f92867c6e675c514540343a45515d6773808d98a3988c7f7265584e43372b1c171c20232423201c1710080000000000000000000e1b2834414e5b6774818e83766964656668686e72767b7f84919e9f9a9f95908c8884807c7975716d686662605c545654524c4e4d4c4b4b4c4d53545953514b43392f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a45515d67727f8b96988d8073695e676f7c87928b7e71695e52463e30271c120700000000000713202d3a4653606d79858a7d7063636d737f8c939f93887d70685d52453d32271b0f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba3968a7d7063574a45525d68727f8b8d80746f7c889285796d60555d606d727f8c83796d60574d42362a1e13080000000000000000000000000003060809080d11131f2c3845515c6775818e9b9c8f8275685e5246392d2013080001000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a5464707d8a98a2ab9e9184786c605346392d2013161f2b37424d57606d7a85928e81746a6053493f33271d12070000000000000000000000000000000000010c161f2935414b555f6a717e8b91989083796d605b51443f38414c55616e7a86929f9d9083776a5f5347392e2318101416171614100b05000000000000000000000e1b2834414e5b6774818e83777171717274777a7e82868c9196969da09d90837f7b7773706d6664605d565553504a4947454141403f3e3f3f4246484c4745403931271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935404b55606d7984919e92867b6e61606a727f8c92857b6e61594f42392e23180c000000000006121f2c3844505c6674818e82756a5f636d75818e969a91847a6d60584e43372b22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9aa4988b7e7165584b4754606d7a859285796d6c7885918a7d706357515b606c77818c7f73695e52463a3025190d0100000000000000000000000000000000000104101c2834404b5564717d8a999f92867a6d6154473a2f24190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3a4753606d7986929faca196897c6f6356493c32271b0d1a26313c45525d68727f8b93877c6f655b5044392f24180d010000000000000000000000000000000000040d18242f3a434e58626c737f8c92958e81746d635b504a423b46525e6875818e9ba095887c6f62544a4034281c10070a0a0a07040000000000000000000000000a1723303d4a5663707d898f827e7d7e7f8184878b8f92928f8c89909596897d726f6a6763605c5454524c4946443f3c3a39352f3332323231363a3b403a38352f271f150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18242f3944515c66707d8a94988e81746a5f606d7883908f82756b61544a4034281d12070000000003101c28343f4a54626e7b87877c6f665c606d79849199968e81746a6054473e33281c100500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98ab9a8d8074675a4d4d5765727f8c8d8073676574818e8e817468564c505b656d7a84867b6e61564c4135291d1105000000000000000000000000000000000000000c18232e3a4754606d7a86929f998b7e7265564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2c3945515d6775828f9baba89a8d807367584e43372b1f13151f2935414c56606d7984919083786c60554b4035291d130700000000000000000000000000000000000007131d28313c46505a636d74808d93938c7f726d605c544d46414c56636f7c8995a09a8d8074665c5144382c1f140900000000000000000000000000000000000916232f3c4855616b7380898e8b8a8b8c8e918f8d8b8885827f7c83909d9184796d60585653504a4745413c3a38342e2d2c292426262525252a2d2e332d2c29241d150d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2834404a54616c76828f9992877c6f625c666f7c86928a7d70665c5144392e23180c00000000000c17232e3847535f6a74818e83786d605d676f7c87929f93877c6f625a5044392d21160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8999a39c8f827669564c535e69778390897c706365727f8b918478685e5249535d68717e8a8074685e5246392d201307000000000000000000000000000000000000000713202c3945515d6776828f9c9c8f8276685d5245392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b5564717e8b99a3ab9e9184786a6054473b2e22150d1924303a44515c66717e8a958b7e71675d51453a2f24180d010000000000000000000000000000000000010c161f2a343f48515b606c77818d92918c7f746d665e57524c4b54606b7783909d9e9285796d6053463b31261a0e01000000000000000000000000000000000714202c38444f59636e737c8184858686858482807e7b797673707d8994968c7f73695e5246443f3a39352f2d2b282321201d191a1918181a1e212126201f1d18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e3942505a626f7c8792998f82766c615f6a73808c9184796d60544b4034281c10040000000006111c2b37434e58606d7a848d80746d63606a74808d969a9083766c6155493d33271c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929f9e918478685e5254616e7b879285796d6063707c8996877a6e6154474c56616c7682857a6d6154473a2e2114070000000000000000000000000000000000000004111d2935414b5565727f8b989f92867a6d6054473a2d21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3a4754616d7a86929faca196887c6f6255493c31261a0e131e2834404a54606c7884919185796d60554b4035291d1307000000000000000000000000000000000000040d18222d364044505b656c77808c92918c80786e69615e5657575965727e8b98a1978a7d7064574d42362a1d13070000000000000000000000000000000004101c27333d47525c636b6f747778797978777573716f6c66666b7683909c92867b6e61574d42362e2c2924201f1c171413110d080c0b090e121415191413100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303e47535f6a74808d97948a7e71685d606d7984918b7e72665c5145382c1f150a00000000000f1a26313c45525d686f7d878c7f736e60606d7984919e958a7d7064594f44382c21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945515d677783909da196877a6d61545764717d8a908376665c626e7b88958a7d7063574a43505a626f7c877d6f6356493c3023160900000000000000000000000000000000000000010d18242f3b4854616e7b8795a0998a7d7064574a3d3025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d687683909ca9a8998c807366574d42362a1e120c18232e3944505b66717e8b968c7f72675d51453a2f24180d0100000000000000000000000000000000000007101b2427333f49535b656c747f8791928d827b736d68666464656b6f7a86929f9c8f8275695f53463a2f24180d00000000000000000000000000000000000b16212c35404a52596063676a6c6c6c6b6b69676462605b5963707d8995988e8174695f53463b31251d191312100b0607040100000000020507080d07060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2b37434e58606d7a84919e92857a6d615d67717e8a9184796d6053463c32271b0f03000000000915202935414c56606b717e888c80746d6767717e8a959d9083766b6054483d32271b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b556774818d9aa8978a7d7064575966737f8c8e82756854616e7a87948c7f7265594c3f4754606a6f7c6f6b6054483b2f22150900000000000000000000000000000000000000000714212d3a46535e697784919d9a8d817467564c41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c5665727f8c98a8aa9d908377695f53463a2d211407121c28333f4a54606d7884919285796d60554b4135291d130700000000000000000000000000000000000000091217222d384149535b606d727d848e939086807a7572717172767c75818e9b9f93877b6e61554b4035291b11060000000000000000000000000000000005101a232e3840464f54565b5d5f605f5f5e5c5a5855535055616b7783909d92877b6e61574d42362a1e1308060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1b26313c45515d67707e8a93978e81746c61606c7883908b7e7165584e43372b1f130600000000030d19242f3a434f59616c727f8b8c81796e696c7883909d95897d7063594f43382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3e4a5764717e8a99a49a8d807367565a6774808d8d8174675a606d7a87938c807366594d40434e58606b6f6b60594f44382c201307000000000000000000000000000000000000000005121e2a36424d576774808d9a9d918477685e5246392d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303b4855626e7b8896a0aca095887b6e6155483b2f24180d0b17222d3844505c66717e8b968c7f72675d51453a2f24180d000000000000000000000000000000000000000006111b262f384149505b626b707a818990928c86827f7e7d7f8382757d8996a0998d8073675d5145382d22170b000000000000000000000000000000000008111c262e343d4348494e5152535352514f4d4b4846444f5965717e8b97998e8174695e53463a2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202935414c55616c75818e97938a7e71695e66717e8a9083776a6054473b2e221508000000000008131e28313d47505a626d727e878e837b726d707d89949c8f82766b6054483b3025190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939f9d908377685e5a6774808d8e81746754616e7a87948d8174675a4e413d464f59606360594f473d32271b0f030000000000000000000000000000000000000000020e1a25313d4a5763707d8a99a096877a6e6154473b2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f697784919eaaa7988b7f7265554b4035291d1106111c28343f4a54606d79849192857a6d60554b4135291c110600000000000000000000000000000000000000000a141d262f383f44515960686d757d83898e928f8c8a8a8c8d80747884919e9f92857a6d6053493f33271b0f0300000000000000000000000000000000000a141c222b32383b3c4144454646454442403e3c393d4753606d7985929e92867b6e61554c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d19242f3a43505a616d7a85929e92857b6e67606d788491887c6f6255493c2f24190d0100000000010c161f2b343e48515b626c717d8590867f786f7683909c94897c6f63564d42362a1b11090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d687683909d9f93867a6d615966737f8c8f8276665b626f7c88958e8174685b4e41343d474f5456544f473d352b21160b000000000000000000000000000000000000000000000914202d3a4753606d7a86929f978a7d7164574a3e2f23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576773808d9aaaa99c8f8376675d5145392c2013060c17232e3845515c66727f8c978c7f72675d5145382e23170c0000000000000000000000000000000000000000020b141d262d333f474f565d616b6f767c8185888a8b8a88837a6e737f8c99a2978b7f72655b5044372b1f15090000000000000000000000000000000000020a101921272c2f30343739393938383634312f2d3845515c6774808d9a998d8074675d5145392c20160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313e46525e68707d8a92979083796d676673808c8d807366564c4135291d11040000000000040d19222c363f49515a626b707b838c8c837c757d89959b8f8275695e5246382d221a140d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c5666737f8c99a4998b7e71645564717e8a9285796c6064717e8a978d8074675a4d4134353d44484948443d352b23190f04000000000000000000000000000000000000000000000613202c3945515d677683909c9a8d807467554b4034291c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313d4a5663707d8998a3ac9f92867a6d6053473a2d20140906111c2834404b54606d7a869292857a6d60544a3f34281c10030000000000000000000000000000000000000000020b141b2227353d444c525960636b7074797b7d7e7d7b766e686e7b87939f9d9184786c6053463c31261a0f02000000000000000000000000000000000000070f161b1f2223282a2c2d2c2c2b292725222934404b55626f7c88959f92857a6d6054473d33271c1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a36414c56616b74808d95958f82796d686f7c89918477685d5245392c20130700000000000007101a242d373f48505961696e787f868e89827c83909d92867b6e6153493f332a261f19130b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303c4956626f7c8997a19b8e8275675c616e7b8795897d70666874818e998c7f7366594c40332b32383b3c3b38322b23191107000000000000000000000000000000000000000000000004111d2935404b5566737f8c999d908376675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914202d3a4753606d7986929faca3998a7d7063574a3d31261a0e000c18232e3945525d6874818e978c7f72665c5044382c1f150a000000000000000000000000000000000000000000020a1117232b323a41464f54596063666c6e7071716f6a615e6976828f9ca0968a7d7063584e43372b1e130800000000000000000000000000000000000000040a0f1315161b1e1f20201f1e1c1a1818232f3947535f6a7783909d988b7f7265594f44382c1f140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1925303a444f59606d78839096948f827a73707a8795877a6d6054473a2d2114070000000000000009121b252d363f474f575f666d727b81878e8684919e998c7f73655b50443d363129241e17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813202d394653606c7985929e9f9285796d605e697683909083786d6e7b8692998a7d7064574a3d3124272c2f302f2c2721191107000000000000000000000000000000000000000000000000010d18242f3c4956636f7c89989f9286796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6776828f9ca9ab9a8d807467574d42362a1e120507121d2935414c56626f7c88959184796d6053463c32261b0f0100000000000000000000000000000000000000000000061119202830353d44484f54545b6062646464625f585764717d8a97a19c8f82766a5f53473a3024190d000000000000000000000000000000000000000000030709090e1112131312110f0d07121d2b37434e5866727f8c9a9d9184776b6054483b3025190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323e45515c666e7a849198949085807d808d96897c706356493d3023160a000000000000000009131b242d353e454d545c60696e757c82878e93999e9184786c60544f46423b353027221b140b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b6675818e9ba2988a7d70645764707d8a938e817a7a82909892867a6d6054473a2d211b20222322201b160f0700000000000000000000000000000000000000000000000000000713202d3a4653606d7985929f99897c6f6356493c30231608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b5566727f8c99a9aa9e918477695f53463a2d211407000d1924303a47535f6a778390968a7e7164584e43372b1d13070000000000000000000000000000000000000000000000070e161e242932383d44484a50535557585755534e53606d7985929e9f94887b6e62564c4135291c1207000000000000000000000000000000000000000000000000010406060605050301010f1b26323c4854616e7b87939f95897d7063564d41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202834404b545e686f7c86929897928c8a8d92978a7e7164574b3e3124180b00000000000000000109121b232c333b424a50575e616a6f757b8187939996897d70666059534d45413a332d261d170f080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5464707d8a97a29b8f8275695e616c75818e938e87879094978e8174685d5245392c201313151615130f0b0400000000000000000000000000000000000000000000000000000006131f2c3845515c6676838f9c988c7f7265594c3f3024190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3c4955626f7c8897a1aca096887b6e6155483b2e2215080008131e2b37434e5865727f8b999083766a5f54473a2f24180d010000000000000000000000000000000000000000000000040c131921272c3238383f4446484a4b4a484745515c6674808d9aa69a8d8174685d5245392e23180c000000000000000000000000000000000000000000000000000000000000000000000a15212d3a46535e697683909c9b8f8275685e5246392d20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18232e39424c565f6a6f7d8692979f99969a9d988b7f7265584c3f3225190c0000000000000000000009111a212930383f444d53585f626a6e757c87939b8f8178706b615f57524c443f382f29211a110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3a4653606d7985929f9f92867b6e6861606d79828d9293939a9691857b6e61564c4135291d11070909090703000000000000000000000000000000000000000000000000000000000004101c2834404b546673808c999b8e817568564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000200000713202d394653606c7985929eaba8988b7e7165584b3e3025190d01020f1b26323c4754616d7a869295887c6f62554b4135291d110400000000000000000000000000000000000000000000000002080d161b21272c2d3338393b3d3e3e3c3a404b54626f7b88949f9f92867a6d60544a4034281b110600000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5765727e8b999f92867b6e6154473d32271b0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303b444e58606b707d8591969fa3aba8988b7e7165584b3e3225180b0000000000000000000000080f171e262e343b42464e53585f626a76828f9c938f837d756e69605d565049413b332c231b130a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6674818e9ba3998f827a706b63676d7980868b8c8c8a847c6f695e52433a2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000c18232e3d495663707c89999e918477685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000020507080c0e0b0a05121f2b3744505b6575828f9ca8a79b8e817468564c41362a1e1105000a15202d3946525d6875828f9a8e8174675d5145392c2014090000000000000000000000000000000000000000000000000000040b0f161b1c22282b2d2f3131312f2e3947535f6a7683909ca2988c7f72665c5144382d22170b000000000000000000000000000000000000000000000000000000000000000000020e1a25313b4754616d7a86929f998c7f7266584e43372b1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e29323c464f59606b707c848d92999b9c96897c6f6356493c30231609000000000000000000000000060c151c232831363c43474e535864707d8a979e959089827b736d68605b534d453e352d251c140a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b5463707d8997a19e948f857d736d60676d737a7e80807d796f6a5f574d4231281e13080000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929f96877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000003090e121415191b1817150f1b27333f495366737f8c99abaa9e918477685e5246392d2013070005111d2935414c5664717e8b9992857a6d6054473b30251a0e02000000000000000000000000000000000000000000000000000000040b1011171c1f2022242524222b37434e5864717e8b97a29e9184796d6053493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000914202d3946525e6876828f9c9d9184776a605447392e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17202a343d474f59606a6e7980878c8e908e84786c605346392d20130600000000000000000000000000030a11171f252a31373c434653606d7985929e9184838b86807a726c655e574f473f372e261c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3a4653606d7985919ea69e97928880746d6660686d717373706d665f584e453b301f160c0100000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d677683909c96897d7063564a3d30231708000000000000000000000000000000000000000000000000000000000000000000060e141a1e212226282524211d17222d3d4a5663707d8999a4aca096877a6d6154473a2e21140700010d1924303a4754606d7a8692988b7e7164574d42362a1e1105000000000000000000000000000000000000000000000000000000000000060b0f1213151718171a26313c4753606d7985929ea1968b7e71655b5044372b1f160b00000000000000000000000000000000000000000000000000000000000000000005111d2a36414c5665727e8b99a095897c6f62554b4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18222b353d474f585f676d737b7f8283817c6e665b5044382b1f1206000000000000000000000000000000060c141a20262b313845515c6674818e9a92867a7e858d857e776e696159514940382e251c1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121f2b3844505c6674808d9aa79f92878f8c81786d665d6164666664605c544e463c33291f0d040000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b556673808d99998c7f7266594c3f3025190d01000000000000000000000000000000000000000000000000000000000000020a0f181f262a2d2e323531302d2822212d3a4754606d7a86939faca8978a7d7064574a3d3124170900000813202c3945525d6876838f9c8f8276695e52463a2d2014080000000000000000000000000000000000000000000000000000000000000000030606080a0b0a151f2c3845515c6774808d9aa49d9184786c6053463d32271b0f040000000000000000000000000000000000000000000000000000000000000000010d1925303b4754616e7a86939f9a8d8174675c5145382c1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019232b353d464e555d60686e727576756e6a5f544a3f33281c0f030000000000000000000000000000000003090e151b202834404b5463707d8997998b7e717a80878b827b706b625b524a40372e241b10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54626f7c8995a09c8f82828e8e81786d605b5859595753514b423c342a20170d0000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3d4a5663707d89999b8f827568564c41362a1e11050000000000000000000000000000000000000000000000000000000000010a141c212a31363a3b3f413e3d39342d242c3945515d677784909daaa69a8d8073675a4d403025190e020004111d2935414c5665727f8c9893877b6e6154473b3025190d010000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55626e7b87939fa0958a7d7064594f44382c20150a0000000000000000000000000000000000000000000000000000000000000000000814202d3946525e687683909c9f9285796d6053463a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019232b343c434b51565e6166686968625f584e42382d22170b00000000000000000000000000000000000000040a0f18232e3a4653606d7985929c8f82756d747c838d857d726d635c524a40362d22180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e384754606a7783909d9f92857a818e8e81746d635a504d4a46454039302a22180e050000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929e918478685e5246392d20130700000000000000000000000000000000000000000000000000000000000a131c262e333b4246484c4e4b49453e362d2935414c556774818e9aa7a99c8f837669564d42362a1e110500010d19242f3b4855626e7b8897998b7f7265564c41362a1d110500000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3947535f6976828f9ca79d9083766b6054483d32271b0f04000000000000000000000000000000000000000000000000000000000000000005111e2a36414c5665727f8b9aa2978a7d7064554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071119222a313940454d5254595b5d5b55534e463c2f261c110600000000000000000000000000000000000000000007121f2c3844505c6674818e9b92867a6d6a6f788088877f736e635c52483f342a1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2b37434e5865727e8b98a2988a7e78818e8c7f726c61584e433a38342e271e181006000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677683909d96877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000050e1c252e3840454d5355595b585650483e34282f3f4c5965727f8c98a5ab9e928578695e52463a2d20140700000814212e3a47535f6a7885929c8f8376685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764707d8a96a19f95897c6f63584e43372b20150a0000000000000000000000000000000000000000000000000000000000000000010d1925303b4854616e7b87939f9b8e8175675d5145392c201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f181f282f353b4146474c4f504e4847433c332a1d140a0000000000000000000000000000000000000000000003101c28343f4a5464717d8a99998a7d7164666d737e868c80736e635a50463c30271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b27323d4754606d7a85929f9c8f827578828f887e716a60564c413529231d150c06000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b556773808d9a968a7d7063574a3d30241708000000000000000000000000000000000000000000000000000000020c16202e37404a52575f61656864615a5045392d303d4a5663707d8996abada197877a6e6154473b2e211408000006121f2b37434e586875828e9b92867a6d6154473a2e2114090000000000000000000000000000000000000000000000000000000000000000000000000000010e1a26313c4653606c7884919ea79c8f82766a6054473c32261b0f0300000000000000000000000000000000000000000000000000000000000000000814202d3a46525e697683909d9f92867a6d6053473a2f24190d0a070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d161d24293036393b3f4243423b3a37312a21180b0200000000000000000000000000000000000000000000000c17232e3a4754606d7a86929b8e8174665c606c707c858c80736c62584e43392e23180c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c3945515d6774818e9a9f92867a6d7a8491867c6f685d52453e33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3d4a5764707d8a9a998c7f7366594c403025190d01000000000000000000000000000000000000000000000000000008131e28323f49525c63696e7274716c6156493d302e3b4854616e7b8799a3aea996897c706356493d3023160a0000020f1a26313f4c5965727f8c98998b7e7164584b3e31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000009151f2b3844505b66727f8c98a29f94897c6f62584e43372b201509000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5766727f8c99a2988a7e7164564c4135291d1a171413100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c12181f252a2d2e333536352f2e2b2620180f060000000000000000000000000000000000000000000000000613202c3945515d677683909c9285796c605a616a6f7c858b7e716a5f554b4034281e140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b55626f7c88959f998b7f726f7c8691847a6d605a50453b31251a0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939b8f827568564c4135291d110500000000000000000000000000000000000000000000000000010d1925303a44515b636e737b7f817e7164584b3e312d394653606c7986929faca4978b7e7164584b3e3125180b0000000a1723303d4a5663707d89969b8e817468574d42372b1e12050000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616d7a86929fa69c8f82756a5f53473c31261a0f0300000000000000000000000000000000000000000000000000000000000000020e1a25303b4855626e7b8895a09b8f8275685d5245392c232724201f1d18120f0b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d14191e202126282a2822211f1a150e06000000000000000000000000000000000000000000000000010c16202935414c5566737f8c9997897c6f625658606a6f7c86867c6f675c51453b3025190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a47545f6a7783909d9d9184786c727f8c8e81756c61574d42362a1f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687784919d918478685e5246392d2013070000000000000000000000000000000000000000000000000005111d2a36414c56636d7380868c8a7d7064574a3d312b3844505b667784919eaaa6998c807366594d4033261a0d0000000714212e3a4754616d7a87989e918478695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e6874818e9aa49e94887c6f62584e43372b1f140900000000000000000000000000000000000000000000000000000000000000000914212e3a47535f697784919d9f92867a6d6054473a342e34302d2c29241d1b160f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e111414191c1d1b1514120f09030000000000000000000000000000000000000000000000000008131e28323d474f56636f7c8998998d807366564e58606a707e8a83796d60564c41362a1e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2b37434e5864717e8a96a096897d706c77828f8a7e71695e53463e31281d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c566774818e9a96877a6d6154473a2e211407000000000000000000000000000000000000000000000000000713202d3946525e68727f8c9298877a6d6054473a2d28333f4a54697683909ca9a79a8d8174675a4e4134271b0e0100000713202d3946525e687985929f96887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414c56626e7b87939fa69b8e81756a5f53473b31261a0e020000000000000000000000000000000000000000000000000000000000000006121e2b37424d576673808c99a3998b7e7164564c454042403d3a38352f2c27211b150c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080c0f100f080806020000000000000000000000000000000000000000000000000000010d19242f3a444f5960636d7985929d908377685e524e58616c74808c7f72685e52463a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b26323c4653606d7984919e9c8f8275696e7a8592857b6e615a50433a2f24180d0300000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303e4b5864717e8b9796897d7063564a3d30231707000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929f928579685d5245392c222d424f5c6875828f9ba8a89b8e8275685b4f4235281c0f02000005111e2a36414c566a7784919d978a7e7164574a3e31241706000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303a47535f6a75828f9ca79f93877b6e62574d42362a1e140800000000000000000000000000000000000000000000000000000000000000030e1a26313c4955626f7c8896a19c8f8276685e53514b4f4d4a4745403938322b272018120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606b706b7683909c93867a6d615447505a606d7983857a6e61564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3844505c66727f8c979f93877b6e68717e8b8f82756c61554b4035291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8897998c7f7266594c3f2f24180d010000000000000000000000000000000000000000000000000c1825323f4b5865727e8b989e9184786b564c4135292834414e5b6774818e9aa7a99c8f8276695c4f4336291c10030000010d192530434f5c6976828f9c9a8d8073675a4d402d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2b37434e5863707c89959fa4998e8175695f53463b3025190e010000000000000000000000000000000000000000000000000000000000040d151d242e3b4754606a7884919e9f92867a6d61605c545c5a5753514b48443d373229241d150d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d68707c7073808d99998a7d7164574a45515c666f7c878074685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606d7a85929f998d8174696c7782908a7e71675d51453b31251a0e03000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697885919b8e817568554b4035291d11040000000000000000000000000000000000000000000000000f1b2835424e5b6875818e9b9d9184776a5e514430252734414d5a6774808d9aa7a99c908376695d5043362a1d1003000000081c2935424f5c6875828f9b9c8f82766953493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000020f1a26313c4854606b7683909da79f92877b6e61564c41362a1d120700000000000000000000000000000000000000000000000000000000040d161f272f353e424e586774808d9aa3998b7e726d6d666b696763605d55544f47433d352f271f180f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a867e707d8a979a8e817467574d424b54606a7481857a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3845515d6773808d999f92867b6e656e7b879184796d60574d42362a20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576875828f9b918477675d5145392c201306000000000000000000000000000000000000000000000000101c2936434f5c6976828f9c9e9185786b564c41362a2733404d5a6673808d99a6a99d9083766a5d5043372a1d10040000020f1b2835424e5b6875818e9b9d918477655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000915202c38444f5963707d8a95a0a3998e8174685e5246392f24180d010000000000000000000000000000000000000000000000000000020b161f28313940454f545b636f7c8997a19c90827a7a7979787573706d67636059544e454039312a21191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d68768384797a87969e918478695e5346424e58616d7a847d706356493d3023160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414b55616e7b86929f988d8074686a74808d8d8073695e53463c31261a0f03000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313f4c5965727f8c9893867a6d6053473a2d2014070000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9c9f928579685e5246392d2633404d596673808c99a6a99c908376695d5043362a1d10030000000f1b2835424e5b6875818e9b9f9285786c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000003101b27323d4855616b7783909da79f92867a6e61554b4035291d100400000000000000000000000000000000000000000000000000000a141d28313a434b515961666c717885929e9f9490878786858482807d79756f6b626058514b433c332b2219100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5663707d89807885919e96877b6e6154483d46525e686d79706b6054483b2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18242f3a46525e6874818e999f92867a6e616d7a8592867b6e61584e43372b201509000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c89989a897c6f6356493c302316070000000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa298877a6e6154473b2e2633404d596673808c99a6a89c8f8275695c4f4236291c0f030000060c152935424f5c6875828f9ba398867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c38444f5963707d8a959fa3988d8073675d5145392c20160a0000000000000000000000000000000000000000000000000006111c262f3a434c555d606b70787e8287939fa69d90838283868a8f8d8a86817c766f6a605d554d453d342b22180e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a4855616b7683867c828f9c978b7e7164584b3e414c565e666d6660594f44382c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2a36414d56616e7b87929f988d80736968727f8b8e81746a5f53473c31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798592988b7f7265584c3f2e23180c0000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a796897c6f6356493c2e2333404d5a6673808d99a6a89b8e8275685b4f4235281c0f0200080f181e2b37424d576a7683909daa94877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e4855616b7683909da59f9285796d6053473d32271b0f030000000000000000000000000000000000000000000000000b17222d38424c555d676d747d838a8f879297a19c8f827677797d828790928e89837c746d675f574e463d342a20170b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2c38444f5964717e8a82808c999a8e817467564c413a444c545c605c544f473d33271c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1925303b46535f6974818e999f92867b6e616d798491877c6e62574d42372b1e130800000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c667683909b8e817468544b4034281c100400000000000000000000000000000000000000000000000815222f3b4855626e7b8895a0988b7f7265544b40342834404d5a6773808d9aa6a79a8d8074675a4d4134271a0e0108111a2129303947535f697885929ea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c38444f5963707d89939ea2978b7e7265594f43382c1f13070000000000000000000000000000000000000000000000030f1c28333f4a545d676d79818a918f837b85929e9f92867a6d6d70757c828c9394908780796e6960584e463c32291d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101c27333d4653606d79858e818e9b9e918477685e5246393a424a5053504a423d352b21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2a36424d57616e7b86929f988e81746a66717e8b8f8275695f53473a3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a546673808d99908377665c5145382c1f130600000000000000000000000000000000000000000000000814212e3a47535f6a7783909d9c8f8275665c5145382c34414e5a6774818d9aa7ab988b7e7265584b3f3225180c05101a232c333b424c56616e7b8897a1a994877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c28333e4854606b75828f98a39d9084776b6054483b2f221506000000000000000000000000000000000000000000000006121f2b3844505b666d79828e938f827974818d9aa3998b7e7265636a6f777f879298938d847b6f6a60584e443b2f261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2c3845515c6673808d85929fa096877a6d6154473a30383f4446443f38302b23190f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b46535f6974818d989f93877c6f626d788491877b6e62564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3d4a5763707d8a9a9286796d6053463a2d201307000000000000000000000000000000000000000000000006121e2b37424e5764717e8a959f9285796d6053463d3035424e5b6875818e9ba8a399897c706356493d3023160a0b16212c353e454d545d68727f8c99a9a197867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17212c38444f59616e7b86929fa095897c6f6356493c2e23170c0000000000000000000000000000000000000000000004111d2935414b55606c78828f949083796d6f7c8996a19c908376695e5f656c737d8692989691857c6f6a5f564c42382d22170b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b54616e7b879298a2a8978a7d7064574a3d2d2e34383a38342e261e19110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2a36424d57616e7b86929f998f82766b66717e8b8d8174685d5246392d20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a869399887c6f6255493c2f2216060000000000000000000000000000000000000000000000020e1a26313c4653606c7883909a978a7e7164594f4239333f4a546975828f9ca89f92867a6d6054473a2d211407101c28333e474f575f666d7a85919eab9e928578675d5145392c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b27323d46535f69727f8c949f9a8d807467544a3f34281c10030000000000000000000000000000000000000000000613202c3945515d67727f8c9492877c6f676c7884919e9f93877b6e61535b606b707d8692999792857c6f685e544a3f33281e140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3946535f697683909caaa6998d80736653493f3327282c2d2c28231c150c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1a26313b46525e6873808d979e94897d70666d798491867a6d6154473c32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d68778491978b7e7164584b3e2d22170b00000000000000000000000000000000000000000000000009151f2b3744505b656f7c88939c8f82766b60544a403844505b667783909daa9c8f8276685d5245392c20130714202c38444f5961696e78818f97a1ac9c90837669554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212a36424d57606d788290979e918477665c5044382c1f12060000000000000000000000000000000000000000000714212d3a4754606d7a85929b8e81746a5f6573808d99a49a8c7f7266585059616b707e87939f9791857a6e665b50443b3025190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36424d5764717e8b98a2a99c8f8376655b5044372b1f1f201f1c17110a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2a36414d56606d7a85929e9d9183786d66727f8c8c7f7266584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c566774818d9a8d80746753493f33271b0f030000000000000000000000000000000000000000000000030f1b27333f4953606a73808d9394897d70665c5147434653606c7985929fa2988b7f7265564c4135291d110916232f3c4855616b707b828f939ea9a49a8c807366594d402f24180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1a26313b44505c666e7b8591979386796d6053463a2d2013070000000000000000000000000000000000000000000b1824313e4b5764717e8a9799897d706358626f7c88959f9d9083776a5f534f59616c73808c949f978f82786c60564c41362a1e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26313b4753606d7985929fab9f9285796c605346392d20131312100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1925303b45515d67727f8b95a0958c7f72696d7a869184776a6054473b2e22150a0000000000000000000000000000000000000000000000000000000002060808080705020000010d1924303e4b5764717e8a97908376655b5044372b1f12050000000000000000000000000000000000000000000000000b17222d38414e58606c77818f959183786d605c544e4f57626f7c8898a29f92857a6d6154473a2f24190d0a1724303d4a5763707d878f949ea6a89f93877b6e6255483b2f2215070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f28343f4a545e696f7c858e8f8477665c5044382c1f12060000000000000000000000000000000000000000010e1a2734414d5a6774808d9a9286796d60535f6a7783909da095887b6f62544a505a606d788290999f948b7f72685e52463a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c3945515d6774818d9aa7a298887b6e6155483b2e2215080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2935414c55606d7883919d9f92867b6e6875818e887c6f6255493c31261a0f030000000000000000000000000000000000000000000000000003090e1214151514120e090b090815212e3b4854616e7b87969285796c605346392d20130600000000000000000000000000000000000000000000000006111b262f3d44505b656d79838f938d80746e62605859606974808d9aa1978c8073685e5246392d1e13080713202d3a4653606d788390969ea6a0968e81746a5f53473a2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b17232e38424d575f6a6f7b81827c6f62544a3f34281c10030000000000000000000000000000000000000000020f1c2835424f5b6875828e9b918477665c515865727e8b98a2998d8073665b5044505c666e7c87929f9f92857a6e61564c41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55626f7c8895a0aa978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d19242f3a44505c66707d89939e988f82766d707d898d807367584e43372b1f1206000000000000000000000000000000000000000000000000060e151a1e212221211e1a1917161513202d3a46525e6978849198887b6e6155483b2e22150c0c0c0b0a0807060300000000000000000000000000000000000a141d27333f49535d676d79818d938d80766f6a69696b707b86929f9991857a6d60564c4135291d0c0106121f2b3844505c666e7b848f94989590847a6d61584e43372b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303b454e585f696e74766f6a605442382e23170c000000000000000000000000000000000000000000010e1b2834414e5b6774818e9a90837669544b54606d7a86929f9e9184786c6053464a545f6a73808d97a2988d8074685e5246392d20140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f394754606a7783909da8998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28343f4a54606b75818e989f948b7e726c78849184786a5f53473a2e2115080000000000000000000000000000000000000000000000060f181f262b2d2e2e2d2a2526242321201f2a36424d576874818e978a7d7064574a3d3124191919181817151312100b06030000000000000000000000000000020b17222d38414b555d676d788088908d827c787676787d8491989892877d70685d52443a3025190d0003101c28343f4a545e696e7a82888b8a837b6e685e52463c31261a0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e29333c464e575e6167696260584e4330261c1106000000000000000000000000000000000000000000000c1925323f4c5865727f8b988f8376695c50525d6875818e9ba196897d7063554b424e58606d7a85929e9f92867a6d6154473c31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8b96a19b8e8275685b4f4235281c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c17232e38424f59616e7b86929f9f92867c6e74818e887b6f6255483c2f22150900000000000000000000000000000000000000000000030e18212a31373a3b3b3a363133312f2e2d2b28303e4b5864717e8b978c807366594d402f2425252525252422201f1c17120f0b060000000000000000000000000006111b262f3a434b555d666c737c838b8f8985838384899196948f867e706b60564c4132281e130800000b17232e38424d575e686e757c7e7d786e695e564c41332a20150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c17212a343c454d52545b5c56544e463d321e150a00000000000000000000000000000000000000000000000815222e3b4855616e7b88939083776a564c4c56636f7c8995a09b8e8174675d514545525d68727f8c98a2998c7f7266574d42372b1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b27323c4653606d7984919e9d9083776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303d46525e69727f8b949f98908379717e8a8b7e7265584b3f3225180c0000000000000000000000000000000000000000000009151f2a333c424748484642413f3e3c3b3a38342e3b4854616e7b87968f827568554b4135323232323231302e2d2b28231f1b17110a020000000000000000000000000a141d28313a434b545b606a6f787e83888b8e8f90908e8c88827c706c61594f443a2f20160c02000006111c26303b454d565e616a6f71706c665e574d443a3021180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18222a333b4246484e4f4947433d342b200c0300000000000000000000000000000000000000000000000714212d3a46535f6975818e928578685e524854606b7783909d9f92857a6d605347414c56606d7a86929f9d908477695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3844515c66717e8a949e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2a36424d57606c78839098a0958f82787b888e8174685b4e4135281b0e020000000000000000000000000000000000000000020e1a26313c454d535554534d4e4c4a494846443f444346525e69778491918477675d51453f3f3f3f3f3f3e3d3b3a38342e2b27221b140b050000000000000000000000020b161f283139424a505860666c71777b7f81828383817f7b766e6a615a50473d32281e0e04000000000a141e29333b444d52585f626563605b544d453b32281e0f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061018212930363a3b41433c3b37322b22190f00000000000000000000000000000000000000000000000005121e2a36424d57616e7b8592877a6e6154474f5965717e8b96a1988b7e7165584e4345525d6874818e9aa095887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a54616c76828f958f8275695c4f4236291c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1a25303b44505b666e7b86929f9e948f817c899083776a5d5044372a1d1104000000000000000000000000000000000000000006121e2b37424d575f61615e575b5957565453504a50504f4d576774808d93867a6d60544c4c4c4c4c4c4b4b4a4846443f3937332d261d170e050000000000000000000000040d161f272f383f444e545b6064696e727476767675726e6a625f5750483e352b20160c0000000000020c172029323b41464e5355585753504a423b332920160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f252a2d2e34362f2e2b2720191007000000000000000000000000000000000000000000000000020e1a26313b46535e696f7c858a7d7164574a4653606d7984919e9d9083776a605447414c56636f7c8997a1988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3942505a616d7a8388867c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f28333f4a545f69717e8b939e9e938f898f9185786b5e5245382b1f120500000000000000000000000000000000000000000814212d3a47535f696e6e69696866646261605c545d5c5c5b5b63707d8a98897c6f63595858585858585858575553504a46443f382f2920170d040000000000000000000000040d151d262d333d424a5053575f626567696a696866625f58534e453e362c23190d04000000000000050e17202930363c4347494b4a46443f382f2921170e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1e2021282923221f1b150f07000000000000000000000000000000000000000000000000000009141f2a36424d57606a6f7a7f7f7366594c45515c66727f8c969f95897c6f62574d424653606c7885919e9b8e8174685b4e4135281b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303e46525e686d787b7a6f6a6054473b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17222d38424d57626d75818e95a09e9b969f9285796c5f5246392c1f130600000000000000000000000000000000000000000815222e3b4855616e7b7b78767472716f6e6d666b6a69686867676d7986928b7e72656565656565656565646361605c54535049413b33291f160c010000000000000000000000030b141c22282f383f44464d5355585b5c5d5d5b5955534e47423c332c231a11070000000000000000050e171f252a32373b3c3e3d3938332d261d170f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151b1c1615130f0a04000000000000000000000000000000000000000000000000000000030e1a25313b454e5860686e73736d63574b404b54606d7984919e9b8e8175695f534644505b6574818e9a9c908376695d5043362a1d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2a36414c565e666c6f6d6860584e43382b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3b45505a606d79839197a1aaa29e9184786b5e5145382b1e120500000000000000000000000000000000000000000b1824313e4b5764717e878583817f7d7c7b7978777776757574747475828f8d817472727272727272727271706e6d6664605b534d453b31281d1307000000000000000000000000020a11171d262d33383c4247484c4e4f50504e4c4847433c37312a211a110800000000000000000000050d141920262b2e2f32302d2b28221c140b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080e100908060300000000000000000000000000000000000000000000000000000000000009141f29333d464e565e616666635b51463945515d67727e8b959f92877b6e61584e43495364717e8b979e9184786b5e5145382b1e1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1925303a444c545b6062605d564e463d32271b130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a333f45515d676e7b859298a1a99d9083766a5d5043372a1d100400000000000000000000000000000000000000000714202d3a4753606d798491908e8c8a89878685848383828181818080828f91847f7f7f7f7f7f7f7f7f7e7e7d7b7976706c655e574d433a2f24180d0100000000000000000000000000060b141c22282b31373a3b3f41434343423f3b3a37312b2620180f0800000000000000000000000002080e151b1f21222524201f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212b343d444c525459595751494035404b55606d7883909d998e81746a5f53474855626f7b88959e9285786b5f5245382c1f12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a424a50535554524c443d373129241d160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b18212935414b555f696f7c8692979f998d8073665a4d4033271a0d00000000000000000000000000000000000000000006131f2c3945515d676f7c8691969997959a939291908f8f8e8e8d8d8d8f9496918c8c8c8b8b8b8b8b8b8b8b8a8886827d776e695e554b4135291d11040000000000000000000000000000020a11171c1f262b2e2f323436373635332f2e2b26201a150e06000000000000000000000000000000040a0f131516181713120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19222b323b4146474c4c4b4640372f3944505c66707d89939f92877c6e625a504653606d7986989e9184786b5e5145382b1e120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202930383f44464b4e4e4c4847433c352f281f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18242f3a434d57606a6f7d858f9493897c6f6256493c2f23160900000000000000000000000000000000000000000004101d2935404b55606a6f7c848b91979a9d9f9f9e9d9c9b9b9a9a9a9a9c9fa09e99989898989898989898979698928f8a827b6e675d5145392c20130600000000000000000000000000000000060b0f151a1e21222528292a2a282622211f1a150e0903000000000000000000000000000000000000030608090b0a060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920293036393b40403e3b352e28343f4a54606b74818e96998f82766c61574d515c677985929d9083776a5d5044372a1d11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139424a5053575a5b5955534e45403a31281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313b454e58606a6f7b82888881746a6054473b2e221508000000000000000000000000000000000000000000000c18242f39434e58606a6f797f84898d909298969798999a9a9a9b9a9a9a9a99999897969594989291908f8d8c8b898887827a6d6054473a2d21140700000000000000000000000000000000000003090e121415191b1c1d1d1b191514120f09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e171e252a2d2e3333322f2a23232e38424f59606d7a849198948a7e71695e56515d677885929b8e8174685b4e4135281b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434b545c6064676866625f58514b433a31281d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f29333d464e5860696e767b7c746f64584e43382b1f13060000000000000000000000000000000000000000000007121d27313d464e585f676d72787d80838587898a8b8c8d8d8e8e8e8d8d8d8d8c8b8a8a89878685848382817f7e7c7b79766d675d5145392c2013060000000000000000000000000000000000000000020608080c0e1010100f0c080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e2021262625231e191c26303d45515d676f7c86929992857b6e685f58606d7a8693968a7e7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d666d717475736f6a605d554b43392f24180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18212b343d464e575e61696e6f6a645d53463d32271b0f0300000000000000000000000000000000000000000000010b151f2b343d464e555c60666d707376797b7c7e7f808081818181818080807f7e7e7d7c7b7a79787675747371706e6d66605d554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11141419191916120a141e2935414c555f6a707d87929790837a6f6a6668707d89999184796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d676d787e81817f7c746d675d554b4035291b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f19222b343d454d53575f61625f58534b41342b20160a000000000000000000000000000000000000000000000000030d19222b343c434b51545c606367656c6e70717273737474747474747373727271706f6e6d676b6a686766646361605c54514b433a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507080d0d0c0a06020c19242f3a434e58616b717e86919590837c7573747a839092877d70675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d79838a8d8e8c8781796d675d5145382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222b333b42464d535555534e4641392f22190f0400000000000000000000000000000000000000000000000000071019222a313940454a505356535b606163646566676767686767676766666564636261605d555d5c5a5958565553514a45413a31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313c464f59616c717d858d929187828081859090877e716b60554b4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a959a9b9a938e83796d6053493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019212931363c4246484847433c342f271d10070000000000000000000000000000000000000000000000000000000710181f272f34383f44464949505354565758595a5a5b5b5b5a5a5a5a59585757565453514b504f4e4c4b494846444039352f281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343e47505a616b6f7a81868b8e8f8c8d8c88837c716c61594f43392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b9aa4aca49f958d8073655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f171f252a31373a3b3c3b37322a221d150b0000000000000000000000000000000000000000000000000000000000060d151d23292e34383a3d3f444648494b4c4d4d4e4e4e4e4e4d4d4d4c4b4b4a4948474540434241403e3d3b3a38342e29241d160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222c353e48505960686d747a7e818383817f7b766f6a615a50473d30271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c87939fa2a9a79f9285796c605346392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1f262b2d2e2f2e2b262018100b03000000000000000000000000000000000000000000000000000000000000030b12181c23282b2d2d3337393b3d3e3f404041414141414140403f3f3e3d3c3b3a39352f35343331302e2d2c28231c18130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a232c363e474f565d60686d7174767675726e69625f5850483e352b1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a73808b92979c9e9e95877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e141a1e212222211f1b150e0600000000000000000000000000000000000000000000000000000000000000000001070c11171c1f2022272b2d2e30313233343434353434343433333231302f2e2d2c2924292726252322201f1c18120d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a242c353d444c52565e61656869696865615f57534e463e362c23190c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58636e737e858c9092928f8377675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151515120f0a0400000000000000000000000000000000000000000000000000000000000000000000000000060b101213171b1f20212324252627272828282727272726252424232120201d181c1b191816151312100c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a232b323a41454c5254585b5c5d5b5955534d47433c342c241a110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a26313c46525c636c717a7f838585827b6e61554b4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080908060300000000000000000000000000000000000000000000000000000000000000000000000000000000000306060b0f1213151618191a1a1b1b1b1b1b1a1a1a1918181716151413100d070e0d0b0a0807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081019202830353a4146474b4e50504e4c4847423c37322a221a12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a344049525a62686d72767878756e695f53433a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506080a0b0c0d0d0e0e0e0e0e0e0d0d0c0c0b0a0908070604010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e161e24293036393a3e414343423f3b3a37312b262018100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222e37404850565d6065696b6b69615f574d4231281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080c0e0f0f0d09060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191e252a2d2e3235363635322e2d2b261f1b150e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101c252e363f444c5254595d5f5f5c55534d453c311f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191b1c1b191613120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d13191e20212528292a282622211e1a150f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242d323a4145474c5052524f4846423c332a1f0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d151a1e2122262829282623201f1c17110b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314181b1d1d1b191514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121b20282f35393a3f434545423b3a37312a21180e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c121820262b2e2f3335353533302d2b28221c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070b0e10100f0c080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d161e24292c2d32363838362e2d2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d242931373a3b3f414242403c3938332d28231c140c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021262a2c2c2922211e1a140e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b161f282f353c4247484c4e4f4e4c4946443f38342e261e180f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314191d1f1f1c1514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28313940454d5355595b5c5b595653504a443f38302a211a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070c1012120f08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f39434b51575f62666868686663605b54504a423c332c231a12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424b555d60696e72747575736f6c66605c544e463e352c241a100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545d676d747b7f8182817f7c78726d665f584f473e362c22190f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666d7981888c8e8f8e8c89847e786e6a615950483e342b21180d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c78818e939999938d89898b8b837c706b615a50473d332a1f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864717e8b939d9f9387807c7c7e838a867d706c61594f453b31271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7784919da0958b7f74706f71767d85877e706b60574d43392f23180d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a09d9184776d6363656b707b84867d6f695f554b4034291f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a7998c8073665b565961696e7a84857b6e675c51453d31281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa3978a7d7064574a4f575e686e7b8583796d60594f43392f24180d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9ba295887c6f625549454d565f69707d8780746b61554b4035291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9ca194887b6e6155483b444d57606b737f897d70675d51453c31261a0e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9ba194887b6e6155483b3b454f59606d788384796d60574d42372b20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875818e9ba295887b6f6255483c333d44505c666f7c878073695f53463c32261b0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9aa296897c6f6356493c30343f4a545f6a7481867b6e61584e43372b20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a4978a7d7164574a3e312e38424e58616d7a8582756a5f54473c32261b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a9988c7f7265594c3f2e26303c46525e68727f887c6f62584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8797a19b8e817468544a3f34282935414c56606d798582756a5f53473b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687885919e9d908377665c50443a3128303a45515d67727f887c6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414d566875828f9b9f9286796d60544c433a322935404b55606d797d776c605346392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303f4c5865727f8b98a398887b6f665d554c443a322f3945515d676d716c655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816222f3c4955626f7c8897a19b8e81786d675d564c443a3135414c555d6064605b53493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7885919e9e938e82796d685e564c4339303a434c51545753504941382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6574818e9ba59e948f837a6d685e554b4239313a4145474a46443f382f261b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495364717d8a98a39d91838f837a6d675d544a40342f35393a3e3937332d261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3a4754606d7a86929f998d80828f83796d665c51443f34292c2d312d2b27221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6775828f9c9d90847a838f82786d605b51473d32282124201f1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b5564717e8b98a095887b7a848e81746d62594f443a2f261b13120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a4754606d7a86929f988c7f727c868b7f726b60564c41382d22170c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945515d6775828e9b9d908376717e8a877d6f685e53493f33271e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5564707d8a979f95887b6e74808d847a6d655b50443c30271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a4653606d7985929e9a8d80736d78838f82776c60584e42392e23180c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131f2c3844515c6673808d9a9e9185796d6e7b868c7f726a60544b4034281e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a54626e7b88949f978a7d7069727f8b877c6f665c51453c30261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3947535f6a7683909c9b8f8275696d76828f83796d60584e42382e23170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c2b37434e5864717e8a969f92867b6e616e7b858c80736a5f544a3f34281e14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1a26313c4653606d7984919e998d80736769727e8b877c6f665c50443b3025190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3844505c66737f8c989e9285796d606c77839083786d60564c41362a20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929f978b7e7164656f7c878c7f72685e52463c32271b0b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3846525e6874818e9b9d9083776b606a74808d857a6e61584e43372b1d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36414c56626f7c88949f95897d7063606d7a858e81746a6054473e2f261b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303a4754606a76828f9c9c8f82766a5f67727f8b877c6f625a5041382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2b37434e5863707d89959f94887c6f62606d78849083766c6153493f33271b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27323c4854606b7683909d9b8e8175695f66707d8a8a7d70655b5044382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f5964707d8a959f92877b6e61616c76839083786c6053493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d4653606c7883909d998e8174695e63707d898a7d70655b5044372b1f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2b3744505b65717e8a959f92867b6e61606b76828f83786c6053463c32271b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606d7884919d998e8174695f636f7c898a7d7064584e43372b1e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505c66717e8a959f92877b6e62606b76828f83766a6054473a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b28343f4a54606c7883909d998e81756a6063707d8a887c6f62564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3844505b65707d8a949f93877c6f62606c78838e8174685e5246392d20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27333f4953616b7683909c9a9082766c6165717e8b867a6d6154473c32271b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414f59626f7c89939e948a7d7167606d79858c7f7366584e43372b1c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3e4854606a75828e989e9184796d606774808d84776a605447382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2c38434e58616e7b86929f968c80736a626f7c88887c6f62544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1b27323d46535f6973808d979f92867b6e656a77838d8074665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212a36424d57606d7a85919e999082776c66737f8c85796c605346392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1a26313b45515d67717e8a949f948b7f72696f7c88897c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2935414c55616c768290989f92867b6e6c79858c7f7366594c403025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d19242f3a43505a626e7b86929f989083786d76828f837669564d42362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313e47535f6a737f8c959f958d807374818e8578695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2b37424e57606d788390999d928b7f74818e877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1a26313c44515c666f7c86929f9b918b818592887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202834404a545f6a727f8c949e9b938e9297897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18232e39424e58606c77828f96a09e9b9e98877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303c44505b656d7a849198a2aa9f9285796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e27333f49535d686e7c869298a19c8f8276655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17222d38414c565f6a6f7d869297978b7e716553493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3a444e58606b6f7d858d8f85796d6053473a2d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28323c464f59606b6f7b81827d6f675d5145382c1b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b16202a343d474f5960696e74766f6b60554b4035291d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222b353d474f565e6167696360594f43392f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f19232b353d444d52545a5c56544f463d31271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071119232b323b4246474e504948433d342b1f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071119202930363a3b41433c3b38322b22190d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e171f252a2d2e3436302f2c27211910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e2021272923221f1b160f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e1114141b1d1615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080e1009090703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!21 &-567968814723445512 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DancingScript-VariableFont_wght Atlas Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -3630272914525870158} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0 + - _Bevel: 1 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0.5 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _CullMode: 0 + - _Diffuse: 0 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 1 + - _GlowOffset: 0.59 + - _GlowOuter: 0 + - _GlowPower: 1 + - _GradientScale: 10 + - _LightAngle: 0 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 5 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 0.73125 + - _ScaleRatioC: 0.57624114 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0.269 + - _UnderlayOffsetX: -1 + - _UnderlayOffsetY: -1 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0.073298454, g: 2, b: 0, a: 1} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 0} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 0} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 0} + - _SpecularColor: {r: 1.4980392, g: 1.4980392, b: 1.4980392, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: TTT_DancingScript TMP + m_EditorClassIdentifier: + hashCode: -1673780571 + material: {fileID: -567968814723445512} + materialHashCode: -150493595 + m_Version: 1.1.0 + m_SourceFontFileGUID: 2dedba84ce1ce5c4c8bfb2b6ae52aabc + m_SourceFontFile_EditorRef: {fileID: 12800000, guid: 2dedba84ce1ce5c4c8bfb2b6ae52aabc, + type: 3} + m_SourceFontFile: {fileID: 12800000, guid: 2dedba84ce1ce5c4c8bfb2b6ae52aabc, type: 3} + m_AtlasPopulationMode: 1 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Dancing Script + m_StyleName: Regular + m_PointSize: 90 + m_Scale: 1 + m_LineHeight: 108.00001 + m_AscentLine: 82.8 + m_CapLine: 65 + m_MeanLine: 30 + m_Baseline: 0 + m_DescentLine: -25.2 + m_SuperscriptOffset: 82.8 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -25.2 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -11.25 + m_UnderlineThickness: 4.5 + m_StrikethroughOffset: 12 + m_StrikethroughThickness: 4.5 + m_TabWidth: 23 + m_GlyphTable: + - m_Index: 1 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 23.40625 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 2 + m_Metrics: + m_Width: 53.09375 + m_Height: 72.625 + m_HorizontalBearingX: -1.53125 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 53.28125 + m_GlyphRect: + m_X: 842 + m_Y: 10 + m_Width: 54 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 49.0625 + m_Height: 72.625 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 54.71875 + m_GlyphRect: + m_X: 915 + m_Y: 10 + m_Width: 50 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 4 + m_Metrics: + m_Width: 45.625 + m_Height: 72.53125 + m_HorizontalBearingX: 1.984375 + m_HorizontalBearingY: 64.703125 + m_HorizontalAdvance: 48.0625 + m_GlyphRect: + m_X: 533 + m_Y: 111 + m_Width: 47 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 5 + m_Metrics: + m_Width: 52.828125 + m_Height: 72.625 + m_HorizontalBearingX: 5.046875 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 58.765625 + m_GlyphRect: + m_X: 414 + m_Y: 125 + m_Width: 53 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 45.625 + m_Height: 72.53125 + m_HorizontalBearingX: -1.34375 + m_HorizontalBearingY: 64.703125 + m_HorizontalAdvance: 44.8125 + m_GlyphRect: + m_X: 339 + m_Y: 186 + m_Width: 47 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 51.921875 + m_Height: 72.625 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 55.53125 + m_GlyphRect: + m_X: 686 + m_Y: 175 + m_Width: 53 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 10 + m_Metrics: + m_Width: 52.734375 + m_Height: 72.546875 + m_HorizontalBearingX: -3.421875 + m_HorizontalBearingY: 64.625 + m_HorizontalAdvance: 41.3125 + m_GlyphRect: + m_X: 69 + m_Y: 274 + m_Width: 54 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 68.40625 + m_Height: 72.625 + m_HorizontalBearingX: -1.53125 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 68.671875 + m_GlyphRect: + m_X: 55 + m_Y: 182 + m_Width: 69 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 55.53125 + m_Height: 72.625 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 57.59375 + m_GlyphRect: + m_X: 152 + m_Y: 10 + m_Width: 56 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 16 + m_Metrics: + m_Width: 52.296875 + m_Height: 72.53125 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 64.703125 + m_HorizontalAdvance: 56.0625 + m_GlyphRect: + m_X: 715 + m_Y: 83 + m_Width: 54 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 51.109375 + m_Height: 72.625 + m_HorizontalBearingX: 1.625 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 47.4375 + m_GlyphRect: + m_X: 615 + m_Y: 102 + m_Width: 52 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 44.828125 + m_Height: 72.625 + m_HorizontalBearingX: -0.546875 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 48.234375 + m_GlyphRect: + m_X: 287 + m_Y: 10 + m_Width: 46 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 50.953125 + m_Height: 72.625 + m_HorizontalBearingX: 6.203125 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 44.09375 + m_GlyphRect: + m_X: 64 + m_Y: 90 + m_Width: 52 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 22 + m_Metrics: + m_Width: 61.734375 + m_Height: 73.703125 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 63.546875 + m_GlyphRect: + m_X: 196 + m_Y: 171 + m_Width: 62 + m_Height: 74 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 23 + m_Metrics: + m_Width: 55.890625 + m_Height: 72.625 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 56.875 + m_GlyphRect: + m_X: 143 + m_Y: 264 + m_Width: 57 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 80.453125 + m_Height: 72.625 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 81.546875 + m_GlyphRect: + m_X: 615 + m_Y: 10 + m_Width: 81 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 26 + m_Metrics: + m_Width: 61.75 + m_Height: 81.625 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 59.9375 + m_GlyphRect: + m_X: 534 + m_Y: 10 + m_Width: 62 + m_Height: 82 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 28 + m_Metrics: + m_Width: 44.28125 + m_Height: 35.109375 + m_HorizontalBearingX: -2.34375 + m_HorizontalBearingY: 30.875 + m_HorizontalAdvance: 39.234375 + m_GlyphRect: + m_X: 469 + m_Y: 70 + m_Width: 45 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 29 + m_Metrics: + m_Width: 39.34375 + m_Height: 70.828125 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: 64.265625 + m_HorizontalAdvance: 35.453125 + m_GlyphRect: + m_X: 10 + m_Y: 274 + m_Width: 40 + m_Height: 72 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 32.40625 + m_Height: 35.46875 + m_HorizontalBearingX: -0.453125 + m_HorizontalBearingY: 30.421875 + m_HorizontalAdvance: 29.0625 + m_GlyphRect: + m_X: 417 + m_Y: 59 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 31 + m_Metrics: + m_Width: 50.484375 + m_Height: 67.5 + m_HorizontalBearingX: -1.4375 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 42.5625 + m_GlyphRect: + m_X: 219 + m_Y: 264 + m_Width: 52 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 34.109375 + m_Height: 36.359375 + m_HorizontalBearingX: -1.265625 + m_HorizontalBearingY: 32.40625 + m_HorizontalAdvance: 29.96875 + m_GlyphRect: + m_X: 10 + m_Y: 36 + m_Width: 35 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 41.578125 + m_Height: 90 + m_HorizontalBearingX: -6.125 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 28.078125 + m_GlyphRect: + m_X: 405 + m_Y: 217 + m_Width: 43 + m_Height: 91 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 39.59375 + m_Height: 56.4375 + m_HorizontalBearingX: -1.796875 + m_HorizontalBearingY: 31.234375 + m_HorizontalAdvance: 35.015625 + m_GlyphRect: + m_X: 599 + m_Y: 194 + m_Width: 40 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 35 + m_Metrics: + m_Width: 45.171875 + m_Height: 67.6875 + m_HorizontalBearingX: 0.546875 + m_HorizontalBearingY: 64.265625 + m_HorizontalAdvance: 42.84375 + m_GlyphRect: + m_X: 352 + m_Y: 10 + m_Width: 46 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 24.65625 + m_Height: 48.875 + m_HorizontalBearingX: -0.453125 + m_HorizontalBearingY: 46.53125 + m_HorizontalAdvance: 21.6875 + m_GlyphRect: + m_X: 10 + m_Y: 170 + m_Width: 26 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 42.390625 + m_Height: 67.6875 + m_HorizontalBearingX: 0.359375 + m_HorizontalBearingY: 64.265625 + m_HorizontalAdvance: 40.140625 + m_GlyphRect: + m_X: 352 + m_Y: 98 + m_Width: 43 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 39 + m_Metrics: + m_Width: 30.96875 + m_Height: 67.5 + m_HorizontalBearingX: 0.265625 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 21.234375 + m_GlyphRect: + m_X: 10 + m_Y: 365 + m_Width: 32 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 64.09375 + m_Height: 32.671875 + m_HorizontalBearingX: -3.15625 + m_HorizontalBearingY: 29.875 + m_HorizontalAdvance: 58.140625 + m_GlyphRect: + m_X: 196 + m_Y: 119 + m_Width: 65 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 48.0625 + m_Height: 28.078125 + m_HorizontalBearingX: -3.421875 + m_HorizontalBearingY: 26.28125 + m_HorizontalAdvance: 41.9375 + m_GlyphRect: + m_X: 774 + m_Y: 10 + m_Width: 49 + m_Height: 29 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 36.546875 + m_Height: 34.5625 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: 31.6875 + m_HorizontalAdvance: 32.84375 + m_GlyphRect: + m_X: 227 + m_Y: 65 + m_Width: 37 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 40.859375 + m_Height: 58.765625 + m_HorizontalBearingX: -8.453125 + m_HorizontalBearingY: 33.5625 + m_HorizontalAdvance: 35.1875 + m_GlyphRect: + m_X: 135 + m_Y: 102 + m_Width: 42 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 40.21875 + m_Height: 57.328125 + m_HorizontalBearingX: -1.34375 + m_HorizontalBearingY: 32.125 + m_HorizontalAdvance: 36.09375 + m_GlyphRect: + m_X: 486 + m_Y: 203 + m_Width: 41 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 34.28125 + m_Height: 39.15625 + m_HorizontalBearingX: 0.09375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 31.3125 + m_GlyphRect: + m_X: 283 + m_Y: 102 + m_Width: 35 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 46 + m_Metrics: + m_Width: 35.359375 + m_Height: 40.140625 + m_HorizontalBearingX: -1.796875 + m_HorizontalBearingY: 35.546875 + m_HorizontalAdvance: 31.046875 + m_GlyphRect: + m_X: 479 + m_Y: 10 + m_Width: 36 + m_Height: 41 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 47 + m_Metrics: + m_Width: 28.890625 + m_Height: 57.875 + m_HorizontalBearingX: -0.359375 + m_HorizontalBearingY: 53.734375 + m_HorizontalAdvance: 25.65625 + m_GlyphRect: + m_X: 10 + m_Y: 92 + m_Width: 30 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 42.296875 + m_Height: 29.515625 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 26.8125 + m_HorizontalAdvance: 39.421875 + m_GlyphRect: + m_X: 417 + m_Y: 10 + m_Width: 43 + m_Height: 30 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 38.609375 + m_Height: 33.390625 + m_HorizontalBearingX: 0.90625 + m_HorizontalBearingY: 29.875 + m_HorizontalAdvance: 36.625 + m_GlyphRect: + m_X: 280 + m_Y: 161 + m_Width: 40 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 50 + m_Metrics: + m_Width: 58.40625 + m_Height: 33.390625 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 29.875 + m_HorizontalAdvance: 55.53125 + m_GlyphRect: + m_X: 64 + m_Y: 37 + m_Width: 59 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 51 + m_Metrics: + m_Width: 39.40625 + m_Height: 35.1875 + m_HorizontalBearingX: 0.90625 + m_HorizontalBearingY: 29.875 + m_HorizontalAdvance: 37.625 + m_GlyphRect: + m_X: 227 + m_Y: 10 + m_Width: 41 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 52 + m_Metrics: + m_Width: 39.6875 + m_Height: 53.015625 + m_HorizontalBearingX: -1.796875 + m_HorizontalBearingY: 27.8125 + m_HorizontalAdvance: 35.015625 + m_GlyphRect: + m_X: 715 + m_Y: 10 + m_Width: 40 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 57 + m_Metrics: + m_Width: 41.578125 + m_Height: 72.625 + m_HorizontalBearingX: 0.546875 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 45.90625 + m_GlyphRect: + m_X: 788 + m_Y: 102 + m_Width: 43 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 66 + m_Metrics: + m_Width: 31.046875 + m_Height: 65.703125 + m_HorizontalBearingX: 9.71875 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 39.328125 + m_GlyphRect: + m_X: 546 + m_Y: 203 + m_Width: 32 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 72 + m_Metrics: + m_Width: 35.640625 + m_Height: 6.125 + m_HorizontalBearingX: 0.71875 + m_HorizontalBearingY: 5.21875 + m_HorizontalAdvance: 47.34375 + m_GlyphRect: + m_X: 10 + m_Y: 10 + m_Width: 37 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 476 + m_Metrics: + m_Width: 66.234375 + m_Height: 7.375 + m_HorizontalBearingX: -1.796875 + m_HorizontalBearingY: 1.4375 + m_HorizontalAdvance: 76.046875 + m_GlyphRect: + m_X: 66 + m_Y: 10 + m_Width: 67 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 485 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 23.40625 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 514 + m_Metrics: + m_Width: 32.125 + m_Height: 13.40625 + m_HorizontalBearingX: 4.6875 + m_HorizontalBearingY: 22.953125 + m_HorizontalAdvance: 45.265625 + m_GlyphRect: + m_X: 143 + m_Y: 181 + m_Width: 33 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 517 + m_Metrics: + m_Width: 17.546875 + m_Height: 24.484375 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 28.4375 + m_HorizontalAdvance: 27.90625 + m_GlyphRect: + m_X: 277 + m_Y: 214 + m_Width: 19 + m_Height: 26 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 75 + m_Metrics: + m_Width: 7.734375 + m_Height: 12.953125 + m_HorizontalBearingX: 11.796875 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 11.25 + m_GlyphRect: + m_X: 658 + m_Y: 194 + m_Width: 9 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 37 + m_Metrics: + m_Width: 39.78125 + m_Height: 72.1875 + m_HorizontalBearingX: -17.28125 + m_HorizontalBearingY: 46.984375 + m_HorizontalAdvance: 19.625 + m_GlyphRect: + m_X: 467 + m_Y: 281 + m_Width: 41 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 57.59375 + m_Height: 72.625 + m_HorizontalBearingX: -6.65625 + m_HorizontalBearingY: 64.796875 + m_HorizontalAdvance: 51.296875 + m_GlyphRect: + m_X: 290 + m_Y: 278 + m_Width: 58 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 68 + m_Metrics: + m_Width: 7.75 + m_Height: 12.96875 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: 5.046875 + m_HorizontalAdvance: 17.640625 + m_GlyphRect: + m_X: 658 + m_Y: 227 + m_Width: 8 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 69 + m_Metrics: + m_Width: 7.5625 + m_Height: 6.125 + m_HorizontalBearingX: 0.71875 + m_HorizontalBearingY: 5.21875 + m_HorizontalAdvance: 19.265625 + m_GlyphRect: + m_X: 658 + m_Y: 260 + m_Width: 9 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 13 + m_GlyphIndex: 485 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 1 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 57 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 517 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 514 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 66 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 4 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 5 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 10 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 16 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 22 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 23 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 26 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 476 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 28 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 29 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 31 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 35 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 39 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 46 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 47 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 50 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 51 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 52 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 72 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 75 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 37 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 68 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 69 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -3630272914525870158} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 56 + m_Height: 26 + - m_X: 56 + m_Y: 0 + m_Width: 86 + m_Height: 27 + - m_X: 142 + m_Y: 0 + m_Width: 75 + m_Height: 92 + - m_X: 0 + m_Y: 26 + m_Width: 54 + m_Height: 56 + - m_X: 54 + m_Y: 27 + m_Width: 78 + m_Height: 53 + - m_X: 54 + m_Y: 80 + m_Width: 71 + m_Height: 92 + - m_X: 217 + m_Y: 0 + m_Width: 60 + m_Height: 55 + - m_X: 0 + m_Y: 82 + m_Width: 49 + m_Height: 78 + - m_X: 277 + m_Y: 0 + m_Width: 65 + m_Height: 92 + - m_X: 217 + m_Y: 55 + m_Width: 56 + m_Height: 54 + - m_X: 125 + m_Y: 92 + m_Width: 61 + m_Height: 79 + - m_X: 342 + m_Y: 0 + m_Width: 65 + m_Height: 88 + - m_X: 0 + m_Y: 160 + m_Width: 45 + m_Height: 69 + - m_X: 407 + m_Y: 0 + m_Width: 62 + m_Height: 49 + - m_X: 469 + m_Y: 0 + m_Width: 55 + m_Height: 60 + - m_X: 407 + m_Y: 49 + m_Width: 52 + m_Height: 56 + - m_X: 342 + m_Y: 88 + m_Width: 62 + m_Height: 88 + - m_X: 273 + m_Y: 92 + m_Width: 54 + m_Height: 59 + - m_X: 186 + m_Y: 109 + m_Width: 84 + m_Height: 52 + - m_X: 186 + m_Y: 161 + m_Width: 81 + m_Height: 93 + - m_X: 45 + m_Y: 172 + m_Width: 88 + m_Height: 92 + - m_X: 524 + m_Y: 0 + m_Width: 81 + m_Height: 101 + - m_X: 605 + m_Y: 0 + m_Width: 100 + m_Height: 92 + - m_X: 459 + m_Y: 60 + m_Width: 64 + m_Height: 55 + - m_X: 270 + m_Y: 151 + m_Width: 59 + m_Height: 53 + - m_X: 705 + m_Y: 0 + m_Width: 59 + m_Height: 73 + - m_X: 764 + m_Y: 0 + m_Width: 68 + m_Height: 48 + - m_X: 832 + m_Y: 0 + m_Width: 73 + m_Height: 92 + - m_X: 905 + m_Y: 0 + m_Width: 69 + m_Height: 92 + - m_X: 705 + m_Y: 73 + m_Width: 73 + m_Height: 92 + - m_X: 605 + m_Y: 92 + m_Width: 71 + m_Height: 92 + - m_X: 523 + m_Y: 101 + m_Width: 66 + m_Height: 92 + - m_X: 404 + m_Y: 115 + m_Width: 72 + m_Height: 92 + - m_X: 329 + m_Y: 176 + m_Width: 66 + m_Height: 92 + - m_X: 133 + m_Y: 254 + m_Width: 76 + m_Height: 92 + - m_X: 209 + m_Y: 254 + m_Width: 71 + m_Height: 87 + - m_X: 0 + m_Y: 264 + m_Width: 59 + m_Height: 91 + - m_X: 59 + m_Y: 264 + m_Width: 73 + m_Height: 92 + - m_X: 267 + m_Y: 204 + m_Width: 38 + m_Height: 45 + - m_X: 778 + m_Y: 92 + m_Width: 62 + m_Height: 92 + - m_X: 676 + m_Y: 165 + m_Width: 72 + m_Height: 92 + - m_X: 0 + m_Y: 355 + m_Width: 51 + m_Height: 87 + - m_X: 589 + m_Y: 184 + m_Width: 59 + m_Height: 77 + - m_X: 476 + m_Y: 193 + m_Width: 60 + m_Height: 78 + - m_X: 395 + m_Y: 207 + m_Width: 62 + m_Height: 110 + - m_X: 536 + m_Y: 193 + m_Width: 51 + m_Height: 85 + - m_X: 133 + m_Y: 171 + m_Width: 52 + m_Height: 33 + - m_X: 648 + m_Y: 184 + m_Width: 28 + m_Height: 33 + - m_X: 457 + m_Y: 271 + m_Width: 60 + m_Height: 92 + - m_X: 280 + m_Y: 268 + m_Width: 77 + m_Height: 92 + - m_X: 648 + m_Y: 217 + m_Width: 27 + m_Height: 33 + - m_X: 648 + m_Y: 250 + m_Width: 28 + m_Height: 26 + m_FreeGlyphRects: + - m_X: 54 + m_Y: 26 + m_Width: 2 + m_Height: 1 + - m_X: 132 + m_Y: 27 + m_Width: 10 + m_Height: 65 + - m_X: 125 + m_Y: 80 + m_Width: 17 + m_Height: 12 + - m_X: 273 + m_Y: 55 + m_Width: 4 + m_Height: 37 + - m_X: 186 + m_Y: 92 + m_Width: 31 + m_Height: 17 + - m_X: 49 + m_Y: 82 + m_Width: 5 + m_Height: 90 + - m_X: 45 + m_Y: 160 + m_Width: 9 + m_Height: 12 + - m_X: 459 + m_Y: 49 + m_Width: 10 + m_Height: 11 + - m_X: 327 + m_Y: 92 + m_Width: 15 + m_Height: 59 + - m_X: 270 + m_Y: 109 + m_Width: 3 + m_Height: 42 + - m_X: 974 + m_Y: 0 + m_Width: 49 + m_Height: 1023 + - m_X: 764 + m_Y: 48 + m_Width: 68 + m_Height: 25 + - m_X: 523 + m_Y: 60 + m_Width: 1 + m_Height: 41 + - m_X: 404 + m_Y: 88 + m_Width: 3 + m_Height: 27 + - m_X: 404 + m_Y: 105 + m_Width: 55 + m_Height: 10 + - m_X: 329 + m_Y: 92 + m_Width: 13 + m_Height: 84 + - m_X: 0 + m_Y: 229 + m_Width: 45 + m_Height: 35 + - m_X: 132 + m_Y: 264 + m_Width: 1 + m_Height: 759 + - m_X: 267 + m_Y: 161 + m_Width: 3 + m_Height: 43 + - m_X: 267 + m_Y: 249 + m_Width: 62 + m_Height: 5 + - m_X: 840 + m_Y: 92 + m_Width: 183 + m_Height: 931 + - m_X: 778 + m_Y: 48 + m_Width: 54 + m_Height: 44 + - m_X: 676 + m_Y: 92 + m_Width: 29 + m_Height: 73 + - m_X: 748 + m_Y: 184 + m_Width: 275 + m_Height: 839 + - m_X: 748 + m_Y: 165 + m_Width: 30 + m_Height: 858 + - m_X: 0 + m_Y: 442 + m_Width: 1023 + m_Height: 581 + - m_X: 51 + m_Y: 355 + m_Width: 8 + m_Height: 668 + - m_X: 589 + m_Y: 101 + m_Width: 16 + m_Height: 83 + - m_X: 476 + m_Y: 115 + m_Width: 47 + m_Height: 78 + - m_X: 395 + m_Y: 176 + m_Width: 9 + m_Height: 31 + - m_X: 587 + m_Y: 193 + m_Width: 2 + m_Height: 830 + - m_X: 125 + m_Y: 171 + m_Width: 8 + m_Height: 1 + - m_X: 133 + m_Y: 204 + m_Width: 53 + m_Height: 50 + - m_X: 185 + m_Y: 171 + m_Width: 1 + m_Height: 83 + - m_X: 51 + m_Y: 363 + m_Width: 972 + m_Height: 660 + - m_X: 457 + m_Y: 207 + m_Width: 19 + m_Height: 64 + - m_X: 517 + m_Y: 278 + m_Width: 506 + m_Height: 745 + - m_X: 517 + m_Y: 271 + m_Width: 19 + m_Height: 752 + - m_X: 280 + m_Y: 249 + m_Width: 49 + m_Height: 19 + - m_X: 305 + m_Y: 204 + m_Width: 24 + m_Height: 64 + - m_X: 357 + m_Y: 268 + m_Width: 38 + m_Height: 755 + - m_X: 209 + m_Y: 341 + m_Width: 71 + m_Height: 682 + - m_X: 132 + m_Y: 346 + m_Width: 148 + m_Height: 677 + - m_X: 51 + m_Y: 360 + m_Width: 406 + m_Height: 663 + - m_X: 51 + m_Y: 356 + m_Width: 229 + m_Height: 667 + - m_X: 357 + m_Y: 317 + m_Width: 100 + m_Height: 706 + - m_X: 676 + m_Y: 257 + m_Width: 347 + m_Height: 766 + - m_X: 587 + m_Y: 276 + m_Width: 436 + m_Height: 747 + - m_X: 587 + m_Y: 261 + m_Width: 61 + m_Height: 762 + - m_X: 675 + m_Y: 217 + m_Width: 1 + m_Height: 33 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 1024 + m_AtlasHeight: 1024 + m_AtlasPadding: 9 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 2dedba84ce1ce5c4c8bfb2b6ae52aabc + pointSizeSamplingMode: 0 + pointSize: 90 + padding: 9 + packingMode: 0 + atlasWidth: 1024 + atlasHeight: 1024 + characterSetSelectionMode: 7 + characterSequence: + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 1 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Text2Texture/Resources/TTT_DancingScript TMP.asset.meta b/Text2Texture/Resources/TTT_DancingScript TMP.asset.meta new file mode 100644 index 0000000..09b3e97 --- /dev/null +++ b/Text2Texture/Resources/TTT_DancingScript TMP.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7d6a5821a387564caacc9929e10eb22 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Text2Texture/package.json b/Text2Texture/package.json new file mode 100644 index 0000000..44bfcb6 --- /dev/null +++ b/Text2Texture/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.text2texture", + "displayName": "DreadScripts - Text2Texture", + "version": "1.0.2", + "description": "Easily generate a Normal Map, Mask, Custom Text Texture or a Material from given text input.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/Text2Texture/package.json.meta b/Text2Texture/package.json.meta new file mode 100644 index 0000000..3cd6ce8 --- /dev/null +++ b/Text2Texture/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 978fe590e329822418f0a78fbd4df2fe +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility.meta b/TextureUtility.meta new file mode 100644 index 0000000..617b577 --- /dev/null +++ b/TextureUtility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2e8bd480b2dd69428b5ababda8d1640 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor.meta b/TextureUtility/Editor.meta new file mode 100644 index 0000000..6a8e505 --- /dev/null +++ b/TextureUtility/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46d12e0502ed1de4fa489dfa786aa027 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor/ChannelTexture.cs b/TextureUtility/Editor/ChannelTexture.cs new file mode 100644 index 0000000..68efa8b --- /dev/null +++ b/TextureUtility/Editor/ChannelTexture.cs @@ -0,0 +1,163 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace DreadScripts.TextureUtility +{ + [System.Serializable] + public class ChannelTexture + { + public string name; + public Texture2D texture; + public bool invert; + public Color defaultColor; + public ColorMode mode = ColorMode.Red; + + public enum ColorMode + { + Red, + Green, + Blue, + Alpha + } + + public ChannelTexture(string n, int mode) + { + name = n; + SetMode(mode, true); + if (n == "Alpha") + defaultColor = Color.white; + } + + public void SetMode(int i, bool ignoreSave = false) + { + switch (i) + { + case 0: + mode = ColorMode.Red; + break; + case 1: + mode = ColorMode.Green; + break; + case 2: + mode = ColorMode.Blue; + break; + case 3: + mode = ColorMode.Alpha; + break; + } + + if (!ignoreSave) + { + EditorPrefs.SetInt("TextureUtilityChannel" + name, i); + } + } + + public Texture2D GetChannelColors(int width, int height, out float[] colors, bool unloadTempTexture) + { + Texture2D textureToUse; + if (texture) + textureToUse = texture; + else + { + textureToUse = new Texture2D(1, 1, TextureFormat.RGBA32, false, true); + textureToUse.SetPixel(0, 0, defaultColor); + textureToUse.Apply(); + } + + Texture2D newTexture = TextureUtility.GetColors(textureToUse, width, height, out Color[] myColors, unloadTempTexture); + colors = myColors.Select(c => + { + switch (mode) + { + case ColorMode.Red: + return c.r; + case ColorMode.Green: + return c.g; + case ColorMode.Blue: + return c.b; + default: + return c.a; + } + }).ToArray(); + if (invert) + { + for (int i = 0; i < colors.Length; i++) + { + colors[i] = 1 - colors[i]; + } + } + + if (!texture && unloadTempTexture) + Object.DestroyImmediate(textureToUse); + + return newTexture; + + } + + public void DrawGUI() + { + GUIStyle buttonGroupStyle = new GUIStyle(GUI.skin.GetStyle("toolbarbutton")) {padding = new RectOffset(1, 1, 1, 1), margin = new RectOffset(0, 0, 1, 1)}; + using (new GUILayout.VerticalScope("box")) + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUILayout.Label(name, "boldlabel"); + GUILayout.FlexibleSpace(); + } + + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + bool dummy; + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(mode == ColorMode.Red, "R", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + SetMode(0); + + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(mode == ColorMode.Green, "G", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + SetMode(1); + + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(mode == ColorMode.Blue, "B", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + SetMode(2); + + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(mode == ColorMode.Alpha, "A", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + SetMode(3); + GUILayout.FlexibleSpace(); + } + + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + Rect myTextureRect = GUILayoutUtility.GetRect(66, 66); + Rect myColorRect = new Rect(myTextureRect) {x = myTextureRect.x + 1, y = myTextureRect.y + 45, width = 20, height = 20}; + + if (!texture) + defaultColor = EditorGUI.ColorField(myColorRect, GUIContent.none, defaultColor, false, false, false); + texture = (Texture2D) EditorGUI.ObjectField(myTextureRect, texture, typeof(Texture2D), false); + if (!texture) + defaultColor = EditorGUI.ColorField(myColorRect, GUIContent.none, defaultColor, false, false, false); + + + GUILayout.FlexibleSpace(); + } + + invert = GUILayout.Toggle(invert, "Invert", "toolbarbutton"); + } + } + } +} + diff --git a/TextureUtility/Editor/ChannelTexture.cs.meta b/TextureUtility/Editor/ChannelTexture.cs.meta new file mode 100644 index 0000000..5213dac --- /dev/null +++ b/TextureUtility/Editor/ChannelTexture.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50ad0f4ea47ebb449b51d9cf0321eee8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor/TextureAutoPacker.cs b/TextureUtility/Editor/TextureAutoPacker.cs new file mode 100644 index 0000000..621e389 --- /dev/null +++ b/TextureUtility/Editor/TextureAutoPacker.cs @@ -0,0 +1,373 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + +namespace DreadScripts.TextureUtility +{ + public class TextureAutoPackerWindow : EditorWindow + { + private static TextureAutoPackerData data; + private static SerializedObject serializedObject; + private static SerializedProperty _active; + private static SerializedProperty _activeModules; + private static UnityEditorInternal.ReorderableList modulesList; + private static Texture2D titleTexture; + + [MenuItem("DreadTools/Utility/Texture Auto-Packer")] + public static void ShowWindow() + { + EditorWindow w = GetWindow(false, "Texture Auto-Packer", true); + if (!titleTexture) + { + titleTexture = TextureUtility.GetColors((Texture2D)EditorGUIUtility.IconContent("Texture2D Icon").image, 16, 16, out _); + titleTexture.Apply(); + } + w.titleContent.image = titleTexture; + } + private void OnEnable() + { + data = TextureAutoPackerData.GetInstance(); + serializedObject = new SerializedObject(data); + _active = serializedObject.FindProperty("active"); + _activeModules = serializedObject.FindProperty("activeModules"); + modulesList = new UnityEditorInternal.ReorderableList(serializedObject, _activeModules, true, true, true, false) + { + drawElementCallback = DrawElement, + drawHeaderCallback = DrawHeader + }; + } + + private void DrawHeader(Rect rect) + { + EditorGUI.LabelField(rect, "Active Modules"); + } + + private void DrawElement(Rect rect, int index, bool isActive, bool isFocused) + { + if (!(index < _activeModules.arraySize && index >= 0)) + return; + rect.y += 2; + rect.height = EditorGUIUtility.singleLineHeight; + if (GUI.Button(new Rect(rect.x, rect.y, 20, rect.height), "X")) + { + _activeModules.DeleteArrayElementAtIndex(index); + return; + } + rect.x += 20; + rect.width -= 20; + _activeModules.GetArrayElementAtIndex(index).objectReferenceValue = (TextureAutoPackerModule)EditorGUI.ObjectField(rect, _activeModules.GetArrayElementAtIndex(index).objectReferenceValue, typeof(TextureAutoPackerModule), false); + } + + private void OnGUI() + { + serializedObject.Update(); + Color og = GUI.backgroundColor; + GUI.backgroundColor = _active.boolValue ? Color.green : Color.grey; + _active.boolValue = GUILayout.Toggle(_active.boolValue, new GUIContent("Active","Determine whether the Auto-Packer should initiate on texture import"), "Toolbarbutton"); + GUI.backgroundColor = og; + + EditorGUI.BeginDisabledGroup(!_active.boolValue); + modulesList.DoLayoutList(); + if (GUILayout.Button(new GUIContent("Force Check", "Initiate the Auto-Packer without having to trigger a texture import"))) + { + TextureAutoPacker.InitiateAutoPacking(); + TextureAutoPackerProcessor.OnAutoPackingEnd(); + } + EditorGUI.EndDisabledGroup(); + + serializedObject.ApplyModifiedProperties(); + } + } + + [CustomEditor(typeof(TextureAutoPackerModule))] + public class TextureAutoPacker : Editor + { + static GUIContent removeIcon; + TextureAutoPackerModule module; + SerializedProperty packingList; + GUIStyle freeButtonStyle; + public override void OnInspectorGUI() + { + freeButtonStyle = new GUIStyle("toolbarbutton") { padding = new RectOffset(1, 1, 1, 1) }; + serializedObject.Update(); + + if (GUILayout.Button(new GUIContent("Add","Create a new Auto-Packed texture"), "toolbarbutton")) + { + module.packedTextures.Add(new AutoPackedTexture()); + serializedObject.Update(); + } + + for (int i = packingList.arraySize - 1; i >= 0; i--) + DrawPackingProperty(i); + + + serializedObject.ApplyModifiedProperties(); + } + private void OnEnable() + { + module = (TextureAutoPackerModule)target; + packingList = serializedObject.FindProperty("packedTextures"); + removeIcon = EditorGUIUtility.IconContent("winbtn_win_close"); + } + + static bool Running; + public static bool InitiateAutoPacking() + { + bool HasPacked=false; + if (Running) + return true; + Running = true; + TextureAutoPackerData data = TextureAutoPackerData.GetInstance(); + if (!data.active) + return false; + data.activeModules.ForEach(m => + { + if (!m) + goto Skip; + + SerializedObject module = new SerializedObject(m); + module.Update(); + for (int i = 0; i < m.packedTextures.Count; i++) + { + if (m.packedTextures[i].WasModified()) + { + HasPacked = true; + string newTexturePath = m.packedTextures[i].Pack(); + + if (string.IsNullOrEmpty(newTexturePath)) + goto Skip; + + SerializedProperty packedTexture = module.FindProperty("packedTextures").GetArrayElementAtIndex(i); + SerializedProperty hashes = packedTexture.FindPropertyRelative("channelsHashes"); + for (int j = 0; j < 4; j++) + { + hashes.GetArrayElementAtIndex(j).stringValue = string.Empty; + if (m.packedTextures[i].channels[j].texture) + hashes.GetArrayElementAtIndex(j).stringValue = m.packedTextures[i].channels[j].texture.imageContentsHash.ToString(); + } + packedTexture.FindPropertyRelative("forceModified").boolValue = false; + AssetDatabase.ImportAsset(newTexturePath, ImportAssetOptions.ForceUpdate); + TextureAutoPackerProcessor.PathToProperty.Add(new System.Tuple(newTexturePath, packedTexture.FindPropertyRelative("packed"))); + } + } + module.ApplyModifiedPropertiesWithoutUndo(); + + Skip:; + }); + Running = false; + + return HasPacked; + } + + public void DrawPackingProperty(int index) + { + SerializedProperty t = packingList.GetArrayElementAtIndex(index); + SerializedProperty _name = t.FindPropertyRelative("name"); + SerializedProperty _expanded = t.FindPropertyRelative("expanded"); + SerializedProperty _channels = t.FindPropertyRelative("channels"); + SerializedProperty _packed = t.FindPropertyRelative("packed"); + SerializedProperty _encoding = t.FindPropertyRelative("encoding"); + SerializedProperty _quality = t.FindPropertyRelative("jpgQuality"); + SerializedProperty _modified = t.FindPropertyRelative("forceModified"); + AutoPackedTexture autoTexture = ((TextureAutoPackerModule)t.serializedObject.targetObject).packedTextures[index]; + using (new GUILayout.VerticalScope("box")) + { + using (new GUILayout.HorizontalScope()) + { + using (new GUILayout.HorizontalScope("toolbarbutton", GUILayout.Width(12))) + _expanded.boolValue = GUILayout.Toggle(_expanded.boolValue, GUIContent.none, "foldout", GUILayout.Width(10)); + + using (new GUILayout.HorizontalScope("toolbarbutton")) + _name.stringValue = EditorGUILayout.TextField(GUIContent.none, _name.stringValue, GUI.skin.label); + + if (GUILayout.Button(removeIcon, freeButtonStyle, GUILayout.Width(17))) + { + packingList.DeleteArrayElementAtIndex(index); + return; + } + } + if (_expanded.boolValue) + { + using (new GUILayout.HorizontalScope("box")) + { + _encoding.enumValueIndex = (int)(TextureUtility.TexEncoding)EditorGUILayout.EnumPopup((TextureUtility.TexEncoding)_encoding.enumValueIndex, GUILayout.Width(95)); + + EditorGUI.BeginDisabledGroup(_encoding.enumValueIndex != 1); + EditorGUIUtility.labelWidth = 50; + _quality.intValue = EditorGUILayout.IntSlider("Quality", _quality.intValue, 1, 100); + EditorGUIUtility.labelWidth = 0; + EditorGUI.EndDisabledGroup(); + } + using (new GUILayout.HorizontalScope()) + { + for (int i = 0; i < _channels.arraySize; i++) + { + if (DrawChannelProperty(_channels.GetArrayElementAtIndex(i))) + _modified.boolValue = true; + } + GUILayout.Label("", GUI.skin.verticalSlider, GUILayout.Height(133)); + using (new GUILayout.VerticalScope("box")) + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUILayout.Label("Packed", "boldlabel"); + GUILayout.FlexibleSpace(); + } + GUILayout.Label(GUIContent.none); + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + _packed.objectReferenceValue = (Texture2D)EditorGUILayout.ObjectField("", _packed.objectReferenceValue, typeof(Texture2D), false, GUILayout.Width(66)); + GUILayout.FlexibleSpace(); + } + using (new GUILayout.HorizontalScope()) + { + if (GUILayout.Button("Force Pack", "toolbarbutton")) + { + string newTexturePath = autoTexture.Pack(); + if (!string.IsNullOrEmpty(newTexturePath)) + { + AssetDatabase.ImportAsset(newTexturePath); + _packed.objectReferenceValue = AssetDatabase.LoadAssetAtPath(newTexturePath); + } + } + } + } + } + } + } + } + + public bool DrawChannelProperty(SerializedProperty channel) + { + bool edited = false; + SerializedProperty _name = channel.FindPropertyRelative("name"); + SerializedProperty _texture = channel.FindPropertyRelative("texture"); + SerializedProperty _invert = channel.FindPropertyRelative("invert"); + SerializedProperty _mode = channel.FindPropertyRelative("mode"); + + + GUIStyle buttonGroupStyle = new GUIStyle(GUI.skin.GetStyle("toolbarbutton")) { padding = new RectOffset(1, 1, 1, 1), margin = new RectOffset(0, 0, 1, 1) }; + using (new GUILayout.VerticalScope("box")) + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUILayout.Label(_name.stringValue, "boldlabel"); + GUILayout.FlexibleSpace(); + } + using (new GUILayout.HorizontalScope()) + { + EditorGUI.BeginChangeCheck(); + + GUILayout.FlexibleSpace(); + bool dummy; + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(_mode.enumValueIndex == (int)ChannelTexture.ColorMode.Red, "R", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + _mode.enumValueIndex = 0; + + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(_mode.enumValueIndex == (int)ChannelTexture.ColorMode.Green, "G", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + _mode.enumValueIndex = 1; + + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(_mode.enumValueIndex == (int)ChannelTexture.ColorMode.Blue, "B", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + _mode.enumValueIndex = 2; + + EditorGUI.BeginChangeCheck(); + dummy = GUILayout.Toggle(_mode.enumValueIndex == (int)ChannelTexture.ColorMode.Alpha, "A", buttonGroupStyle, GUILayout.Width(16)); + if (EditorGUI.EndChangeCheck()) + if (dummy) + _mode.enumValueIndex = 3; + GUILayout.FlexibleSpace(); + + if (EditorGUI.EndChangeCheck()) + if (_texture.objectReferenceValue) + edited = true; + } + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + _texture.objectReferenceValue = (Texture2D)EditorGUILayout.ObjectField("", _texture.objectReferenceValue, typeof(Texture2D), false, GUILayout.Width(66)); + GUILayout.FlexibleSpace(); + } + + EditorGUI.BeginChangeCheck(); + _invert.boolValue = GUILayout.Toggle(_invert.boolValue, "Invert", "toolbarbutton"); + if (EditorGUI.EndChangeCheck()) + if (_texture.objectReferenceValue) + edited = true; + } + return edited; + } + } + + public class TextureAutoPackerProcessor : AssetPostprocessor + { + public static List> PathToProperty = new List>(); + public static bool TextureImported = false; + void OnPostprocessTexture(Texture2D texture) + { + TextureImported = true; + } + public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + if (TextureImported) + { + TextureImported = false; + if (!TextureAutoPacker.InitiateAutoPacking()) + OnAutoPackingEnd(); + } + } + public static void OnAutoPackingEnd() + { + PathToProperty.ForEach(t => + { + t.Item2.serializedObject.Update(); + t.Item2.objectReferenceValue = AssetDatabase.LoadAssetAtPath(t.Item1); + t.Item2.serializedObject.ApplyModifiedPropertiesWithoutUndo(); + }); + PathToProperty.Clear(); + } + } + + public abstract class TAPDreadData : ScriptableObject where T : ScriptableObject + { + private static T _instance = null; + private static string _SavePath; + + protected static T GetInstance(string SavePath) + { + _SavePath = SavePath; + if (!_instance && Exists()) + { + _instance = AssetDatabase.LoadAssetAtPath(SavePath); + } + if (!_instance) + { + _instance = CreateInstance(); + string directoryPath = System.IO.Path.GetDirectoryName(SavePath); + if (!System.IO.Directory.Exists(directoryPath)) + System.IO.Directory.CreateDirectory(directoryPath); + + AssetDatabase.CreateAsset(_instance, _SavePath); + } + return _instance; + } + + public static bool Exists() + { + return System.IO.File.Exists(_SavePath); + } + + } + +} diff --git a/TextureUtility/Editor/TextureAutoPacker.cs.meta b/TextureUtility/Editor/TextureAutoPacker.cs.meta new file mode 100644 index 0000000..0e819d4 --- /dev/null +++ b/TextureUtility/Editor/TextureAutoPacker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8921d280a781e14bae3a414c99945a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor/TextureAutoPackerData.cs b/TextureUtility/Editor/TextureAutoPackerData.cs new file mode 100644 index 0000000..faacf71 --- /dev/null +++ b/TextureUtility/Editor/TextureAutoPackerData.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace DreadScripts.TextureUtility +{ + [System.Serializable] + public class TextureAutoPackerData : TAPDreadData + { + public bool active; + public List activeModules = new List(); + private static readonly string SavePath = "Assets/DreadScripts/Saved Data/Texture Utility/TextureAutoPackerData.asset"; + public static TextureAutoPackerData GetInstance() + { + return GetInstance(SavePath); + } + } +} diff --git a/TextureUtility/Editor/TextureAutoPackerData.cs.meta b/TextureUtility/Editor/TextureAutoPackerData.cs.meta new file mode 100644 index 0000000..24ccc13 --- /dev/null +++ b/TextureUtility/Editor/TextureAutoPackerData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ca85679a83ff9c48b424bb5471ad605 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor/TextureAutoPackerModule.cs b/TextureUtility/Editor/TextureAutoPackerModule.cs new file mode 100644 index 0000000..495a71b --- /dev/null +++ b/TextureUtility/Editor/TextureAutoPackerModule.cs @@ -0,0 +1,69 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace DreadScripts.TextureUtility +{ + [System.Serializable] + [CreateAssetMenu(fileName = "New Auto-Packer Module", menuName = "DreadScripts/Auto-Packer Module")] + public class TextureAutoPackerModule : ScriptableObject + { + public List packedTextures; + + public TextureAutoPackerModule() + { + packedTextures = new List(); + } + } + + [System.Serializable] + public class AutoPackedTexture + { + public bool expanded; + public bool forward=true; + public string name; + public ChannelTexture[] channels; + public string[] channelsHashes; + public bool forceModified; + + public Texture2D packed; + + public TextureUtility.TexEncoding encoding; + public int jpgQuality = 75; + public AutoPackedTexture() + { + name = "New Packed Texture"; + channels = new ChannelTexture[] {new ChannelTexture("Red",0), new ChannelTexture("Green", 1), new ChannelTexture("Blue", 2), new ChannelTexture("Alpha", 0) }; + channelsHashes = new string[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; + encoding = TextureUtility.TexEncoding.SaveAsPNG; + } + + public bool WasModified() + { + if (forceModified) + { + return true; + } + for (int i = 0; i < 4; i++) + { + string textureHash = string.Empty; + if (channels[i].texture) + textureHash = channels[i].texture.imageContentsHash.ToString(); + if (textureHash != channelsHashes[i]) + return true; + } + return false; + } + + public string Pack() + { + string newTexturePath; + if (packed) + newTexturePath = TextureUtility.PackTexture(channels, AssetDatabase.GetAssetPath(packed), packed.width, packed.height, encoding, false, true, false); + else + newTexturePath = TextureUtility.PackTexture(channels, encoding, true, false); + return newTexturePath; + } + } +} diff --git a/TextureUtility/Editor/TextureAutoPackerModule.cs.meta b/TextureUtility/Editor/TextureAutoPackerModule.cs.meta new file mode 100644 index 0000000..ac4d4ec --- /dev/null +++ b/TextureUtility/Editor/TextureAutoPackerModule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57dd297cddefa864f9927f223270c5b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor/TextureUtility.cs b/TextureUtility/Editor/TextureUtility.cs new file mode 100644 index 0000000..e342de3 --- /dev/null +++ b/TextureUtility/Editor/TextureUtility.cs @@ -0,0 +1,1110 @@ +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; +using System.Linq; +using System.Threading.Tasks; + +namespace DreadScripts.TextureUtility +{ + public class TextureUtility : EditorWindow + { + private readonly string[] DimensionPresets = { + "128x128", + "256x256", + "512x512", + "1024x1024", + "2048x2048", + "4096x4096", + }; + + private static GUIContent resetIcon; + private static Texture2D titleTexture; + + private static Texture2D mainTexture; + private static Texture2D maskTexture; + + private static int jpgQuality = 75; + private static int texWidth, texHeight; + private static bool copyImport = true; + private static bool pingTexture = true; + + private static bool rotating; + private static TexRotation rotationType; + + private static bool inverting; + private static bool maskInvert=true; + private static bool invertRedS = true, invertGreenS = true, invertBlueS = true, invertAlphaS; + + private static bool unpacking=true,packing; + private static bool editingTab=true, packingTab,creatingTab; + + + private static readonly ChannelTexture redChannel = new ChannelTexture("Red", 0); + private static readonly ChannelTexture greenChannel = new ChannelTexture("Green", 1); + private static readonly ChannelTexture blueChannel = new ChannelTexture("Blue", 2); + private static readonly ChannelTexture alphaChannel = new ChannelTexture("Alpha", 0); + private static readonly ChannelTexture[] channelTextures = { redChannel, greenChannel, blueChannel, alphaChannel }; + + private static bool hueShifting; + private static bool maskHueShift=true; + private static float hueShiftFloat; + + private static bool saturating; + private static SaturationMethodEnum saturationMethod = SaturationMethodEnum.Poiyomi; + private static bool maskSaturate=true; + private static float saturationFloat; + + private static bool colorizing; + private static bool maskColorize=true; + private static bool textureColorize; + private static bool alphaColorize; + private static float colorizeFloat=0.5f; + private static Color colorizeColor = Color.black; + private static Texture2D colorizeTexture; + + private static Color originalGUIColor; + + private static TexEncoding encoding = TexEncoding.SaveAsPNG; + public enum TexEncoding + { + SaveAsPNG, + SaveAsJPG, + SaveAsTGA + } + + public enum TexRotation + { + Clockwise90, + CClockwise90, + Rotate180, + FlipHorizontal, + FlipVertical + } + + public enum SaturationMethodEnum + { + Poiyomi, + Gimp + } + + #region Creating Tab Variables + private static bool creatingCustomSize; + private static bool creatingReverse; + private static string creatingPath; + private static Color solidColor=Color.black; + private static Gradient gradientColor = new Gradient() { colorKeys = new GradientColorKey[] { new GradientColorKey(Color.white, 0), new GradientColorKey(Color.black, 1) } }; + + private static TextureCreatingMode creatingMode = TextureCreatingMode.SolidColor; + + private enum TextureCreatingMode + { + SolidColor, + HorizontalGradient, + VerticalGradient + } + #endregion + + [MenuItem("DreadTools/Utility/Texture Utility")] + private static void showWindow() + { + EditorWindow w = GetWindow(false, "Texture Utility", true); + if (!titleTexture) + { + titleTexture = GetColors((Texture2D)EditorGUIUtility.IconContent("Texture2D Icon").image, 16, 16, out _); + titleTexture.Apply(); + } + + w.titleContent.image = titleTexture; + w.minSize = new Vector2(423, 253); + } + + private void OnGUI() + { + originalGUIColor = GUI.backgroundColor; + using (new GUILayout.HorizontalScope()) + { + bool c = editingTab; + + SetColorIcon(editingTab); + editingTab = GUILayout.Toggle(editingTab, "Editing", "toolbarbutton"); + if (!c && editingTab) + { + packingTab = false; + creatingTab = false; + } + + c = creatingTab; + + + SetColorIcon(creatingTab); + creatingTab = GUILayout.Toggle(creatingTab, "Creating", "toolbarbutton"); + if (!c && creatingTab) + { + packingTab = false; + editingTab = false; + } + + c = packingTab; + + SetColorIcon(packingTab); + packingTab = GUILayout.Toggle(packingTab, "Packing", "toolbarbutton"); + if (!c && packingTab) + { + editingTab = false; + creatingTab = false; + } + GUI.backgroundColor = originalGUIColor; + } + + if (editingTab) + DrawEditingTab(); + + + if (creatingTab) + DrawCreatingTab(); + + if (packingTab) + DrawPackingTab(); + + Credit(); + } + + + private void DrawEditingTab() + { + using (new GUILayout.HorizontalScope()) + { + using (new GUILayout.VerticalScope()) + { + using (new GUILayout.HorizontalScope("box")) + DrawDimensionsGUI(); + + using (new GUILayout.HorizontalScope("box")) + { + encoding = (TexEncoding)EditorGUILayout.EnumPopup(encoding, GUILayout.Width(95)); + + EditorGUI.BeginDisabledGroup(encoding != TexEncoding.SaveAsJPG); + EditorGUIUtility.labelWidth = 50; + jpgQuality = EditorGUILayout.IntSlider("Quality", jpgQuality, 1, 100); + EditorGUIUtility.labelWidth = 0; + EditorGUI.EndDisabledGroup(); + } + + using (new GUILayout.HorizontalScope("box")) + { + copyImport = EditorGUILayout.Toggle("Copy Import Settings", copyImport); + pingTexture = EditorGUILayout.Toggle(new GUIContent("Highlight Texture", "Highlight the newly created texture in Assets"), pingTexture); + } + + using (new GUILayout.HorizontalScope("box")) + { + if (!rotating) + { + SetColorIcon(rotating); + rotating = GUILayout.Toggle(rotating, "Rotate", "toolbarbutton"); + GUI.backgroundColor = originalGUIColor; + } + else + { + SetColorIcon(rotating); + rotating = GUILayout.Toggle(rotating, "", "toolbarbutton", GUILayout.Width(17), GUILayout.Height(17)); + GUI.backgroundColor = originalGUIColor; + + EditorGUI.BeginDisabledGroup(true); + GUILayout.Toggle(true, "M", EditorStyles.miniButton, GUILayout.Width(21), GUILayout.Height(16)); + EditorGUI.EndDisabledGroup(); + + GUILayout.Label("Rotate"); + rotationType = (TexRotation)EditorGUILayout.EnumPopup(GUIContent.none, rotationType); + } + } + + using (new GUILayout.HorizontalScope("box")) + { + if (!inverting) + { + SetColorIcon(inverting); + inverting = GUILayout.Toggle(inverting, "Invert", "toolbarbutton"); + GUI.backgroundColor = originalGUIColor; + } + else + { + SetColorIcon(inverting); + inverting = GUILayout.Toggle(inverting, "", "toolbarbutton", GUILayout.Width(17), GUILayout.Height(17)); + GUI.backgroundColor = originalGUIColor; + + maskInvert = GUILayout.Toggle(maskInvert, new GUIContent("M", "Use Mask"), EditorStyles.miniButton, GUILayout.Width(21), GUILayout.Height(16)); GUILayout.Label("Invert"); + invertRedS = EditorGUILayout.ToggleLeft("R", invertRedS, GUILayout.Width(30)); + invertGreenS = EditorGUILayout.ToggleLeft("G", invertGreenS, GUILayout.Width(30)); + invertBlueS = EditorGUILayout.ToggleLeft("B", invertBlueS, GUILayout.Width(30)); + invertAlphaS = EditorGUILayout.ToggleLeft("A", invertAlphaS, GUILayout.Width(30)); + + } + } + + using (new GUILayout.HorizontalScope("box")) + { + if (!saturating) + { + SetColorIcon(saturating); + saturating = GUILayout.Toggle(saturating, "Saturate", "toolbarbutton"); + GUI.backgroundColor = originalGUIColor; + } + else + { + SetColorIcon(saturating); + saturating = GUILayout.Toggle(saturating, "", "toolbarbutton", GUILayout.Width(17), GUILayout.Height(17)); + GUI.backgroundColor = originalGUIColor; + maskSaturate = GUILayout.Toggle(maskSaturate, new GUIContent("M", "Use Mask"), EditorStyles.miniButton, GUILayout.Width(21), GUILayout.Height(16)); + EditorGUIUtility.labelWidth = 65; + saturationFloat = EditorGUILayout.Slider("Saturate", saturationFloat, -1, saturationMethod == SaturationMethodEnum.Poiyomi ? 10 : 1); + EditorGUIUtility.labelWidth = 0; + saturationMethod = (SaturationMethodEnum)EditorGUILayout.EnumPopup(GUIContent.none, saturationMethod, GUILayout.Width(70)); + } + } + using (new GUILayout.HorizontalScope("box")) + { + if (!hueShifting) + { + SetColorIcon(hueShifting); + hueShifting = GUILayout.Toggle(hueShifting, "Hue Shift", "toolbarbutton"); + GUI.backgroundColor = originalGUIColor; + } + else + { + SetColorIcon(hueShifting); + hueShifting = GUILayout.Toggle(hueShifting, "", "toolbarbutton", GUILayout.Width(17), GUILayout.Height(17)); + GUI.backgroundColor = originalGUIColor; + + maskHueShift = GUILayout.Toggle(maskHueShift, new GUIContent("M", "Use Mask"), EditorStyles.miniButton, GUILayout.Width(21), GUILayout.Height(16)); + EditorGUIUtility.labelWidth = 65; + hueShiftFloat = EditorGUILayout.Slider("Hue Shift", hueShiftFloat, 0, 1); + EditorGUIUtility.labelWidth = 0; + } + } + + using (new GUILayout.HorizontalScope("box")) + { + if (!colorizing) + { + SetColorIcon(colorizing); + colorizing = GUILayout.Toggle(colorizing, "Colorize", "toolbarbutton"); + GUI.backgroundColor = originalGUIColor; + } + else + { + SetColorIcon(colorizing); + colorizing = GUILayout.Toggle(colorizing, "", "toolbarbutton", GUILayout.Width(17), GUILayout.Height(17)); + GUI.backgroundColor = originalGUIColor; + + maskColorize = GUILayout.Toggle(maskColorize, new GUIContent("M", "Use Mask"), EditorStyles.miniButton, GUILayout.Width(21), GUILayout.Height(16)); + EditorGUIUtility.labelWidth = 65; + colorizeFloat = EditorGUILayout.Slider("Colorize", colorizeFloat, 0, 1); + EditorGUIUtility.labelWidth = 0; + if (!textureColorize) + colorizeColor = EditorGUILayout.ColorField(new GUIContent(""), colorizeColor, true, alphaColorize, false, GUILayout.Width(70), GUILayout.Height(17)); + else + colorizeTexture = (Texture2D)EditorGUILayout.ObjectField(colorizeTexture, typeof(Texture2D), false, GUILayout.Width(70), GUILayout.Height(17)); + textureColorize = GUILayout.Toggle(textureColorize, new GUIContent("T", "Use Texture"), EditorStyles.miniButton, GUILayout.Width(19), GUILayout.Height(16)); + alphaColorize = GUILayout.Toggle(alphaColorize, new GUIContent("A", "Use Alpha"), EditorStyles.miniButton, GUILayout.Width(19), GUILayout.Height(16)); + } + } + + } + using (new GUILayout.VerticalScope()) + { + using (new GUILayout.VerticalScope("box")) + { + EditorGUIUtility.labelWidth = 1; + GUILayout.Label("Main", GUILayout.Width(65)); + EditorGUI.BeginChangeCheck(); + mainTexture = (Texture2D)EditorGUILayout.ObjectField("", mainTexture, typeof(Texture2D), false, GUILayout.Width(65)); + if (EditorGUI.EndChangeCheck()) + ResetDimensions(); + EditorGUIUtility.labelWidth = 0; + } + EditorGUI.BeginDisabledGroup(!(hueShifting || saturating || inverting || colorizing)); + using (new GUILayout.VerticalScope("box")) + { + EditorGUIUtility.labelWidth = 1; + GUILayout.Label("Mask", GUILayout.Width(65)); + maskTexture = (Texture2D)EditorGUILayout.ObjectField("", maskTexture, typeof(Texture2D), false, GUILayout.Width(65)); + EditorGUIUtility.labelWidth = 0; + } + EditorGUI.EndDisabledGroup(); + } + } + EditorGUI.BeginDisabledGroup(!mainTexture); + if (GUILayout.Button("Apply")) + { + ApplyTexture(); + } + EditorGUI.EndDisabledGroup(); + } + + private void DrawCreatingTab() + { + using (new GUILayout.HorizontalScope("box")) + { + if (!creatingCustomSize) + { + SetColorIcon(creatingCustomSize); + creatingCustomSize = GUILayout.Toggle(inverting, "Custom Dimensions", "toolbarbutton"); + GUI.backgroundColor = originalGUIColor; + } + else + { + SetColorIcon(creatingCustomSize); + creatingCustomSize = GUILayout.Toggle(creatingCustomSize, "", "toolbarbutton", GUILayout.Width(17), GUILayout.Height(17)); + GUI.backgroundColor = originalGUIColor; + + DrawDimensionsGUI(false); + } + } + + using (new GUILayout.HorizontalScope("box")) + { + encoding = (TexEncoding)EditorGUILayout.EnumPopup(encoding); + + EditorGUI.BeginDisabledGroup(encoding != TexEncoding.SaveAsJPG); + EditorGUIUtility.labelWidth = 50; + jpgQuality = EditorGUILayout.IntSlider("Quality", jpgQuality, 1, 100); + EditorGUIUtility.labelWidth = 0; + EditorGUI.EndDisabledGroup(); + } + + using (new GUILayout.HorizontalScope("box")) + { + pingTexture = EditorGUILayout.Toggle(new GUIContent("Highlight Texture", "Highlight the newly created texture in Assets"), pingTexture); + + EditorGUI.BeginDisabledGroup(creatingMode != TextureCreatingMode.HorizontalGradient && creatingMode != TextureCreatingMode.VerticalGradient); + creatingReverse = EditorGUILayout.Toggle("Reverse Texture", creatingReverse); + EditorGUI.EndDisabledGroup(); + } + + using (new GUILayout.HorizontalScope("box")) + { + creatingMode = (TextureCreatingMode)EditorGUILayout.EnumPopup("Texture Mode", creatingMode); + } + + switch ((int)creatingMode) + { + case 0: + solidColor = EditorGUILayout.ColorField(solidColor); + break; + case 1: + case 2: + gradientColor = EditorGUILayout.GradientField(gradientColor); + break; + } + if (GUILayout.Button("Create")) + { + CreateTexture(); + } + AssetFolderPath(ref creatingPath, "Save To", "TextureUtilityCreatingPath"); + } + + private void DrawPackingTab() + { + + using (new GUILayout.HorizontalScope("box")) + { + encoding = (TexEncoding)EditorGUILayout.EnumPopup(encoding); + EditorGUI.BeginDisabledGroup(encoding != TexEncoding.SaveAsJPG); + EditorGUIUtility.labelWidth = 50; + jpgQuality = EditorGUILayout.IntSlider("Quality", jpgQuality, 1, 100); + EditorGUIUtility.labelWidth = 0; + EditorGUI.EndDisabledGroup(); + } + using (new GUILayout.HorizontalScope("box")) + { + copyImport = EditorGUILayout.Toggle("Copy Import Settings", copyImport); + pingTexture = EditorGUILayout.Toggle(new GUIContent("Highlight Texture", "Highlight the newly created texture in Assets"), pingTexture); + } + using (new GUILayout.HorizontalScope()) + { + bool p = unpacking; + SetColorIcon(unpacking); + unpacking = GUILayout.Toggle(unpacking, "Unpack", "toolbarbutton"); + if (!p && unpacking) + packing = false; + + p = packing; + SetColorIcon(packing); + packing = GUILayout.Toggle(packing, "Pack", "toolbarbutton"); + if (!p && packing) + unpacking = false; + + GUI.backgroundColor = originalGUIColor; + } + if (packing) + { + using (new GUILayout.HorizontalScope()) + { + EditorGUIUtility.labelWidth = 1; + redChannel.DrawGUI(); + greenChannel.DrawGUI(); + blueChannel.DrawGUI(); + alphaChannel.DrawGUI(); + EditorGUIUtility.labelWidth = 0; + } + EditorGUI.BeginDisabledGroup(!channelTextures.Any(c => c.texture)); + if (GUILayout.Button("Pack")) + { + PackTexture(channelTextures); + } + } + if (unpacking) + { + + using (new GUILayout.VerticalScope("box")) + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUILayout.Label("Main Texture"); + GUILayout.FlexibleSpace(); + } + + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + EditorGUIUtility.labelWidth = 1; + mainTexture = (Texture2D)EditorGUILayout.ObjectField("", mainTexture, typeof(Texture2D), false, GUILayout.Width(66)); + EditorGUIUtility.labelWidth = 0; + GUILayout.FlexibleSpace(); + } + } + EditorGUI.BeginDisabledGroup(!mainTexture); + if (GUILayout.Button("Unpack")) + { + UnpackTexture(); + } + EditorGUI.EndDisabledGroup(); + } + + + EditorGUI.EndDisabledGroup(); + } + + private void DrawDimensionsGUI(bool drawReset=true) + { + GUIStyle iconStyle = new GUIStyle(GUI.skin.label) { padding = new RectOffset(), margin = new RectOffset(), imagePosition = ImagePosition.ImageOnly }; + + EditorGUI.BeginDisabledGroup(!mainTexture && !creatingTab); + if (drawReset) + { + if (GUILayout.Button(resetIcon, iconStyle, GUILayout.Height(16), GUILayout.Width(16))) + ResetDimensions(); + } + EditorGUIUtility.labelWidth = 20; + texWidth = EditorGUILayout.IntField(new GUIContent("W","Width"), texWidth); + texHeight = EditorGUILayout.IntField(new GUIContent("H", "Height"), texHeight); + EditorGUIUtility.labelWidth = 0; + + int dummy = -1; + EditorGUI.BeginChangeCheck(); + dummy = EditorGUILayout.Popup(dummy, DimensionPresets,GUILayout.Width(17)); + if (EditorGUI.EndChangeCheck()) + { + string[] dimensions = ((string)DimensionPresets.GetValue(dummy)).Split('x'); + texWidth = int.Parse(dimensions[0]); + texHeight = int.Parse(dimensions[1]); + } + + EditorGUI.EndDisabledGroup(); + + } + + public static Texture2D GetColors(Texture2D texture, out Color[] Colors, bool unloadTempTexture = false) + { + return GetColors(texture, texture.width, texture.height, out Colors, unloadTempTexture); + } + + public static Texture2D GetColors(Texture2D texture, int width, int height, out Color[] Colors,bool unloadTempTexture = false) + { + //Thanks to + //https://gamedev.stackexchange.com/questions/92285/unity3d-resize-texture-without-corruption + texture.filterMode = FilterMode.Point; + RenderTexture rt = RenderTexture.GetTemporary(width, height); + + rt.filterMode = FilterMode.Point; + RenderTexture.active = rt; + Graphics.Blit(texture, rt); + Texture2D newTexture = new Texture2D(width, height); + newTexture.ReadPixels(new Rect(0, 0, width, height), 0, 0); + Color[] myColors = newTexture.GetPixels(); + RenderTexture.active = null; + ///////////////////// + Colors = myColors; + if (unloadTempTexture) + { + DestroyImmediate(newTexture); + return null; + } + return newTexture; + } + + private static void SaveTexture(byte[] textureEncoding, string path, bool refresh=false, bool ping=false) + { + System.IO.FileStream stream = System.IO.File.Create(path); + stream.Write(textureEncoding, 0, textureEncoding.Length); + stream.Dispose(); + if (refresh) + { + AssetDatabase.Refresh(); + if (ping) + { + Ping(path); + } + } + + } + private static void Ping(string path) + { + EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath(path)); + } + + private void ApplyTexture() + { + if (colorizing && !colorizeTexture && textureColorize) + { + Debug.LogError("Cannot Colorize using a texture without a texture!"); + return; + } + + string destinationPath = GetDestinationFolder(mainTexture); + string texPath = AssetDatabase.GetAssetPath(mainTexture); + + Texture2D newTexture = GetColors(mainTexture, texWidth, texHeight, out Color[] myColors); + + if (rotating) + { + List rotatedColors = new List(); + switch (rotationType) + { + case TexRotation.Clockwise90: + for (int i = texWidth-1; i >=0; i--) + { + rotatedColors.AddRange(newTexture.GetPixels(i, 0, 1, texHeight)); + } + myColors = rotatedColors.ToArray(); + newTexture = new Texture2D(texHeight, texWidth); + break; + + case TexRotation.CClockwise90: + for (int i = 0; i < texWidth; i++) + { + rotatedColors.AddRange(ReverseArray(newTexture.GetPixels(i, 0, 1, texHeight))); + } + myColors = rotatedColors.ToArray(); + newTexture = new Texture2D(texHeight, texWidth); + break; + + case TexRotation.Rotate180: + myColors = ReverseArray(myColors); + break; + + case TexRotation.FlipHorizontal: + for (int i = 0; i < texHeight; i++) + { + rotatedColors.AddRange(ReverseArray(newTexture.GetPixels(0, i, texWidth, 1))); + } + myColors = rotatedColors.ToArray(); + break; + + case TexRotation.FlipVertical: + for (int i = texHeight - 1; i >= 0; i--) + { + rotatedColors.AddRange(newTexture.GetPixels(0, i, texWidth, 1)); + } + myColors = rotatedColors.ToArray(); + break; + } + + } + + bool colorInverting = (invertRedS || invertGreenS || invertBlueS || invertAlphaS) && inverting; + bool HSVEditing = hueShifting || saturating; + bool colorEditing = HSVEditing || colorizing; + bool editing = colorEditing || colorInverting || unpacking; + bool masking = ((maskColorize && colorizing) || (maskInvert && colorInverting) || (maskSaturate && saturating) || (maskHueShift && hueShifting)) && maskTexture; + + Color[] maskColors = null; + if (masking) GetColors(maskTexture, texWidth, texHeight, out maskColors, true); + + Color[] colorizeTextureColors; + if (colorizing && textureColorize) + { + GetColors(colorizeTexture, texWidth, texHeight, out colorizeTextureColors, true); + } + else + colorizeTextureColors = null; + + + Color[] newColors = new Color[myColors.Length]; + if (editing) + { + bool hasMaskTexture = maskTexture != null; + float tempSatValue = saturationMethod == SaturationMethodEnum.Poiyomi ? saturationFloat + 1 : saturationFloat; + Parallel.For(0, myColors.Length, i => + { + Color currentColor = myColors[i]; + + if (colorEditing) + { + if (HSVEditing) + { + Color.RGBToHSV(currentColor, out float h, out float s, out float v); + if (hueShifting) + h = Mathf.Repeat(h + (hueShiftFloat * (hasMaskTexture && maskHueShift ? maskColors[i].r : 1)), 1); + if (saturating && saturationMethod == SaturationMethodEnum.Gimp) + s = Mathf.Clamp01(s * (1 + tempSatValue * (hasMaskTexture && maskSaturate ? maskColors[i].r : 1))); + currentColor = Color.HSVToRGB(h, s, v); + + if (saturating && saturationMethod == SaturationMethodEnum.Poiyomi) + { + //return lerp(dot(col, float3(0.3, 0.59, 0.11)), col, interpolator); + //Doesn't seem to replicate the exact effect, but looks close. Thank you Poiyomi! + var dot = currentColor.r * 0.3f + currentColor.g * 0.59f + currentColor.b * 0.11f; + var factor = tempSatValue; + if (hasMaskTexture && maskSaturate) + factor *= maskColors[i].r; + + currentColor = new Color(dot + factor * (currentColor.r - dot), dot + factor * (currentColor.g - dot), dot + factor * (currentColor.b - dot), currentColor.a); + + } + currentColor.a = myColors[i].a; + } + + if (colorizing) + { + float oga = currentColor.a; + currentColor = Color.Lerp(currentColor, textureColorize ? colorizeTextureColors[i] : colorizeColor, colorizeFloat * (maskColorize && hasMaskTexture ? maskColors[i].r : 1)); + + if (!alphaColorize) + currentColor.a = oga; + } + } + + float r = colorInverting && invertRedS ? currentColor.r - ((currentColor.r - (1 - currentColor.r)) * (maskInvert && hasMaskTexture ? maskColors[i].r : 1)) : currentColor.r; + float g = colorInverting && invertGreenS ? currentColor.g - ((currentColor.g - (1 - currentColor.g)) * (maskInvert && hasMaskTexture ? maskColors[i].g : 1)) : currentColor.g; + float b = colorInverting && invertBlueS ? currentColor.b - ((currentColor.b - (1 - currentColor.b)) * (maskInvert && hasMaskTexture ? maskColors[i].b : 1)) : currentColor.b; + float a = colorInverting && invertAlphaS ? currentColor.a - ((currentColor.a - (1 - currentColor.a)) * (maskInvert && hasMaskTexture ? maskColors[i].a : 1)) : currentColor.a; + + newColors[i] = new Color(r, g, b, a); + }); + } + newTexture.SetPixels(editing ? newColors : myColors); + newTexture.Apply(); + + GetEncoding(newTexture, encoding, out byte[] data, out string ext); + + string newTexturePath = AssetDatabase.GenerateUniqueAssetPath(destinationPath + "/" + mainTexture.name + + (colorInverting ? " Inverted" : "") + ext); + + SaveTexture(data, newTexturePath, true, pingTexture); + + if (copyImport) + { + CopyTextureSettings(texPath, newTexturePath); + } + } + + private static void GetEncoding(Texture2D texture, TexEncoding encodingType, out byte[] data, out string ext) + { + switch ((int)encodingType) + { + default: + ext = ".png"; + data = texture.EncodeToPNG(); + break; + case 1: + ext = ".jpg"; + data = texture.EncodeToJPG(jpgQuality); + break; + case 2: + ext = ".tga"; + data = texture.EncodeToTGA(); + break; + } + } + + + private void CreateTexture() + { + Texture2D newTexture = null; + int w = creatingCustomSize ? texWidth : 0; + int h = creatingCustomSize ? texHeight : 0; + + Color[] myColors = null; + switch ((int)creatingMode) + { + case 0: + if (!creatingCustomSize) + { + w = h = 4; + } + newTexture = new Texture2D(w, h); + + myColors = CreateFilledArray(solidColor, w * h); + newTexture.SetPixels(0, 0, w, h, myColors); + break; + case 1: + { + if (!creatingCustomSize) + { + w = 256; + h = 4; + } + newTexture = new Texture2D(w, h); + + int i = creatingReverse ? w - 1 : 0; + int istep = creatingReverse ? -1 : 1; + + float xstepValue = (1f / w); + float xcurrentStep = 0; + for (; i < w && i >= 0; i += istep) + { + newTexture.SetPixels(i, 0, 1, h, CreateFilledArray(gradientColor.Evaluate(xcurrentStep), h)); + xcurrentStep += xstepValue; + } + } + break; + case 2: + { + if (!creatingCustomSize) + { + w = 4; + h = 256; + } + newTexture = new Texture2D(w, h); + + int i = creatingReverse ? h - 1 : 0; + int istep = creatingReverse ? -1 : 1; + + float ystepValue = 1f / h; + float ycurrentStep = 0; + for (; i < h && i >= 0; i += istep) + { + newTexture.SetPixels(0, i, w, 1, CreateFilledArray(gradientColor.Evaluate(ycurrentStep), w)); + ycurrentStep += ystepValue; + } + } + break; + } + + GetEncoding(newTexture, encoding, out byte[] data, out string ext); + + ReadyFolder(creatingPath); + SaveTexture(data, AssetDatabase.GenerateUniqueAssetPath(creatingPath +"/Generated Texture"+ext), true, pingTexture); + } + + private void UnpackTexture() + { + string destinationPath = GetDestinationFolder(mainTexture); + string texPath = AssetDatabase.GetAssetPath(mainTexture); + int x = mainTexture.width, y = mainTexture.height; + Texture2D newTexture = GetColors(mainTexture, x, y, out Color[] myColors); + List> copyFromTo = new List>(); + + bool isRedPass = true, isGreenPass, isBluePass, isAlphaPass; + isGreenPass = isBluePass = isAlphaPass = false; + try + { + AssetDatabase.StartAssetEditing(); + + do + { + Color[] newColors = new Color[myColors.Length]; + + bool hasAlpha = false; + for (int i = 0; i < myColors.Length; i++) + { + Color currentColor = myColors[i]; + + float r = currentColor.r; + float g = currentColor.g; + float b = currentColor.b; + float a = currentColor.a; + + if (isRedPass) + { + g = b = r; + a = 1; + } + if (isGreenPass) + { + r = b = g; + a = 1; + } + if (isBluePass) + { + r = g = b; + a = 1; + } + if (isAlphaPass) + { + r = g = b = a; + if (a != 1) + hasAlpha = true; + } + + newColors[i] = new Color(r, g, b, a); + } + + if (isAlphaPass && !hasAlpha) + { + isAlphaPass = false; + goto Skip; + } + + newTexture.SetPixels(newColors); + newTexture.Apply(); + + GetEncoding(newTexture, encoding, out byte[] data, out string ext); + + string newTexturePath = AssetDatabase.GenerateUniqueAssetPath(destinationPath + "/" + mainTexture.name + + (isRedPass ? "-Red" : isGreenPass ? "-Green" : isBluePass ? "-Blue" : "-Alpha") + ext); + + SaveTexture(data, newTexturePath); + + if (copyImport) + { + copyFromTo.Add(new System.Tuple(texPath, newTexturePath)); + } + + if (isAlphaPass) + isAlphaPass = false; + if (isBluePass) + { + isBluePass = false; + isAlphaPass = true; + } + if (isGreenPass) + { + isGreenPass = false; + isBluePass = true; + } + if (isRedPass) + { + isRedPass = false; + isGreenPass = true; + } + + if (unpacking) + newTexture = new Texture2D(x, y); + + Skip:; + + } while (isRedPass || isGreenPass || isBluePass || isAlphaPass); + } + finally + { + AssetDatabase.StopAssetEditing(); + } + AssetDatabase.Refresh(); + if (copyImport) + { + for (int i = 0; i < copyFromTo.Count; i++) + { + CopyTextureSettings(copyFromTo[i].Item1, copyFromTo[i].Item2); + } + } + } + + public void PackTexture(ChannelTexture[] channels) + { + int firstIndex = 0; + for (int i = 3; i >= 0; i--) + { + if (channels[i].texture) + firstIndex = i; + } + ChannelTexture firstChannel = channels[firstIndex]; + int w = firstChannel.texture.width; + int h = firstChannel.texture.height; + PackTexture(channels, AssetDatabase.GetAssetPath(firstChannel.texture), w, h, encoding); + } + + public static string PackTexture(ChannelTexture[] channels, TexEncoding encodingType, bool refresh=true, bool copyImportSettings=true) + { + int firstIndex = -1; + for (int i = 3; i >= 0; i--) + { + if (channels[i].texture) + firstIndex = i; + } + if (firstIndex < 0) + return string.Empty; + ChannelTexture firstChannel = channels[firstIndex]; + int w = firstChannel.texture.width; + int h = firstChannel.texture.height; + return PackTexture(channels, AssetDatabase.GetAssetPath(firstChannel.texture), w, h, encodingType,refresh,false,copyImportSettings); + } + + public static string PackTexture(ChannelTexture[] channels, string destination,int width, int height, TexEncoding encodingType, bool refresh=true,bool overwrite=false, bool copyImportSettings=true) + { + int firstIndex = -1; + for (int i = 3; i >= 0; i--) + { + if (channels[i].texture) + firstIndex = i; + } + if (firstIndex < 0) + return string.Empty; + + ChannelTexture firstChannel = channels[firstIndex]; + + + Texture2D newTexture = new Texture2D(width, height); + channels[0].GetChannelColors(width, height, out float[] reds, true); + channels[1].GetChannelColors(width, height, out float[] greens, true); + channels[2].GetChannelColors(width, height, out float[] blues, true); + channels[3].GetChannelColors(width, height, out float[] alphas, true); + Color[] finalColors = new Color[width*height]; + + for (int i=0;i< finalColors.Length;i++) + { + finalColors[i].r = (reds!=null) ? reds[i] : 0; + finalColors[i].g = (greens != null) ? greens[i] : 0; + finalColors[i].b = (blues != null) ? blues[i] : 0; + finalColors[i].a = (alphas != null) ? alphas[i] : 1; + } + newTexture.SetPixels(finalColors); + newTexture.Apply(); + + GetEncoding(newTexture, encodingType, out byte[] data, out string ext); + + string newTexturePath = GetDestinationFolder(destination)+"/"+System.IO.Path.GetFileNameWithoutExtension(destination)+ext; + if (!overwrite) + newTexturePath = AssetDatabase.GenerateUniqueAssetPath(newTexturePath); + SaveTexture(data, newTexturePath); + DestroyImmediate(newTexture); + if (refresh) + AssetDatabase.Refresh(); + + + if (copyImportSettings) + { + CopyTextureSettings(AssetDatabase.GetAssetPath(firstChannel.texture), newTexturePath); + } + return newTexturePath; + } + + private static void CopyTextureSettings(string from, string to) + { + TextureImporter source = (TextureImporter)AssetImporter.GetAtPath(from); + TextureImporterSettings sourceSettings = new TextureImporterSettings(); + source.ReadTextureSettings(sourceSettings); + + TextureImporter destination = (TextureImporter)AssetImporter.GetAtPath(to); + destination.SetTextureSettings(sourceSettings); + destination.maxTextureSize = source.maxTextureSize; + destination.textureCompression = source.textureCompression; + destination.crunchedCompression = source.crunchedCompression; + destination.SaveAndReimport(); + } + + private static string GetDestinationFolder(Object o) + { + string path = AssetDatabase.GetAssetPath(o); + return GetDestinationFolder(path); + } + private static string GetDestinationFolder(string path) + { + return path.Substring(0, path.LastIndexOf('/')); + } + + private void ResetDimensions() + { + if (mainTexture) + { + texHeight = mainTexture.height; + texWidth = mainTexture.width; + } + } + + private void SetColorIcon(bool value) + { + if (value) + GUI.backgroundColor = Color.green; + else + GUI.backgroundColor = Color.grey; + } + + private void OnEnable() + { + resetIcon = new GUIContent(EditorGUIUtility.IconContent("d_Refresh")) { tooltip = "Reset Dimensions" }; + creatingPath = PlayerPrefs.GetString("TextureUtilityCreatingPath", "Assets/DreadScripts/Texture Utility/Generated Assets"); + + foreach (var channel in channelTextures) + { + channel.SetMode(EditorPrefs.GetInt("TextureUtilityChannel" + channel.name, (int)channel.mode)); + } + } + + private static T[] CreateFilledArray(T variable,int length) + { + T[] myArray = new T[length]; + for (int i=0;i< myArray.Length;i++) + { + myArray[i] = variable; + } + return myArray; + } + + private static T[] ReverseArray(T[] array) + { + T[] reversed = new T[array.Length]; + int index = array.Length - 1; + for (int i = 0; i < reversed.Length; i++) + { + reversed[i] = array[index]; + index--; + } + return reversed; + } + + public static void AssetFolderPath(ref string variable, string title, string playerpref) + { + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.TextField(title, variable); + EditorGUI.EndDisabledGroup(); + if (GUILayout.Button("...", GUILayout.Width(30))) + { + string dummyPath = EditorUtility.OpenFolderPanel(title, variable, ""); + if (string.IsNullOrEmpty(dummyPath)) + return; + + if (!dummyPath.Contains("Assets")) + { + Debug.LogWarning("New Path must be a folder within Assets!"); + return; + } + variable = FileUtil.GetProjectRelativePath(dummyPath); + PlayerPrefs.SetString(playerpref, variable); + } + EditorGUILayout.EndHorizontal(); + } + + public static void ReadyFolder(string folderPath) + { + if (!Directory.Exists(folderPath)) + Directory.CreateDirectory(folderPath); + } + + private static void Credit() + { + GUIStyle creditLabelStyle = new GUIStyle(GUI.skin.label) { richText = true }; + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Made by @Dreadrith", creditLabelStyle)) + Application.OpenURL("https://linktr.ee/Dreadrith"); + } + } + } +} \ No newline at end of file diff --git a/TextureUtility/Editor/TextureUtility.cs.meta b/TextureUtility/Editor/TextureUtility.cs.meta new file mode 100644 index 0000000..a9f14f2 --- /dev/null +++ b/TextureUtility/Editor/TextureUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c470de7697213b34496ac48dd23b3be5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Editor/com.dreadscripts.textureutility.Editor.asmdef b/TextureUtility/Editor/com.dreadscripts.textureutility.Editor.asmdef new file mode 100644 index 0000000..b167de0 --- /dev/null +++ b/TextureUtility/Editor/com.dreadscripts.textureutility.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.textureutility.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/TextureUtility/Editor/com.dreadscripts.textureutility.Editor.asmdef.meta b/TextureUtility/Editor/com.dreadscripts.textureutility.Editor.asmdef.meta new file mode 100644 index 0000000..8245304 --- /dev/null +++ b/TextureUtility/Editor/com.dreadscripts.textureutility.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5ab47812aae52a4a99db70b474a6420 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/LICENSE b/TextureUtility/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/TextureUtility/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/TextureUtility/LICENSE.meta b/TextureUtility/LICENSE.meta new file mode 100644 index 0000000..b75db93 --- /dev/null +++ b/TextureUtility/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8dd1810bc8cd5a24e8eebb9a23cc8276 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/README.md b/TextureUtility/README.md new file mode 100644 index 0000000..fd3cab4 --- /dev/null +++ b/TextureUtility/README.md @@ -0,0 +1,17 @@ +# Texture Utility +Texture Utility's purpose is to speed up the workflow by negating the need to use other software for mundane texture edits and achieve the desired results directly in Unity. + +## Features +- Resize, Rotate, Invert, Saturate, Hueshift and Colorize textures with Support for Masks. +- Quickly Create a Solid or Gradient colored texture. +- Unpack or Pack textures with color channels. +- Includes an Auto-Packing system to automatically pack a texture from its channels. + +![image](https://cdn.discordapp.com/attachments/1096062791984619603/1096062792345325588/unknown2.png?ex=66343c45&is=6632eac5&hm=a6d6440039b0832d1ce7054a7c21f2136efec8be5fb9c1cff86f09439908d057&) + +Found under DreadTools > Utility > Texture Utility + +![image](https://cdn.discordapp.com/attachments/1096062791984619603/1096062916115042344/unknown.png?ex=66343c63&is=6632eae3&hm=ae7d89710dfd9e2d6436eef4a06a6b7b1f6f0cbd4d5f5e1233f6950bbe0a1e3a&) + +### Thank you +If you enjoy Texture Utility, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! \ No newline at end of file diff --git a/TextureUtility/README.md.meta b/TextureUtility/README.md.meta new file mode 100644 index 0000000..0606df8 --- /dev/null +++ b/TextureUtility/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7b0372979745b6a41813732aab3b0d2b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Texture Auto-Packer Instructions.txt b/TextureUtility/Texture Auto-Packer Instructions.txt new file mode 100644 index 0000000..6728167 --- /dev/null +++ b/TextureUtility/Texture Auto-Packer Instructions.txt @@ -0,0 +1,37 @@ +Texture Auto-Packer is made to negate the need to have to go through texture packing by automatically detecting channels modifications and update the resulting texture + +How Auto-Packer works: +---------------------- +Auto-Packer will usually initiate whenever a Texture gets imported, whether it's new, modified or re-imported. +It checks the settings in the Auto-Packer window, and checks for changes in each module, and packs each texture that's marked as modified. + +An Auto-Packed Texture is marked as modified when: + - The Channel Textures doesn't match the hash of the textures the last time it got packed. + - The Channel selector was changed + - Invert toggle was clicked. + +Module Settings: +---------------- +Used to determine what Auto-Packed Textures to check for channel modification +Found under Assets > Create > DreadScripts > Auto-Packer Module + +An Auto-Packed Texture consists of 4 Channel Textures (RGBA) and a Packed Texture (Result) + +Add: Creates a new Auto-Packed Texture +Save As: Determines the extension of the Packed Texture. +Quality: Only for JPG, determines the quality of the Packed Texture. + +RGBA: Determines which channel should be sampled for the respective color +Invert: Inverts the sampled colors from the color texture. + +Force Pack: Packs the resulting texture regardless of modification. (Overwrites result texture). + +Window Settings +--------------- +Used to modify the settings of the Auto-Packer. +Found under DreadTools > Utilities > Texture Auto-Packer + +Active: Determines whether the Auto-Packer should check for channel modifications and pack the result if needed. +Active Modules: The Modules that the Auto-Packer should lookup for textures to pack + +Force Check: Initiates the Auto-Packer without having to trigger a texture import. diff --git a/TextureUtility/Texture Auto-Packer Instructions.txt.meta b/TextureUtility/Texture Auto-Packer Instructions.txt.meta new file mode 100644 index 0000000..4614689 --- /dev/null +++ b/TextureUtility/Texture Auto-Packer Instructions.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3d86b10016e9bc64198f9c0c985fb5fc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/Texture Utility Instructions.txt b/TextureUtility/Texture Utility Instructions.txt new file mode 100644 index 0000000..e76702b --- /dev/null +++ b/TextureUtility/Texture Utility Instructions.txt @@ -0,0 +1,58 @@ +Texture Utility is made to make mundane and simple edits easier and quicker by doing it straight through Unity +Found under DreadTools > Utilities > Texture Utility + +General Settings: +----------------- +Dimensions (W and H): - Width and Height of the newly created Textures. Refresh Icon resets the dimensions to the currently set Main Texture. + - Popup button is to select hardcoded preset dimensions. + - You can add your own in the script in Texture Utility > Editor > TextureUtility.cs. Simply add a new line to "DimensionPresets" with the same format. + +Save As: - Choose whether to save as PNG or JPG. JPG is typically smaller than but doesn't support Transparency. + - If using JPG, use the slider to set the quality of it. Less quality is smaller size but smaller color range. + +Copy Import Settings: - Newly Created Texture will derive its import settings from the referenced texture. Settings such as Max Size, Crunch, Compression, etc... +Highlight Texture: - Project / Assets window will automatically navigate to the folder where the new texture was created. + + +Editing Tab: For Resize and Edits. +------------ +Main: - The Main texture the edits will be applied to. +Mask: - Defines the parts and factor of how and where the edits will be applied. Black is a factor of 0. White is a factor of 1. + +"M" Toggle: - Chooses whether the module should be affected by the Mask. + +Rotate: - Rotates the texture or flips it. +Invert: - Inverts the Colors of the selected channels on the texture. R > Red, G > Green, B > Blue, A > Alpha. an R G B invert is the typical color invert. +Saturate: - (Very Wonky) Increases / Decreases the saturation of the texture. -1 will guarantee all colors are grayscale. +1 is Hell. +Hue Shift: - Shifts the Hue of the texture. +1 is a full round hue shift back to the same color. +Colorize: - Lerps the colors between the main texture and the target Texture / Color. 0 is no change. +1 is full on target colors. + - "T" Toggle switches the mode between Color and Texture. "A" Toggle chooses whether the Alpha of the target should be used. + +Press "Apply" to apply the edits. This will create a new texture with the same name in the same folder as the main texture with the desired edits. + + +Creating Tab: For creating simple textures +------------- +Custom Dimensions: - Choose to specify the dimensions of the newly created texture + - By default, Dimensions will be 4x4 for Solid Color, 256x4 for Horizontal Gradient, 4x256 for Vertical Gradient. + +Reverse Texture: - The colors of the created texture will be flipped. + +Texture Mode: - Choose whether the texture is a solid color or a horizontal/vertical gradient. +Color/Gradient: - Choose your colors for the new texture. + +Save To: - The folder where the textures will be created. + +Press "Create" to create the new texture. It will save the texture under the path specified in "Save To". + + +Packing Tab: For Unpacking/Packing texture's channels (RGBA) +------------ +Unpack: - Choose the main texture then Press "Unpack". + - This will create 3-4 textures (RGB(A)) in the same folder as the main texture with their appropriate channel colors. + +Pack: - Insert your channel colors that you wish to merge under their appropriate channels + - The Colored box is the default solid color to use if not using a texture. + - Choose the color that you wish to extract from the Channel's texture or color + - Invert Toggle will invert the colors of the channel before packing it. + - Press "Pack" to pack the textures into 1 texture. \ No newline at end of file diff --git a/TextureUtility/Texture Utility Instructions.txt.meta b/TextureUtility/Texture Utility Instructions.txt.meta new file mode 100644 index 0000000..f879ab0 --- /dev/null +++ b/TextureUtility/Texture Utility Instructions.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c707e378e04c9504fa468e0a8e33b44f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TextureUtility/package.json b/TextureUtility/package.json new file mode 100644 index 0000000..ee84e80 --- /dev/null +++ b/TextureUtility/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.textureutility", + "displayName": "DreadScripts - TextureUtility", + "version": "1.1.0", + "description": "Texture Utility's purpose is to speed up the workflow by negating the need to use other software for mundane texture edits and achieve the desired results directly in Unity.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/TextureUtility/package.json.meta b/TextureUtility/package.json.meta new file mode 100644 index 0000000..61df8eb --- /dev/null +++ b/TextureUtility/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 916a3c2e56cb4d0489cc897a2dd8d03c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor.meta b/VRCProcessor.meta new file mode 100644 index 0000000..aeee238 --- /dev/null +++ b/VRCProcessor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7cd20ea6e9d093048a2026fe3f997560 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor/Editor.meta b/VRCProcessor/Editor.meta new file mode 100644 index 0000000..0fdb184 --- /dev/null +++ b/VRCProcessor/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 798fe290eaca0044a8c81780dc601bee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor/Editor/VRCProcessor.cs b/VRCProcessor/Editor/VRCProcessor.cs new file mode 100644 index 0000000..c7e62d6 --- /dev/null +++ b/VRCProcessor/Editor/VRCProcessor.cs @@ -0,0 +1,85 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Linq; + +namespace DreadScripts.VRCProcessor +{ + public class VRCProcessor : AssetPostprocessor + { + private static ModelImporter importer; + private static bool willProcess; + private static bool isHuman; + private void OnPreprocessModel() + { + importer = assetImporter as ModelImporter; + willProcess = isHuman = false; + string guid = AssetDatabase.AssetPathToGUID(importer.assetPath); + if (importer && !SessionState.GetBool(guid, false)) + { + SessionState.SetBool(guid, true); + willProcess = true; + importer.isReadable = true; + importer.importBlendShapeNormals = ModelImporterNormals.Import; + } + } + + private void OnPostprocessMeshHierarchy(GameObject g) + { + if (willProcess && !isHuman) + { + + Transform[] allTransforms = g.GetComponentsInChildren(); + if (allTransforms.Length < 15) return; + + int hits = allTransforms.Count(t => t.name.IndexOf("Armature", System.StringComparison.OrdinalIgnoreCase) >= 0 + || t.name.IndexOf("Hand", System.StringComparison.OrdinalIgnoreCase) >= 0 + || t.name.IndexOf("Head", System.StringComparison.OrdinalIgnoreCase) >= 0); + + if (hits >= 2) + { + importer.animationType = ModelImporterAnimationType.Human; + isHuman = true; + } + } + } + + private void OnPostprocessModel(GameObject g) + { + if (willProcess && isHuman) + { + var description = importer.humanDescription; + var human = description.human.ToList(); + for (int i = human.Count - 1; i >= 0; i--) + { + switch (human[i].humanName) + { + case "Jaw" when human[i].boneName.IndexOf("jaw", System.StringComparison.OrdinalIgnoreCase) < 0: + case "Upper Chest": + human.RemoveAt(i); + break; + } + } + + description.human = human.ToArray(); + importer.humanDescription = description; + } + } + + private static void OnPostprocessAllAssets(string[] ignored, string[] deletedAssets, string[] ignored2, string[] ignored3) + { + foreach (string s in deletedAssets) + SessionState.EraseBool(AssetDatabase.AssetPathToGUID(s)); + } + + + [UnityEditor.Callbacks.DidReloadScripts] + private static void CollectExistingModels() + { + foreach (var g in AssetDatabase.FindAssets("t:model")) + SessionState.SetBool(g, true); + } + } + +} diff --git a/VRCProcessor/Editor/VRCProcessor.cs.meta b/VRCProcessor/Editor/VRCProcessor.cs.meta new file mode 100644 index 0000000..89496a3 --- /dev/null +++ b/VRCProcessor/Editor/VRCProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28fcf192f7ea2804f894905f2c7eef40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor/Editor/com.dreadscripts.vrcprocessor.Editor.asmdef b/VRCProcessor/Editor/com.dreadscripts.vrcprocessor.Editor.asmdef new file mode 100644 index 0000000..1a3ef86 --- /dev/null +++ b/VRCProcessor/Editor/com.dreadscripts.vrcprocessor.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.dreadscripts.vrcprocessor.Editor", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/VRCProcessor/Editor/com.dreadscripts.vrcprocessor.Editor.asmdef.meta b/VRCProcessor/Editor/com.dreadscripts.vrcprocessor.Editor.asmdef.meta new file mode 100644 index 0000000..79e709a --- /dev/null +++ b/VRCProcessor/Editor/com.dreadscripts.vrcprocessor.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 39834511362d90349b6f26e02d1856db +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor/LICENSE b/VRCProcessor/LICENSE new file mode 100644 index 0000000..545aeca --- /dev/null +++ b/VRCProcessor/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dreadrith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/VRCProcessor/LICENSE.meta b/VRCProcessor/LICENSE.meta new file mode 100644 index 0000000..2500604 --- /dev/null +++ b/VRCProcessor/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a645fb62fbc16a740bd762f167aa73cd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor/README.md b/VRCProcessor/README.md new file mode 100644 index 0000000..caf9d0d --- /dev/null +++ b/VRCProcessor/README.md @@ -0,0 +1,12 @@ +# VRCProcessor +Automatically sets valid models to Humanoid and other usual settings upon import. + +## Features +- Sets Normals to import +- Enables Read/Write +- Sets Humanoid Rig for Humanoid models +- Removes Upper Chest bone +- Removes Jaw bone if invalid + +### Thank you +If you enjoy VRCProcessor, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)! \ No newline at end of file diff --git a/VRCProcessor/README.md.meta b/VRCProcessor/README.md.meta new file mode 100644 index 0000000..1351248 --- /dev/null +++ b/VRCProcessor/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 19dc3bb10c750f74bbbefa4050967433 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCProcessor/package.json b/VRCProcessor/package.json new file mode 100644 index 0000000..addcf4a --- /dev/null +++ b/VRCProcessor/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.dreadscripts.vrcprocessor", + "displayName": "DreadScripts - VRCProcessor", + "version": "1.0.1", + "description": "Automatically sets valid models to Humanoid and other usual settings upon import.", + "gitDependencies": {}, + "vpmDependencies": {}, + "author": { + "name": "Dreadrith", + "email": "dreadscripts@gmail.com", + "url": "https://www.dreadrith.com" + }, + "legacyFolders": {}, + "legacyFiles": {}, + "type": "tool", + "unity": "2019.4" +} \ No newline at end of file diff --git a/VRCProcessor/package.json.meta b/VRCProcessor/package.json.meta new file mode 100644 index 0000000..107e0fd --- /dev/null +++ b/VRCProcessor/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b7129faa5e8587d408e73764f3b3a886 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: