From 23fc034e4793ef4248f283cc2e69d3b26047d52b Mon Sep 17 00:00:00 2001 From: sega Date: Mon, 24 Aug 2026 15:28:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA?= =?UTF-8?q?=D0=B8=D1=85=20=D0=BF=D1=80=D0=B8=D0=B7=D0=BE=D0=B2=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=BE=D0=BD=D0=B0=D0=B6=D0=B0=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B5.=20=D0=98=20=D1=85?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D0=BD=D1=83=D0=BB=20=D0=BF=D0=B0=D1=80=D1=83?= =?UTF-8?q?=20=D0=B4=D0=B5=D1=81=D1=8F=D1=82=D0=BA=D0=BE=D0=B2=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=8B=D1=85=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/AvailablePrizesTable.cs | 109 + Assets/AvailablePrizesTable.cs.meta | 2 + Assets/BasePrizeConfigurator.cs | 23 + Assets/BasePrizeConfigurator.cs.meta | 2 + Assets/CountableConfigurator.prefab | 470 +++++ ...meta => CountableConfigurator.prefab.meta} | 5 +- Assets/CountablePrizeConfigurator.cs | 36 + Assets/CountablePrizeConfigurator.cs.meta | 2 + Assets/MNumberStepper.cs | 18 +- Assets/MSignalButton.cs | 27 +- Assets/Prefabs/Characters/1. Cube.prefab | 25 +- Assets/Prefabs/Characters/2. Electro.prefab | 25 +- Assets/Prefabs/Characters/3. Wolf.prefab | 27 +- Assets/Prefabs/Characters/4. Sam.prefab | 27 +- Assets/Prefabs/Characters/5. Feeshka.prefab | 27 +- .../Prefabs/Characters/6. BoyNextDoor.prefab | 2 +- Assets/Prefabs/Characters/7. Girl.prefab | 2 +- .../Prefabs/Characters/TestMessageBox.prefab | 573 ++++++ .../Characters/TestMessageBox.prefab.meta} | 5 +- Assets/PrizeButton.cs | 46 + Assets/PrizeButton.cs.meta | 2 + Assets/PrizeButton.prefab | 234 +++ .../GameFSM.meta => PrizeButton.prefab.meta} | 5 +- Assets/PrizesConfigurator.prefab | 1768 ++++++++++++++++- Assets/PrizesSelector.cs | 50 + Assets/PrizesSelector.cs.meta | 2 + Assets/Scenes/GameScene3D.unity | 203 +- .../CharactersSystem/CharactersController.cs | 8 +- .../Scripts/CharactersSystem/PrizeModule.cs | 19 +- Assets/Scripts/Common/CryptoUtil.cs | 169 -- Assets/Scripts/Common/CryptoUtil.cs.meta | 11 - .../GameFSM/CheckLeadersFromMenuState.cs | 52 - .../GameFSM/CheckLeadersFromMenuState.cs.meta | 11 - .../GameFSM/CheckSettingsPasswordState.cs | 99 - .../CheckSettingsPasswordState.cs.meta | 11 - .../EnterPanels/EnterPricePVERevengeState.cs | 47 - .../EnterPricePVERevengeState.cs.meta | 11 - .../GameFSM/EnterPanels/EnterPricePVEState.cs | 43 - .../EnterPanels/EnterPricePVEState.cs.meta | 11 - .../GameFSM/EnterPanels/EnterPricePVPState.cs | 47 - .../EnterPanels/EnterPricePVPState.cs.meta | 11 - .../EnterPanels/EnterPrizesAvailableState.cs | 47 - .../EnterPrizesAvailableState.cs.meta | 11 - .../EnterPrizesForCharactersState.cs | 31 - .../EnterPrizesForCharactersState.cs.meta | 11 - .../EnterPulsesToResetDifficulty.cs | 46 - .../EnterPulsesToResetDifficulty.cs.meta | 11 - .../EnterPanels/EnterValutaPerImpulse.cs | 46 - .../EnterPanels/EnterValutaPerImpulse.cs.meta | 11 - .../Common/GameFSM/GameStateMachine.cs | 14 - .../Common/GameFSM/GameStateMachine.cs.meta | 11 - Assets/Scripts/Common/GameFSM/IState.cs | 6 - Assets/Scripts/Common/GameFSM/IState.cs.meta | 11 - Assets/Scripts/Common/GameFSM/IoTestState.cs | 18 - .../Common/GameFSM/IoTestState.cs.meta | 11 - .../Common/GameFSM/LeaderboardState.cs | 41 - .../Common/GameFSM/LeaderboardState.cs.meta | 11 - Assets/Scripts/Common/GameFSM/PrizeState.cs | 75 - .../Scripts/Common/GameFSM/PrizeState.cs.meta | 11 - Assets/Scripts/Common/GameFSM/RulesState.cs | 44 - .../Scripts/Common/GameFSM/RulesState.cs.meta | 11 - .../Scripts/Common/GameFSM/SettingsState.cs | 48 - .../Common/GameFSM/SettingsState.cs.meta | 11 - .../Common/GameFSM/SetupPasswordState.cs | 16 - .../Common/GameFSM/SetupPasswordState.cs.meta | 11 - .../Scripts/Common/GameFSM/ShowWinnerState.cs | 337 ---- .../Common/GameFSM/ShowWinnerState.cs.meta | 11 - Assets/Scripts/Common/GameFSM/StateRouter.cs | 169 -- .../Common/GameFSM/StateRouter.cs.meta | 11 - .../Scripts/Common/GameFSM/TakeOrRiskState.cs | 66 - .../Common/GameFSM/TakeOrRiskState.cs.meta | 11 - .../Common/GameFSM/TurnEndingResult.cs | 8 - .../Common/GameFSM/TurnEndingResult.cs.meta | 11 - Assets/Scripts/Common/GameFSM/VictoryState.cs | 98 - .../Common/GameFSM/VictoryState.cs.meta | 11 - .../Common/GameFSM/VictoryVideoState.cs | 46 - .../Common/GameFSM/VictoryVideoState.cs.meta | 11 - .../Common/GameFSM/VitrinaChoseState.cs | 16 - .../Common/GameFSM/VitrinaChoseState.cs.meta | 11 - Assets/Scripts/Common/GameManager.cs | 14 +- Assets/Scripts/Common/HSV_TMPRO.cs | 24 - Assets/Scripts/Common/HSV_TMPRO.cs.meta | 11 - .../Scripts/Common/Leaderboard/NumberInput.cs | 101 - .../Common/Leaderboard/NumberInput.cs.meta | 11 - .../{LightUtility.cs => LightSystem.cs} | 2 +- Assets/Scripts/Common/LightSystem.cs.meta | 2 + Assets/Scripts/Common/LightUtility.cs.meta | 11 - Assets/Scripts/Common/PaymentEmulator.cs | 7 +- Assets/Scripts/Common/PrefsApplicator.cs | 67 - Assets/Scripts/Common/PrefsApplicator.cs.meta | 11 - Assets/Scripts/Common/PrefsKeyVault.cs | 1 + .../PrizeSystem/CharacterPrizeConfigurator.cs | 22 + .../CharacterPrizeConfigurator.cs.meta | 2 + .../Config menu/CharacterPrizeConfigurator.cs | 179 -- .../CharacterPrizeConfigurator.cs.meta | 11 - .../Controls/CharacterSelectionPanel.cs | 122 +- .../Config menu/Controls/IControl.cs | 14 - .../Config menu/Controls/IControl.cs.meta | 11 - .../Config menu/Controls/PrizeSettingPanel.cs | 8 +- .../Controls/TypeSelectionPanel.cs | 4 +- .../PrizeSystem/PrizeModels/CountablePrize.cs | 7 +- .../PrizeSystem/PrizeModels/EmptyPrize.cs | 8 +- .../Common/PrizeSystem/PrizeModels/Prize.cs | 6 +- .../PrizeSystem/PrizeModels/PrizeContainer.cs | 11 + .../PrizeModels/PrizeContainer.cs.meta | 2 + .../PrizeSystem/PrizeModels/PrizeConverter.cs | 45 + .../PrizeModels/PrizeConverter.cs.meta | 2 + .../PrizeSystem/PrizeModels/PrizeSet.cs | 11 + .../PrizeSystem/PrizeModels/PrizeSet.cs.meta | 2 + .../PrizeSystem/PrizeModels/PrizeUtils.cs | 5 +- .../Common/PrizeSystem/PrizeModels/QrPrize.cs | 7 +- .../PrizeSystem/PrizeModels/VitrinaPrize.cs | 6 +- .../Common/PrizeSystem/PrizeSerializer.cs | 147 +- .../Common/PrizeSystem/PrizeSystemManager.cs | 165 +- .../PrizeSystem/TakeOrRiskSystem/PrizeView.cs | 77 +- .../TakeOrRiskSystem/PrizeView.prefab | 13 +- Assets/Scripts/Common/RGB_FOntAsset.cs | 57 - Assets/Scripts/Common/RGB_FOntAsset.cs.meta | 11 - Assets/Scripts/Common/SinGradient.cs | 26 - Assets/Scripts/Common/SinGradient.cs.meta | 11 - Assets/Scripts/Common/StringExtensions.cs | 12 - .../Scripts/Common/StringExtensions.cs.meta | 11 - Assets/Scripts/Common/Utils.cs | 10 - Assets/Scripts/Common/Utils.cs.meta | 11 - .../Gameplay/Bot Characters/DogSounds.cs | 18 - .../Gameplay/Bot Characters/DogSounds.cs.meta | 11 - .../Gameplay/Bot Characters/MistressSounds.cs | 29 - .../Bot Characters/MistressSounds.cs.meta | 11 - .../Gameplay/Bot Characters/SamSounds.cs | 16 - .../Gameplay/Bot Characters/SamSounds.cs.meta | 11 - .../Bot Characters/TamagochiSounds.cs | 18 - .../Bot Characters/TamagochiSounds.cs.meta | 11 - Assets/Scripts/Gameplay/EndOfTurnHandler.cs | 85 - .../Scripts/Gameplay/EndOfTurnHandler.cs.meta | 11 - Assets/Scripts/Gameplay/TimerManager.cs | 6 - Assets/Scripts/Menu/Menu.cs | 2 +- Assets/Scripts/Menu/Rules/RulesPrizePanel.cs | 480 ----- .../Menu/Rules/RulesPrizePanel.cs.meta | 11 - Assets/{ => Sprites}/Coin animation.png | 0 Assets/{ => Sprites}/Coin animation.png.meta | 0 Assets/TestDifficultyModule.asset | 22 + Assets/TestDifficultyModule.asset.meta | 8 + .../LiberationSans SDF - Fallback.asset | 245 ++- 143 files changed, 4306 insertions(+), 3635 deletions(-) create mode 100644 Assets/AvailablePrizesTable.cs create mode 100644 Assets/AvailablePrizesTable.cs.meta create mode 100644 Assets/BasePrizeConfigurator.cs create mode 100644 Assets/BasePrizeConfigurator.cs.meta create mode 100644 Assets/CountableConfigurator.prefab rename Assets/{Scripts/Common/GameFSM/EnterPanels.meta => CountableConfigurator.prefab.meta} (57%) create mode 100644 Assets/CountablePrizeConfigurator.cs create mode 100644 Assets/CountablePrizeConfigurator.cs.meta create mode 100644 Assets/Prefabs/Characters/TestMessageBox.prefab rename Assets/{Scripts/Gameplay/Bot Characters.meta => Prefabs/Characters/TestMessageBox.prefab.meta} (57%) create mode 100644 Assets/PrizeButton.cs create mode 100644 Assets/PrizeButton.cs.meta create mode 100644 Assets/PrizeButton.prefab rename Assets/{Scripts/Common/GameFSM.meta => PrizeButton.prefab.meta} (57%) create mode 100644 Assets/PrizesSelector.cs create mode 100644 Assets/PrizesSelector.cs.meta delete mode 100644 Assets/Scripts/Common/CryptoUtil.cs delete mode 100644 Assets/Scripts/Common/CryptoUtil.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs delete mode 100644 Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/GameStateMachine.cs delete mode 100644 Assets/Scripts/Common/GameFSM/GameStateMachine.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/IState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/IState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/IoTestState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/IoTestState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/LeaderboardState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/LeaderboardState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/PrizeState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/PrizeState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/RulesState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/RulesState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/SettingsState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/SettingsState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/SetupPasswordState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/SetupPasswordState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/ShowWinnerState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/ShowWinnerState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/StateRouter.cs delete mode 100644 Assets/Scripts/Common/GameFSM/StateRouter.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/TurnEndingResult.cs delete mode 100644 Assets/Scripts/Common/GameFSM/TurnEndingResult.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/VictoryState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/VictoryState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/VictoryVideoState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/VictoryVideoState.cs.meta delete mode 100644 Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs delete mode 100644 Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs.meta delete mode 100644 Assets/Scripts/Common/HSV_TMPRO.cs delete mode 100644 Assets/Scripts/Common/HSV_TMPRO.cs.meta delete mode 100644 Assets/Scripts/Common/Leaderboard/NumberInput.cs delete mode 100644 Assets/Scripts/Common/Leaderboard/NumberInput.cs.meta rename Assets/Scripts/Common/{LightUtility.cs => LightSystem.cs} (99%) create mode 100644 Assets/Scripts/Common/LightSystem.cs.meta delete mode 100644 Assets/Scripts/Common/LightUtility.cs.meta delete mode 100644 Assets/Scripts/Common/PrefsApplicator.cs delete mode 100644 Assets/Scripts/Common/PrefsApplicator.cs.meta create mode 100644 Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs create mode 100644 Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs.meta delete mode 100644 Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs delete mode 100644 Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs.meta delete mode 100644 Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs delete mode 100644 Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs.meta create mode 100644 Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs create mode 100644 Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs.meta create mode 100644 Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs create mode 100644 Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs.meta create mode 100644 Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs create mode 100644 Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs.meta delete mode 100644 Assets/Scripts/Common/RGB_FOntAsset.cs delete mode 100644 Assets/Scripts/Common/RGB_FOntAsset.cs.meta delete mode 100644 Assets/Scripts/Common/SinGradient.cs delete mode 100644 Assets/Scripts/Common/SinGradient.cs.meta delete mode 100644 Assets/Scripts/Common/StringExtensions.cs delete mode 100644 Assets/Scripts/Common/StringExtensions.cs.meta delete mode 100644 Assets/Scripts/Common/Utils.cs delete mode 100644 Assets/Scripts/Common/Utils.cs.meta delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs.meta delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs.meta delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs.meta delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs delete mode 100644 Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs.meta delete mode 100644 Assets/Scripts/Gameplay/EndOfTurnHandler.cs delete mode 100644 Assets/Scripts/Gameplay/EndOfTurnHandler.cs.meta delete mode 100644 Assets/Scripts/Menu/Rules/RulesPrizePanel.cs delete mode 100644 Assets/Scripts/Menu/Rules/RulesPrizePanel.cs.meta rename Assets/{ => Sprites}/Coin animation.png (100%) rename Assets/{ => Sprites}/Coin animation.png.meta (100%) create mode 100644 Assets/TestDifficultyModule.asset create mode 100644 Assets/TestDifficultyModule.asset.meta diff --git a/Assets/AvailablePrizesTable.cs b/Assets/AvailablePrizesTable.cs new file mode 100644 index 0000000..f669239 --- /dev/null +++ b/Assets/AvailablePrizesTable.cs @@ -0,0 +1,109 @@ +using PrizeSystem; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.UI; + +public class AvailablePrizesTable : MonoBehaviour +{ + public PrizeButton _prizeButtonPrefab; + + [SerializeField] RectTransform _buttonsRoot; + + + public void Refresh(PrizeSet set) + { + ClearButtons(); + foreach (var type in GetMissingPrizeTypes(set.Prizes)) + { + var button = Instantiate(_prizeButtonPrefab, _buttonsRoot); + button.Configure(type); + button.OnPrize += OnPrizeTypeSelected; + } + } + + private void OnPrizeTypeSelected(PrizeType type) + { + //открыть окошко по типу, подписаться на него + } + + private void ClearButtons() + { + for (int i = 0; i < _buttonsRoot.childCount; i++) + { + var go = _buttonsRoot.GetChild(i).gameObject; + Destroy(go); + } + } + + public static List GetMissingPrizeTypes(List prizes) + { + // Все типы призов (кроме None и Empty) + var allTypes = new List + { + PrizeType.Hopper, + PrizeType.Marbles, + PrizeType.Ticket, + PrizeType.Qr, + PrizeType.VitrinaBox + }; + + // Определяем, есть ли в списке хоть один CountablePrize + bool hasCountablePrize = prizes.Any(p => p is CountablePrize); + + // Если есть CountablePrize, все счетные типы считаются добавленными + var countableTypes = new HashSet + { + PrizeType.Hopper, + PrizeType.Marbles, + PrizeType.Ticket + }; + + // Собираем существующие типы + var existingTypes = new HashSet(); + + foreach (var prize in prizes) + { + // Если это EmptyPrize - пропускаем (не влияет на существующие типы) + if (prize is EmptyPrize) continue; + + // Если это CountablePrize и у нас уже есть флаг, что счетные есть + if (prize is CountablePrize) + { + // Добавляем все счетные типы, если их еще нет + if (hasCountablePrize) + { + foreach (var type in countableTypes) + { + existingTypes.Add(type); + } + } + else + { + // На случай, если hasCountablePrize false (но такого быть не может) + existingTypes.Add(prize.PrizeType); + } + } + else + { + // Для не-счетных призов добавляем их конкретный тип + existingTypes.Add(prize.PrizeType); + } + } + + // Если есть CountablePrize, но не все типы добавлены, добавляем все счетные + if (hasCountablePrize) + { + foreach (var type in countableTypes) + { + existingTypes.Add(type); + } + } + + // Возвращаем типы, которых нет в существующих + return allTypes + .Where(type => !existingTypes.Contains(type)) + .ToList(); + } + +} \ No newline at end of file diff --git a/Assets/AvailablePrizesTable.cs.meta b/Assets/AvailablePrizesTable.cs.meta new file mode 100644 index 0000000..277b3dd --- /dev/null +++ b/Assets/AvailablePrizesTable.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 418dc3f246ef5e44cb059f5ca0c10b93 \ No newline at end of file diff --git a/Assets/BasePrizeConfigurator.cs b/Assets/BasePrizeConfigurator.cs new file mode 100644 index 0000000..618cc74 --- /dev/null +++ b/Assets/BasePrizeConfigurator.cs @@ -0,0 +1,23 @@ +using PrizeSystem; +using System; +using UnityEngine; + +public abstract class BasePrizeConfigurator : MonoBehaviour, IControlable +{ + public event Action OnPrizeConfigured; + + public bool ControlsEnabled { get; set; } = true; + + public abstract void Configure(PrizeType prizeType); + + public virtual void Complete(Prize prize) + { + OnPrizeConfigured?.Invoke(prize); + Destroy(gameObject); + } + + public virtual void UpdateControls() + { + + } +} \ No newline at end of file diff --git a/Assets/BasePrizeConfigurator.cs.meta b/Assets/BasePrizeConfigurator.cs.meta new file mode 100644 index 0000000..cfb5c5e --- /dev/null +++ b/Assets/BasePrizeConfigurator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 587a63a8d0fa56d4691a6ac7910b9f73 \ No newline at end of file diff --git a/Assets/CountableConfigurator.prefab b/Assets/CountableConfigurator.prefab new file mode 100644 index 0000000..a35ae2d --- /dev/null +++ b/Assets/CountableConfigurator.prefab @@ -0,0 +1,470 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2872055672348682947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2166714241725172564} + - component: {fileID: 3610272716468530649} + - component: {fileID: 1049406941762121891} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2166714241725172564 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2872055672348682947} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7698163084671810053} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 116.2} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &3610272716468530649 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2872055672348682947} + m_CullTransparentMesh: 1 +--- !u!114 &1049406941762121891 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2872055672348682947} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E + \u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: e15a0ab6490ab964998a0786c208c4b2, type: 2} + m_sharedMaterial: {fileID: 4262305343556741190, guid: e15a0ab6490ab964998a0786c208c4b2, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &3548895642639160110 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2697007139903851628} + - component: {fileID: 2898386233667329125} + - component: {fileID: 6195150281388987687} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2697007139903851628 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3548895642639160110} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7698163084671810053} + 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: 131} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2898386233667329125 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3548895642639160110} + m_CullTransparentMesh: 1 +--- !u!114 &6195150281388987687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3548895642639160110} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4721586931901281940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7698163084671810053} + - component: {fileID: 5497661148036193703} + - component: {fileID: 4217061767172003025} + - component: {fileID: 5680088572919083885} + m_Layer: 5 + m_Name: CountableConfigurator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7698163084671810053 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4721586931901281940} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2697007139903851628} + - {fileID: 1115757798774131713} + - {fileID: 2166714241725172564} + m_Father: {fileID: 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: 500, y: 500} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5497661148036193703 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4721586931901281940} + m_CullTransparentMesh: 1 +--- !u!114 &4217061767172003025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4721586931901281940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.4415095, g: 0.4415095, b: 0.4415095, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5680088572919083885 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4721586931901281940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e17a04a6cb06a3c4d91aa58cadf7e6a7, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CountablePrizeConfigurator + icon: {fileID: 6195150281388987687} + numberInput: {fileID: 0} +--- !u!1001 &1512082769719754990 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 7698163084671810053} + m_Modifications: + - target: {fileID: 1834033349437326354, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1834033349437326354, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1834033349437326354, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1834033349437326354, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1834033349437326354, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_SizeDelta.y + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6405499040113261454, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6405499040113261454, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6405499040113261454, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6405499040113261454, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6405499040113261454, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8055866410577572243, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8055866410577572243, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8055866410577572243, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8055866410577572243, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8055866410577572243, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8556998190284949453, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + propertyPath: m_Name + value: NumberStepper + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} +--- !u!224 &1115757798774131713 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1981593229059902703, guid: ced775cf87d3b2c4b9c58d53e5af7f72, type: 3} + m_PrefabInstance: {fileID: 1512082769719754990} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels.meta b/Assets/CountableConfigurator.prefab.meta similarity index 57% rename from Assets/Scripts/Common/GameFSM/EnterPanels.meta rename to Assets/CountableConfigurator.prefab.meta index ce185a2..b30ca1d 100644 --- a/Assets/Scripts/Common/GameFSM/EnterPanels.meta +++ b/Assets/CountableConfigurator.prefab.meta @@ -1,7 +1,6 @@ fileFormatVersion: 2 -guid: ea951b5763668944a812d78215bf18a6 -folderAsset: yes -DefaultImporter: +guid: 8b123b0e9e795b842948d07b6e135d84 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/CountablePrizeConfigurator.cs b/Assets/CountablePrizeConfigurator.cs new file mode 100644 index 0000000..8764365 --- /dev/null +++ b/Assets/CountablePrizeConfigurator.cs @@ -0,0 +1,36 @@ +using PrizeSystem; +using UnityEngine.UI; + +public class CountablePrizeConfigurator : BasePrizeConfigurator, IControlable +{ + public Image icon; + public MNumberStepper numberInput; + + public override void Configure(PrizeType prizeType) + { + icon.sprite = PrizeSystemManager.GetPrizeIcon(prizeType); + + int maxValue = prizeType switch + { + PrizeType.Hopper => 10, + PrizeType.Ticket => 100, + PrizeType.Marbles => 10, + _ => 1 + }; + + numberInput.Initialize(value: 1, min: 1, maxValue); + } + + public override void UpdateControls() + { + numberInput.SetDirection(In.GetAxis(Axis.Horizontal, JoystickSide.Both, InteractMode.Continious)); + + if (In.GetButtonDownAnyPlayer(PlayerAction.action)) + { + Prize prize = PrizeUtils.CreatePrize(CountablePrizeType.Hopper, numberInput.Value); + Complete(prize); + } + } + + +} diff --git a/Assets/CountablePrizeConfigurator.cs.meta b/Assets/CountablePrizeConfigurator.cs.meta new file mode 100644 index 0000000..9408054 --- /dev/null +++ b/Assets/CountablePrizeConfigurator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e17a04a6cb06a3c4d91aa58cadf7e6a7 \ No newline at end of file diff --git a/Assets/MNumberStepper.cs b/Assets/MNumberStepper.cs index d3c09ca..8e5e08e 100644 --- a/Assets/MNumberStepper.cs +++ b/Assets/MNumberStepper.cs @@ -22,13 +22,13 @@ public class MNumberStepper : MonoBehaviour private bool _isHolding; private float _lastChangeTime; - private int _value; + public int Value { get; private set; } private int _min; private int _max; public void Initialize(int value, int min, int max) { - _value = value; + Value = value; _min = min; _max = max; ResetState(); @@ -94,13 +94,13 @@ public class MNumberStepper : MonoBehaviour private void ChangeValue(int direction, int step) { - int newValue = _value + direction * step; + int newValue = Value + direction * step; newValue = Mathf.Clamp(newValue, _min, _max); - if (newValue != _value) + if (newValue != Value) { - _value = newValue; - OnValueChanged?.Invoke(_value); + Value = newValue; + OnValueChanged?.Invoke(Value); UpdateView(); } else @@ -112,9 +112,9 @@ public class MNumberStepper : MonoBehaviour private void UpdateView() { - _valueLabel.text = _value.ToString(); - _leftArrow.alpha = _value == _min ? 0 : 1; - _rightArrow.alpha = _value == _max ? 0 : 1; + _valueLabel.text = Value.ToString(); + _leftArrow.alpha = Value == _min ? 0 : 1; + _rightArrow.alpha = Value == _max ? 0 : 1; } public void ResetState() diff --git a/Assets/MSignalButton.cs b/Assets/MSignalButton.cs index 8f46482..bd4c963 100644 --- a/Assets/MSignalButton.cs +++ b/Assets/MSignalButton.cs @@ -1,7 +1,6 @@ using DG.Tweening; using System; using TMPro; -using TMPro.EditorUtilities; using UnityEngine; using UnityEngine.UI; @@ -9,15 +8,15 @@ public class MSignalButton : MonoBehaviour { public event Action OnClick; - [SerializeField] private Image _image; - [SerializeField] TextMeshProUGUI _textMeshPro; - [SerializeField] private Color _normalColor; - [SerializeField] private Color _selectedColor; - [SerializeField] private Color _pressedColor; - [SerializeField] private AudioClip _clip; + [SerializeField] protected Image _image; + [SerializeField] protected TextMeshProUGUI _textMeshPro; + [SerializeField] protected Color _normalColor; + [SerializeField] protected Color _selectedColor; + [SerializeField] protected Color _pressedColor; + [SerializeField] protected AudioClip _clip; - private bool _lastPressed = false; - private Sequence _animation; + protected bool _lastPressed = false; + protected Sequence _animation; public void TakeInput(bool pressed) { @@ -25,14 +24,13 @@ public class MSignalButton : MonoBehaviour { if (pressed) { - ClickAnimation(); } _lastPressed = pressed; } } - public void ClickAnimation() + public virtual void ClickAnimation() { StopAnimation(); @@ -63,16 +61,11 @@ public class MSignalButton : MonoBehaviour { StopAnimation(); - //_animation = DOTween.Sequence(); - //_animation.Append(_image.DOColor(_normalColor, 0.1f)); - //_animation.Join(_textMeshPro.DOColor(Color.white, 0.3f)); - //_animation.PlayForward(); - _image.color = _normalColor; _textMeshPro.color = Color.white; } - private void StopAnimation() + protected void StopAnimation() { if (_animation != null) { diff --git a/Assets/Prefabs/Characters/1. Cube.prefab b/Assets/Prefabs/Characters/1. Cube.prefab index 2eba09f..52e5626 100644 --- a/Assets/Prefabs/Characters/1. Cube.prefab +++ b/Assets/Prefabs/Characters/1. Cube.prefab @@ -11,6 +11,7 @@ GameObject: - component: {fileID: 8604408698177003535} - component: {fileID: 8039207184498597514} - component: {fileID: 331023456886542288} + - component: {fileID: 6346851752755896837} - component: {fileID: 1528631932536492394} - component: {fileID: 58624349632693913} m_Layer: 0 @@ -49,9 +50,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character characterName: "\u041A\u044C\u044E\u0431" - difficultyModule: {fileID: 0} + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 331023456886542288} - prizeModule: {fileID: 0} + prizeModule: {fileID: 6346851752755896837} --- !u!114 &331023456886542288 MonoBehaviour: m_ObjectHideFlags: 0 @@ -64,13 +65,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 84da6ca280c0ea746bd14d1c45b7272a, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.VisualModule - icon: {fileID: 0} + icon: {fileID: -8149160197350721816, guid: fbeb9853b48ea2844a0115637f7d3427, type: 3} iconSmall: {fileID: 0} chipImage: {fileID: 0} - _messageBox: {fileID: 0} - replicas: {fileID: 0} + _messageBox: {fileID: 1876940890959816278, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + replicas: {fileID: 11400000, guid: 1a042f31f2c98b64fb2511191b1d1001, type: 2} _audioSource: {fileID: 0} - _animator: {fileID: 0} + _animator: {fileID: 1528631932536492394} chipSpawningAnim: {fileID: 0} chipThrowClip: {fileID: 0} showDuration: 1 @@ -79,6 +80,18 @@ MonoBehaviour: hideEase: 1 HiddenPos: {x: 0, y: 0} VisiblePos: {x: 0, y: 0} +--- !u!114 &6346851752755896837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3388591762507178167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65613ca2ac760fd4781294edbf567a7f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.PrizeModule --- !u!95 &1528631932536492394 Animator: serializedVersion: 7 diff --git a/Assets/Prefabs/Characters/2. Electro.prefab b/Assets/Prefabs/Characters/2. Electro.prefab index bfc49f8..8d3422d 100644 --- a/Assets/Prefabs/Characters/2. Electro.prefab +++ b/Assets/Prefabs/Characters/2. Electro.prefab @@ -11,6 +11,7 @@ GameObject: - component: {fileID: 8312733962015895203} - component: {fileID: 8233466963536421093} - component: {fileID: 743876072189889991} + - component: {fileID: 2927423071651238219} - component: {fileID: 4924238884005179083} - component: {fileID: 3477068820351240633} m_Layer: 0 @@ -49,9 +50,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character characterName: "\u0422\u043E\u043C" - difficultyModule: {fileID: 0} + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 743876072189889991} - prizeModule: {fileID: 0} + prizeModule: {fileID: 2927423071651238219} --- !u!114 &743876072189889991 MonoBehaviour: m_ObjectHideFlags: 0 @@ -64,13 +65,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 84da6ca280c0ea746bd14d1c45b7272a, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.VisualModule - icon: {fileID: 0} + icon: {fileID: -529477370105943367, guid: 229dd13b366e5b04ab570cce8b4796e4, type: 3} iconSmall: {fileID: 0} chipImage: {fileID: 0} - _messageBox: {fileID: 0} - replicas: {fileID: 0} + _messageBox: {fileID: 1876940890959816278, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + replicas: {fileID: 11400000, guid: 1a042f31f2c98b64fb2511191b1d1001, type: 2} _audioSource: {fileID: 0} - _animator: {fileID: 0} + _animator: {fileID: 4924238884005179083} chipSpawningAnim: {fileID: 0} chipThrowClip: {fileID: 0} showDuration: 1 @@ -79,6 +80,18 @@ MonoBehaviour: hideEase: 1 HiddenPos: {x: 0, y: 0} VisiblePos: {x: 0, y: 0} +--- !u!114 &2927423071651238219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216986101277937167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65613ca2ac760fd4781294edbf567a7f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.PrizeModule --- !u!95 &4924238884005179083 Animator: serializedVersion: 7 diff --git a/Assets/Prefabs/Characters/3. Wolf.prefab b/Assets/Prefabs/Characters/3. Wolf.prefab index 78720b5..79fe7b8 100644 --- a/Assets/Prefabs/Characters/3. Wolf.prefab +++ b/Assets/Prefabs/Characters/3. Wolf.prefab @@ -102,6 +102,7 @@ GameObject: - component: {fileID: 7360891851470844778} - component: {fileID: 6676369703225837789} - component: {fileID: 1922468027975826848} + - component: {fileID: 4781704477309761372} - component: {fileID: 4476514036158972146} - component: {fileID: 9076068693199869531} m_Layer: 0 @@ -139,10 +140,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: aa123dd73e3dcc84c9f46ca695aa1b17, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character - characterName: "\u0422\u043E\u043C" - difficultyModule: {fileID: 0} + characterName: "\u0420\u043E\u0431\u043E\u0432\u043E\u043B\u043A" + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 1922468027975826848} - prizeModule: {fileID: 0} + prizeModule: {fileID: 4781704477309761372} --- !u!114 &1922468027975826848 MonoBehaviour: m_ObjectHideFlags: 0 @@ -155,13 +156,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 84da6ca280c0ea746bd14d1c45b7272a, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.VisualModule - icon: {fileID: 0} + icon: {fileID: -1307639399570084333, guid: e35c65295e3ac234b9975dbe342f4090, type: 3} iconSmall: {fileID: 0} chipImage: {fileID: 0} - _messageBox: {fileID: 0} - replicas: {fileID: 0} + _messageBox: {fileID: 1876940890959816278, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + replicas: {fileID: 11400000, guid: 1a042f31f2c98b64fb2511191b1d1001, type: 2} _audioSource: {fileID: 0} - _animator: {fileID: 0} + _animator: {fileID: 4476514036158972146} chipSpawningAnim: {fileID: 0} chipThrowClip: {fileID: 0} showDuration: 1 @@ -170,6 +171,18 @@ MonoBehaviour: hideEase: 1 HiddenPos: {x: 0, y: 0} VisiblePos: {x: 0, y: 0} +--- !u!114 &4781704477309761372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4672236760054860725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65613ca2ac760fd4781294edbf567a7f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.PrizeModule --- !u!95 &4476514036158972146 Animator: serializedVersion: 7 diff --git a/Assets/Prefabs/Characters/4. Sam.prefab b/Assets/Prefabs/Characters/4. Sam.prefab index 23172d2..ed9d654 100644 --- a/Assets/Prefabs/Characters/4. Sam.prefab +++ b/Assets/Prefabs/Characters/4. Sam.prefab @@ -13,6 +13,7 @@ GameObject: - component: {fileID: 158448787793702589} - component: {fileID: 7661847991293490837} - component: {fileID: 135954504275540935} + - component: {fileID: 2680085133228831324} m_Layer: 0 m_Name: 4. Sam m_TagString: Untagged @@ -48,10 +49,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: aa123dd73e3dcc84c9f46ca695aa1b17, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character - characterName: "\u0422\u043E\u043C" - difficultyModule: {fileID: 0} + characterName: "\u0421\u0430\u043C\u0443\u0440\u0430\u0439" + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 158448787793702589} - prizeModule: {fileID: 0} + prizeModule: {fileID: 2680085133228831324} --- !u!114 &158448787793702589 MonoBehaviour: m_ObjectHideFlags: 0 @@ -64,13 +65,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 84da6ca280c0ea746bd14d1c45b7272a, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.VisualModule - icon: {fileID: 0} + icon: {fileID: 1809351836, guid: f52ee716872562446b5261ef80b4e8cd, type: 3} iconSmall: {fileID: 0} chipImage: {fileID: 0} - _messageBox: {fileID: 0} - replicas: {fileID: 0} + _messageBox: {fileID: 1876940890959816278, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + replicas: {fileID: 11400000, guid: 1a042f31f2c98b64fb2511191b1d1001, type: 2} _audioSource: {fileID: 0} - _animator: {fileID: 0} + _animator: {fileID: 7661847991293490837} chipSpawningAnim: {fileID: 0} chipThrowClip: {fileID: 0} showDuration: 1 @@ -198,6 +199,18 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 +--- !u!114 &2680085133228831324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7238525776732110314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65613ca2ac760fd4781294edbf567a7f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.PrizeModule --- !u!1 &8166061890310921111 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Characters/5. Feeshka.prefab b/Assets/Prefabs/Characters/5. Feeshka.prefab index 131c7cc..76c942f 100644 --- a/Assets/Prefabs/Characters/5. Feeshka.prefab +++ b/Assets/Prefabs/Characters/5. Feeshka.prefab @@ -13,6 +13,7 @@ GameObject: - component: {fileID: 3965767742986002211} - component: {fileID: 4847740494483037661} - component: {fileID: 791928390561251957} + - component: {fileID: 3332781226631085844} m_Layer: 0 m_Name: 5. Feeshka m_TagString: Untagged @@ -48,10 +49,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: aa123dd73e3dcc84c9f46ca695aa1b17, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character - characterName: "\u0422\u043E\u043C" - difficultyModule: {fileID: 0} + characterName: "\u0424\u0438\u0448\u043A\u0430" + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 3965767742986002211} - prizeModule: {fileID: 0} + prizeModule: {fileID: 3332781226631085844} --- !u!114 &3965767742986002211 MonoBehaviour: m_ObjectHideFlags: 0 @@ -64,13 +65,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 84da6ca280c0ea746bd14d1c45b7272a, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.VisualModule - icon: {fileID: 0} + icon: {fileID: -1325076913608113314, guid: b865778670f0b8c418a3450c41975937, type: 3} iconSmall: {fileID: 0} chipImage: {fileID: 0} - _messageBox: {fileID: 0} - replicas: {fileID: 0} + _messageBox: {fileID: 1876940890959816278, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + replicas: {fileID: 11400000, guid: 1a042f31f2c98b64fb2511191b1d1001, type: 2} _audioSource: {fileID: 0} - _animator: {fileID: 0} + _animator: {fileID: 4847740494483037661} chipSpawningAnim: {fileID: 0} chipThrowClip: {fileID: 0} showDuration: 1 @@ -198,6 +199,18 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 +--- !u!114 &3332781226631085844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5358438370345097688} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65613ca2ac760fd4781294edbf567a7f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.PrizeModule --- !u!1 &7413449725762096583 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Characters/6. BoyNextDoor.prefab b/Assets/Prefabs/Characters/6. BoyNextDoor.prefab index 4ff53b0..6b8383d 100644 --- a/Assets/Prefabs/Characters/6. BoyNextDoor.prefab +++ b/Assets/Prefabs/Characters/6. BoyNextDoor.prefab @@ -140,7 +140,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character characterName: "\u0422\u043E\u043C" - difficultyModule: {fileID: 0} + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 864774382241315247} prizeModule: {fileID: 0} --- !u!114 &864774382241315247 diff --git a/Assets/Prefabs/Characters/7. Girl.prefab b/Assets/Prefabs/Characters/7. Girl.prefab index 0374af8..48a1c91 100644 --- a/Assets/Prefabs/Characters/7. Girl.prefab +++ b/Assets/Prefabs/Characters/7. Girl.prefab @@ -140,7 +140,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.Character characterName: "\u0422\u043E\u043C" - difficultyModule: {fileID: 0} + difficultyModule: {fileID: 11400000, guid: a3e2c9fd2fee87943af2947d5eb72597, type: 2} visualModule: {fileID: 5909990390208136556} prizeModule: {fileID: 0} --- !u!114 &5909990390208136556 diff --git a/Assets/Prefabs/Characters/TestMessageBox.prefab b/Assets/Prefabs/Characters/TestMessageBox.prefab new file mode 100644 index 0000000..92175ae --- /dev/null +++ b/Assets/Prefabs/Characters/TestMessageBox.prefab @@ -0,0 +1,573 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3445425685777722834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5038375750017055777} + - component: {fileID: 8299439785254263817} + - component: {fileID: 3522442556933999774} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5038375750017055777 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3445425685777722834} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4917617217911147516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8299439785254263817 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3445425685777722834} + m_CullTransparentMesh: 1 +--- !u!114 &3522442556933999774 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3445425685777722834} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: bf65b9affd8e1304d9074d6271c9ac04, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6124346617087923689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519033178495556743} + - component: {fileID: 2477658180085709316} + - component: {fileID: 5385475176474712663} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &519033178495556743 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6124346617087923689} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4917617217911147516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.043} + m_SizeDelta: {x: 0, y: -1.4016} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2477658180085709316 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6124346617087923689} + m_CullTransparentMesh: 1 +--- !u!114 &5385475176474712663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6124346617087923689} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: New Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} + m_sharedMaterial: {fileID: 8312110174854069929, guid: 47e175ba6cb1126439b5583572a406fe, 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: 0.35 + m_fontSizeBase: 0.5 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 0 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &6679944310692155710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5739603173244235323} + - component: {fileID: 7454287611703797159} + - component: {fileID: 7725792043156676869} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5739603173244235323 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6679944310692155710} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4917617217911147516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.901} + m_SizeDelta: {x: 0, y: -1.4016} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7454287611703797159 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6679944310692155710} + m_CullTransparentMesh: 1 +--- !u!114 &7725792043156676869 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6679944310692155710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u0422\u043E\u043C" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} + m_sharedMaterial: {fileID: 8312110174854069929, guid: 47e175ba6cb1126439b5583572a406fe, 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: 0.35 + m_fontSizeBase: 0.5 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 0 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &8620231027088551242 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4917617217911147516} + - component: {fileID: 7502150315990015490} + - component: {fileID: 8012185055219410538} + - component: {fileID: 8428301645144312930} + - component: {fileID: 1876940890959816278} + - component: {fileID: 8112158254562883423} + m_Layer: 5 + m_Name: TestMessageBox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4917617217911147516 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8620231027088551242} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5038375750017055777} + - {fileID: 5739603173244235323} + - {fileID: 519033178495556743} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7502150315990015490 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8620231027088551242} + 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_VertexColorAlwaysGammaSpace: 0 + m_UseReflectionProbes: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &8012185055219410538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8620231027088551242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + 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 + m_PresetInfoIsWorld: 1 +--- !u!114 &8428301645144312930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8620231027088551242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1876940890959816278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8620231027088551242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6ba6cd455be0e43985c4c7663c0596, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.MessageBox + _frame: {fileID: 4917617217911147516} + _localPos: {x: 0, y: 0} + nameLabel: {fileID: 7725792043156676869} + textField: {fileID: 5385475176474712663} + _audioSource: {fileID: 8112158254562883423} + typeClip: {fileID: 8300000, guid: 1c48900c9ab0aa8418920a8193050870, type: 3} +--- !u!82 &8112158254562883423 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8620231027088551242} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Scripts/Gameplay/Bot Characters.meta b/Assets/Prefabs/Characters/TestMessageBox.prefab.meta similarity index 57% rename from Assets/Scripts/Gameplay/Bot Characters.meta rename to Assets/Prefabs/Characters/TestMessageBox.prefab.meta index 4a3268e..61f3891 100644 --- a/Assets/Scripts/Gameplay/Bot Characters.meta +++ b/Assets/Prefabs/Characters/TestMessageBox.prefab.meta @@ -1,7 +1,6 @@ fileFormatVersion: 2 -guid: 347fc016c233c364cb86eb28d8823fcf -folderAsset: yes -DefaultImporter: +guid: 50b5075221b823240b287cd5e6c02d64 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/PrizeButton.cs b/Assets/PrizeButton.cs new file mode 100644 index 0000000..ff5a610 --- /dev/null +++ b/Assets/PrizeButton.cs @@ -0,0 +1,46 @@ +using DG.Tweening; +using PrizeSystem; +using System; +using UnityEngine.UI; + +public class PrizeButton : MSignalButton +{ + public event Action OnPrize; + private PrizeType _prizeType; + + public override void ClickAnimation() + { + StopAnimation(); + + _animation = DOTween.Sequence(); + + _animation.Append(_image.DOColor(_pressedColor, 0.15f)); + _animation.Append(_image.DOColor(_selectedColor, 0.15f)); + _animation.AppendCallback(() => + { + OnPrize?.Invoke(_prizeType); + SoundManager.instance.playClip(_clip); + }); + + _animation.PlayForward(); + } + + public void Configure(PrizeType prizeType) + { + _prizeType = prizeType; + _image.sprite = PrizeSystemManager.GetPrizeIcon(prizeType); + _textMeshPro.text = GetText(prizeType); + } + + private string GetText(PrizeType prizeType) + => prizeType switch + { + PrizeType.Hopper => "Добавить хоппер", + PrizeType.Marbles => "Добавить марблс", + PrizeType.Ticket => "Добавить тикет", + PrizeType.Qr => "Добавить QR", + PrizeType.VitrinaBox => "Добавить витрину", + _ => "ошибка" + }; + +} \ No newline at end of file diff --git a/Assets/PrizeButton.cs.meta b/Assets/PrizeButton.cs.meta new file mode 100644 index 0000000..6d74404 --- /dev/null +++ b/Assets/PrizeButton.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 29d71697c50744c4ba61a084f207c698 \ No newline at end of file diff --git a/Assets/PrizeButton.prefab b/Assets/PrizeButton.prefab new file mode 100644 index 0000000..98cfc13 --- /dev/null +++ b/Assets/PrizeButton.prefab @@ -0,0 +1,234 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1930693335002057802 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7244007432844469167} + - component: {fileID: 8928771092486777963} + - component: {fileID: 6574132780437697725} + - component: {fileID: 942699711437869465} + m_Layer: 5 + m_Name: PrizeButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7244007432844469167 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930693335002057802} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6796888954934601460} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8928771092486777963 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930693335002057802} + m_CullTransparentMesh: 1 +--- !u!114 &6574132780437697725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930693335002057802} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &942699711437869465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930693335002057802} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 29d71697c50744c4ba61a084f207c698, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PrizeButton + _image: {fileID: 6574132780437697725} + _textMeshPro: {fileID: 5975884200597755691} + _normalColor: {r: 0.554717, g: 0.554717, b: 0.554717, a: 1} + _selectedColor: {r: 1, g: 1, b: 1, a: 1} + _pressedColor: {r: 1, g: 1, b: 1, a: 1} + _clip: {fileID: 0} +--- !u!1 &3282660986900798294 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6796888954934601460} + - component: {fileID: 7466989399709544197} + - component: {fileID: 5975884200597755691} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6796888954934601460 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3282660986900798294} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7244007432844469167} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 20, y: 0} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &7466989399709544197 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3282660986900798294} + m_CullTransparentMesh: 1 +--- !u!114 &5975884200597755691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3282660986900798294} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: New Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} + m_sharedMaterial: {fileID: 8312110174854069929, guid: 47e175ba6cb1126439b5583572a406fe, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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} diff --git a/Assets/Scripts/Common/GameFSM.meta b/Assets/PrizeButton.prefab.meta similarity index 57% rename from Assets/Scripts/Common/GameFSM.meta rename to Assets/PrizeButton.prefab.meta index 4a7e7fa..07295d2 100644 --- a/Assets/Scripts/Common/GameFSM.meta +++ b/Assets/PrizeButton.prefab.meta @@ -1,7 +1,6 @@ fileFormatVersion: 2 -guid: b1f83e34f27996f458ea5a3a5cddc55c -folderAsset: yes -DefaultImporter: +guid: f4d8e373cd4ebc948abb9692f14709e6 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/PrizesConfigurator.prefab b/Assets/PrizesConfigurator.prefab index b9ea2ee..a218380 100644 --- a/Assets/PrizesConfigurator.prefab +++ b/Assets/PrizesConfigurator.prefab @@ -1,5 +1,1186 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &7215980376997135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5894269580353207703} + - component: {fileID: 1014560691302518426} + - component: {fileID: 8964039495605377843} + m_Layer: 5 + m_Name: Character Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5894269580353207703 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7215980376997135} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6998410451128527050} + 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: -445, y: 303} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1014560691302518426 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7215980376997135} + m_CullTransparentMesh: 1 +--- !u!114 &8964039495605377843 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7215980376997135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u043A\u0443\u0431\u0438\u043A" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: e15a0ab6490ab964998a0786c208c4b2, type: 2} + m_sharedMaterial: {fileID: 4262305343556741190, guid: e15a0ab6490ab964998a0786c208c4b2, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &950685368982405899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2861215385565935215} + - component: {fileID: 6566518203334288951} + - component: {fileID: 6303814471450744850} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2861215385565935215 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950685368982405899} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6998410451128527050} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &6566518203334288951 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950685368982405899} + m_CullTransparentMesh: 1 +--- !u!114 &6303814471450744850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950685368982405899} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u0412\u044B\u0431\u0435\u0440\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u0436\u0430 + \u0434\u043B\u044F \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} + m_sharedMaterial: {fileID: 8312110174854069929, guid: 47e175ba6cb1126439b5583572a406fe, 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: 54 + m_fontSizeBase: 54 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &980466842481123820 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4593660358976556182} + - component: {fileID: 5498964293446437636} + - component: {fileID: 2287657974856771667} + m_Layer: 5 + m_Name: TableTitle.1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4593660358976556182 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980466842481123820} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4296811095572388652} + 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: -507, y: 309} + m_SizeDelta: {x: 477.4, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5498964293446437636 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980466842481123820} + m_CullTransparentMesh: 1 +--- !u!114 &2287657974856771667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980466842481123820} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u043F\u0440\u0438\u0437\u044B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: e15a0ab6490ab964998a0786c208c4b2, type: 2} + m_sharedMaterial: {fileID: 4262305343556741190, guid: e15a0ab6490ab964998a0786c208c4b2, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &1230475039650522997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6087319970201647579} + - component: {fileID: 5163440344643624749} + - component: {fileID: 7572701421691474762} + m_Layer: 5 + m_Name: Added Prizes Table + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6087319970201647579 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230475039650522997} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4296811095572388652} + 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: 398.02, y: 0} + m_SizeDelta: {x: 771.28, y: 556.65} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5163440344643624749 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230475039650522997} + m_CullTransparentMesh: 1 +--- !u!114 &7572701421691474762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230475039650522997} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1590808388917995624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3261912436953472166} + - component: {fileID: 3921774415553165248} + - component: {fileID: 8660028286869312791} + m_Layer: 5 + m_Name: TableTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3261912436953472166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590808388917995624} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6998410451128527050} + 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: 269, y: 309} + m_SizeDelta: {x: 477.4, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3921774415553165248 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590808388917995624} + m_CullTransparentMesh: 1 +--- !u!114 &8660028286869312791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590808388917995624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u041D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0435 \u043F\u0440\u0438\u0437\u044B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: e15a0ab6490ab964998a0786c208c4b2, type: 2} + m_sharedMaterial: {fileID: 4262305343556741190, guid: e15a0ab6490ab964998a0786c208c4b2, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &2688946316132679044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6998410451128527050} + - component: {fileID: 5686622174867551801} + - component: {fileID: 3106278179480201690} + - component: {fileID: 8971314296099230790} + m_Layer: 5 + m_Name: Character Selector + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6998410451128527050 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2688946316132679044} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2861215385565935215} + - {fileID: 5894269580353207703} + - {fileID: 7401409476781486482} + - {fileID: 2584439323706165172} + - {fileID: 8559038603155075450} + - {fileID: 3261912436953472166} + - {fileID: 3273224345942325796} + m_Father: {fileID: 4098477273951441249} + 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: 1727.67, y: 932.19} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5686622174867551801 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2688946316132679044} + m_CullTransparentMesh: 1 +--- !u!114 &3106278179480201690 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2688946316132679044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.09337839, g: 0.10268989, b: 0.23018861, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8971314296099230790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2688946316132679044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 852fdedcfe3484442b0d7e16ba459a3b, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterSelectionPanel + CharacterNameLabel: {fileID: 8964039495605377843} + CharacterIcon: {fileID: 5624866514520992697} + ClickSound: {fileID: 8300000, guid: 1c48900c9ab0aa8418920a8193050870, type: 3} + _prizeTable: {fileID: 3273224345942325796} + _prizeViewPrefab: {fileID: 1203032466002125781, guid: f8172e74629723c4e993e8ac2f322bdf, type: 3} + buttons: + - {fileID: 1081245877292184043} + - {fileID: 6492870122095265573} + _selectButton: {fileID: 1081245877292184043} + _exitButton: {fileID: 6492870122095265573} +--- !u!1 &3101783992679014756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2566361005698348785} + - component: {fileID: 4282496844627034424} + - component: {fileID: 591785851770124817} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2566361005698348785 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3101783992679014756} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4296811095572388652} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &4282496844627034424 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3101783992679014756} + m_CullTransparentMesh: 1 +--- !u!114 &591785851770124817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3101783992679014756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439 \u043F\u0440\u0438\u0437\u044B + \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u0436\u0430" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} + m_sharedMaterial: {fileID: 8312110174854069929, guid: 47e175ba6cb1126439b5583572a406fe, 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: 54 + m_fontSizeBase: 54 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &3111433413249271882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6755101644642404136} + - component: {fileID: 370873407893766352} + - component: {fileID: 7798113571858338898} + m_Layer: 5 + m_Name: TableTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6755101644642404136 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3111433413249271882} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4296811095572388652} + 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: 269, y: 309} + m_SizeDelta: {x: 477.4, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &370873407893766352 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3111433413249271882} + m_CullTransparentMesh: 1 +--- !u!114 &7798113571858338898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3111433413249271882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u041D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0435 \u043F\u0440\u0438\u0437\u044B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: e15a0ab6490ab964998a0786c208c4b2, type: 2} + m_sharedMaterial: {fileID: 4262305343556741190, guid: e15a0ab6490ab964998a0786c208c4b2, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 16 + m_fontSizeMax: 64 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &3248276501829514466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7401409476781486482} + - component: {fileID: 6975979461184535619} + - component: {fileID: 5624866514520992697} + m_Layer: 5 + m_Name: Character icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7401409476781486482 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3248276501829514466} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6998410451128527050} + 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: -450.83, y: 57.83} + m_SizeDelta: {x: 421.37, y: 421.37} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6975979461184535619 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3248276501829514466} + m_CullTransparentMesh: 1 +--- !u!114 &5624866514520992697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3248276501829514466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5051748462626892162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3273224345942325796} + - component: {fileID: 6330057533787885257} + - component: {fileID: 4517340295574929592} + - component: {fileID: 8432495044382396904} + m_Layer: 5 + m_Name: Prizes Table + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3273224345942325796 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5051748462626892162} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6998410451128527050} + 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: 398.02, y: 0} + m_SizeDelta: {x: 771.28, y: 556.65} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6330057533787885257 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5051748462626892162} + m_CullTransparentMesh: 1 +--- !u!114 &4517340295574929592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5051748462626892162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.4113207, g: 0.4113207, b: 0.4113207, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8432495044382396904 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5051748462626892162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 12.42 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &5423109734219761443 GameObject: m_ObjectHideFlags: 0 @@ -11,6 +1192,7 @@ GameObject: - component: {fileID: 4098477273951441249} - component: {fileID: 7813772422055777004} - component: {fileID: 6451366207068483882} + - component: {fileID: 7716801100805455212} m_Layer: 5 m_Name: PrizesConfigurator m_TagString: Untagged @@ -25,11 +1207,13 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5423109734219761443} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 6998410451128527050} + - {fileID: 4296811095572388652} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -75,3 +1259,583 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7716801100805455212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5423109734219761443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1bf3043857e54fd41b0d39086cd9c3be, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::CharacterPrizeConfigurator + _characterSelection: {fileID: 8971314296099230790} + _prizesSelector: {fileID: 2866604199148495954} +--- !u!1 &6801293247480716017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4296811095572388652} + - component: {fileID: 5532940689349091591} + - component: {fileID: 5643597653236887863} + - component: {fileID: 2866604199148495954} + m_Layer: 5 + m_Name: PrizeSelector + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4296811095572388652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6801293247480716017} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2566361005698348785} + - {fileID: 8162745928107063912} + - {fileID: 4593660358976556182} + - {fileID: 4388752671798834034} + - {fileID: 6755101644642404136} + - {fileID: 6087319970201647579} + m_Father: {fileID: 4098477273951441249} + 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: 1727.67, y: 932.19} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5532940689349091591 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6801293247480716017} + m_CullTransparentMesh: 1 +--- !u!114 &5643597653236887863 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6801293247480716017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.09337839, g: 0.10268989, b: 0.23018861, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2866604199148495954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6801293247480716017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f48e5505c7183ea42bc61e529a276725, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PrizesSelector + _addedPrizesTable: {fileID: 6087319970201647579} + _prizeViewPrefab: {fileID: 1203032466002125781, guid: f8172e74629723c4e993e8ac2f322bdf, type: 3} + _availablePrizesTable: {fileID: 978156554344200501} +--- !u!1 &8288873238761209220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4388752671798834034} + - component: {fileID: 2712554199351677633} + - component: {fileID: 3307746403461450041} + - component: {fileID: 978156554344200501} + - component: {fileID: 2520044121805980792} + m_Layer: 5 + m_Name: Available Prizes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4388752671798834034 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8288873238761209220} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4296811095572388652} + 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: -411, y: 0} + m_SizeDelta: {x: 771.28, y: 556.65} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2712554199351677633 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8288873238761209220} + m_CullTransparentMesh: 1 +--- !u!114 &3307746403461450041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8288873238761209220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.3132075, g: 0.3132075, b: 0.3132075, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &978156554344200501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8288873238761209220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 418dc3f246ef5e44cb059f5ca0c10b93, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::AvailablePrizesTable + _prizeButtonPrefab: {fileID: 942699711437869465, guid: f4d8e373cd4ebc948abb9692f14709e6, type: 3} + _buttonsRoot: {fileID: 4388752671798834034} +--- !u!114 &2520044121805980792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8288873238761209220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1001 &675856799151252063 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 4296811095572388652} + m_Modifications: + - target: {fileID: 2090018479069457630, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_text + value: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C" + objectReference: {fileID: 0} + - target: {fileID: 2090018479069457630, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_fontSize + value: 35 + objectReference: {fileID: 0} + - target: {fileID: 3568601542204023552, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Name + value: Exit button + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_SizeDelta.x + value: 321.28998 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_SizeDelta.y + value: 54.02002 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 29.790009 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c244207dd10914141af206f200c91b0a, type: 3} +--- !u!224 &8162745928107063912 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + m_PrefabInstance: {fileID: 675856799151252063} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1072162663226599757 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 6998410451128527050} + m_Modifications: + - target: {fileID: 2090018479069457630, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_text + value: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0438 \u0432\u044B\u0439\u0442\u0438" + objectReference: {fileID: 0} + - target: {fileID: 2090018479069457630, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_fontSize + value: 35 + objectReference: {fileID: 0} + - target: {fileID: 3568601542204023552, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Name + value: Exit button + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_SizeDelta.x + value: 321.29004 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_SizeDelta.y + value: 54.02002 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 214.79999 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -785.5 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c244207dd10914141af206f200c91b0a, type: 3} +--- !u!114 &6492870122095265573 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6123304204807351912, guid: c244207dd10914141af206f200c91b0a, type: 3} + m_PrefabInstance: {fileID: 1072162663226599757} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6422f146b37ef714db72d2550697c362, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::MSignalButton +--- !u!224 &8559038603155075450 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + m_PrefabInstance: {fileID: 1072162663226599757} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6627895531943862147 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 6998410451128527050} + m_Modifications: + - target: {fileID: 2090018479069457630, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_text + value: "\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C" + objectReference: {fileID: 0} + - target: {fileID: 2090018479069457630, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_fontSize + value: 35 + objectReference: {fileID: 0} + - target: {fileID: 3568601542204023552, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Name + value: Select button + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_SizeDelta.x + value: 321.29004 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_SizeDelta.y + value: 54.02002 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 214.79999 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -684.2 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c244207dd10914141af206f200c91b0a, type: 3} +--- !u!114 &1081245877292184043 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6123304204807351912, guid: c244207dd10914141af206f200c91b0a, type: 3} + m_PrefabInstance: {fileID: 6627895531943862147} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6422f146b37ef714db72d2550697c362, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::MSignalButton +--- !u!224 &2584439323706165172 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8657825045506627639, guid: c244207dd10914141af206f200c91b0a, type: 3} + m_PrefabInstance: {fileID: 6627895531943862147} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/PrizesSelector.cs b/Assets/PrizesSelector.cs new file mode 100644 index 0000000..14ca9ba --- /dev/null +++ b/Assets/PrizesSelector.cs @@ -0,0 +1,50 @@ +using CharacterSystem; +using PrizeSystem; +using UnityEngine; + +public class PrizesSelector : MonoBehaviour +{ + [SerializeField] RectTransform _addedPrizesTable; + [SerializeField] PrizeView _prizeViewPrefab; + + [SerializeField] AvailablePrizesTable _availablePrizesTable; + + private PrizeSet set; + + public void Open(Character character) + { + print($"открыто с персонажем {character.CharacterIndex}"); + gameObject.SetActive(true); + + set = PrizeSystemManager.PrizeContainer.Sets[character.CharacterIndex]; + UpdateView(); + + } + + + private void UpdateView() + { + ClearTable(); + DisplayPrizeSet(set); + + _availablePrizesTable.Refresh(set); + } + + private void ClearTable() + { + for (int i = _addedPrizesTable.childCount - 1; i >= 0; i--) + { + var go = _addedPrizesTable.GetChild(i).gameObject; + Destroy(go); + } + } + + private void DisplayPrizeSet(PrizeSet prizeSet) + { + foreach (var item in prizeSet.Prizes) + { + var view = Instantiate(_prizeViewPrefab, _addedPrizesTable); + view.SetPrize(item); + } + } +} diff --git a/Assets/PrizesSelector.cs.meta b/Assets/PrizesSelector.cs.meta new file mode 100644 index 0000000..0074c55 --- /dev/null +++ b/Assets/PrizesSelector.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f48e5505c7183ea42bc61e529a276725 \ No newline at end of file diff --git a/Assets/Scenes/GameScene3D.unity b/Assets/Scenes/GameScene3D.unity index 1964059..9581f58 100644 --- a/Assets/Scenes/GameScene3D.unity +++ b/Assets/Scenes/GameScene3D.unity @@ -1151,6 +1151,74 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 64783859} m_CullTransparentMesh: 1 +--- !u!1 &65425788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 65425791} + - component: {fileID: 65425790} + - component: {fileID: 65425789} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &65425789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65425788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.StandaloneInputModule + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &65425790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65425788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &65425791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65425788} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &71076714 GameObject: m_ObjectHideFlags: 0 @@ -2781,7 +2849,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: prizeErrorSound: {fileID: 8300000, guid: 5fb832a50dc689845898a59217fd0535, type: 3} - SoundNotification: 1 PrizeNotificationSounds: - {fileID: 8300000, guid: 1347f6385fc35fe4882304613a9fbfe9, type: 3} - {fileID: 8300000, guid: 2e6426be1392aea48936249e22b54e1f, type: 3} @@ -2794,7 +2861,20 @@ MonoBehaviour: ImagePosition: {x: -172.5, y: 9.9} ImageSize: 445 audioClip: {fileID: 8300000, guid: 7fb340d179cafc04cb2e4baa2ddde96f, type: 3} - vitrinaPanel: {fileID: 61619038} + iconsMap: + - prizeType: 0 + sprite: {fileID: 0} + - prizeType: 1 + sprite: {fileID: 1846153687249437008, guid: d082c4b9803e5a644984a930192356cb, type: 3} + - prizeType: 2 + sprite: {fileID: -314096454217921429, guid: d082c4b9803e5a644984a930192356cb, type: 3} + - prizeType: 3 + sprite: {fileID: 4024560508046998061, guid: d082c4b9803e5a644984a930192356cb, type: 3} + - prizeType: 4 + sprite: {fileID: -882981077604546528, guid: d082c4b9803e5a644984a930192356cb, type: 3} + - prizeType: 5 + sprite: {fileID: 1421601187438738523, guid: d082c4b9803e5a644984a930192356cb, type: 3} + defaultIcon: {fileID: 1846153687249437008, guid: d082c4b9803e5a644984a930192356cb, type: 3} --- !u!114 &259182291 MonoBehaviour: m_ObjectHideFlags: 0 @@ -14088,11 +14168,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: characterPrefabs: - - {fileID: 8873348988979391587, guid: 8813a05b560fe74499373105c065d482, type: 3} - - {fileID: 8873348988979391587, guid: dbde6acf97979cd4caaca68f83b75d64, type: 3} - - {fileID: 8873348988979391587, guid: 280922cd1d9e3ef44bdbfe757f8cfdef, type: 3} - - {fileID: 8873348988979391587, guid: b1bd71cccf32b4c4a94b2ff65361e9fe, type: 3} - - {fileID: 8873348988979391587, guid: 4b7845a03cf955e4488f4e3286f11b60, type: 3} + - {fileID: 8039207184498597514, guid: 7702b7919503a1e479151e8fecd78924, type: 3} + - {fileID: 8233466963536421093, guid: 53736a6cd29210e4eb0f110ef04d344c, type: 3} + - {fileID: 6676369703225837789, guid: eb3cf1ffcc790864db631f50a02da123, type: 3} + - {fileID: 3215344534852605381, guid: d2448bca251e50a4ebaae923084264a0, type: 3} + - {fileID: 5982990141465619124, guid: f1fc145bd1885e146bc33b2669940862, type: 3} --- !u!4 &1542626845 Transform: m_ObjectHideFlags: 0 @@ -18834,7 +18914,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &1967587903 RectTransform: m_ObjectHideFlags: 0 @@ -22500,10 +22580,6 @@ PrefabInstance: propertyPath: m_Name value: PrizesConfigurator objectReference: {fileID: 0} - - target: {fileID: 5423109734219761443, guid: dcef42dd0beb95f4e9b230192966f091, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -24229,6 +24305,107 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f99466ff04084264e9e9fc17b47090bf, type: 3} +--- !u!1001 &8712459775951269144 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_SizeDelta.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_SizeDelta.y + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_AnchoredPosition.x + value: 16.9 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0.77 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4917617217911147516, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7725792043156676869, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_fontSize + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8620231027088551242, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} + propertyPath: m_Name + value: TestMessageBox + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 50b5075221b823240b287cd5e6c02d64, type: 3} --- !u!1 &8752651682790280933 GameObject: m_ObjectHideFlags: 0 @@ -24296,3 +24473,5 @@ SceneRoots: - {fileID: 46193421} - {fileID: 1606109336} - {fileID: 1329752847} + - {fileID: 8712459775951269144} + - {fileID: 65425791} diff --git a/Assets/Scripts/CharactersSystem/CharactersController.cs b/Assets/Scripts/CharactersSystem/CharactersController.cs index 8627fd8..2b706d4 100644 --- a/Assets/Scripts/CharactersSystem/CharactersController.cs +++ b/Assets/Scripts/CharactersSystem/CharactersController.cs @@ -19,7 +19,6 @@ namespace CharacterSystem public void Initialize() { - return; I = this; SetupCharacters(); } @@ -68,10 +67,11 @@ namespace CharacterSystem public void RefreshPrizes() { - List prizes = PrizeSerializer.LoadPrizes(); - for (int i = 0; i < characters.Length; i++) - characters[i].prizeModule.SetPrize(prizes[i]); + { + PrizeSet prizesSet = PrizeSystemManager.PrizeContainer.Sets[i]; + characters[i].prizeModule.SetPrizes(prizesSet); + } } public void ShowCharacter(int newIndex) diff --git a/Assets/Scripts/CharactersSystem/PrizeModule.cs b/Assets/Scripts/CharactersSystem/PrizeModule.cs index 91a717b..12a84bc 100644 --- a/Assets/Scripts/CharactersSystem/PrizeModule.cs +++ b/Assets/Scripts/CharactersSystem/PrizeModule.cs @@ -1,16 +1,17 @@ using PrizeSystem; +using System.Collections.Generic; using UnityEngine; namespace CharacterSystem { public class PrizeModule : MonoBehaviour { - private Prize _prize; + private List _prizes; public bool HasPrize { get; private set; } - public void SetPrize(Prize prize) + public void SetPrizes(PrizeSet prizesSet) { - _prize = prize; + _prizes = prizesSet.Prizes; } public void ResetModule() @@ -18,19 +19,19 @@ namespace CharacterSystem HasPrize = true; } - public Prize CheckPrize() - => _prize; + public List CheckPrizes() + => _prizes; - public bool TryFetchPrize(out Prize prize) + public bool TryFetchPrize(out List prizes) { if (HasPrize) { - prize = _prize; + prizes = _prizes; HasPrize = false; return true; } - prize = null; + prizes = null; return false; } @@ -41,7 +42,7 @@ namespace CharacterSystem if (HasPrize == false) return false; - if (_prize is T casted) + if (_prizes is T casted) { castedPrize = casted; HasPrize = false; diff --git a/Assets/Scripts/Common/CryptoUtil.cs b/Assets/Scripts/Common/CryptoUtil.cs deleted file mode 100644 index 18a2e56..0000000 --- a/Assets/Scripts/Common/CryptoUtil.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using UnityEngine; - -public static class CryptoUtil -{ - // Формат пакета (Base64): - // [1 байт Version][16 байт Salt][16 байт IV][N байт Cipher][32 байта HMAC] - private const byte Version = 1; - private const int SaltSize = 16; - private const int IvSize = 16; - private const int HmacSize = 32; - private const int Pbkdf2Iterations = 1000; // можно поднять до 200-300k, если ок по производительности - - public static string EncryptJson(string json, string password) - { - if (json == null) throw new ArgumentNullException(nameof(json)); - if (string.IsNullOrEmpty(password)) throw new ArgumentException("Password is empty.", nameof(password)); - - byte[] salt = RandomBytes(SaltSize); - byte[] iv = RandomBytes(IvSize); - - // Получаем 64 байта: 32 на AES ключ + 32 на HMAC ключ - DeriveKeys(password, salt, out var encKey, out var macKey); - - byte[] plainBytes = Encoding.UTF8.GetBytes(json); - byte[] cipherBytes = AesCbcEncrypt(plainBytes, encKey, iv); - - // Собираем заголовок+данные (без HMAC) - byte[] headerAndCipher = new byte[1 + SaltSize + IvSize + cipherBytes.Length]; - int offset = 0; - - headerAndCipher[offset++] = Version; - Buffer.BlockCopy(salt, 0, headerAndCipher, offset, salt.Length); offset += salt.Length; - Buffer.BlockCopy(iv, 0, headerAndCipher, offset, iv.Length); offset += iv.Length; - Buffer.BlockCopy(cipherBytes, 0, headerAndCipher, offset, cipherBytes.Length); - - // HMAC по всему, что выше (version+salt+iv+cipher) - byte[] hmac = ComputeHmac(macKey, headerAndCipher); - - // Финальный пакет - byte[] package = new byte[headerAndCipher.Length + hmac.Length]; - Buffer.BlockCopy(headerAndCipher, 0, package, 0, headerAndCipher.Length); - Buffer.BlockCopy(hmac, 0, package, headerAndCipher.Length, hmac.Length); - - return Convert.ToBase64String(package); - } - - public static string DecryptJson(string encryptedBase64, string password) - { - if (encryptedBase64 == null) throw new ArgumentNullException(nameof(encryptedBase64)); - if (string.IsNullOrEmpty(password)) throw new ArgumentException("Password is empty.", nameof(password)); - - byte[] package; - try - { - package = Convert.FromBase64String(encryptedBase64); - } - catch (FormatException) - { - throw new CryptographicException("Input is not valid Base64."); - } - - if (package.Length < 1 + SaltSize + IvSize + 1 + HmacSize) - throw new CryptographicException("Encrypted data is too short."); - - int minHeader = 1 + SaltSize + IvSize; - int cipherLen = package.Length - minHeader - HmacSize; - if (cipherLen <= 0) throw new CryptographicException("Encrypted data has no ciphertext."); - - byte version = package[0]; - if (version != Version) throw new CryptographicException($"Unsupported version: {version}"); - - byte[] salt = new byte[SaltSize]; - byte[] iv = new byte[IvSize]; - byte[] cipher = new byte[cipherLen]; - byte[] hmac = new byte[HmacSize]; - - Buffer.BlockCopy(package, 1, salt, 0, SaltSize); - Buffer.BlockCopy(package, 1 + SaltSize, iv, 0, IvSize); - Buffer.BlockCopy(package, minHeader, cipher, 0, cipherLen); - Buffer.BlockCopy(package, minHeader + cipherLen, hmac, 0, HmacSize); - - DeriveKeys(password, salt, out var encKey, out var macKey); - - // Проверка HMAC (важно: до расшифровки) - byte[] headerAndCipher = new byte[minHeader + cipherLen]; - Buffer.BlockCopy(package, 0, headerAndCipher, 0, headerAndCipher.Length); - - byte[] expectedHmac = ComputeHmac(macKey, headerAndCipher); - if (!FixedTimeEquals(hmac, expectedHmac)) - throw new CryptographicException("Invalid password or data was tampered (HMAC mismatch)."); - - byte[] plainBytes = AesCbcDecrypt(cipher, encKey, iv); - return Encoding.UTF8.GetString(plainBytes); - } - - // ===== helpers ===== - - private static void DeriveKeys(string password, byte[] salt, out byte[] encKey, out byte[] macKey) - { - using var kdf = new Rfc2898DeriveBytes(password, salt, Pbkdf2Iterations, HashAlgorithmName.SHA256); - byte[] keyMaterial = kdf.GetBytes(64); - encKey = new byte[32]; - macKey = new byte[32]; - Buffer.BlockCopy(keyMaterial, 0, encKey, 0, 32); - Buffer.BlockCopy(keyMaterial, 32, macKey, 0, 32); - - // чуть безопаснее: затереть временный буфер - Array.Clear(keyMaterial, 0, keyMaterial.Length); - } - - private static byte[] AesCbcEncrypt(byte[] plain, byte[] key, byte[] iv) - { - using var aes = Aes.Create(); - aes.KeySize = 256; - aes.Mode = CipherMode.CBC; - aes.Padding = PaddingMode.PKCS7; - aes.Key = key; - aes.IV = iv; - - using var ms = new MemoryStream(); - using (var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)) - { - cs.Write(plain, 0, plain.Length); - cs.FlushFinalBlock(); - } - return ms.ToArray(); - } - - private static byte[] AesCbcDecrypt(byte[] cipher, byte[] key, byte[] iv) - { - using var aes = Aes.Create(); - aes.KeySize = 256; - aes.Mode = CipherMode.CBC; - aes.Padding = PaddingMode.PKCS7; - aes.Key = key; - aes.IV = iv; - - using var ms = new MemoryStream(); - using (var cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write)) - { - cs.Write(cipher, 0, cipher.Length); - cs.FlushFinalBlock(); - } - return ms.ToArray(); - } - - private static byte[] ComputeHmac(byte[] macKey, byte[] data) - { - using var h = new HMACSHA256(macKey); - return h.ComputeHash(data); - } - - private static byte[] RandomBytes(int size) - { - var b = new byte[size]; - RandomNumberGenerator.Fill(b); - return b; - } - - private static bool FixedTimeEquals(byte[] a, byte[] b) - { - if (a == null || b == null || a.Length != b.Length) return false; - return CryptographicOperations.FixedTimeEquals(a, b); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Common/CryptoUtil.cs.meta b/Assets/Scripts/Common/CryptoUtil.cs.meta deleted file mode 100644 index 98c4a91..0000000 --- a/Assets/Scripts/Common/CryptoUtil.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 63eee6b84ab7d65488940534d6ded2dd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs b/Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs deleted file mode 100644 index 9f191bd..0000000 --- a/Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs +++ /dev/null @@ -1,52 +0,0 @@ -using UnityEngine; - -public class CheckLeadersFromMenuState : IState -{ - Leaderboard lb; - - float timeToExit = 60f; - float timeElapsed = 0; - - public void enter() - { - ComWrapper.InputRecieved +=ResetTimer; - lb = GameManager.Instance.leaderboard; - - //вкл - lb.gameObject.SetActive(true); - lb.Initialize(); - SoundManager.instance.playSwitch(); - timeElapsed = 0; - } - - void ResetTimer(string s) => timeElapsed = 0; - - public void exit() - { - ComWrapper.InputRecieved-=ResetTimer; - lb.ClearRowsText(); - lb.gameObject.SetActive(false); - SoundManager.instance.playSwitch(); - } - - public void update() - { - //проверка - bool exitCombo = In.GetButtonDownAnyPlayer(PlayerAction.left) && In.GetButtonDownAnyPlayer(PlayerAction.right); - if (exitCombo) - { - GameManager.Instance.GotoMenu(); - } - - bool keepDownButton = In.GetButtonAnyPlayer(PlayerAction.down); - float accelerationSign = keepDownButton ? 1 : -1f; - lb.accelerationY = Mathf.Abs(lb.accelerationY) * accelerationSign; - - timeElapsed += Time.deltaTime; - if (timeElapsed > timeToExit) - { - GameManager.Instance.GotoMenu(); - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs.meta b/Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs.meta deleted file mode 100644 index 1068f51..0000000 --- a/Assets/Scripts/Common/GameFSM/CheckLeadersFromMenuState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: da31cb838704c31478eef984dc9a9d30 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs b/Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs deleted file mode 100644 index de1e8b8..0000000 --- a/Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -public class CheckSettingsPasswordState : IState -{ - //EnterPasswordPanel panel; - public void enter() - { - //panel = GameManager.instance.enterPasswordPanel; - Debug.Log("[Проход в настройки]"); - - //Пароль не установлен. - //bool Pwd = SettingsManager.GetBool(SettingKey.PASSWORD_ON_SETTINGS, false); - //if (!Pwd) - //{ - // Debug.Log("[Пароля нет, заходим братья]"); - // GameManager.instance.stateMachine.ChangeState(new SettingsState()); - // return; - //} - - //Пароль есть. - //Получить пароль. - string password = ExternalFilesGetter.GetSettingsPassword(); - //Если он не валидный, то сбросить настройку и пропустить. - if (password == null) - { - Debug.Log("[Файла пароля нет. Сброс пароля. Заход в настройки]"); - disableCheck(); - - GameManager.Instance.stateMachine.ChangeState(new SettingsState()); - return; - } - - if (PasswordValid(password)) - { - // если валидный, то запускаем ввод пароля - //panel.gameObject.SetActive(true); - //panel.Initialize(password); - } - else - { - Debug.Log("[пароль невалидный. Сброс пароля. Заход в настройки]"); - disableCheck(); - ExternalFilesGetter.SetPassword(""); - GameManager.Instance.stateMachine.ChangeState(new SettingsState()); - } - - - - - - } - - private static void disableCheck() - { - //Setting setting = SettingsManager.Container.TryGetSetting(SettingKey.PASSWORD_ON_SETTINGS); - //setting.ChangeValue(-1);//ставим false - //SettingsManager.OnSettingsChanged?.Invoke(); - } - - public void exit() - { - //panel.gameObject.SetActive(false); - } - - public void update() - { - //panel._Update(); - //if (panel.truePassword) - //{ - // GameManager.instance.stateMachine.ChangeState(new SettingsState()); - //} - GameManager.Instance.stateMachine.ChangeState(new SettingsState()); - } - - private bool PasswordValid(string password) - { - if(password.Length!=12) return false; - List combinations = SplitPasswordIntoPairs(password); - List validCombinations = new List { "L1", "L2", "R1", "R2", "A1", "A2", "P1", "P2" }; - - foreach (string combination in combinations) - { - if (!validCombinations.Contains(combination)) return false; - } - return true; - } - - - List SplitPasswordIntoPairs(string password) - { - List result = new List(); - for (int i = 0; i < password.Length; i += 2) - { - result.Add(password.Substring(i, 2)); - } - - return result; - } -} \ No newline at end of file diff --git a/Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs.meta b/Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs.meta deleted file mode 100644 index 1e906c3..0000000 --- a/Assets/Scripts/Common/GameFSM/CheckSettingsPasswordState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a53795db75745c44e913b9ceb5564076 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs deleted file mode 100644 index ff0833a..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class EnterPricePVERevengeState : IState -{ - NumberInput numberInput; - GameManager gm; - IState prevState; - - public EnterPricePVERevengeState(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - gm = GameManager.Instance; - - numberInput = gm.pricePveRevengeInput; - numberInput.gameObject.SetActive(true); - numberInput.Initialize(); - } - - public void exit() => numberInput.gameObject.SetActive(false); - - public void update() - { - - int continiousDir = 0; - if (In.GetButtonAnyPlayer(PlayerAction.left)) continiousDir -= 1; - if (In.GetButtonAnyPlayer(PlayerAction.right)) continiousDir += 1; - - numberInput.SwitchValue(continiousDir); - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - numberInput.AcceptAndClose(); - - //обратный переход - gm.stateMachine.ChangeState(new SettingsState()); - gm.stateMachine.ChangeState(prevState); - - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs.meta deleted file mode 100644 index 8c470e3..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVERevengeState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 490905846487abe4e82e8c3963832923 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs deleted file mode 100644 index 32af2b7..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs +++ /dev/null @@ -1,43 +0,0 @@ -public class EnterPricePVEState : IState -{ - NumberInput numberInput; - GameManager gm; - IState prevState; - - public EnterPricePVEState(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - gm = GameManager.Instance; - - numberInput = gm.pricePveInput; - numberInput.gameObject.SetActive(true); - numberInput.Initialize(); - } - - public void exit() => numberInput.gameObject.SetActive(false); - - public void update() - { - - int continiousDir = 0; - if (In.GetButtonAnyPlayer(PlayerAction.left)) continiousDir -= 1; - if (In.GetButtonAnyPlayer(PlayerAction.right)) continiousDir += 1; - - numberInput.SwitchValue(continiousDir); - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - numberInput.AcceptAndClose(); - - //обратный переход - //gm.stateMachine.ChangeState(new SettingsState()); - gm.stateMachine.ChangeState(prevState); - - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs.meta deleted file mode 100644 index 784b991..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVEState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c0411a6c1362bf24b918381632d84723 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs deleted file mode 100644 index 268e86d..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class EnterPricePVPState : IState -{ - NumberInput numberInput; - GameManager gm; - IState prevState; - - public EnterPricePVPState(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - gm = GameManager.Instance; - - numberInput = gm.pricePvpInput; - numberInput.gameObject.SetActive(true); - numberInput.Initialize(); - } - - public void exit() => numberInput.gameObject.SetActive(false); - - public void update() - { - - int continiousDir = 0; - if (In.GetButtonAnyPlayer(PlayerAction.left)) continiousDir -= 1; - if (In.GetButtonAnyPlayer(PlayerAction.right)) continiousDir += 1; - - numberInput.SwitchValue(continiousDir); - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - numberInput.AcceptAndClose(); - - //обратный переход - //gm.stateMachine.ChangeState(new SettingsState()); - gm.stateMachine.ChangeState(prevState); - - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs.meta deleted file mode 100644 index f18cc46..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPricePVPState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8ae20d54bb0db594984b29182ae45c47 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs deleted file mode 100644 index a035423..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class EnterPrizesAvailableState : IState -{ - NumberInput numberInput; - GameManager gm; - - IState prevState; - - public EnterPrizesAvailableState(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - gm = GameManager.Instance; - - numberInput = gm.prizesAvailableInput; - numberInput.gameObject.SetActive(true); - numberInput.Initialize(); - } - - public void exit() => numberInput.gameObject.SetActive(false); - - public void update() - { - - int continiousDir = 0; - if (In.GetButtonAnyPlayer(PlayerAction.left)) continiousDir -= 1; - if (In.GetButtonAnyPlayer(PlayerAction.right)) continiousDir += 1; - - numberInput.SwitchValue(continiousDir); - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - numberInput.AcceptAndClose(); - - //обратный переход - //gm.stateMachine.ChangeState(new SettingsState()); - gm.stateMachine.ChangeState(prevState); - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs.meta deleted file mode 100644 index 2855173..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesAvailableState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1a343c2bce2420a4fa58579c6927e08f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs deleted file mode 100644 index 506e3dc..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using PrizeSystem; -public class EnterPrizesForCharactersState : IState -{ - GameObject rootPanel; - List prizes; - IState prevState; - - - public EnterPrizesForCharactersState(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - rootPanel = GameManager.Instance.CharactersConfigurator; - rootPanel.SetActive(true); - } - - public void exit() - { - rootPanel.SetActive(false); - } - public void update() - { - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs.meta deleted file mode 100644 index a0e1867..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPrizesForCharactersState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c387a59b81cdaa4458e46591efe8ab6a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs deleted file mode 100644 index 2fb1e5d..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class EnterPulsesToResetDifficulty : IState -{ - NumberInput numberInput; - GameManager gm; - IState prevState; - - public EnterPulsesToResetDifficulty(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - gm = GameManager.Instance; - - numberInput = gm.pulsesToResetDifficultyInput; - numberInput.gameObject.SetActive(true); - numberInput.Initialize(); - } - - public void exit() => numberInput.gameObject.SetActive(false); - - public void update() - { - - int continiousDir = 0; - if (In.GetButtonAnyPlayer(PlayerAction.left)) continiousDir -= 1; - if (In.GetButtonAnyPlayer(PlayerAction.right)) continiousDir += 1; - - numberInput.SwitchValue(continiousDir); - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - numberInput.AcceptAndClose(); - - //обратный переход - //gm.stateMachine.ChangeState(new SettingsState()); - gm.stateMachine.ChangeState(prevState); - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs.meta deleted file mode 100644 index e611dd2..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterPulsesToResetDifficulty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fa5ad459c5c33cf4884c71ac83a031c2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs deleted file mode 100644 index a9ba967..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class EnterValutaPerImpulse : IState -{ - NumberInput numberInput; - GameManager gm; - IState prevState; - - public EnterValutaPerImpulse(IState prevState) - { - this.prevState = prevState; - } - - public void enter() - { - gm = GameManager.Instance; - - numberInput = gm.valutaPerPulseInput; - numberInput.gameObject.SetActive(true); - numberInput.Initialize(); - } - - public void exit() => numberInput.gameObject.SetActive(false); - - public void update() - { - - int continiousDir = 0; - if (In.GetButtonAnyPlayer(PlayerAction.left)) continiousDir -= 1; - if (In.GetButtonAnyPlayer(PlayerAction.right)) continiousDir += 1; - - numberInput.SwitchValue(continiousDir); - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - numberInput.AcceptAndClose(); - - //обратный переход - //gm.stateMachine.ChangeState(new SettingsState()); - gm.stateMachine.ChangeState(prevState); - } - - } -} diff --git a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs.meta b/Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs.meta deleted file mode 100644 index b92e3ac..0000000 --- a/Assets/Scripts/Common/GameFSM/EnterPanels/EnterValutaPerImpulse.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dc7bce07ffba4b54992def810c526f32 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/GameStateMachine.cs b/Assets/Scripts/Common/GameFSM/GameStateMachine.cs deleted file mode 100644 index e4814b4..0000000 --- a/Assets/Scripts/Common/GameFSM/GameStateMachine.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -public class GameStateMachine : MonoBehaviour -{ - public IState currentState; - - public void ChangeState(IState nextState) - { - currentState?.exit(); - currentState = nextState; - currentState.enter(); - } - private void Update() => currentState?.update(); -} diff --git a/Assets/Scripts/Common/GameFSM/GameStateMachine.cs.meta b/Assets/Scripts/Common/GameFSM/GameStateMachine.cs.meta deleted file mode 100644 index 801d877..0000000 --- a/Assets/Scripts/Common/GameFSM/GameStateMachine.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 644deb7c42b828041920ca8c69f133ad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/IState.cs b/Assets/Scripts/Common/GameFSM/IState.cs deleted file mode 100644 index 3eff7b9..0000000 --- a/Assets/Scripts/Common/GameFSM/IState.cs +++ /dev/null @@ -1,6 +0,0 @@ -public interface IState -{ - void enter(); - void update(); - void exit(); -} diff --git a/Assets/Scripts/Common/GameFSM/IState.cs.meta b/Assets/Scripts/Common/GameFSM/IState.cs.meta deleted file mode 100644 index 07f34b3..0000000 --- a/Assets/Scripts/Common/GameFSM/IState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 624afa00bb6a20f4db8f23e120b71fc7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/IoTestState.cs b/Assets/Scripts/Common/GameFSM/IoTestState.cs deleted file mode 100644 index 75816c1..0000000 --- a/Assets/Scripts/Common/GameFSM/IoTestState.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UnityEngine; - -public class IoTestState : IState -{ - GameObject io; - IState prevState; - public IoTestState(GameObject ioPanel, IState prevState) - { - io = ioPanel; - this.prevState = prevState; - } - public void enter() => io.SetActive(true); - public void exit() => io.SetActive(false); - public void update() - { - - } -} diff --git a/Assets/Scripts/Common/GameFSM/IoTestState.cs.meta b/Assets/Scripts/Common/GameFSM/IoTestState.cs.meta deleted file mode 100644 index f64bfdd..0000000 --- a/Assets/Scripts/Common/GameFSM/IoTestState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 88ee8c8343146aa478df440a7912b71d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/LeaderboardState.cs b/Assets/Scripts/Common/GameFSM/LeaderboardState.cs deleted file mode 100644 index 545beb0..0000000 --- a/Assets/Scripts/Common/GameFSM/LeaderboardState.cs +++ /dev/null @@ -1,41 +0,0 @@ -using UnityEngine; - -//показ таблицы лидеров после победы. -public class LeaderboardState : IState -{ - PlayerStatsRecord record; - Leaderboard leaderboard; - public LeaderboardState(PlayerStatsRecord record) - { - this.record = record; - } - - public void enter() - { - leaderboard = GameManager.Instance.leaderboard; - leaderboard.gameObject.SetActive(true); - leaderboard.Initialize(); - - PlayerStatsRecord lastRecord = GameManager.Instance.StatsService.GetLatestRecord(); - leaderboard.DisplayCurrentPlayer(record); - } - - public void exit() - { - leaderboard.ClearRowsText(); - leaderboard.gameObject.SetActive(false); - } - - public void update() - { - bool keepDownButton = In.GetButtonAnyPlayer(PlayerAction.down); - float accelerationSign = keepDownButton ? 1 : -1f; - leaderboard.accelerationY = Mathf.Abs(leaderboard.accelerationY) * accelerationSign; - - if (In.GetButtonDownAnyPlayer(PlayerAction.left) && In.GetButtonDownAnyPlayer(PlayerAction.right)) - { - Board.Instance.MakeClearField(); - GameManager.Instance.GotoMenu(); - } - } -} diff --git a/Assets/Scripts/Common/GameFSM/LeaderboardState.cs.meta b/Assets/Scripts/Common/GameFSM/LeaderboardState.cs.meta deleted file mode 100644 index 759ff83..0000000 --- a/Assets/Scripts/Common/GameFSM/LeaderboardState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 003dcc5df85966d47ab408def0e372df -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/PrizeState.cs b/Assets/Scripts/Common/GameFSM/PrizeState.cs deleted file mode 100644 index 68478bd..0000000 --- a/Assets/Scripts/Common/GameFSM/PrizeState.cs +++ /dev/null @@ -1,75 +0,0 @@ -using PrizeSystem; -using UnityEngine; - - -public class PrizeState : IState -{ - private GameManager gm; - private IState nextState; - - - private VitrinaPanel vitrina; - private QrPanel qr; - - public PrizeState(IState nextState) - { - this.nextState = nextState; - } - public void enter() - { - Debug.Log("Зашел в приз"); - gm = GameManager.Instance; - - gm.timerManager.StopAllTimers(); - if(PrizeSystemManager.HasVitrinaPrizeToGive) - { - if(gm.vitrinaPanel.TryGetComponent(out vitrina)) - { - vitrina.OnComplete += OnComplete; - gm.vitrinaPanel.gameObject.SetActive(true); - VitrinaPrize prize = PrizeSystemManager.DequeueVitrinaPrize(); - gm.vitrinaPanel.Initialize(prize.Boxes); - } - } - else if (PrizeSystemManager.HasQrPrizeToGive) - { - if (gm.qrPanel.TryGetComponent(out qr)) - { - qr.OnComplete += OnComplete; - gm.qrPanel.gameObject.SetActive(true); - QrPrize prize = PrizeSystemManager.DequeueQrPrize(); - gm.qrPanel.Initialize(prize); - } - - } - //добавить qr панель-выдатчик. - else - { - gm.stateMachine.ChangeState(nextState); - } - - - - - } - - private void OnComplete() - { - - gm.stateMachine.ChangeState(nextState); - } - - public void exit() - { - if (vitrina != null) - { - vitrina.OnComplete -= OnComplete; - vitrina = null; - } - } - - public void update() - { - - } -} diff --git a/Assets/Scripts/Common/GameFSM/PrizeState.cs.meta b/Assets/Scripts/Common/GameFSM/PrizeState.cs.meta deleted file mode 100644 index 184d144..0000000 --- a/Assets/Scripts/Common/GameFSM/PrizeState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1aa945d28720e3c42838820bfc351306 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/RulesState.cs b/Assets/Scripts/Common/GameFSM/RulesState.cs deleted file mode 100644 index bd7226d..0000000 --- a/Assets/Scripts/Common/GameFSM/RulesState.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; - -public class RulesState : IState -{ - private RulesController rules; - - private float timeout = 60f; - private float restTime; - - public void enter() - { - rules = GameManager.Instance.rulesController; - SoundManager.instance.playSwitch(); - rules.Open(); - restTime = timeout; - } - public void exit() - { - SoundManager.instance.playSwitch(); - rules.Close(); - } - - public void update() - { - int direction = 0; - if (In.GetButtonDownAnyPlayer(PlayerAction.left)) direction -= 1; - if (In.GetButtonDownAnyPlayer(PlayerAction.right)) direction += 1; - - if (direction != 0) - { - rules.SwitchPage(direction); - restTime = timeout; - SoundManager.instance.playSwitch(); - } - - - if (In.GetButtonDownAnyPlayer(PlayerAction.down) || restTime <= 0) - { - rules.Close(); - GameManager.Instance.GotoMenu(); - } - restTime -= Time.deltaTime; - } -} diff --git a/Assets/Scripts/Common/GameFSM/RulesState.cs.meta b/Assets/Scripts/Common/GameFSM/RulesState.cs.meta deleted file mode 100644 index ba85d7d..0000000 --- a/Assets/Scripts/Common/GameFSM/RulesState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 48ff82c7f11da4c4a9f10eaf8e87d6a3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/SettingsState.cs b/Assets/Scripts/Common/GameFSM/SettingsState.cs deleted file mode 100644 index 3c1cf54..0000000 --- a/Assets/Scripts/Common/GameFSM/SettingsState.cs +++ /dev/null @@ -1,48 +0,0 @@ -using UnityEngine; - -public class SettingsState : IState -{ - float elapsedTime = 0; - float timeToExit = 3f; - - public void enter() - { - //SettingsManager.OnSettingsChanged?.Invoke(); - GameManager.Instance.AdminPanel.SetActive(true); - elapsedTime = 0; - } - - public void exit() - { - GameManager.Instance.AdminPanel.SetActive(false); - } - - public void update() - { - if (ShouldExit()) - { - SoundManager.instance.playChoose(); - GameManager.Instance.GotoMenu(); - } - } - - private bool ShouldExit() - { - //опрашиваем кнопки - bool startButtonsPressed = In.GetButton(InSignal.startOnePlayer) && In.GetButton(InSignal.startTwoPlayers); - bool serviceButtonPressed = In.GetButton(InSignal.secret) || Input.GetKey(KeyCode.F5); - bool exitPressed = startButtonsPressed || serviceButtonPressed; - - //считаем таймеры - if (exitPressed) - elapsedTime += Time.deltaTime; - else - elapsedTime -= Time.deltaTime; - - //подгоняем прошедшее время к интервалу - elapsedTime = Mathf.Clamp(elapsedTime, 0f, timeToExit); - - //Если жали столько, сколько надо для выхода - надо выходить - return elapsedTime == timeToExit; - } -} diff --git a/Assets/Scripts/Common/GameFSM/SettingsState.cs.meta b/Assets/Scripts/Common/GameFSM/SettingsState.cs.meta deleted file mode 100644 index ad6d191..0000000 --- a/Assets/Scripts/Common/GameFSM/SettingsState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f988c08fecbcb304699bc5620223c6ba -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/SetupPasswordState.cs b/Assets/Scripts/Common/GameFSM/SetupPasswordState.cs deleted file mode 100644 index 9483a47..0000000 --- a/Assets/Scripts/Common/GameFSM/SetupPasswordState.cs +++ /dev/null @@ -1,16 +0,0 @@ -public class SetupPasswordState : IState -{ - public void enter() - { - GameManager.Instance.setPasswordPanel.SetActive(true); - } - - public void exit() - { - GameManager.Instance.setPasswordPanel.SetActive(false); - } - - public void update() - { - } -} diff --git a/Assets/Scripts/Common/GameFSM/SetupPasswordState.cs.meta b/Assets/Scripts/Common/GameFSM/SetupPasswordState.cs.meta deleted file mode 100644 index 1d94e5b..0000000 --- a/Assets/Scripts/Common/GameFSM/SetupPasswordState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3bf865fa23954834abc37df19d5a20e8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/ShowWinnerState.cs b/Assets/Scripts/Common/GameFSM/ShowWinnerState.cs deleted file mode 100644 index 84035f2..0000000 --- a/Assets/Scripts/Common/GameFSM/ShowWinnerState.cs +++ /dev/null @@ -1,337 +0,0 @@ -using CharacterSystem; -using System.Collections.Generic; -using TMPro; -using UnityEngine; -using UnityEngine.UI; - -public class ShowWinnerState : IState -{ - Color empty = new Color(0, 0, 0, 0); - - CoinCounter coinCounter; - private GameManager gm = GameManager.Instance; - - public enum ShowWinnerSubstates { PanelFalling, HandlingInputs, PanelRising, ExitByTime } - public ShowWinnerSubstates subState; - - enum EndOption { Restart, Menu } - EndOption option; - - RectTransform panel; - Image left, right; - float speedY = 0; - float acceleration = 500; - - Vector3 targetDownPosition = new Vector3(0, 447.560f, 0); - Vector3 targetUpPosition = new Vector3(0, 1200, 0); - CheckResult result; - - List winningChips; - - Color orange = new Color(1, 0.537794f, 0, 1f); - - float TimeRest = 60; - - bool NeedToPay => !result.Draw; - - public float timeToExit = 0; - - - public ShowWinnerState() - { - this.result = gm.lastResult; - subState = ShowWinnerSubstates.PanelFalling; - } - public ShowWinnerState(float timeToExit) - { - this.timeToExit = timeToExit; - subState = ShowWinnerSubstates.ExitByTime; - } - - public void enter() - { - coinCounter = GameObject.FindAnyObjectByType(); - gm.timerManager.StopAllTimers(); - - InitPanel(); - if (gm.gameMode == GameMode.pvp) - { - if (!result.Draw) - { - LightUtility.Win(); - winningChips = new List(); - CollectChipsList(result); - - if (gm.player1score == 5)//полная победа 1 игрока - { - //обнулить очки и выдать приз - gm.player1score = 0; - gm.player2score = 0; - - - //переход в приз - } - else if (gm.player2score == 5)//полная победа 2 игрока - { - - //обнулить очки и выдать приз - gm.player1score = 0; - gm.player2score = 0; - - //переход в приз - } - } - } - else if (gm.gameMode == GameMode.pve) - { - if (!result.Draw) - { - winningChips = new List(); - CollectChipsList(result); - - if (gm.currentPlayer == Team.Player1)//Последный держал фишку игрок - { - - if (gm.vsBotScore == 5)//5 побед над ботом - { - gm.vsBotScore = 0; - } - } - } - } - } - - public void exit() - { - - if (result.Draw) - { - return; - } - //вернуть альфу фишкам - foreach (SpriteRenderer chip in winningChips) - { - Color c = chip.color; - c.a = 1; - chip.color = c; - - //MonoBehaviour.Destroy(chip.GetComponent()); - chip.transform.rotation = Quaternion.identity; - } - - - } - - public void update() - { - switch (subState) - { - case ShowWinnerSubstates.PanelFalling: - DropPanel(); - break; - case ShowWinnerSubstates.HandlingInputs: - PollingInputs(); - TimerProcessing(); - break; - case ShowWinnerSubstates.PanelRising: - RaisePanel(); - break; - case ShowWinnerSubstates.ExitByTime: - ExitByTime(); break; - } - - if (!result.Draw) - BlinkChips(); - } - - - private void ExitByTime() - { - timeToExit -= Time.deltaTime; - if (timeToExit < 0) - { - timeToExit = 0; - - //чистимся и топаем дальше в след раунд - - - Board.Instance.MakeClearField(); - - //Фишка ходит первой если ее не побеждали сегодня еще - //текущий бот - последний - bool goingToLastBot = CharactersController.CurrentCharacter.CharacterIndex == GameManager.Instance.botsAmount - 1; - if (goingToLastBot) - { - //Вопрос к логике тут. - //bool bossUpgraded = GameManager.instance.BossUpgraded; - bool bossFirst = SettingsManager.GetString(SettingKey.DIFFICULTY_MODE) != "Прохождение"; - Team firstRoundPlayer = bossFirst ? Team.Player2 : Team.Player1; - gm.PrepareRound(firstRoundPlayer); - return; - } - else - { - Team nextPlayer = GameManager.Instance.currentPlayer == Team.Player1 ? Team.Player2 : Team.Player2; - gm.PrepareRound(nextPlayer); - } - } - } - - private void TimerProcessing() - { - TimeRest -= Time.deltaTime; - if (TimeRest < 0) - { - option = EndOption.Menu; - subState = ShowWinnerSubstates.PanelRising; - } - - } - - private void RaisePanel() - { - panel.localPosition = Vector3.MoveTowards(panel.localPosition, targetUpPosition, speedY * Time.deltaTime); - speedY += acceleration * Time.deltaTime; - - if (panel.localPosition == targetUpPosition)//панель дошла до верха - { - - if (gm.lastResult != null && !gm.lastResult.Draw) - { - foreach (SpriteRenderer chip in winningChips) - { - chip.transform.localScale = Vector3.one; - } - } - - switch (option) - { - case EndOption.Restart://чистим поле и перезапуск. Меняем игрока - AvatarEventBus.Instance.OnNewRoundStarted?.Invoke(gm.currentPlayer); - Board.Instance.MakeClearField(); - - Team nextPlayer = gm.currentPlayer == Team.Player1 ? Team.Player2 : Team.Player1; - gm.PrepareRound(nextPlayer); - break; - case EndOption.Menu://чистим поле и переходим в меню с параметром чтобы панельки съехались обратно - CharactersController.I.HideCharacter(); - DualAvatarController.Instance.HideCharacters(); - Board.Instance.MakeClearField(); - //GameManager.instance.stateMachine.ChangeState(new MenuState(fromGameplay: true)); - GameManager.Instance.GotoMenu(); - break; - } - } - } - - private void PollingInputs() - { - - if (In.GetButtonDownAnyPlayer(PlayerAction.right)) - { - SoundManager.instance.playSwitch(); - option = EndOption.Menu; - right.transform.GetChild(0).GetComponent().color = orange; - left.transform.GetChild(0).GetComponent().color = empty; - - } - if (In.GetButtonDownAnyPlayer(PlayerAction.left)) - { - SoundManager.instance.playSwitch(); - option = EndOption.Restart; - - right.transform.GetChild(0).GetComponent().color = empty; - left.transform.GetChild(0).GetComponent().color = orange; - } - - if (In.GetButtonDown(InSignal.startOnePlayer)) - { - option = EndOption.Restart; - SoundManager.instance.playChoose(); - if (NeedToPay) - paymentAndRestart(); - else - restart(); - } - - if (In.GetButtonDown(InSignal.startTwoPlayers)) - { - option = EndOption.Menu; - SoundManager.instance.playChoose(); - subState = ShowWinnerSubstates.PanelRising; - } - - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - SoundManager.instance.playChoose(); - if (option == EndOption.Restart) - { - if (NeedToPay) - paymentAndRestart(); - else - restart(); - } - else - { - subState = ShowWinnerSubstates.PanelRising; - } - } - - - void paymentAndRestart() - { - int price = PaymentSystem.GetRevengePrice(gm.gameMode); - - if (PaymentSystem.TryPay(price)) - { - subState = ShowWinnerSubstates.PanelRising; - } - } - void restart() - { - subState = ShowWinnerSubstates.PanelRising; - } - } - - void InitPanel() - { - option = EndOption.Restart; - left.transform.GetChild(0).GetComponent().color = orange; - right.transform.GetChild(0).GetComponent().color = empty; - } - - private void DropPanel() - { - panel.transform.localPosition = Vector3.MoveTowards(panel.transform.localPosition, targetDownPosition, speedY * Time.deltaTime); - speedY += acceleration * Time.deltaTime; - - if (panel.localPosition == targetDownPosition) - { - speedY = 0; - subState = ShowWinnerSubstates.HandlingInputs; - } - } - - void CollectChipsList(CheckResult result) - { - if (result.WinningIndexes == null) return; //кто то победил по таймеру - - foreach (var index in result.WinningIndexes) - { - //todo: разобраться че это я тут закомментил чтобы избавиться от ошибки - //gm.chipTransforms[index.row, index.col].rotation = Quaternion.identity; - //var renderer = gm.chipTransforms[index.row, index.col].GetChild(0).GetComponent(); - //winningChips.Add(renderer); - //renderer.gameObject.AddComponent().speed = 8; - } - } - void BlinkChips() - { - foreach (SpriteRenderer chip in winningChips) - { - Color c = chip.color; - c.a = 0.2f + Mathf.PingPong(Time.time * 2, 0.8f); - chip.color = c; - } - } -} diff --git a/Assets/Scripts/Common/GameFSM/ShowWinnerState.cs.meta b/Assets/Scripts/Common/GameFSM/ShowWinnerState.cs.meta deleted file mode 100644 index d7870de..0000000 --- a/Assets/Scripts/Common/GameFSM/ShowWinnerState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 196aa31466e86b64880e9422ebed726a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/StateRouter.cs b/Assets/Scripts/Common/GameFSM/StateRouter.cs deleted file mode 100644 index 9e7ccb1..0000000 --- a/Assets/Scripts/Common/GameFSM/StateRouter.cs +++ /dev/null @@ -1,169 +0,0 @@ -using CharacterSystem; -using PrizeSystem; -using UnityEngine; - -public static class StateRouter -{ - private static GameManager gm => GameManager.Instance; - public static void RouteAfterTurn() - { - //var checkResult = FieldChecker.Check(GameManager.instance.currentPlayer); - CheckResult checkResult = null; - - gm.lastResult = checkResult;//это неправильно. Нужно при проверке записывать в поле. - TurnEndingResult turnResult = EndOfTurnHandler.Evaluate(checkResult, gm.gameMode, gm.currentPlayer); - - if(turnResult == TurnEndingResult.GameContinues) - { - gm.DetermineNextTurn(); - return; - } - - IState nextState = turnResult switch - { - TurnEndingResult.BotWin => BotWinHandler(), - TurnEndingResult.PlayerWinPve => PlayerWinPveHandler(), - TurnEndingResult.PlayerWinPvp => PlayerWinPvpHandler(gm.currentPlayer), - TurnEndingResult.Draw => DrawHandler(), - _ => ToMenu() - }; - - gm.stateMachine.ChangeState(nextState); - } - - - private static IState BotWinHandler() - { - LightUtility.Lose(); - CharactersController.CurrentCharacter.GetComponent().SetTrigger("Win"); - CharactersController.CurrentCharacter.difficultyModule.DecreaseDifficulty(); - if (gm.vsBotScore != 0) - gm.vsBotScore -= 1; - - EventBus.TriggerEvent(GameEvent.BotWin); - - //gm.botScale.SetMedalsCount(gm.vsBotScore); - - return new ShowWinnerState(); - } - - private static IState PlayerWinPveHandler() //тут нужна обертка в приз + обертка в приз/супер приз - { - bool prizing = SettingsManager.GetBool(SettingKey.PRIZING); - if (!prizing) return NextBot(); - - bool takeOrRisk = SettingsManager.GetBool(SettingKey.TAKE_OR_RISK); - if (!takeOrRisk) - { - TryGivePrize(); - return NextBot(); - } - //todo: Разобраться в этой дичи - - //var character = CharactersController.CurrentCharacter; - //var currentPrize = character.prizeModule; - //bool currentBotHasNonEmptyPrize = character.prizeModule.HasPrize && currentPrize is not EmptyPrize; - - //if(character.prizeModule.TryFetchIfTypeMatch(out VitrinaPrize vitrinaPrize)) - //{ - // int[] readyBoxes = PrizeStandController.GetReadyBoxes(); - // if (VitrinaPanel.FindIntersection(readyBoxes, vitrinaPrize.Boxes).Length == 0) - // { - // currentBotHasNonEmptyPrize = false; - // } - //} - - //if (!currentBotHasNonEmptyPrize) return NextBot(); - - return NextBot(); - //var nextPrize = PrizeSystemManager.GetFirstNonEmptyPrizeAfter(currentPrize); - //if (nextPrize != null) - //{ - // gm.takeOrRiskPanel.SetPrizes(currentPrize, nextPrize); - // gm.timerManager.StopAllTimers(); - // return new TakeOrRiskState(NextBot(), gm.takeOrRiskPanel); - //} - //else - //{ - // return NextBot(); - //} - - void TryGivePrize() - { - if (CharactersController.CurrentCharacter.prizeModule.TryFetchPrize(out Prize prize)) - { - PrizeSystemManager.GivePrize(prize); - } - } - } - public static IState NextBot() - { - CharactersController.CurrentCharacter.difficultyModule.IncreaseDifficulty(); - gm.vsBotScore += 1; - EventBus.TriggerEvent(GameEvent.PlayerWin); - - LightUtility.Win(); - - //gm.botScale.SetMedalsCount(gm.vsBotScore); - - //если фишку победили, то повышаем. - if (gm.vsBotScore == gm.botsAmount) - GameManager.Instance.upgradeFeeshkaDifficulty(); - - if (TotalWin()) - { - //ClearAllScales(); - return new VictoryState(); - } - else - { - return new PrizeState(CreateAutoTransitionState(2f)); - } - } - - private static IState PlayerWinPvpHandler(Team winner) - { - gm.IncreaseScore(winner); - - if (TotalWin()) - AvatarEventBus.Instance.OnEndGame?.Invoke(gm.currentPlayer); - else - AvatarEventBus.Instance.OnEndRound?.Invoke(gm.currentPlayer); - - if (TotalWin()) - { - //ClearAllScales(); - return new VictoryState(); - } - else - { - return new ShowWinnerState(); - } - } - - private static IState DrawHandler() - { - EventBus.TriggerEvent(GameEvent.Draw); - return new ShowWinnerState(); - } - - public static IState ToMenu() - { - Board.Instance.MakeClearField(); - GameManager.Instance.GotoMenu(); - return null;// - } - - - // Helpers - private static ShowWinnerState CreateAutoTransitionState(float time) - { - var state = new ShowWinnerState(); - state.subState = ShowWinnerState.ShowWinnerSubstates.ExitByTime; - state.timeToExit = time; - return state; - } - - private static bool TotalWin() => - gm.player1score == 5 || gm.player2score == 5 || gm.vsBotScore == gm.botsAmount; -} diff --git a/Assets/Scripts/Common/GameFSM/StateRouter.cs.meta b/Assets/Scripts/Common/GameFSM/StateRouter.cs.meta deleted file mode 100644 index e1badaf..0000000 --- a/Assets/Scripts/Common/GameFSM/StateRouter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 15cf6845e43cf2b41bfb574314ebbfa0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs b/Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs deleted file mode 100644 index c56e86f..0000000 --- a/Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs +++ /dev/null @@ -1,66 +0,0 @@ -using CharacterSystem; -using PrizeSystem; -using UnityEngine; - -public class TakeOrRiskState : IState -{ - private IState nextState; - private TakeOrRiskPanel takeOrRiskPanel; - public float timeElapsed = 0; - public float timeToOpen = 4; - public bool opened = false; - - public TakeOrRiskState(IState nextState, TakeOrRiskPanel takeOrRiskPanel) - { - this.nextState = nextState; - this.takeOrRiskPanel = takeOrRiskPanel; - } - - public void enter() - { - - } - - private void TakeOrRiskPanel_OnComplete(TakeOrRiskOption selectedOption) - { - if (selectedOption == TakeOrRiskOption.Take) - { - var character = CharactersController.CurrentCharacter; - - if (character.prizeModule.TryFetchPrize(out Prize prize)) - PrizeSystemManager.GivePrize(prize); - - GameManager.Instance.stateMachine.ChangeState(new PrizeState(StateRouter.ToMenu())); - } - else - { - //Следующий бот - GameManager.Instance.stateMachine.ChangeState(nextState); - } - - } - - public void exit() - { - takeOrRiskPanel.OnComplete -= TakeOrRiskPanel_OnComplete; - } - - public void update() - { - if (!opened) - { - if (timeElapsed < timeToOpen) - timeElapsed += Time.deltaTime; - else - { - takeOrRiskPanel.gameObject.SetActive(true); - takeOrRiskPanel.OnComplete += TakeOrRiskPanel_OnComplete; - opened = true; - } - } - - - - - } -} diff --git a/Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs.meta b/Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs.meta deleted file mode 100644 index 84b3098..0000000 --- a/Assets/Scripts/Common/GameFSM/TakeOrRiskState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 968f890c735d5bf4b93d90ee008ec65f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/TurnEndingResult.cs b/Assets/Scripts/Common/GameFSM/TurnEndingResult.cs deleted file mode 100644 index a0ede26..0000000 --- a/Assets/Scripts/Common/GameFSM/TurnEndingResult.cs +++ /dev/null @@ -1,8 +0,0 @@ -public enum TurnEndingResult -{ - GameContinues, - BotWin, - PlayerWinPve, - PlayerWinPvp, - Draw -} diff --git a/Assets/Scripts/Common/GameFSM/TurnEndingResult.cs.meta b/Assets/Scripts/Common/GameFSM/TurnEndingResult.cs.meta deleted file mode 100644 index 8f81d72..0000000 --- a/Assets/Scripts/Common/GameFSM/TurnEndingResult.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9a9025e10e9f56343b3bfad833b2f424 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/VictoryState.cs b/Assets/Scripts/Common/GameFSM/VictoryState.cs deleted file mode 100644 index 06fe605..0000000 --- a/Assets/Scripts/Common/GameFSM/VictoryState.cs +++ /dev/null @@ -1,98 +0,0 @@ -using TMPro; -using UnityEngine; - -public class VictoryState : IState -{ - GameManager gameManager; - - TextMeshProUGUI ToMenuLabel; - TextMeshProUGUI TimerLabel; - - float TimeRest = 15; - - IState nextState; - - - public void enter() - { - LightUtility.Prize(); - gameManager = GameManager.Instance; - gameManager.timerManager.StopAllTimers(); - - - ToMenuLabel.gameObject.SetActive(true); - - - //определяем с какой шкалой мы имеем дело - if (gameManager.gameMode == GameMode.pvp) - { - nextState = new ShowWinnerState(); - //if (gameManager.currentPlayer == CellState.Player1) - //{ - // scale = gameManager.Player1Scale; - //} - //else - //{ - // scale = gameManager.Player2Scale; - //} - } - else - { - //победили ботов - //scale = gameManager.botScale; - //nextState = new VictoryVideoState(new EnterNameState()); - } - - ////вкл анимацию приза - //scale.SetWinState(); - //scale.winParticles.Play(); - } - - public void exit() - { - //выкл анимацию приза - //scale.SetIdleState(); - //scale.winParticles.Stop(); - ToMenuLabel.gameObject.SetActive(false); - } - - public void update() - { - //полинг инпутов - if (In.GetButtonDownAnyPlayer(PlayerAction.down)) - { - gameManager.stateMachine.ChangeState(nextState); - } - TimerProcessing(); - } - - void GivePrizeAndGoMenu() - { - gameManager.stateMachine.ChangeState(nextState); - } - - private void TimerProcessing() - { - TimeRest -= Time.deltaTime; - if (TimeRest < 0) - { - GivePrizeAndGoMenu(); - } - - TimerLabel.text = getTimeText(); - - } - private string getTimeText()//todo: в утилити бы это вынести - { - string minutes = ((int)(TimeRest / 60)).ToString(); - string seconds = ((int)(TimeRest % 60)).ToString(); - - if (minutes.Length < 2) minutes = "0" + minutes; - if (seconds.Length < 2) seconds = "0" + seconds; - - string result = minutes + ":" + seconds; - - return result; - } - -} diff --git a/Assets/Scripts/Common/GameFSM/VictoryState.cs.meta b/Assets/Scripts/Common/GameFSM/VictoryState.cs.meta deleted file mode 100644 index d9efcba..0000000 --- a/Assets/Scripts/Common/GameFSM/VictoryState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 399efd7369e44764fb25c73b5453d995 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/VictoryVideoState.cs b/Assets/Scripts/Common/GameFSM/VictoryVideoState.cs deleted file mode 100644 index 4c1db24..0000000 --- a/Assets/Scripts/Common/GameFSM/VictoryVideoState.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class VictoryVideoState : IState -{ - IState nextState; - float startTime; - float videoLength; - - public VictoryVideoState(IState nextState) - { - this.nextState = nextState; - } - - public void enter() - { - VideoUtility.PlayEnding(); VideoUtility.PlayEnding(); - SoundManager.instance.music.mute = true; - SoundManager.instance.SetMusicVolumeToVideo(); - startTime = Time.time; - videoLength = VideoUtility.victoryLength; - } - - public void exit() - { - VideoUtility.PlayFon(); - SoundManager.instance.music.mute = false; - } - - public void update() - { - bool anyInput = In.GetButtonDownAnyPlayer(PlayerAction.left) || - In.GetButtonDownAnyPlayer(PlayerAction.right) || - In.GetButtonDownAnyPlayer(PlayerAction.down) || - In.GetButtonDown(InSignal.startOnePlayer) || - In.GetButtonDown(InSignal.startTwoPlayers); - - bool kinoVse = (Time.time - startTime) > videoLength; - - if (anyInput || kinoVse) - { - GameManager.Instance.stateMachine.ChangeState(nextState); - } - } -} diff --git a/Assets/Scripts/Common/GameFSM/VictoryVideoState.cs.meta b/Assets/Scripts/Common/GameFSM/VictoryVideoState.cs.meta deleted file mode 100644 index e19bdd8..0000000 --- a/Assets/Scripts/Common/GameFSM/VictoryVideoState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1ddce44ea09ab9e4b9cb0047fbed9050 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs b/Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs deleted file mode 100644 index 3fa0e01..0000000 --- a/Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs +++ /dev/null @@ -1,16 +0,0 @@ -//Выбор номера ячейки витрины -public class VitrinaChoseState : IState -{ - VitrinaPanel vitrinaPanel; - public void enter() - { - vitrinaPanel = GameManager.Instance.vitrinaPanel; - vitrinaPanel.gameObject.SetActive(true); - } - - public void update() { } - public void exit() - { - vitrinaPanel.gameObject.SetActive(false); - } -} diff --git a/Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs.meta b/Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs.meta deleted file mode 100644 index 14a8d2b..0000000 --- a/Assets/Scripts/Common/GameFSM/VitrinaChoseState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 961834e0e84be814e888c8e9905a74ce -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameManager.cs b/Assets/Scripts/Common/GameManager.cs index d8fa348..e5d3337 100644 --- a/Assets/Scripts/Common/GameManager.cs +++ b/Assets/Scripts/Common/GameManager.cs @@ -15,8 +15,6 @@ public class GameManager : MonoBehaviour public int botsAmount = 5; [Header("General")] - public GameStateMachine stateMachine; - public static GameManager Instance; public GameObject AdminPanel, NumberPanel; public TimerManager timerManager; @@ -49,14 +47,6 @@ public class GameManager : MonoBehaviour [Header("Панели ввода")] public TextInput nameInput; - public TextInput ValutaNameInput; - public TextInput NumberTech; - public NumberInput pricePveInput; - public NumberInput pricePvpInput; - public NumberInput pricePveRevengeInput; - public NumberInput prizesAvailableInput; - public NumberInput pulsesToResetDifficultyInput; - public NumberInput valutaPerPulseInput; public Leaderboard leaderboard; public GameObject CharactersConfigurator; @@ -220,7 +210,7 @@ public class GameManager : MonoBehaviour if (gameMode == GameMode.pvp)//переключаем таймеры только в pvp { timerManager.SetActiveTimer(currentPlayer); - LightUtility.Player(currentPlayer); + LightSystem.Player(currentPlayer); } } @@ -271,7 +261,7 @@ public class GameManager : MonoBehaviour yield return new WaitForSeconds(3600f); // ✅ Проверка каждый час double lastRecordTime = PlayerPrefs.GetFloat("LastBotRecord", 0); - double currentTime = Utils.GetUnixTimestamp(); + double currentTime = (DateTime.UtcNow - new System.DateTime(1970, 1, 1)).TotalSeconds; if (currentTime - lastRecordTime >= 172800f) { diff --git a/Assets/Scripts/Common/HSV_TMPRO.cs b/Assets/Scripts/Common/HSV_TMPRO.cs deleted file mode 100644 index bdf3588..0000000 --- a/Assets/Scripts/Common/HSV_TMPRO.cs +++ /dev/null @@ -1,24 +0,0 @@ -using TMPro; -using UnityEngine; - -public class HSV_TMPRO : MonoBehaviour -{ - public TextMeshProUGUI label; - public float speed = 1f; - private float hue = 0f; - - private void OnEnable() - { - label = GetComponent(); - } - private void Update() - { - // Изменяем оттенок (hue) от 0 до 1 - hue += Time.deltaTime * speed; - hue %= 1f; // Ограничиваем от 0 до 1 - - // Преобразуем HSV в RGB - Color color = Color.HSVToRGB(hue, 1f, 1f); - label.color = color; - } -} diff --git a/Assets/Scripts/Common/HSV_TMPRO.cs.meta b/Assets/Scripts/Common/HSV_TMPRO.cs.meta deleted file mode 100644 index 260de95..0000000 --- a/Assets/Scripts/Common/HSV_TMPRO.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d5ba96e91114b0544ba59501932dd77c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/Leaderboard/NumberInput.cs b/Assets/Scripts/Common/Leaderboard/NumberInput.cs deleted file mode 100644 index de63d97..0000000 --- a/Assets/Scripts/Common/Leaderboard/NumberInput.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using TMPro; -using UnityEngine; -using UnityEngine.UI; - -public class NumberInput : MonoBehaviour -{ - [Header("Ключ prefs")] - [SerializeField] private string key; - [SerializeField] private bool loadData; - [SerializeField] private bool saveDataOnClose = true; - - [Header("Звуки")] - [SerializeField] private AudioClip switchSlotSound; - [SerializeField] private AudioClip switchLetterSound; - [SerializeField] private AudioClip acceptSound; - [SerializeField] private AudioClip openSound; - - [Header("Скорость переключения")] - [SerializeField] private float MaxSpeedLetterPerSecond = 8; - [SerializeField] private float MinSpeedLetterPerSecond = 3; - [SerializeField] private float MaxSpeedTime = 3; - [SerializeField] private float MinSpeedTime = 0.5f; - - private float switchButtonPressedTime = 0; - private float letterSwitchSpeed = 0; - private float switchDelayRest = 1; - - //[SerializeField] private int defaultValue = 1; - [SerializeField] private int minValue = 1; - [SerializeField] private int maxValue = 999; - [SerializeField] private int currentValue; - - [SerializeField] TextMeshProUGUI valueLabel; - - public void Initialize() - { - LoadSavedData(); - SoundManager.instance.playClip(openSound); - - } - - public int AcceptAndClose() - { - if (!string.IsNullOrEmpty(key) && saveDataOnClose) - { - PlayerPrefs.SetInt(key, currentValue); - } - SoundManager.instance.playClip(acceptSound); - return currentValue; - - } - private void LoadSavedData() - { - currentValue = 1; - if (loadData) - currentValue = PlayerPrefs.GetInt(key, 1); - - // Заполняем сохраненными данными - valueLabel.text = currentValue.ToString(); - } - - public void SwitchValue(int continiousDirection) - { - continiousDirection = Mathf.Clamp(continiousDirection, -1, 1); - if (continiousDirection == 0)//сброс переключения - { - switchDelayRest = 0; - switchButtonPressedTime = 0; - return; - } - - if (switchDelayRest < 0) - { - //переключение - currentValue = Math.Clamp(currentValue + continiousDirection, minValue, maxValue); - valueLabel.text = currentValue.ToString(); - - recalculateRest(); - } - switchDelayRest -= Time.deltaTime; - switchButtonPressedTime += Time.deltaTime; - - - void recalculateRest() - { - float k = (MaxSpeedLetterPerSecond - MinSpeedLetterPerSecond) - / (MaxSpeedTime - MinSpeedTime); - float b = MinSpeedLetterPerSecond - k * MinSpeedTime; - letterSwitchSpeed = k * switchButtonPressedTime + b; - letterSwitchSpeed = Mathf.Clamp(letterSwitchSpeed, - MinSpeedLetterPerSecond, - MaxSpeedLetterPerSecond); - switchDelayRest = 1 / letterSwitchSpeed; - } - } - - -} diff --git a/Assets/Scripts/Common/Leaderboard/NumberInput.cs.meta b/Assets/Scripts/Common/Leaderboard/NumberInput.cs.meta deleted file mode 100644 index d61c1b2..0000000 --- a/Assets/Scripts/Common/Leaderboard/NumberInput.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8a0b385f42d212146ae051d31ee01b71 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/LightUtility.cs b/Assets/Scripts/Common/LightSystem.cs similarity index 99% rename from Assets/Scripts/Common/LightUtility.cs rename to Assets/Scripts/Common/LightSystem.cs index 53d89d2..52bc06b 100644 --- a/Assets/Scripts/Common/LightUtility.cs +++ b/Assets/Scripts/Common/LightSystem.cs @@ -2,7 +2,7 @@ using UnityEngine; //Зависит от ComWrapper -public static class LightUtility +public static class LightSystem { private const string LIGHT_COMMAND_PREFIX = "80"; public static void Idle() diff --git a/Assets/Scripts/Common/LightSystem.cs.meta b/Assets/Scripts/Common/LightSystem.cs.meta new file mode 100644 index 0000000..2226b81 --- /dev/null +++ b/Assets/Scripts/Common/LightSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5faca1e92316db048865cef609bb0cbc \ No newline at end of file diff --git a/Assets/Scripts/Common/LightUtility.cs.meta b/Assets/Scripts/Common/LightUtility.cs.meta deleted file mode 100644 index 410c62e..0000000 --- a/Assets/Scripts/Common/LightUtility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 28352dc78d0472f45b9a32204e37f456 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/PaymentEmulator.cs b/Assets/Scripts/Common/PaymentEmulator.cs index cc6b5a2..f86485b 100644 --- a/Assets/Scripts/Common/PaymentEmulator.cs +++ b/Assets/Scripts/Common/PaymentEmulator.cs @@ -1,6 +1,4 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; +using UnityEngine; public class PaymentEmulator : MonoBehaviour { @@ -10,5 +8,4 @@ public class PaymentEmulator : MonoBehaviour { if (Input.GetKeyDown(key)) PaymentSystem.AddCredit(); } - -} +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrefsApplicator.cs b/Assets/Scripts/Common/PrefsApplicator.cs deleted file mode 100644 index a970ea3..0000000 --- a/Assets/Scripts/Common/PrefsApplicator.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Collections; -using TMPro; -using UnityEngine; - -enum PrefsType { str, intNumber, floatNumber } - -[RequireComponent(typeof(TextMeshProUGUI))] -public class PrefsApplicator : MonoBehaviour -{ - [SerializeField] PrefsType prefsType = PrefsType.str; - [SerializeField] string prefix; - [SerializeField] string suffix; - - [SerializeField] string prefsKey; - [SerializeField] string defaultText; - - Coroutine coroutine; - TextMeshProUGUI label; - - private void OnEnable() => StartPolling(); - private void OnDisable() => StopPolling(); - - void Refresh() - { - string data; - if (PlayerPrefs.HasKey(prefsKey)) - { - data = prefsType switch - { - PrefsType.str => PlayerPrefs.GetString(prefsKey), - PrefsType.intNumber => PlayerPrefs.GetInt(prefsKey).ToString(), - PrefsType.floatNumber => PlayerPrefs.GetFloat(prefsKey).ToString(), - _ => PlayerPrefs.GetString(prefsKey) - }; - - } - else - { - data = defaultText; - } - - string message = $"{prefix} {data} {suffix}"; - label.text = message; - - } - - void StartPolling() - { - label = GetComponent(); - coroutine = StartCoroutine(poll()); - } - void StopPolling() - { - if (coroutine != null) - StopCoroutine(coroutine); - } - - - IEnumerator poll() - { - while (true) - { - Refresh(); - yield return new WaitForSeconds(5); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrefsApplicator.cs.meta b/Assets/Scripts/Common/PrefsApplicator.cs.meta deleted file mode 100644 index 5f53dfa..0000000 --- a/Assets/Scripts/Common/PrefsApplicator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3a3ea547a8c834648ae7cd81280d5cb6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/PrefsKeyVault.cs b/Assets/Scripts/Common/PrefsKeyVault.cs index ba682f2..6c7fe40 100644 --- a/Assets/Scripts/Common/PrefsKeyVault.cs +++ b/Assets/Scripts/Common/PrefsKeyVault.cs @@ -21,4 +21,5 @@ public const string SERIAL = "Serial"; + public const string PRIZE_GIVEN_BUFFER = "PrizeGivenBuffer"; } diff --git a/Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs b/Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs new file mode 100644 index 0000000..f6ed04c --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs @@ -0,0 +1,22 @@ +using CharacterSystem; +using UnityEngine; + +public class CharacterPrizeConfigurator : MonoBehaviour +{ + [SerializeField] private CharacterSelectionPanel _characterSelection; + [SerializeField] private PrizesSelector _prizesSelector; + + private void OnEnable() + { + _characterSelection.gameObject.SetActive(true); + _prizesSelector.gameObject.SetActive(false); + + _characterSelection.OnCharacterSelected += OnCharacterSelected; + } + + private void OnCharacterSelected(Character character) + { + _characterSelection.gameObject.SetActive(false); + _prizesSelector.Open(character); + } +} diff --git a/Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs.meta b/Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs.meta new file mode 100644 index 0000000..4b750dc --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/CharacterPrizeConfigurator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1bf3043857e54fd41b0d39086cd9c3be \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs b/Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs deleted file mode 100644 index a87a9a4..0000000 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs +++ /dev/null @@ -1,179 +0,0 @@ -using CharacterSystem; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - - -namespace PrizeSystem -{ - public class CharacterPrizeConfigurator : MonoBehaviour - { - [SerializeField] TypeSelectionPanel typePanel; - [SerializeField] PrizeSettingPanel prizePanel; - [SerializeField] CharacterSelectionPanel characterPanel; - - [SerializeField] List controlPanels; - - [SerializeField] private Color AccentColor; - [SerializeField] private AudioClip ClickClip; - int controlIndex = 0; - - - bool readyToWork = false; - - float exitTimer = 0; - - private GameObject SelectedPanel => controlPanels[controlIndex]; - IControl SelectedControl => SelectedPanel.GetComponent(); - - private List prizesCache; - private Coroutine BlinkCoroutine; - - - private void OnEnable() - { - readyToWork = false; - controlIndex = 0; - SetupPanels(); - - prizesCache = PrizeSerializer.LoadPrizes(); - - - Debug.Log($"Загружены призы: \n{PrizeSerializer.SerializePrizes(prizesCache)}"); - - prizePanel.SetPanelByPrize(prizesCache[characterPanel.CharacterIndex]); - - typePanel.SetType(prizesCache[0].PrizeType); - - typePanel.OnTypeChanged += TypePanel_OnTypeChanged; - - characterPanel.BeforeCharacterChange += CharacterPanel_BeforeCharacterChange; - characterPanel.OnCharacterChanged += CharacterPanel_OnCharacterChanged; - } - - - private void OnDisable() - { - typePanel.OnTypeChanged -= TypePanel_OnTypeChanged; - characterPanel.OnCharacterChanged -= CharacterPanel_OnCharacterChanged; - - LightOnPanel(false); - } - - private void TypePanel_OnTypeChanged(PrizeType newType) - { - prizePanel.SetPanelByType(newType); - } - private void CharacterPanel_BeforeCharacterChange(Character oldCharacter) - { - prizesCache[characterPanel.CharacterIndex] = prizePanel.GetPrize(); - } - private void CharacterPanel_OnCharacterChanged(Character character) - { - Prize prize = prizesCache[characterPanel.CharacterIndex]; - - typePanel.SetType(prize.PrizeType); - prizePanel.SetPanelByPrize(prize); - } - - #region ОБРАБОТКА ВВОДА - private void Update() - { - - if (readyToWork) - { - var input = GetInputs(); - if (input.Direction != 0) SelectedControl.Swipe(input.Direction); - if (input.Switch) SelectedControl.Switch(); - if (input.NextPanel) NextPanel(); - SaveProcessing(input.HoldSave); - } - else - { - if(!In.AnyButton()) readyToWork = true; - } - - - } - private (int Direction, bool Switch, bool NextPanel, bool HoldSave) GetInputs() - { - int Direction = 0; - if (In.GetButtonAnyPlayer(PlayerAction.right)) Direction += 1; - if (In.GetButtonAnyPlayer(PlayerAction.left)) Direction -= 1; - - bool Switch = In.GetButtonDown(InSignal.down1); - - bool NextPanel = In.GetButtonDown(InSignal.down2); - - bool HoldExit = In.GetButton(InSignal.startOnePlayer) && In.GetButton(InSignal.startTwoPlayers); - - return (Direction, Switch, NextPanel, HoldExit); - } - #endregion - - - private void NextPanel() - { - LightOnPanel(false); - controlIndex = (controlIndex + 1 + controlPanels.Count) % controlPanels.Count; - LightOnPanel(true); - if(ClickClip!= null) {SoundManager.instance.playClip(ClickClip); } - } - - private void LightOnPanel(bool on) - { - if (on && SelectedPanel.TryGetComponent(out var graphic)) - { - BlinkCoroutine = StartCoroutine(BlinkAnimation(graphic)); - } - else - { - StopCoroutine(BlinkCoroutine); - BlinkCoroutine = null; - SelectedPanel.GetComponent().color = Color.black; - } - } - - //вероятно это будет единственный метод для обновления. - private void SetupPanels() - { - LightOnPanel(true); - } - - private void SaveProcessing(bool HoldSave) - { - if (HoldSave) exitTimer += Time.deltaTime; - else exitTimer -= Time.deltaTime; - exitTimer = Mathf.Clamp(exitTimer, 0f, 2f); - - if (exitTimer >= 2) - { - exitTimer = 0; - Save(); - Exit(); - } - } - - private void Save() - { - //Кэшнуть текущего персонажа - prizesCache[characterPanel.CharacterIndex] = prizePanel.GetPrize(); - PrizeSerializer.SavePrizes(prizesCache); - CharactersController.I.RefreshPrizes(); - } - - private void Exit() - { - GameManager.Instance.stateMachine.ChangeState(new SettingsState()); - } - IEnumerator BlinkAnimation(Graphic graphic) - { - while (true) - { - graphic.color = Vector4.Lerp(AccentColor, Color.black, Mathf.PingPong(Time.time, 1)); - yield return null; - } - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs.meta b/Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs.meta deleted file mode 100644 index 4ad5ab9..0000000 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/CharacterPrizeConfigurator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 402c502466ff4494499138f429fe8f04 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/CharacterSelectionPanel.cs b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/CharacterSelectionPanel.cs index 9e3118b..f8754ea 100644 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/CharacterSelectionPanel.cs +++ b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/CharacterSelectionPanel.cs @@ -1,58 +1,126 @@ using CharacterSystem; +using PrizeSystem; using System; +using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; -public class CharacterSelectionPanel : MonoBehaviour, IControl +public class CharacterSelectionPanel : MonoBehaviour, IControlable { - - public event Action BeforeCharacterChange; - public event Action OnCharacterChanged; + public event Action OnCharacterSelected; + public event Action OnExitRequested; [SerializeField] TextMeshProUGUI CharacterNameLabel; [SerializeField] Image CharacterIcon; - [SerializeField] float ChangeCharacterInterval = 0.15f; [SerializeField] AudioClip ClickSound; - private float LastSwipeTime = 0; - private Character[] characters; - public int CharacterIndex { get; private set; } + [SerializeField] RectTransform _prizeTable; + [SerializeField] PrizeView _prizeViewPrefab; + private Character[] characters; + private int characterIndex = 0; + + [SerializeField] private List buttons; + [SerializeField] private MSignalButton _selectButton; + [SerializeField] private MSignalButton _exitButton; + + private int buttonIndex = 0; + public int CharactersCount => characters.Length; - public Character SelectedCharacter => characters[CharacterIndex]; - private bool CanSwipe => Time.time - LastSwipeTime > ChangeCharacterInterval; - + public Character SelectedCharacter => characters[characterIndex]; - private void OnEnable() + public bool ControlsEnabled { get; set; } + private MSignalButton SelectedButton => buttons[buttonIndex]; + + private void Update() { + UpdateControls(); + } + + private void Start() + { + _selectButton.OnClick += _selectButton_OnClick; + _exitButton.OnClick += _exitButton_OnClick; + characters = CharactersController.GetCharactersArray(); - CharacterIndex = 0; + characterIndex = 0; + DisplaySelectedCharacter(); + + buttonIndex = 0; + SelectedButton.SelectAnimation(); DisplaySelectedCharacter(); } - public void Swipe(int direction) + + private void _selectButton_OnClick() { - if (CanSwipe) - { - if (ClickSound != null) { SoundManager.instance.playClip(ClickSound); } - BeforeCharacterChange?.Invoke(SelectedCharacter); - - CharacterIndex = (CharacterIndex + direction + CharactersCount) % CharactersCount; - DisplaySelectedCharacter(); - - OnCharacterChanged?.Invoke(SelectedCharacter); - LastSwipeTime = Time.time; - } + OnCharacterSelected?.Invoke(SelectedCharacter); } - public void Switch() { } + private void _exitButton_OnClick() + { + OnExitRequested?.Invoke(); + } + + public void SwitchCharacter(int direction) + { + if (direction == 0) return; + + characterIndex = (characterIndex + direction + characters.Length) % characters.Length; + DisplaySelectedCharacter(); + } + + public void SwitchButton(int direction) + { + if (direction == 0) return; + + int newIndex = Mathf.Clamp(buttonIndex + direction, 0, buttons.Count - 1); + if (newIndex == buttonIndex) return; + + SelectedButton.DeselectAnimation(); + buttonIndex = newIndex; + SelectedButton.SelectAnimation(); + } private void DisplaySelectedCharacter() { CharacterNameLabel.text = SelectedCharacter.characterName; CharacterIcon.sprite = SelectedCharacter.visualModule.icon; + + ClearTable(); + + var set = PrizeSystemManager.PrizeContainer.Sets[SelectedCharacter.CharacterIndex]; + DisplayPrizeSet(set); } -} + public void UpdateControls() + { + int dir_h = In.GetAxis(Axis.Horizontal, JoystickSide.Both); + SwitchCharacter(dir_h); + + int dir_v = -In.GetAxis(Axis.Vertical, JoystickSide.Both); + SwitchButton(dir_v); + + SelectedButton.TakeInput(In.GetButtonAnyPlayer(PlayerAction.action)); + } + + private void ClearTable() + { + for (int i = _prizeTable.childCount - 1; i >= 0; i--) + { + var go = _prizeTable.GetChild(i).gameObject; + Destroy(go); + } + } + + private void DisplayPrizeSet(PrizeSet prizeSet) + { + foreach (var item in prizeSet.Prizes) + { + var view = Instantiate(_prizeViewPrefab, _prizeTable); + view.SetPrize(item); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs deleted file mode 100644 index 609470d..0000000 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs +++ /dev/null @@ -1,14 +0,0 @@ -public interface IControl -{ - /// - /// Äëÿ ïåðåäà÷è ñèãíàëà "Ëèñòàòü". Âûáîð ñëåäóþùåãî ïóíêòà. - /// - public void Switch(); - - - /// - /// Êîíòðàêò äëÿ ïåðåäà÷è â ýëåìåíò óïðàâëåíèÿ íàïðàâëåíèÿ âçàèìîäåéñòâèÿ - /// - /// Íàïðàâëåíèå âçàèìîäåéñòâèÿ. Ïðåäïîëàãàåòñÿ -1, 0 èëè 1 - public void Swipe(int direction); -} diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs.meta b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs.meta deleted file mode 100644 index 230e636..0000000 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/IControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b76d8a33e9c614948aeeea94d198e6e7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/PrizeSettingPanel.cs b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/PrizeSettingPanel.cs index 5b44537..85ff0b7 100644 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/PrizeSettingPanel.cs +++ b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/PrizeSettingPanel.cs @@ -1,11 +1,11 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace PrizeSystem { - public class PrizeSettingPanel : MonoBehaviour, IControl + public class PrizeSettingPanel : MonoBehaviour { [SerializeField] AbstractPrizeConfigurator CurrentConfigurator; @@ -26,7 +26,7 @@ namespace PrizeSystem } catch { - Debug.LogError("Íå íàøåë ïàíåëü ïî òèïó. Âåðîÿòíî ìàïèíã íå çàïîëíåí", this); + Debug.LogError("Не нашел панель по типу. Вероятно мапинг не заполнен", this); return null; } @@ -56,7 +56,7 @@ namespace PrizeSystem - //Êîíôèãóðèðîâàòü ïàíåëü + //Конфигурировать панель diff --git a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/TypeSelectionPanel.cs b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/TypeSelectionPanel.cs index 502eea8..0944d80 100644 --- a/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/TypeSelectionPanel.cs +++ b/Assets/Scripts/Common/PrizeSystem/Config menu/Controls/TypeSelectionPanel.cs @@ -1,9 +1,9 @@ -using System; +using System; using TMPro; using UnityEngine; namespace PrizeSystem{ - public class TypeSelectionPanel : MonoBehaviour, IControl + public class TypeSelectionPanel : MonoBehaviour { public event Action OnTypeChanged; diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/CountablePrize.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/CountablePrize.cs index 0913a9a..ec4569e 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeModels/CountablePrize.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/CountablePrize.cs @@ -1,3 +1,4 @@ +using Newtonsoft.Json; namespace PrizeSystem { @@ -5,12 +6,12 @@ namespace PrizeSystem { public CountablePrizeType Type { get; private set; } public int Amount { get;} - public override string Body => $"{Type}:{Amount}"; + [JsonConstructor] public CountablePrize(CountablePrizeType type, int amount) : base(PrizeUtils.CountableToGeneral(type)) { Type = type; Amount = amount; } - } -} + } +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/EmptyPrize.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/EmptyPrize.cs index d60ab83..3e0ddbb 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeModels/EmptyPrize.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/EmptyPrize.cs @@ -1,11 +1,11 @@ +using Newtonsoft.Json; + namespace PrizeSystem { public class EmptyPrize : Prize { - public override string Body => "None"; + [JsonConstructor] public EmptyPrize() : base(PrizeType.None) { } } -} - - +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/Prize.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/Prize.cs index b2b9b8f..2e11828 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeModels/Prize.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/Prize.cs @@ -1,9 +1,11 @@ -namespace PrizeSystem +using Newtonsoft.Json; + +namespace PrizeSystem { + [JsonConverter(typeof(PrizeConverter))] public abstract class Prize { public PrizeType PrizeType { get; } - public abstract string Body { get; } protected Prize(PrizeType prizeType) { PrizeType = prizeType; diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs new file mode 100644 index 0000000..6bec31e --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace PrizeSystem +{ + [Serializable] + public class PrizeContainer + { + public List Sets { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs.meta b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs.meta new file mode 100644 index 0000000..7b2149e --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeContainer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1241fe106dacb5941acf6ae82f12853c \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs new file mode 100644 index 0000000..767da74 --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs @@ -0,0 +1,45 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; + +namespace PrizeSystem +{ + public class PrizeConverter : JsonConverter + { + public override Prize ReadJson(JsonReader reader, Type objectType, Prize existingValue, bool hasExistingValue, JsonSerializer serializer) + { + var jsonObject = JObject.Load(reader); + + var prizeTypeToken = jsonObject["PrizeType"]; + if (prizeTypeToken == null) + throw new JsonSerializationException("Missing PrizeType field"); + + var prizeType = prizeTypeToken.ToObject(); + + // Создаем объект нужного типа + Prize prize = prizeType switch + { + PrizeType.None => new EmptyPrize(), + PrizeType.Qr => new QrPrize(""), // временный, заполним ниже + PrizeType.VitrinaBox => new VitrinaPrize(Array.Empty()), + PrizeType.Ticket or PrizeType.Marbles or PrizeType.Hopper => + new CountablePrize(CountablePrizeType.Ticket, 0), // временный + _ => throw new NotSupportedException($"Unknown prize type: {prizeType}") + }; + + // Заполняем поля через стандартную десериализацию + using (var subReader = jsonObject.CreateReader()) + { + serializer.Populate(subReader, prize); + } + + return prize; + } + + public override void WriteJson(JsonWriter writer, Prize value, JsonSerializer serializer) + { + var jsonObject = JObject.FromObject(value, serializer); + jsonObject.WriteTo(writer); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs.meta b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs.meta new file mode 100644 index 0000000..fd7474f --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeConverter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3bed648d1f209b54a962e324f2b2179d \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs new file mode 100644 index 0000000..f5b3efc --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace PrizeSystem +{ + [Serializable] + public class PrizeSet + { + public List Prizes { get; set; } = new(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs.meta b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs.meta new file mode 100644 index 0000000..325b536 --- /dev/null +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeSet.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fe1cb578ae77855498d5231338f930ff \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeUtils.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeUtils.cs index 5c2a6fd..c6e3a28 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeUtils.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/PrizeUtils.cs @@ -7,8 +7,7 @@ return prizeType switch { PrizeType.None => "Без приза", - PrizeType.Hopper => "Хоппер 1", - PrizeType.Hopper2 => "Хоппер 2", + PrizeType.Hopper => "Хоппер", PrizeType.Ticket => "Билет", PrizeType.Qr => "QR/Суперприз", PrizeType.Marbles => "Марблс", @@ -29,7 +28,6 @@ return countableType switch { CountablePrizeType.Hopper => PrizeType.Hopper, - CountablePrizeType.Hopper2 => PrizeType.Hopper2, CountablePrizeType.Ticket => PrizeType.Ticket, CountablePrizeType.Marbles => PrizeType.Marbles, _ => PrizeType.None @@ -41,7 +39,6 @@ { None, Hopper, - Hopper2, Ticket, Marbles, VitrinaBox, diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/QrPrize.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/QrPrize.cs index c8fa07c..e262548 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeModels/QrPrize.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/QrPrize.cs @@ -1,9 +1,12 @@ -namespace PrizeSystem +using Newtonsoft.Json; + +namespace PrizeSystem { public class QrPrize : Prize { public string PrizeText { get; } - public override string Body => $"Qr:{PrizeText}"; + + [JsonConstructor] public QrPrize(string prizeText) : base(PrizeType.Qr) { PrizeText = prizeText; diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeModels/VitrinaPrize.cs b/Assets/Scripts/Common/PrizeSystem/PrizeModels/VitrinaPrize.cs index 5f29b2a..76b7cad 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeModels/VitrinaPrize.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeModels/VitrinaPrize.cs @@ -1,3 +1,4 @@ +using Newtonsoft.Json; using System.Linq; namespace PrizeSystem @@ -5,14 +6,11 @@ namespace PrizeSystem public class VitrinaPrize : Prize { public int[] Boxes { get; } - public override string Body => _cachedBody; - - public string _cachedBody; + [JsonConstructor] public VitrinaPrize(int[] boxes) : base(PrizeType.VitrinaBox) { Boxes = boxes.ToArray(); - _cachedBody = $"VitrinaBox:{string.Join(",", Boxes)}"; } } } \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeSerializer.cs b/Assets/Scripts/Common/PrizeSystem/PrizeSerializer.cs index 2848c18..998d035 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeSerializer.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeSerializer.cs @@ -1,8 +1,7 @@ -using System; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using UnityEngine; @@ -10,131 +9,51 @@ namespace PrizeSystem { public static class PrizeSerializer { - const string CHARACTERS_PRIZES = "CharPrizes.prizRR"; - static string FILE_PATH => Path.Combine(Application.persistentDataPath, CHARACTERS_PRIZES); - static int CharactersAmount => 5; - - public static List LoadPrizes() + private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { - if (PrizeSystemManager.cachedPrizes != null) - return PrizeSystemManager.cachedPrizes; - - List prizes; - try + Formatting = Formatting.Indented, + NullValueHandling = NullValueHandling.Ignore, + Converters = new List { - if (File.Exists(FILE_PATH)) - { - string fileString = File.ReadAllText(FILE_PATH); - prizes = DeserializePrizes(fileString); - } - else - { - Debug.Log($"Файл {FILE_PATH} не найден, создаю с призами по умолчанию"); - prizes = GetDefaultPrizes(); - SavePrizes(prizes); - } - } - catch (Exception e) - { - Debug.LogError($"Ошибка загрузки призов: {e.Message}"); - prizes = GetDefaultPrizes(); + new StringEnumConverter(), // Для красивой сериализации enum'ов + new PrizeConverter() } + }; - PrizeSystemManager.SetPrizesCache(prizes); - return prizes; + private static string FILE_PATH => Path.Combine(Application.persistentDataPath, "Prizes.json"); + + private static PrizeContainer DefaultPrizeContainer; + + public static void Initialize(PrizeContainer defaultPrizeContainer) + => DefaultPrizeContainer = defaultPrizeContainer; + + public static void SaveToFile() + { + var container = PrizeSystemManager.PrizeContainer; + var json = SerializeContainer(container); + File.WriteAllText(FILE_PATH, json); } - /// - /// Сериализует и записывает в файл - /// - /// - public static void SavePrizes(List prizes) + public static PrizeContainer LoadFromFile() { - string serialized = SerializePrizes(prizes); - Debug.Log($"serialized: {serialized}"); - File.WriteAllText(FILE_PATH, serialized); - PrizeSystemManager.SetPrizesCache(prizes); - } - - - public static string SerializePrizes(List prizes) - { - StringBuilder sb = new(); - - for (int i = 0; i < CharactersAmount; i++) + PrizeContainer container; + if (!File.Exists(FILE_PATH)) { - sb.Append(prizes[i].Body); - string endOfLine = i < CharactersAmount - 1 ? "\n" : ""; - sb.Append(endOfLine); + container = DefaultPrizeContainer; } - string result = sb.ToString(); - return result; - } - - /// - /// Преобразовать сериализованную строку в список призов - /// - public static List DeserializePrizes(string serialized) - { - List prizes = new(); - - string[] lines = serialized.Split('\n'); - if (lines.Length != CharactersAmount) + else { - return GetDefaultPrizes(); + var json = File.ReadAllText(FILE_PATH); + container = DeserializeContainer(json); } - foreach (string line in lines) - { - if (line == "None") - { - prizes.Add(PrizeUtils.CreatePrize()); - } - else if (line.StartsWith("VitrinaBox:")) - { - string stripped = line.Substring("VitrinaBox:".Length); - int[] boxes = stripped.Split(",").Select(int.Parse).ToArray(); - prizes.Add(PrizeUtils.CreatePrize(boxes)); - } - else if (line.StartsWith("Qr:")) - { - string stripped = line.Substring("Qr:".Length); - string[] entries = stripped.Split(','); - - int rank = int.Parse(entries[0]); - string text = entries[1]; - - prizes.Add(PrizeUtils.CreatePrize(text)); - } - else - {//считаемый приз - string[] entries = line.Split(":"); - CountablePrizeType Type = (CountablePrizeType)Enum.Parse(typeof(CountablePrizeType), entries[0]); - int amount = int.Parse(entries[1]); - - prizes.Add(PrizeUtils.CreatePrize(Type, amount)); - } - } - - return prizes; + return container; } + private static string SerializeContainer(PrizeContainer container) + => JsonConvert.SerializeObject(container, Settings); - //делает список пустых призов, последний индекс - приз с хоппера - public static List GetDefaultPrizes() - { - List prizes = new(); - - for (int i = 0; i < CharactersAmount - 1; i++) - { - prizes.Add(PrizeUtils.CreatePrize()); - } - prizes.Add(PrizeUtils.CreatePrize("5000 руб.")); - - SerializePrizes(prizes); - - return prizes; - } + private static PrizeContainer DeserializeContainer(string json) + => JsonConvert.DeserializeObject(json, Settings); } - } \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/PrizeSystemManager.cs b/Assets/Scripts/Common/PrizeSystem/PrizeSystemManager.cs index 61450b5..96c3f60 100644 --- a/Assets/Scripts/Common/PrizeSystem/PrizeSystemManager.cs +++ b/Assets/Scripts/Common/PrizeSystem/PrizeSystemManager.cs @@ -1,70 +1,57 @@ -using System; +using PrizeSystem; +using System; using System.Collections; using System.Collections.Generic; -using System.Text; -using UnityEditor.PackageManager; using UnityEngine; - - +using static PrizeView; namespace PrizeSystem { - /// - /// Система управления выдачей призов и ведения статистики игры. - /// Отвечает за процесс выдачи призов, подсчет запусков и наград. - /// public class PrizeSystemManager : MonoBehaviour { - [SerializeField] AudioClip prizeErrorSound; - - [SerializeField] bool SoundNotification = true; - [SerializeField] List PrizeNotificationSounds; - - [SerializeField] Notification prizeNotification; - [SerializeField] VitrinaPanel vitrinaPanel; - - - public static event Action> PrizesChanged; + public static event Action OnPrizesChanged; public static event Action OnErrorStateChanged; - private static PrizeSystemManager instance; - private static bool prizing = false; + [Header("Звук")] + [SerializeField] private AudioClip prizeErrorSound; + [SerializeField] private List PrizeNotificationSounds; + [SerializeField] private Notification prizeNotification; + + private static PrizeSystemManager I; + private static bool prizingInProcess = false; + + public static PrizeContainer PrizeContainer { get; private set; } - public static List cachedPrizes { get; private set; } - //Прописать тут очереди. private static Queue qrPrizes; private static Queue vitrinaPrizes; public static bool HasQrPrizeToGive => qrPrizes.Count > 0; public static bool HasVitrinaPrizeToGive => vitrinaPrizes.Count > 0; - + private string StartHopperCommand => "303"; + private string StopHopperCommand => "302"; public static bool ErrorState => PlayerPrefs.GetInt(PrefsKeyVault.PRIZING_ERROR_REGISTRED, 0) == 1; - - - - //=========================== PUBLIC API ===========================// - public static Prize GetFirstNonEmptyPrizeAfter(Prize referencePrize) + private PrizeContainer _defaultPrizes = new PrizeContainer { - if (referencePrize == null) return null; - - int currentPrizeIndex = cachedPrizes.IndexOf(referencePrize); - if (currentPrizeIndex < 0) return null; - - for (int i = currentPrizeIndex + 1; i < cachedPrizes.Count; i++) + Sets = new List() { - var selectedPrize = cachedPrizes[i]; - if (selectedPrize is not EmptyPrize) - { - return selectedPrize; - } + new PrizeSet() { Prizes = new List { new EmptyPrize() } }, + new PrizeSet() { Prizes = new List { new EmptyPrize() } }, + new PrizeSet() { Prizes = new List { new EmptyPrize() } }, + new PrizeSet() { Prizes = new List { new EmptyPrize() } }, + new PrizeSet() { Prizes = new List { new QrPrize("5000 руб") } } } - return null; - } + }; + + [SerializeField] private List iconsMap; + [SerializeField] private Sprite defaultIcon; public void Initialize() { - instance = this; + I = this; + + PrizeSerializer.Initialize(_defaultPrizes); + PrizeContainer = PrizeSerializer.LoadFromFile(); qrPrizes = new(); vitrinaPrizes = new(); @@ -73,26 +60,20 @@ namespace PrizeSystem public static QrPrize DequeueQrPrize() => HasQrPrizeToGive ? qrPrizes.Dequeue() : null; public static VitrinaPrize DequeueVitrinaPrize() => HasVitrinaPrizeToGive ? vitrinaPrizes.Dequeue() : null; - - public static void SetPrizesCache(List prizes) + public static void SavePrizes() { - cachedPrizes = prizes; - PrizesChanged?.Invoke(prizes); + OnPrizesChanged?.Invoke(PrizeContainer); } + public static void GivePrize(Prize prize) { + bool prizingEnabled = SettingsManager.GetBool(SettingKey.PRIZING); + if (prizingEnabled == false) return; + if (prize == null) { Debug.Log("Приз Null"); return; } - //Если призы отключены в принципе, то не выдаем. - bool prizingEnabled = SettingsManager.GetBool(SettingKey.PRIZING); - if (!prizingEnabled) return; - - - - Debug.Log($"Поступил заказ приз: {prize.Body}"); - if (prize is EmptyPrize) { @@ -101,7 +82,7 @@ namespace PrizeSystem } else if (prize is CountablePrize countablePrize) { - instance.StartCoroutine(instance.PrizingProcess(countablePrize.Amount, countablePrize.Type)); + I.StartCoroutine(I.GiveCountablePrizeCoroutine(countablePrize.Amount, countablePrize.Type)); } else if (prize is VitrinaPrize vitrinaPrize) { @@ -112,21 +93,15 @@ namespace PrizeSystem qrPrizes.Enqueue(qrPrize); } } - - //=========================== privates ===========================// - #region Приватные методы - //private string StartHopperCommand => ComWrapper.BoardVersion switch { 1 => "303", 2 => "301", _ => "303" }; - //private string StopHopperCommand => ComWrapper.BoardVersion switch { 1 => "302", 2 => "300", _ => "302" }; - private string StartHopperCommand => "303"; - private string StopHopperCommand => "302"; - private IEnumerator PrizingProcess(int amount, CountablePrizeType Type) + + private IEnumerator GiveCountablePrizeCoroutine(int amount, CountablePrizeType Type) { - if (prizing) + if (prizingInProcess) { Debug.LogError("Уже идет выдача приза. Повторная выдача отключена"); yield break; } - prizing = true; + prizingInProcess = true; Debug.Log($"Выдача приза {Type}. Количество: {amount}"); bool atLeastOnePrize = false; @@ -137,29 +112,23 @@ namespace PrizeSystem bool errorRegistred = PlayerPrefs.GetInt(PrefsKeyVault.PRIZING_ERROR_REGISTRED, 0) == 1; if (errorRegistred && noPrizWhenError) yield break; - Debug.Log($"Включаю мотор хоппера: {StartHopperCommand}"); - ComWrapper.Send(StartHopperCommand);//включаем мотор - - PlayerPrefs.SetInt("PrizeGivenBuffer", 0);//подготовка буфера - Debug.Log($"Буфер подготовлен. Значение: {PlayerPrefs.GetInt("PrizeGivenBuffer")}"); + PlayerPrefs.SetInt(PrefsKeyVault.PRIZE_GIVEN_BUFFER, 0); + ComWrapper.Send(StartHopperCommand); float startTime = Time.time; bool success = false; float timeout = 10; while (Time.time - startTime < timeout) { - if (PlayerPrefs.GetInt("PrizeGivenBuffer", 0) == 1) + if (PlayerPrefs.GetInt(PrefsKeyVault.PRIZE_GIVEN_BUFFER, 0) == 1) { - Debug.Log($"Считан приз. Значение буфера {PlayerPrefs.GetInt("PrizeGivenBuffer")}"); success = true; break; } yield return null; } - Debug.Log($"Выключаю мотор: {StopHopperCommand}"); ComWrapper.Send(StopHopperCommand); - Debug.Log("Закончил. Успех: " + success); if (success) { @@ -186,17 +155,16 @@ namespace PrizeSystem SoundNotificationIfNeeds(); } - prizing = false; + prizingInProcess = false; } - public static void SetPrizingError(bool error) { PlayerPrefs.SetInt(PrefsKeyVault.PRIZING_ERROR_REGISTRED, error ? 1 : 0); OnErrorStateChanged?.Invoke(error); } - void IncreasePrizeCounters(CountablePrizeType Type) + private void IncreasePrizeCounters(CountablePrizeType Type) { string prizeCounterKey = Type switch { @@ -221,39 +189,28 @@ namespace PrizeSystem PlayerPrefs.SetInt(PrefsKeyVault.SPECIAL_GIVEN_COUNTER + "Nullable", 0); } - public static string GetPrizesCounterNullableString() - { - StringBuilder sb = new(); - - sb.Append($"Х: {PlayerPrefs.GetInt(PrefsKeyVault.HOPPER_GIVEN_COUNTER + "Nullable", 0)}. "); - sb.Append($"Т: {PlayerPrefs.GetInt(PrefsKeyVault.TICKET_GIVEN_COUNTER + "Nullable", 0)}. "); - sb.Append($"М: {PlayerPrefs.GetInt(PrefsKeyVault.MARBLES_GIVEN_COUNTER + "Nullable", 0)}. "); - sb.Append($"С: {PlayerPrefs.GetInt(PrefsKeyVault.SPECIAL_GIVEN_COUNTER + "Nullable", 0)}. "); - - return sb.ToString(); - } - - public static string GetPrizesCounterString() - { - StringBuilder sb = new(); - - sb.Append($"Х: {PlayerPrefs.GetInt(PrefsKeyVault.HOPPER_GIVEN_COUNTER, 0)}. "); - sb.Append($"Т: {PlayerPrefs.GetInt(PrefsKeyVault.TICKET_GIVEN_COUNTER, 0)}. "); - sb.Append($"М: {PlayerPrefs.GetInt(PrefsKeyVault.MARBLES_GIVEN_COUNTER, 0)}. "); - sb.Append($"С: {PlayerPrefs.GetInt(PrefsKeyVault.SPECIAL_GIVEN_COUNTER, 0)}. "); - - return sb.ToString(); - } - private void SoundNotificationIfNeeds() { - if (!SoundNotification) return; if (PrizeNotificationSounds == null || PrizeNotificationSounds.Count == 0) return; int random = UnityEngine.Random.Range(0, PrizeNotificationSounds.Count); AudioClip notification = PrizeNotificationSounds[random]; SoundManager.instance.playClip(notification); } - #endregion + + public static Sprite GetPrizeIcon(PrizeType prizeType) + { + foreach (var mapItem in I.iconsMap) + if (mapItem.prizeType == prizeType) return mapItem.sprite; + return I.defaultIcon; + } } +} + + +[Serializable] +public struct PrizeImageMap +{ + public PrizeType prizeType; + public Sprite sprite; } \ No newline at end of file diff --git a/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.cs b/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.cs index 2d1fd07..1ec30a7 100644 --- a/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.cs +++ b/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.cs @@ -9,15 +9,17 @@ public class PrizeView : MonoBehaviour { [SerializeField] private Image _image; [SerializeField] private TextMeshProUGUI _label; - [SerializeField] private List map; - [SerializeField] private Sprite defaultSprite; + + + public Prize Prize; public void SetPrize(Prize prize) { - _image.sprite = GetImage(prize.PrizeType); + _image.sprite = PrizeSystemManager.GetPrizeIcon(prize.PrizeType); _label.text = GetText(prize); _label.rectTransform.sizeDelta = new Vector2(_label.preferredWidth, _label.rectTransform.sizeDelta.y); + Prize = prize; } public void Clear() @@ -26,21 +28,70 @@ public class PrizeView : MonoBehaviour _label.text = ""; } + private string GetText(Prize prize) => GetPrizeText(prize); - - private string GetText(Prize prize) => RulesPrizePanel.GetPrizeText(prize); - private Sprite GetImage(PrizeType prizeType) + public static string GetPrizeText(Prize prize) { - foreach (var mapItem in map) - if (mapItem.prizeType == prizeType) return mapItem.sprite; - return defaultSprite; + if (prize == null || prize is EmptyPrize) + { + return "Пусто"; + } + else if (prize is CountablePrize cp) + { + return prize.PrizeType switch + { + PrizeType.Hopper => $"{cp.Amount} {Pluralize(cp.Amount, "маленький приз", "маленьких приза", "маленьких призов")}", + PrizeType.Ticket => $"{cp.Amount} {Pluralize(cp.Amount, "билет", "билета", "билетов")}", + PrizeType.Marbles => $"{cp.Amount} марблс", + _ => "Приз" + }; + } + else if (prize is VitrinaPrize vp) + { + return $"Витрина ячейки: {string.Join(" | ", vp.Boxes)}"; + } + else if (prize is QrPrize qp) + { + return $"Qr: {qp.PrizeText}"; + } + return ""; } - [Serializable] - public struct PrizeImageMap + /// + /// Возвращает правильную форму существительного для русского языка в зависимости от числа + /// + /// Количество предметов + /// Форма для 1 (именительный падеж, ед.ч.): "яблоко" + /// Форма для 2-4 (родительный падеж, ед.ч.): "яблока" + /// Форма для 5+ (родительный падеж, мн.ч.): "яблок" + /// Правильная форма существительного + public static string Pluralize(int count, string form1, string form2, string form3) { - public PrizeType prizeType; - public Sprite sprite; + // Приводим число к положительному виду для корректной работы с остатками + int absCount = Mathf.Abs(count); + + // Определяем остатки для проверки правил + long lastTwoDigits = absCount % 100; + long lastDigit = absCount % 10; + + // Особый случай: числа от 11 до 19 всегда используют форму 3 + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) + { + return form3; + } + + // Обычные правила склонения + switch (lastDigit) + { + case 1: + return form1; + case 2: + case 3: + case 4: + return form2; + default: + return form3; + } } } diff --git a/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.prefab b/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.prefab index f18d092..a1b58ea 100644 --- a/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.prefab +++ b/Assets/Scripts/Common/PrizeSystem/TakeOrRiskSystem/PrizeView.prefab @@ -68,8 +68,8 @@ MonoBehaviour: m_text: "\u0412\u0438\u0442\u0440\u0438\u043D\u0430 \u044F\u0447\u0435\u0439\u043A\u0438 1\u04312\u04313\u04313\u0431" m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 3f10bbcf486189d4f95b8de6dc2e2177, type: 2} - m_sharedMaterial: {fileID: 4262305343556741190, guid: 3f10bbcf486189d4f95b8de6dc2e2177, type: 2} + m_fontAsset: {fileID: 11400000, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} + m_sharedMaterial: {fileID: 8312110174854069929, guid: 47e175ba6cb1126439b5583572a406fe, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -104,20 +104,23 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -190,7 +193,7 @@ MonoBehaviour: _label: {fileID: 7128173437019644448} map: - prizeType: 0 - sprite: {fileID: 21300000, guid: 6e622d073fff38b468edb48bec60df75, type: 3} + sprite: {fileID: 21300000, guid: 4e3b40fbac46b3d49aeb97f61c2f0238, type: 3} - prizeType: 1 sprite: {fileID: 21300000, guid: ad4cd70bf4819264c91f251f5bbd5d6a, type: 3} - prizeType: 2 @@ -297,7 +300,7 @@ MonoBehaviour: m_Calls: [] m_Sprite: {fileID: 21300000, guid: ad4cd70bf4819264c91f251f5bbd5d6a, type: 3} m_Type: 0 - m_PreserveAspect: 0 + m_PreserveAspect: 1 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 diff --git a/Assets/Scripts/Common/RGB_FOntAsset.cs b/Assets/Scripts/Common/RGB_FOntAsset.cs deleted file mode 100644 index 9ba1620..0000000 --- a/Assets/Scripts/Common/RGB_FOntAsset.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using TMPro; -using UnityEngine; - -public class RGB_FOntAsset : MonoBehaviour -{ - public Material material; - public float speed = 1f; - - [Header("Масштабирование")] - public float min = 1.2f; - public float max = 2f; - - private float mid; - private float half; - - public float scaleSpeed = 7; - - [Header("Вращение")] - public float rotateSpeed = 10; - public float angularAmpliude = 5; - - private float hue = 0f; - - private void OnEnable() - { - mid = 0.5f * (min + max); - half = 0.5f * (max - min); - } - private void Update() - { - if (material != null) - { - // Изменяем оттенок (hue) от 0 до 1 - hue += Time.deltaTime * speed; - hue %= 1f; // Ограничиваем от 0 до 1 - - // Преобразуем HSV в RGB - Color color = Color.HSVToRGB(hue, 1f, 1f); - - material.SetColor(ShaderUtilities.ID_GlowColor, color); - - } - - - float t = Time.time * scaleSpeed; - float s = mid + half * Mathf.Sin(t); - transform.localScale = Vector3.one * s; - - - t = Time.time * rotateSpeed; - float zAngle = angularAmpliude * Mathf.Sin(t); - transform.rotation = Quaternion.Euler(0, 0, zAngle); - - } -} diff --git a/Assets/Scripts/Common/RGB_FOntAsset.cs.meta b/Assets/Scripts/Common/RGB_FOntAsset.cs.meta deleted file mode 100644 index 205fbb1..0000000 --- a/Assets/Scripts/Common/RGB_FOntAsset.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d5793ef5705258b41b327430fe3c351e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/SinGradient.cs b/Assets/Scripts/Common/SinGradient.cs deleted file mode 100644 index ca195dc..0000000 --- a/Assets/Scripts/Common/SinGradient.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class SinGradient : MonoBehaviour -{ - [SerializeField] Gradient gradient; - [SerializeField] float Frequency = 1; - [SerializeField] float Phase = 0; - - Graphic graphic; - - - private void OnEnable() - { - graphic = GetComponent(); - } - - void Update() - { - if (graphic == null) return; - - float value = 0.5f * (1+ Mathf.Sin(Time.time * Frequency + Phase)); - Color color = gradient.Evaluate(value); - graphic.color = color; - } -} diff --git a/Assets/Scripts/Common/SinGradient.cs.meta b/Assets/Scripts/Common/SinGradient.cs.meta deleted file mode 100644 index 341303a..0000000 --- a/Assets/Scripts/Common/SinGradient.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a24f46eb7d3697d43a5846d0b4621531 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/StringExtensions.cs b/Assets/Scripts/Common/StringExtensions.cs deleted file mode 100644 index 5ee5d90..0000000 --- a/Assets/Scripts/Common/StringExtensions.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; - -public static class StringExtensions -{ - public static string ColorWrap(this string text, Color color) - { - string hexColor = ColorUtility.ToHtmlStringRGB(color); - return $"{text}"; - } - - public static string UnderlineWrap(this string text) => $"{text}"; -} \ No newline at end of file diff --git a/Assets/Scripts/Common/StringExtensions.cs.meta b/Assets/Scripts/Common/StringExtensions.cs.meta deleted file mode 100644 index 2c2f176..0000000 --- a/Assets/Scripts/Common/StringExtensions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ef04878c4347d724e9000a65762b5097 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/Utils.cs b/Assets/Scripts/Common/Utils.cs deleted file mode 100644 index 194a6a3..0000000 --- a/Assets/Scripts/Common/Utils.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -public static class Utils -{ - /// - /// Возвращает текущий Unix-штамп времени в секундах. - /// - public static double GetUnixTimestamp() - => (DateTime.UtcNow - new System.DateTime(1970, 1, 1)).TotalSeconds; -} \ No newline at end of file diff --git a/Assets/Scripts/Common/Utils.cs.meta b/Assets/Scripts/Common/Utils.cs.meta deleted file mode 100644 index da30f33..0000000 --- a/Assets/Scripts/Common/Utils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5e33ca56f80445f4b9dbd720e5c5c2ed -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs b/Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs deleted file mode 100644 index 1df0208..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class DogSounds : MonoBehaviour -{ - public AudioClip appearClip; - public AudioClip shotClip; - public void LaserPrint() - { - SoundManager.instance.playClip(appearClip); - } - public void Shot() - { - SoundManager.instance.playClip(shotClip); - - } -} diff --git a/Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs.meta b/Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs.meta deleted file mode 100644 index c8cafb1..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/DogSounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a398c7d69ddbfa946bbfa505e5fd6b7e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs b/Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs deleted file mode 100644 index a15b5ce..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class MistressSounds : MonoBehaviour -{ - [SerializeField] AudioClip appearSound; - [SerializeField] AudioClip winSound; - [SerializeField] AudioClip tsokSound; - [SerializeField] AudioClip glassesSound; - - - public void _playAppear() - { - SoundManager.instance.playClip(appearSound); - } - public void _playWin() - { - SoundManager.instance.playClip(winSound); - } - public void _playTsok() - { - SoundManager.instance.playClip(tsokSound); - } - public void _playGlasses() - { - SoundManager.instance.playClip(glassesSound); - } -} diff --git a/Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs.meta b/Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs.meta deleted file mode 100644 index 67cf258..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/MistressSounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 984ce2fe6e802674b977c5d9c2067a13 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs b/Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs deleted file mode 100644 index 089da6a..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class SamSounds : MonoBehaviour -{ - [SerializeField] private AudioClip appearing, throwing, disappearing, openSword, closeSword, swipe; - - public void appearSound() => SoundManager.instance.playClip(appearing); - public void disappearSound() => SoundManager.instance.playClip(disappearing); - public void throwSound() => SoundManager.instance.playClip(throwing); - - public void openSwordSound() => SoundManager.instance.playClip(openSword); - public void closeSwordSound() => SoundManager.instance.playClip(closeSword); - public void swipeSound() => SoundManager.instance.playClip(swipe); -} diff --git a/Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs.meta b/Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs.meta deleted file mode 100644 index 23238a7..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/SamSounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d285ab7140017284f95cf59a79fc3516 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs b/Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs deleted file mode 100644 index ca393e1..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class TamagochiSounds : MonoBehaviour -{ - [SerializeField] AudioClip Rotation, ChipThrow,ChipThrowMem, Jump, Lose; - public void AppearSound() => SoundManager.instance.playClip(Rotation); - public void ChipSound() - { - //AudioClip clipToPlay = Random.Range(0,1f) < 0.1f ? ChipThrowMem : ChipThrow; - //SoundManager.instance.playClip(clipToPlay); - - SoundManager.instance.playClip(ChipThrow); - } - public void JumpSound() => SoundManager.instance.playClip(Jump); - public void LoseSound() => SoundManager.instance.playClip(Lose); -} diff --git a/Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs.meta b/Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs.meta deleted file mode 100644 index 92674be..0000000 --- a/Assets/Scripts/Gameplay/Bot Characters/TamagochiSounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e16138c43089fc040871ad9e10612331 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/EndOfTurnHandler.cs b/Assets/Scripts/Gameplay/EndOfTurnHandler.cs deleted file mode 100644 index 15f7fdc..0000000 --- a/Assets/Scripts/Gameplay/EndOfTurnHandler.cs +++ /dev/null @@ -1,85 +0,0 @@ -using CharacterSystem; -using UnityEngine; - -public static class EndOfTurnHandler -{ - private static GameManager gm => GameManager.Instance; - - private static bool TotalWin() => - gm.player1score == 5 || gm.player2score == 5 || gm.vsBotScore == gm.botsAmount; - //private static void ClearAllScales() - //{ - // if (gm.botScale.isActiveAndEnabled) gm.botScale.ClearScale(); - // if (gm.Player1Scale.isActiveAndEnabled) gm.Player1Scale.ClearScale(); - // if (gm.Player2Scale.isActiveAndEnabled) gm.Player2Scale.ClearScale(); - //} - - //Надо куда то это перемещать. Мб в тот же роутер. - public static void WinByTimerHandling() - { - //При победе по таймеру: - //PVP проиграл тот, кто не успел кинуть фишку - //PVE - прогрывает человек - - - var result = new CheckResult(true, false, null); - IState nextState; - - if (gm.gameMode == GameMode.pvp) - { - //p2 не успел - if (gm.currentPlayer == Team.Player2) - { - gm.player1score += 1; - //gm.Player1Scale.SetMedalsCount(gm.player1score); - } - else//p1 не успел - { - gm.player2score += 1; - //gm.Player2Scale.SetMedalsCount(gm.player2score); - } - } - else if (gm.gameMode == GameMode.pve)//время вышло при игре с ботом - бот победил - { - LightUtility.Lose(); - CharactersController.CurrentCharacter.GetComponent().SetTrigger("Win"); - - //НЕ НИЧЬЯ - //VictoryScale vsBotScale = gm.botScale; - CharactersController.CurrentCharacter.difficultyModule.DecreaseDifficulty(); - EventBus.TriggerEvent(GameEvent.BotWin); - if (gm.vsBotScore != 0) gm.vsBotScore -= 1; - - //vsBotScale.SetMedalsCount(gm.vsBotScore); - } - - nextState = new ShowWinnerState(); - - //конец игры - призовое состояние - if (TotalWin()) - { - nextState = new VictoryState(); - //ClearAllScales(); - } - - gm.stateMachine.ChangeState(nextState); - } - - - public static TurnEndingResult Evaluate(CheckResult result, GameMode gameMode, Team lastPlayer) - { - if (!result.End) return TurnEndingResult.GameContinues; - if (result.Draw) return TurnEndingResult.Draw; - - - if (gameMode == GameMode.pve) - { - return lastPlayer == Team.Player1 ? TurnEndingResult.PlayerWinPve : TurnEndingResult.BotWin; - } - else //pvp - { - return TurnEndingResult.PlayerWinPvp; - } - } - -} diff --git a/Assets/Scripts/Gameplay/EndOfTurnHandler.cs.meta b/Assets/Scripts/Gameplay/EndOfTurnHandler.cs.meta deleted file mode 100644 index a22a36a..0000000 --- a/Assets/Scripts/Gameplay/EndOfTurnHandler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c1351470acd7ef14eb5cadc554ecf3cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/TimerManager.cs b/Assets/Scripts/Gameplay/TimerManager.cs index 9f1706a..0e554b9 100644 --- a/Assets/Scripts/Gameplay/TimerManager.cs +++ b/Assets/Scripts/Gameplay/TimerManager.cs @@ -6,12 +6,6 @@ public class TimerManager : MonoBehaviour [SerializeField] float vsBotTime = 180; [SerializeField] float pvpTime = 90; - public void Init() - { - player1Timer.OnTimerEnded.AddListener(EndOfTurnHandler.WinByTimerHandling); - player2Timer.OnTimerEnded.AddListener(EndOfTurnHandler.WinByTimerHandling); - } - public void SetupTimers(GameMode gameMode) { player1Timer.SetupTimer(gameMode == GameMode.pve ? vsBotTime : pvpTime); diff --git a/Assets/Scripts/Menu/Menu.cs b/Assets/Scripts/Menu/Menu.cs index 439119a..6bffb08 100644 --- a/Assets/Scripts/Menu/Menu.cs +++ b/Assets/Scripts/Menu/Menu.cs @@ -71,7 +71,7 @@ public class Menu : MonoBehaviour, IControlable private void Enable() { ControlsEnabled = true; - LightUtility.Idle(); + LightSystem.Idle(); } private void Disable() diff --git a/Assets/Scripts/Menu/Rules/RulesPrizePanel.cs b/Assets/Scripts/Menu/Rules/RulesPrizePanel.cs deleted file mode 100644 index 73336a7..0000000 --- a/Assets/Scripts/Menu/Rules/RulesPrizePanel.cs +++ /dev/null @@ -1,480 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; -using TMPro; -using PrizeSystem; -using CharacterSystem; - -public class RulesPrizePanel : MonoBehaviour -{ - [SerializeField] RectTransform ScaleContainer; - [SerializeField] GameObject IconTemplate; - [SerializeField] GameObject PointNumberTemplate; - [SerializeField] float IconSize = 100; - [SerializeField] float PointSize = 30; - [SerializeField] float SubpointSize = 15; - [SerializeField] float PointOffsetX = 100; - [SerializeField] float LinkWidth = 5; - [SerializeField] float StrokeWidth = 15; - [SerializeField] float StrokeGap = 15; - [SerializeField] float prizetextFontsize = 30; - [SerializeField] float instructionFontsize = 24; - [SerializeField] float giftImageSizeMultiplier = 1; - - [SerializeField] Sprite circle; - [SerializeField] Sprite square; - - [SerializeField] Sprite giftSprite; - [SerializeField] Sprite hopperSprite; - [SerializeField] Sprite marblesSprite; - [SerializeField] Sprite ticketSprite; - [SerializeField] Sprite vitrinaSprite; - [SerializeField] Sprite qrSprite; - - [SerializeField] Color ScaleColor = Color.gray; - [SerializeField] Color ScaleColorHighlighted = new Color(1, .7f, 0); - - - private Character[] characters; - private List prizes; - List generatedObjects; - List generatedIcons; - List generatedPoints; - List generatedLinks; - List generatedSubpoints; - - - - [SerializeField] RectTransform InstructionContainer; - - - private void OnEnable() => GenerateScale(); - private void OnDisable() => Clear(); - - private Sprite SpriteByType(PrizeType prizeType) - { - return prizeType switch - { - PrizeType.Hopper => hopperSprite, - PrizeType.Hopper2 => hopperSprite, - PrizeType.Ticket => ticketSprite, - PrizeType.Marbles => marblesSprite, - PrizeType.Qr => qrSprite, - PrizeType.VitrinaBox => vitrinaSprite, - _ => giftSprite - - }; - } - private void Clear() - { - for (int i = generatedObjects.Count - 1; i >= 0; i--) - { - Destroy(generatedObjects[i]); - } - - generatedObjects.Clear(); - } - private void GenerateScale() - { - characters = CharactersController.GetCharactersArray(); - prizes = PrizeSerializer.LoadPrizes(); - generatedObjects = new(); - - GenerateIcons(); - GeneratePoints(); - GenerateLinks(); - GenerateNumbers(); - GenerateSubpoints(); - GenerateInstructions(); - } - - - private void GenerateIcons() - { - generatedIcons = new(); - for (int i = 0; i < characters.Length; i++) - { - RectTransform icon = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - icon.sizeDelta = new Vector2(IconSize, IconSize); - icon.anchoredPosition = new Vector2(IconSize / 2, -IconSize / 2 - IconSize * i); - - icon.GetComponent().sprite = characters[i].visualModule.iconSmall; - - generatedObjects.Add(icon.gameObject); - generatedIcons.Add(icon); - - } - } - - private void GeneratePoints() - { - List positions = new(); - - //собираем список точек куда спавнить кружки - foreach (RectTransform icon in generatedIcons) - { - positions.Add((Vector2)icon.localPosition + Vector2.right * PointOffsetX); - } - - // - generatedPoints = new(); - foreach (Vector2 position in positions) - { - RectTransform point = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - point.sizeDelta = new Vector2(PointSize, PointSize); - point.localPosition = position; - - Image image = point.GetComponent(); - image.sprite = circle; - image.color = ScaleColor; - - generatedObjects.Add(point.gameObject); - generatedPoints.Add(point); - } - } - - - private void GenerateLinks() - { - generatedLinks = new(); - List LinkPositions = new(); - - //собираем точки - for (int i = 0; i < generatedPoints.Count - 1; i++) - { - float y = (generatedPoints[i].transform.localPosition.y + generatedPoints[i + 1].transform.localPosition.y) / 2; - LinkPositions.Add(new Vector2(generatedPoints[0].localPosition.x, y)); - } - //последний уникальный - LinkPositions.Add(new Vector2(generatedPoints[^1].localPosition.x, generatedPoints[^1].transform.localPosition.y)); - - - foreach (Vector2 position in LinkPositions) - { - RectTransform link = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - link.sizeDelta = new Vector2(LinkWidth, IconSize); - link.localPosition = position; - Image image = link.GetComponent(); - image.sprite = square; - image.color = ScaleColor; - - generatedObjects.Add(link.gameObject); - generatedLinks.Add(link); - } - } - - private void GenerateNumbers() - { - int i = 1; - foreach (RectTransform point in generatedPoints) - { - TextMeshProUGUI label = Instantiate(PointNumberTemplate, ScaleContainer).GetComponent(); - label.text = i.ToString(); - label.transform.localPosition = point.localPosition; - - generatedObjects.Add(label.gameObject); - i++; - } - } - - private void GenerateSubpoints() - { - generatedSubpoints = new List(); - List positions = new List(); - - foreach (RectTransform point in generatedPoints) - { - positions.Add((Vector2)point.localPosition + Vector2.down * IconSize / 2); - } - - int index = 0; - foreach (Vector2 position in positions) - { - RectTransform subpoint = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - subpoint.localPosition = position; - subpoint.sizeDelta = Vector2.one * SubpointSize; - - Image image = subpoint.GetComponent(); - image.sprite = circle; - - - bool prizedIndex = prizes[index].PrizeType != PrizeType.None; - Color color = prizedIndex ? ScaleColorHighlighted : ScaleColor; - image.color = color; - - if (prizedIndex) GeneratePrizeView(position, prizes[index]); - - generatedObjects.Add(subpoint.gameObject); - generatedSubpoints.Add(subpoint); - index++; - } - } - - //private void GeneratePrizeView(Vector2 startPoint, Prize prize) - //{ - // int strokeAmount = 5; - // int offsetX = 15; - - // //генерация штрихов - // for (int i = 0; i < strokeAmount; i++) - // { - // RectTransform stroke = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - // float x = startPoint.x + offsetX + StrokeWidth / 2 + (StrokeGap + StrokeWidth) * i; - // float y = startPoint.y; - // Vector2 position = new Vector2(x, y); - - // stroke.localPosition = position; - // stroke.sizeDelta = new Vector2(StrokeWidth, LinkWidth); - - // Image image = stroke.GetComponent(); - // image.sprite = square; - // image.color = ScaleColor; - - // generatedObjects.Add(stroke.gameObject); - // } - - - // //генерация текста - // Vector2 lastStrokePosition = new Vector2(x: startPoint.x + offsetX + StrokeWidth / 2 + (StrokeGap + StrokeWidth) * (strokeAmount - 1), - // y: startPoint.y); - - - // TextMeshProUGUI label = Instantiate(PointNumberTemplate, ScaleContainer).GetComponent(); - // label.fontSize = prizetextFontsize; - // label.alignment = TextAlignmentOptions.MidlineLeft; - - // //string prizeText = GetPrizeText(prize); - // string prizeText = GetPrizeText(prize); - - // label.text = prizeText; - // float prizetextWidth = label.GetPreferredValues(prizeText).x; - - // RectTransform rect = label.GetComponent(); - // Vector2 labelPosition = new Vector2(x: lastStrokePosition.x + StrokeWidth / 2 + StrokeGap + prizetextWidth / 2, - // y: lastStrokePosition.y); - // rect.localPosition = labelPosition; - // rect.sizeDelta = new Vector2(prizetextWidth, IconSize); - - // generatedObjects.Add(label.gameObject); - - - // //генерация картинки подарка - // Vector2 giftPosition = labelPosition + Vector2.right * (IconSize + prizetextWidth) / 2; - // RectTransform gift = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - // gift.localPosition = giftPosition; - // gift.sizeDelta = Vector2.one * IconSize; - // gift.GetComponent().sprite = giftSprite; - - // generatedObjects.Add(gift.gameObject); - - //} - - private void GeneratePrizeView(Vector2 startPoint, Prize prize) - { - int strokeAmount = 5; - int offsetX = 15; - - //генерация штрихов - for (int i = 0; i < strokeAmount; i++) - { - RectTransform stroke = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - float x = startPoint.x + offsetX + StrokeWidth / 2 + (StrokeGap + StrokeWidth) * i; - float y = startPoint.y; - Vector2 position = new Vector2(x, y); - - stroke.localPosition = position; - stroke.sizeDelta = new Vector2(StrokeWidth, LinkWidth); - - Image image = stroke.GetComponent(); - image.sprite = square; - image.color = ScaleColor; - - generatedObjects.Add(stroke.gameObject); - } - - // ПОЗИЦИЯ ПОСЛЕДНЕГО ШТРИХА - Vector2 lastStrokePosition = new Vector2( - x: startPoint.x + offsetX + StrokeWidth / 2 + (StrokeGap + StrokeWidth) * (strokeAmount - 1), - y: startPoint.y - ); - - // 1. СНАЧАЛА ГЕНЕРИРУЕМ ИКОНКУ ПОДАРКА (ТЕПЕРЬ СЛЕВА) - float iconX = lastStrokePosition.x + StrokeWidth / 2 + StrokeGap + IconSize / 2; - Vector2 iconPosition = new Vector2(iconX, lastStrokePosition.y); - - RectTransform gift = Instantiate(IconTemplate, ScaleContainer).GetComponent(); - gift.localPosition = iconPosition; - gift.sizeDelta = Vector2.one * IconSize * giftImageSizeMultiplier; - - gift.GetComponent().sprite = SpriteByType(prize.PrizeType); - - generatedObjects.Add(gift.gameObject); - - // 2. ТЕПЕРЬ ГЕНЕРИРУЕМ ТЕКСТ (СПРАВА ОТ ИКОНКИ) - TextMeshProUGUI label = Instantiate(PointNumberTemplate, ScaleContainer).GetComponent(); - label.fontSize = prizetextFontsize; - label.alignment = TextAlignmentOptions.MidlineLeft; // Оставляем выравнивание влево - - string prizeText = GetPrizeText(prize); - label.text = prizeText; - - // Получаем ширину текста - float prizetextWidth = label.GetPreferredValues(prizeText).x; - - // Рассчитываем позицию текста СПРАВА от иконки - // Текст начинается сразу после иконки + отступ - float labelX = iconPosition.x + IconSize / 2 + StrokeGap + prizetextWidth / 2; - Vector2 labelPosition = new Vector2(labelX, lastStrokePosition.y); - - RectTransform rect = label.GetComponent(); - rect.localPosition = labelPosition; - rect.sizeDelta = new Vector2(prizetextWidth, IconSize); - - generatedObjects.Add(label.gameObject); - } - - - - - private void GenerateInstructions() - { - //заполняем призы которые надо проинструктировать - HashSet countableTypes = new(); - bool hasQr = false; - bool hasVitrina = false; - - foreach (var prize in prizes) - { - if (prize is CountablePrize cp) countableTypes.Add(cp.Type); - if (prize is QrPrize) hasQr = true; - if (prize is VitrinaPrize) hasVitrina = true; - } - - - - if (countableTypes.Count > 0) - { - string prefix = string.Join(", ", countableToString(countableTypes)); - InsertBlock($"{prefix}
Забирать в окне выдачи"); - } - if (hasQr) - { - InsertBlock($"Qr-приз" + - "
1. После победы откроется окно с Qr-кодом" + - "
2. Сфотографировать окно" + - "
3. Сканировать Qr-код" + - "
4. Отправить сгенерированное сообщение администратору в мессенджере"); - } - if (hasVitrina) - { - InsertBlock($"Витрина" + - "
1. После победы откроется окно выбором ячейки" + - "
2. Выбрать ячейку и ожидать выдачу"); - } - - void InsertBlock(string text) - { - RectTransform block = Instantiate(PointNumberTemplate, InstructionContainer).GetComponent(); - TextMeshProUGUI label = block.GetComponent(); - - label.text = text; - label.alignment = TextAlignmentOptions.TopLeft; - label.fontSize = instructionFontsize; - - generatedObjects.Add(block.gameObject); - } - - } - - string[] countableToString(IEnumerable values) - { - List result = new List(); - foreach (CountablePrizeType type in values) - { - if (type == CountablePrizeType.Hopper || type == CountablePrizeType.Hopper2) - { - result.Add("Маленький приз"); - } - else if (type == CountablePrizeType.Marbles) - { - result.Add("Марблс"); - } - else if (type == CountablePrizeType.Ticket) - { - result.Add("Билет"); - } - } - - return result.ToArray(); - } - - - - - - public static string GetPrizeText(Prize prize) - { - if (prize == null || prize is EmptyPrize) - { - return ""; - } - else if (prize is CountablePrize cp) - { - return prize.PrizeType switch - { - PrizeType.Hopper => $"{cp.Amount} {Pluralize(cp.Amount, "маленький приз", "маленьких приза", "маленьких призов")}", - PrizeType.Hopper2 => $"{cp.Amount} {Pluralize(cp.Amount, "маленький приз", "маленьких приза", "маленьких призов")}", - PrizeType.Ticket => $"{cp.Amount} {Pluralize(cp.Amount, "билет", "билета", "билетов")}", - PrizeType.Marbles => $"{cp.Amount} марблс", - _ => "Приз" - }; - } - else if (prize is VitrinaPrize vp) - { - return $"Витрина ячейки: {string.Join(" | ", vp.Boxes)}"; - } - else if (prize is QrPrize qp) - { - return $"Qr: {qp.PrizeText}"; - } - return ""; - } - - - /// - /// Возвращает правильную форму существительного для русского языка в зависимости от числа - /// - /// Количество предметов - /// Форма для 1 (именительный падеж, ед.ч.): "яблоко" - /// Форма для 2-4 (родительный падеж, ед.ч.): "яблока" - /// Форма для 5+ (родительный падеж, мн.ч.): "яблок" - /// Правильная форма существительного - public static string Pluralize(int count, string form1, string form2, string form3) - { - // Приводим число к положительному виду для корректной работы с остатками - int absCount = Mathf.Abs(count); - - // Определяем остатки для проверки правил - long lastTwoDigits = absCount % 100; - long lastDigit = absCount % 10; - - // Особый случай: числа от 11 до 19 всегда используют форму 3 - if (lastTwoDigits >= 11 && lastTwoDigits <= 19) - { - return form3; - } - - // Обычные правила склонения - switch (lastDigit) - { - case 1: - return form1; - case 2: - case 3: - case 4: - return form2; - default: - return form3; - } - } -} diff --git a/Assets/Scripts/Menu/Rules/RulesPrizePanel.cs.meta b/Assets/Scripts/Menu/Rules/RulesPrizePanel.cs.meta deleted file mode 100644 index acb2d74..0000000 --- a/Assets/Scripts/Menu/Rules/RulesPrizePanel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7a3ac774b14567c4dbd3ae7d922e72df -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Coin animation.png b/Assets/Sprites/Coin animation.png similarity index 100% rename from Assets/Coin animation.png rename to Assets/Sprites/Coin animation.png diff --git a/Assets/Coin animation.png.meta b/Assets/Sprites/Coin animation.png.meta similarity index 100% rename from Assets/Coin animation.png.meta rename to Assets/Sprites/Coin animation.png.meta diff --git a/Assets/TestDifficultyModule.asset b/Assets/TestDifficultyModule.asset new file mode 100644 index 0000000..d55fae3 --- /dev/null +++ b/Assets/TestDifficultyModule.asset @@ -0,0 +1,22 @@ +%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: 11500000, guid: 898b71a5310242f4bbeb0c53205d7980, type: 3} + m_Name: TestDifficultyModule + m_EditorClassIdentifier: Assembly-CSharp::CharacterSystem.DifficultyModule + difficultyPresetsEasy: + - {fileID: 11400000, guid: 8d5c88f53a89ee54ea33ca9d27a8ca31, type: 2} + difficultyPresetsMedium: + - {fileID: 11400000, guid: 743597f3d0d742243a255bd94d7402bb, type: 2} + difficultyPresetsHard: + - {fileID: 11400000, guid: b9d60fd2ab87dcf4eb2f97fd5952708b, type: 2} + minThinkTime: 0 + maxThinkTime: 2 diff --git a/Assets/TestDifficultyModule.asset.meta b/Assets/TestDifficultyModule.asset.meta new file mode 100644 index 0000000..4629644 --- /dev/null +++ b/Assets/TestDifficultyModule.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3e2c9fd2fee87943af2947d5eb72597 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset index 72e13b6..0085b42 100644 --- a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset @@ -215,8 +215,179 @@ MonoBehaviour: m_SourceFontFilePath: m_AtlasPopulationMode: 1 InternalDynamicOS: 0 - m_GlyphTable: [] - m_CharacterTable: [] + m_GlyphTable: + - m_Index: 3 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 24 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 49 + m_Metrics: + m_Width: 49 + m_Height: 59 + m_HorizontalBearingX: 7 + m_HorizontalBearingY: 59 + m_HorizontalAdvance: 62 + m_GlyphRect: + m_X: 163 + m_Y: 10 + m_Width: 49 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 55 + m_Metrics: + m_Width: 50 + m_Height: 59 + m_HorizontalBearingX: 1 + m_HorizontalBearingY: 59 + m_HorizontalAdvance: 53 + m_GlyphRect: + m_X: 231 + m_Y: 10 + m_Width: 50 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 66 + m_Metrics: + m_Width: 51 + m_Height: 6 + m_HorizontalBearingX: -2 + m_HorizontalBearingY: -12 + m_HorizontalAdvance: 48 + m_GlyphRect: + m_X: 93 + m_Y: 10 + m_Width: 51 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 72 + m_Metrics: + m_Width: 42 + m_Height: 47 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 46 + m_HorizontalAdvance: 48 + m_GlyphRect: + m_X: 93 + m_Y: 35 + m_Width: 42 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 87 + m_Metrics: + m_Width: 23 + m_Height: 56 + m_HorizontalBearingX: 1 + m_HorizontalBearingY: 55 + m_HorizontalAdvance: 24 + m_GlyphRect: + m_X: 362 + m_Y: 10 + m_Width: 23 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 90 + m_Metrics: + m_Width: 64 + m_Height: 45 + m_HorizontalBearingX: -1 + m_HorizontalBearingY: 45 + m_HorizontalAdvance: 62 + m_GlyphRect: + m_X: 10 + m_Y: 38 + m_Width: 64 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 91 + m_Metrics: + m_Width: 43 + m_Height: 45 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 45 + m_HorizontalAdvance: 43 + m_GlyphRect: + m_X: 300 + m_Y: 10 + m_Width: 43 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 2030 + m_Metrics: + m_Width: 64 + m_Height: 9 + m_HorizontalBearingX: 11 + m_HorizontalBearingY: 9 + m_HorizontalAdvance: 86 + m_GlyphRect: + m_X: 10 + m_Y: 10 + m_Width: 64 + m_Height: 9 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 66 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 72 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 87 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 90 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 91 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 2030 + m_Scale: 1 m_AtlasTextures: - {fileID: 28268798066460806} m_AtlasTextureIndex: 0 @@ -227,11 +398,67 @@ MonoBehaviour: m_AtlasHeight: 512 m_AtlasPadding: 9 m_AtlasRenderMode: 4169 - m_UsedGlyphRects: [] - m_FreeGlyphRects: + m_UsedGlyphRects: - m_X: 0 m_Y: 0 + m_Width: 83 + m_Height: 28 + - m_X: 83 + m_Y: 0 + m_Width: 70 + m_Height: 25 + - m_X: 153 + m_Y: 0 + m_Width: 68 + m_Height: 78 + - m_X: 83 + m_Y: 25 + m_Width: 61 + m_Height: 66 + - m_X: 0 + m_Y: 28 + m_Width: 83 + m_Height: 64 + - m_X: 221 + m_Y: 0 + m_Width: 69 + m_Height: 78 + - m_X: 290 + m_Y: 0 + m_Width: 62 + m_Height: 64 + - m_X: 352 + m_Y: 0 + m_Width: 42 + m_Height: 75 + m_FreeGlyphRects: + - m_X: 144 + m_Y: 78 + m_Width: 367 + m_Height: 433 + - m_X: 144 + m_Y: 25 + m_Width: 9 + m_Height: 486 + - m_X: 0 + m_Y: 92 m_Width: 511 + m_Height: 419 + - m_X: 83 + m_Y: 91 + m_Width: 428 + m_Height: 420 + - m_X: 290 + m_Y: 75 + m_Width: 221 + m_Height: 436 + - m_X: 290 + m_Y: 64 + m_Width: 62 + m_Height: 447 + - m_X: 394 + m_Y: 0 + m_Width: 117 m_Height: 511 m_FontFeatureTable: m_MultipleSubstitutionRecords: [] @@ -2038,9 +2265,9 @@ Texture2D: Hash: 00000000000000000000000000000000 m_IsAlphaChannelOptional: 0 serializedVersion: 4 - m_Width: 1 - m_Height: 1 - m_CompleteImageSize: 1 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 m_MipsStripped: 0 m_TextureFormat: 1 m_MipCount: 1 @@ -2065,8 +2292,8 @@ Texture2D: m_LightmapFormat: 0 m_ColorSpace: 0 m_PlatformBlob: - image data: 1 - _typelessdata: 00 + image data: 262144 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0b1313131313131311110e0b060100000000000000000004090e11121313131313131313070705010000000000000000000000060a0e1011131313131313130b0a080400000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a0805000000000000000000000002080c101212131313131313090806030000000000000000000000000000000000000000000000000406071113131313131313131308070502000000000000000000000000000000000000000000000000000000000000000000050a0d0f10131313131313130909070300000000000000000000000000000000000000000000000000000000000000000004090c0e0f131313131313130c0b09060100000000000000000000000000000004090c0e0f13131313131313100605030000000000000000000000000000000000000000000000000407090a0e111213121211100d0b0806050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11141717202020202020201e1d1b17120c0400000000000000080f151a1d1f20202020202020201413110d080200000000000000040b11161a1d1e20202020202020171714110c0500000000000000000003090e12141519191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919181715110c060000000000000000060d13181c1e1f2020202020201615130f0a040000000000000000000000000000000000000000070c1013131e2020202020202020201414110e08020000000000000000000000000000000000000000000000000000000000030a1016191c1d202020202020201615130f0a04000000000000000000000000000000000000000000000000000000000002091015191b1c20202020202020191816120d0700000000000000000000000002091015191b1c202020202020201c13120f0b060000000000000000000000000000000000000000050b101316171b1e1f201f1e1e1c1a181513120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2b2a27231d160e06000000000009121920262a2c2c2d2d2d2d2d2d2d21201d19130c050000000000050d151c2227292a2d2d2d2d2d2d2d2423211c17100800000000000000060d141a1e2122262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262424211d1710090000000000000710181f24282b2c2d2d2d2d2d2d22211f1b150e060000000000000000000000000000000000030b12181c1f202b2d2d2d2d2d2d2d2d2d21201e19140d05000000000000000000000000000000000000000000000000000000040d151c212629292d2d2d2d2d2d2d23221f1b160f07000000000000000000000000000000000000000000000000000000030c141b212528292d2d2d2d2d2d2d2625221e18110901000000000000000000030c141b212528292d2d2d2d2d2d2d29201f1b17110a020000000000000000000000000000000003090e161c202223272a2c2c2c2b2a29272422201f1b17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d3031393939393939393837332e2820180e0400000008121b242b31363839393939393939392e2d2a251e160e05000000040d171f272e3336373939393939393931302d28221a12080000000000060f181f262a2d2e3232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323231302d28221b1209000000000610192229303538393939393939392f2e2b2620181006000000000000000000000000000000030c151d23282c2d373939393939393939392e2d2a251e170e0500000000000000000000000000000000000000000000000000030d161f262d32353639393939393939302f2c272119100700000000000000000000000000000000000000000000000000020c151e252c3134353939393939393932312e29231b13090000000000000000000c151e262c31343539393939393939362d2b27221b140b020000000000000000000000000000060d141a21272c2f30343738393938373634312f2d2b27221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3e4646464646464644433f39322a20160c0100040f19242d353d42454646464646464646463936302820160c0200000b151f2931393f4244464646464646463e3c39332c241a1005000000030d18212931363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342c241b10060000020d18222b343b4144454646464646463c3b37322a22180e0400000000000000000000000000000b151e272e34383a444646464646464646463b3936302920170d020000000000000000000000000000000000000000000000000a151f2831383e4243464646464646463c3b38322b23190f0400000000000000000000000000000000000000000000000009141e2730373d4142464646464646463f3e3a352d251b0f060000000000000008121e2730373d414246464646464646433937332d261d140a00000000000000000000000000060f171f262a33383c3d4144454645454443403e3b3937332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494a53535353535353514f4b443c32281d1206000915202b353f474e5253535353535353535346413a32281e13080006111c27313b434a4f51535353535353534a49453e362c22170c00000009141f29333b4246484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49453e362c22170c000008131f29343d464c51525353535353534947433c342a20150a0000000000000000000000000007121d273039404546515353535353535353535346413b32291e1408000000000000000000000000000000000000000000000005101c26313a42494e50535353535353534948433d352b21160a000000000000000000000000000000000000000000000004101b25303942494d4f535353535353534c4a463f372d21180b020000000000050e1a24303942494d4f535353535353534f46443f382f261b11060000000000000000000000060f18212931363d44484a4e5152535251514f4d4b4846443f382f261b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c28333e48505557606060606060605e5c564e44392e23170b010e1a26313d4751595e5f606060606060605f524c443a3025190d010a16222e39434d555b5d60606060606060575550483e33281c110400020e1a26313b454d535559595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959575550483e34281d1105000c1824303b464f575d5f60606060606055534e463c32261b0f030000000000000000000000020b18232e39434b51535e6060606060606060605f524c443b3025190e02000000000000000000000000000000000000000000000a16212d38424c545a5c6060606060606056544f473d32271b0f03000000000000000000000000000000000000000000000915212c37424b53595c60606060606060595651493f332a1d140a00000000020d17202c36424b54595c606060606060605c53504941382d22170b00000000000000000000030c18212a333b42464f54565a5d5f5f5f5e5d5c5a575553504941382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6b6760564b3f33271b0e04111d2a36424e59636a6c6c6c6c6c6c6c6c6c5e564c41362a1d11050e1a27333f4a555f676a6c6c6c6c6c6c6c64615a5045392d2114080005121e2a36424d575f616565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656564615a5045392d21150800101c2835414c5761696c6c6c6c6c6c6c625f584e43372b1f130600000000000000000000000a141d2834404b555c606a6c6c6c6c6c6c6c6c6c6c5e564c41362a1e1105000000000000000000000000000000000000000000010d1926323e49545e66696c6c6c6c6c6c6c6360594f43382c1f1307000000000000000000000000000000000000000000000c1925313d49535d65686c6c6c6c6c6c6c65625b51453c2f261c110600000008141e29323e48545d65686c6c6c6c6c6c6c69605b53493f33271b0f030000000000000000000b151e2a333c454d53596063676a6b6c6c6b6a69676462605b53493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c71797979797979797772675c4f43372a1d1106121f2c3845525e6a75797979797979797976685e5246392d201307101d2936424f5b67717779797979797979716c6155493c3023170a000714212d3a46535f696e72727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272716c6155493d3024170a00121e2b3844515d697378797979797979766a5f53473b2e2115080000000000000000000006111b262f3845515c676d7779797979797979797976685e5246392d201407000000000000000000000000000000000000000000030f1c2935424e5a667076797979797979796f6b6054483b2f221509000000000000000000000000000000000000000000020e1b2834414d59656f7579797979797979726d62574d42382d22170b0200050e1925303b44505a656f7579797979797979766c655b5044372b1f1205000000000000000007121c27303c454e575f616b70747778797878777673716e6c655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868684776b5e5144382b1e110613202c3946535f6c7987868686868686867a6d6154473a2e211407111e2a3744515d6a7783868686868686867e7164574a3e3124170b000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574b3e3124180b00121f2c3945525f6c78858686868686867c6f6255493c2f221609000000000000000000000b17222d38414e58606d79848686868686868686867a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c697682868686868686867d6f6356493c30231609000000000000000000000000000000000000000000020f1c2935424f5c687582868686868686867f72695f544a3f33281d140a020c17202a36414c56616c75818686868686868682796c605346392d20130600000000000000000c18232e39424e575f696e767d8184858685848482807e7b776c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393939184776b5e5144382b1e110613202c3946535f6c7986929393939393877a6d6154473a2e211407111e2a3744515d6a77849093939393938a7d7164574a3e3124170b000a1724303d4a5763707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c83776a5d5044372a1d1100121f2c3945525f6c78859293939393887c6f6255493c2f221609000000000000000000040f1b27333f49535f6a73808c9693939393939393877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9393939393897c6f6356493c30231609000000000000000000000000000000000000000000000714212e3a4754616d7a85919393939392867b6e665b50443c2f261c1108131e29323a46525e68717e8a939393939392857a6e655b5044372b1f12050000000000000004101c2834404a545f6a6e7b83898d9092929291908f8d8a887d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9e9184776b5e5144382b1e110613202c3946535f6c7986929f9f9f9f94877a6d6154473a2e211407111e2a3744515d6a7784909d9f9f9f978a7d7164574a3e3124170b000a1724303d4a5763707d8a96989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989083776a5d5044372a1d1100121f2c3945525f6c7885929f9f9f95887c6f6255493c2f2216090000000000000000040d1a232b3744505b656e7c86929fa89f9f9f9f9f94877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9c9f9f9f96897c6f6356493c30231609000000000000000000000000000000000000000000000713202d3946525e68707d8a929da8a2989083786c60574d42382d22170e1925303a44505a616e7a85929ea5a89d938a7d70685e53493f33271b0f030000000000000006121f2c3844515c666e7c8590949a9d9e9f9f9e9d9c9a96897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4acaa9e9184776b5e5144382b1e110613202c3946535f6c7986929facaca094877a6d6154473a2e211407111e2a3744515d6a7784909daaaca4978a7d7164574a3e3124170b000a1724303d4a5763707d8a969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d9083776a5d5044372a1d1100121f2c3945525f6c7885929faba295887c6f6255493c2f22160900000000000000010c161f2a36414c56606c77839099a3aeacacacaca194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9aca296897c6f6356493c302316090000000000000000000000000000000000000000000005111d2a36414c56616b74808d96a0aa9f948b7f72695f544a3f33281d16202a36414c56616c75818f97a1aba0968e81746c61564d41382d22170b00000000000000000713202d3a4653606d788390979fa6aaababa5a1a0a0a196897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9e9184776b5e5144382b1e110613202c3946535f6c7986929facada094877a6d6154473a2e211407111e2a3744515d6a7784909daab0a4978a7d7164574a3e3124170b000a1724303d4a5763707d8a93939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939083776a5d5044372a1d1100121f2c3945525f6c7885929faba295887c6f6255493c2f2216090000000000000007121d28313946525e68717e8b949fabb4b8b9beada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000010d1925303a444f59606d79849199a3a69f92867b6e665b50443c2f261e28323a46525e68717e8a939ea9a3999184796d605a50443b2f261b11060000000000000004111d2935404b5564717e8b95a0a9b0a9a19e989493939496897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4acaa9e9184776b5e5144382b1e110613202c3946535f6c7986929facaca094877a6d6154473a2e211407111e2a3744515d6a7784909daaaca4978a7d7164574a3e3124170b000a1724303d4a5763707d8686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868683776a5d5044372a1d1100121f2c3945525f6c7885929faba295887c6f6255493c2f221609000000000000020c18242f39434f59616e7a85929fa6b0adabadb3ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000008131e28323e45515d676f7c87929fa6a2989083786c60574d42382d25303a44505a616d7a85929ea5a69f92877c6f675d51483e32291d140a00000000000000000613202c3945515d677683909ca7b1aaa197918b8886868789897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9e9184776b5e5144382b1e110613202c3946535f6c7986929f9f9f9f94877a6d6154473a2e211407111e2a3744515d6a7784909d9f9f9f978a7d7164574a3e3124170b000916232f3c4855616b70797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797771665b4f4236291d1000121f2c3945525f6c7885929faba295887c6f6255493c2f2216090000000000000a141e2935404b55616b75818e97a2ada9a19ea1a9b3a194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000020c16202935404b55606a737f8c949faa9f948b7f72695f544a3f332935414c56616c75818e97a1aa9f948c7f736a60554b40362c20170b0200000000000000000714202d3a4753606d7a86939facaea29891857e7b79797b7d7f7b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393939184776b5e5144382b1e110613202c3946535f6c7986929393939393877a6d6154473a2e211407111e2a3744515d6a77849093939393938a7d7164574a3e3124170b000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f554a3e32261a0e00121f2c3945525f6c7885929faba295887c6f6255493c2f221609000000000006111c26303845515d67707d8a939ea9a69e979197a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000050e18242f39434e58606d78839098a2a69f92867b6e665b50443c323a46525e68707e8a939ea9a2989083786d60584e43392f231a0e05000000000000000000091623303c4956636f7c8999a4afac9f92867b726e6d6d6e70726e695f53473a2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868684776b5e5144382b1e110613202c3946535f6c7987868686868686867a6d6154473a2e211407111e2a3744515d6a7783868686868686867e7164574a3e3124170b0004101c28333e474f5557606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605d5b554d43392d22160a00121f2c3945525f6c7885929faba295887c6f6255493c2f22160900000000000b17232e38424e58606d7984919ea5aa9e948f85919eaba194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000007121d27313c44505c666e7b86929fa5a2989083786c60574d423a44505a616d7a85919ea5a59f92867b6e665c50463d31281d1108000000000000000000000b1824313e4b5764717e8a97abb5a79a8d807469616060616365625f574d42372b1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c71797979797979797772675c4f43372a1d1106121f2c3845525e6a75797979797979797976685e5246392d201307101d2936424f5b67717779797979797979716c6155493c3023170a00000b16212c353e44484a53535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353504f4a433b31271c110500121f2c3945525f6c7885929faba295887c6f6255493c2f2216090000000004101c28343f4a545f6a73808d96a1aca2988f82818f9ba8a194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000010b151f28343f4a545f69717e8b939ea99f948b7f72695f544a414c56616c75818e97a1a89e938b7e71695f544a3f342b1f160c00000000000000000000000c1825323f4b5865727e8b98a5b0a3978a7d706457535354565955534d453c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6b6760564b3f33271b0e04111d2a36424e59636a6c6c6c6c6c6c6c6c6c5e564c41362a1d11050e1a27333f4a555f676a6c6c6c6c6c6c6c64615a5045392d211408000005101a232c33383c3d4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644423e3931291f150b0000121f2c3945525f6c7885929faba295887c6f6255493c2f221609000000040d1a242b3844505c666f7c87929fa8a79f92867b838f9ca9a194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000030d17232e38424d57626c75828f97a1a69f92867b6e665b5045525d68707d8a939ea9a1968e81756c62574d42382e22190d0400000000000000000000000c1926323f4c5965727f8c98a5aea295887b6f62554846484a4c4847423c332a1f150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c28333e48505557606060606060605e5c564e44392e23170b010e1a26313d4751595e5f606060606060605f524c443a3025190d010a16222e39434d555b5d60606060606060575550483e33281c110400000008111a21282c2f30393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393736322d271f170d030000121f2c3945525f6c7885929faba295887c6f6255493c2f2216090000010c16202a36424d57606d78839099a3ab9f958b7f7783909daaa194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000006111c26303b45505a616d7a85919ea4a2989083786c60574f59606d7a84919ea5a49a91847a6d615a50453b30261c10070000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b3b3d3f3b3a37312a21180e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494a53535353535353514f4b443c32281d1206000915202b353f474e5253535353535353535346413a32281e13080006111c27313b434a4f51535353535353534a49453e362c22170c00000000000810161c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2926221c150d05000000121f2c3945525f6c7885929faba295887c6f6255493c2f221609000008131e28323a46535e69727f8c95a0aba3999083787784919eaaa194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000a141e29333f46525e68707d8a929da89f948b7f72695f56616b74818e97a1a79f93887d70685d52483e33291e140a000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e30322f2e2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3e4646464646464644433f39322a20160c0100040f19242d353d42454646464646464646463936302820160c0200000b151f2931393f4244464646464646463e3c39332c241a1005000000000000050b10141617202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201d1d1a16110b0300000000121f2c3945525f6c7885929faba295887c6f6255493c2f22160900030c19242f3a44505a616e7b86929fa7a89f92877c6f7885919eaba194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000020c18212a36414c56616b74818d96a0a69f92867b6e665d68707d8a939ea9a0958d80736b60564c41362d21180c02000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e232622211e1a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d3031393939393939393837332e2820180e0400000008121b242b31363839393939393939392e2d2a251e160e05000000040d171f272e3336373939393939393931302d28221a12080000000000000000000407090a1313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131311100e0a05000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f221609000b151e2935414c56616c75828f98a2aca0968d80736a7985929faca194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000060f1925303a444f59606d79849199a3a2989083786c606d7a84919ea5a3989083796d60594f443a30241b0f0600000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21191514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2b2a27231d160e06000000000009121920262a2c2c2d2d2d2d2d2d2d21201d19130c050000000000050d151c2227292a2d2d2d2d2d2d2d2423211c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f22160907121c27303945525d68717e8a949eaaa59e9184796d6c7986939faca194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000008131e28323e45515d676f7c87929fa79f948b7f726b74818e96a1a69f92867c6f675c51473d32281e12090000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e211508080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11141717202020202020201e1d1b17120c0400000000000000080f151a1d1f20202020202020201413110d080200000000000000040b11161a1d1e20202020202020171714110c0500000000000000000000000000000000000000000000000000030608090c0e10111213131212110f0d0b080705020000000000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f2216090c18232e39424f59606d7a85919ea6a99e93897d70676d7a869aa4afa194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000020c16202935404b55606a737f8c959fa69f92867b707d89939da89f948b7f726a5f554b40352b20160c000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0b1313131313131311110e0b060100000000000000000004090e11121313131313131313070705010000000000000000000000060a0e1011131313131313130b0a080400000000000000000000000000000000000000000000000002050a0f121515181b1d1e1f20201f1f1e1c1a181514120e0905010000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f221609101c2834404a54606b74818d97a1ada1978e81756b616d7a8794a0b6a194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000050e18242f39434e58606d78839098a2a29890827a84919ea5a2978f82776c60584e43392e23190e04000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12151b1f21222528292b2c2c2c2c2b2b29272521201e1a14110d0802000000000000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f22160e1b242c3844515c666f7c88939fa9a69e92857a6d61616e7a8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000007121d27313d44505c666e7b86929fa69f9490849196a1a59e92857b6e655b50463c30271d110800000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0d0d13131313131313130c0c0906010000000000000000000003080b0d0e13131313131313130c0b090601000000000000000000000000000000000000000000000000000000000000000002080d141a1e20262b2e2f323436383939393938373633312e2d2a25201d19130d080200000000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f221617202b37424d57606d7883919aa4aa9f948b7e71685e616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000010b151f28343f4a545f69717e8b939ea69f969196a0a89d938a7e71695e53493f342a1e150b0000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080e1317191a2020202020202020191816120d070000000000000001080f14181a1b2020202020202020191816120d07000000000000000000000000000000000000000000000000000000000000050d13191f252a2d31373a3c3f41434445464645454442403e3b3a36302d29251e19130c04000000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f22161e29323a47535f69737f8c95a0aca3988f82766c6256616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000030d17232e38424d57626c75828f97a1a8a09ea0a8a0968e81746c61564d41382d22180c030000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2d2625221e18110a0100000000020b131a202427282d2d2d2d2d2d2d2d2625221e18110901000000000000000000000000000000000000000000000000000000060e171e252a30363a3c4347484b4e50515253535252514f4d4b4846423b39353029241e160e070000000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f221925303a44505a616e7b86929fa7a79f92867b6e615a54616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000006111c26303c45505a616d7a85929eabacaaaca3999184796d605a50443b2f261b1006000000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a141c242b2f3334393939393939393932312e2a231c130a000000010b141d252b303334393939393939393932312e29231b130900000000000000000000000000000000000000000000000000020a1117202930363b4246484e5355585b5c5e5f5f5f5f5e5e5c5a5854524d4746413a3530282019110901000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f221f2a36414c56626c76828f98a3aba0958c7f72695f5354616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000a141e2a333f46525e68707d8a99a3aeb7ac9f92877c6f675d51483e32291d140a00000000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c262e363b3f4046464646464646463f3e3a352d251c1107000008131d262f363c404146464646464646463f3e3a352d251b11070000000000000000000000000000000000000000000000020b141b2227323a41464d5254585f626567696b6c6c6c6c6b6a696664615e5754524c46413a322b231b1309000000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f2227313946525e68717e8b949faaa4999083786d60574d54616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000008131e28323a45515c666e7b86929facb7ab9e91847a6d605a50443b2f261b110600000000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e19242e3840474c4d53535353535353534c4a463f372d23180d01030f1a252f3841484c4e53535353535353534c4a463f372d23180d01000000000000000000000000000000000000000000020b141d262d333e444c52575e61666a6f727476777879797878777573716e6966615e56524c443d352d251b13090000000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f242f39434f59616d7a85929ea6a89f93877c6f665c514854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000050f19242f3a444f59606d79839099a3acaaaca1968e81746c61564d41382d22170c03000000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2b36404a52585a6060606060606060595751493f352a1e12000814202b36414a53595b6060606060606060595651493f35291e12010000000000000000000000000000000000000000000a141d262f383f4450565e61696e73777b7e81838485868685858482807e7b77736d68615d564f473f372d251b110800000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f2935404b55606b75818e97a1ada1968d80746a60544a4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000020b17212935414c56606b73808d95a0a7a09da0a79d938a7e70685e53493f33271e150b000000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232f3b47525c64676c6c6c6c6c6c6c6c65635b51463a2e1c12070b1824303c48535d64676c6c6c6c6c6c6c6c65625b51463a2e1d1207000000000000000000000000000000000000000006111b262f384149505a61686d747b8084888b8e8f919292929291918f8d8b87837f7a736d68605951493f372d231a0e04000000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2f2f3845515d67707d89939ea9a59e9184796d60584e424854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000a141d29333b45525d68707d87939fa69f959095a0a59e92857a6e655b50443c30271d12070000000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1926333f4c58646e737979797979797979726d63574a392e23180c0d1a2733404c59646f747979797979797979726d62564a392f24180d01000000000000000000000000000000000000030c17222d384149535b606c717a81868d9196989a9c9e9f9f9f9f9e9d9c999795908c86807a706b625b51493f352c20160c020000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c2d38424e58606d7984919ea5a99e938a7d70675d51463d4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000006111c262f3b45505a606d7a849199a49f9490849096a1a1978f82776c60584e43392e23180e0400000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5767738086868686868686867f7265544a4034281c10121e2a36424d5767748186868686868686867f7265554b4035291d10040000000000000000000000000000000000000b151e27333f49535b656c737e858e92999ea0a8a9a19e9d9c9b9c9d9fa2aaa7a09d98928d847d726d625b51473e32281e13080000000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c333f4a545f6a73808d96a0aca2978f82756c61554b413b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000030d17222d38424d57616c75818e96a1a39890827a84919ea59f948b7f726a5f554b40342820160c02000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697784919393939393938f8276665c5144382c1f1214202d3a46525e697784919393939393938f8276675d5145392c201306000000000000000000000000000000000007121d27303944505b656c77808a92979fa3a8a19e999792908f8f8f909298999da0a7a29f9691877f726d62594f443a3024190d0200000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c3844505b666f7c87929fa8a69f92857b6e615a50433a3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000010b151f28333f4a545e69717e8a939ea79f92867b707d89939ea69f92867c6f675c51453d32281e1308000000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8795a09f9f9f9f9f9285796d6053463a2d201315212e3b4854616e7b8796a09f9f9f9f9f92867a6d6053473a2d20140a00000000000000000000000000000000000c18232e39424f59606c77808d929fa2a9a39f96918c8885838282838385888c91959ea1a8a199938b7f726b61564c4135291f140900000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c424d57606c78839099a3ab9f948b7f72695e52473e313b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000007121d27313944505b666e7b85929fa5a0958c7f726b75818e97a1a3989083796d60594f443a3025190f060000000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5465717e8b98a7acabacaea298897c6f6356493c2f24181824313e4b5764717e8a97a8adababada3998a7d7064574a3d31261b0f0300000000000000000000000000000004101c2834404b54606b737f8c929da4a9a299928c847f7b787675757677797b7f848b9297a0a7a49f93887d70685d52453b30251a0e02000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255493c46525e69727f8b959faba3999083776c60564d42352e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000050e18242f39434e58606c78829097a2a3999083786d616d7a85929ea6a0958d80746b60564c41352921180c0300000000000000000000000000000c1926323f4c5965727f8c98a5aea194877b6e6154483b2e2115080704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6675828f9ba8a19ea1a8aa998c7f7366554b4035291d1e2a36424d576774818e9aa9a29f9ea2a99a8e817467584e43372b1f120600000000000000000000000000000006131f2c3845515c66707d87939fa4aba29792877f79726e696a696869666c6e72787e859095a0a8a49a91847a6d60574d42362a1e1105000000000000000000000000121f2c3945525f6c7885929faba295887c6f62554943505a616e7b85929fa7a89f92877c6f655b50443b302e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000020c17202935404b555f6a727f8c949fa89f92877c6f665e68717e8a949ea79f93887d70685e52463f332a1e150a00000000000000000000000000060c1926323f4c5965727f8c98a5aea194877b6e6154483b2e21161613100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929fa1969196a0a89c908376675d5145392c1f202d3a46525e697784919ea297929297a29e9184786a5f53473a2e211508000000000000000000000000000004101c2834404b54606d79849199a4aea39992857d726d67625f575c5c545b6062666c717b839095a0aaa1968e8174695e52463a2d201407000000000000000000000000121f2c3945525f6c7885929faba295887c6f6255494b55616c75828f98a2aca0968c80736a5f53493f32292e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000008131e29323a45515d676f7c87929fa6a0968d80736a5f56616c75828f98a2a49a91857a6d615a50453c30261c110600000000000000000000000810171d26323f4c5965727f8c98a5aea194877b6e6154483b2e262322201c160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8998a29e91849196a09f92867a6d6053473a2d20212e3b4754616e7b8796a09f928585929ea196887b6f6255483c2f24190d010000000000000000000000000006131f2c3845515c66727f8c96a0aba89f92877d6f6b605c55534d4f4f4a5053545b60696e7a839198a3a39f92867b6e6154473b2e211408000000000000000000000000121f2c3945525f6c7885929faba295887c6f625549515d67707d8a939eaaa59d9184796d60584e41382d212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000060f1925303a444f59606d79839199a3a49a9184796d6058505a616e7b86929fa7a1978f81756c62574d42382e23170d0400000000000000000008121a22282d323f4c5965727f8c98a5aea194877b6e6154483b3333302f2c272119110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c566673808d99aa9a8d8084919ea399897d7063564a3d2f2424313e4b5764717e8a97a89c8f82828f9ca8998c7f7266564c4135291d1104000000000000000000000000000713202d3a4653606d7984919ea8aca1968c80736b6059514b474242423f44464a50575e686e7b86929a99928f8b8073665a4d4033271a0d000000000000000000000000121f2c3945525f6c7885929faba295887c6f62554e58606d7984919ea5a99d93897d70675c51463c2f26212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000030c18212a36414c56616b74808d95a0a89f93887d6f675c5146535e69727f8b959fa99e938b7e71695f544a3f34281f160c010000000000000006101a242c34393d3f4c5965727f8c98a5aea194877b6e6154484040403d3b38332b23190f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687783909da9978b7e818e9bab998d807366564c4135292a36424d566774818e9aaa998c7f7f8c99ab9c908376685d5245392c20130600000000000000000000000004111d2935414c5564717e8a96a1adaa9e9184796d60594f45403937312d3338393f444d565f6973808c8e8a86827f7b6e6155483b2e221508000000000000000000000000121f2c3945525f6c7885929faba295887c6f625554606a74808d96a1ada1978e81746b60554b40342a1d212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000b151e2a333c46525e68707d8a929da8a1968d80746b60554b424d57606c78839099a3a59f92867b6e665c50443d31281e1308000000000000000c17222c363e45494b4d5965727f8c98a5aea194877b6e61544d4d4d4d4948443d352b21160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87939fa297887b7e8b98a89d908377685d5245392c2d3a46525e697784919ea298897c7d8999a39f92867a6d6054473a2d22170b0000000000000000000000000613202c3945515d6775828f9ca8aea2988b7e71675d51473d342e2b2622282b2d333b444d57616d7a84817d7a76726e695f53463a2d211407000000000000000000000000121f2c3945525f6c7885929faba295887c6f62555c666f7c87939fa8a69e92857a6d60594f43392e2218212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000000007121c27303c45515b616d7a85919ea4a59e9184796d60594f433b44505b666f7c86929fa7a2989083786d60594f433a2f24190f05000000000005111d28343e48505557595965727f8c98a5aea194877b6e61595959595956544f473d33271c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5464717e8b9aa49f9285787b8796a09f93867a6d6054473a2d2e3b4754616e7b8796a09f9285797a86929fa3998a7d716453493f33271b0f0300000000000000000000000714212d3a4754606d7a86929facac9f92857a6d60554b403528231d1a171c1f2228323c46525e686d7774706d6765615f574d42372b1e1205000000000000000000000000121f2c3945525f6c7885929faba295887c6f6257606d78839099a4aa9e948a7e71685d52473d30271d15212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000040d18232e39424d57626d75828f97a1a99e938a7d70675d51473d333f4a545f6a73808c95a0aa9f958c80736b60554c41352921170b02000000000815212d3945505a6164666666727f8c98a5aea194877b6e6666666666666360594f44382c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b6675818e9bac9c8f82767784919ea4998a7d7064574a3d30313e4b5764717e8a97a89c8f82767783909dab9b8e8174655b5044372b1f120500000000000000000000000a1724303d4a5763707d8a99a3aea89b8e8175675d5143392f23181d1d1d1d1d17202a36414c565e616b6764605d5555534d453c31261a0e02000000000000000000000000121f2c3945525f6c7885929faba295887b6f625f69727f8c95a0aba2988f82756c61564c41352b1e1515212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c302316090000000000000000000000000000000000000000000000010c161f2834404a545f69727e8b949ea9a1978e81756b61554b41352d38424e58606d79839199a4a79f92877d6f675d51453e33291d140a000000000a1723303d4955616c71737373737f8c98a5aea194877b73737373737373706b6054483b2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929eab998c807374818e9aab9a8d807467564c413636424d566774818e9aaa998c7f7274808d9aab9e9185786c605346392d20130800000000000000000000010d1a2734404d5a6773808d9aabb4aa978a7e7164554b4031272a2a2a2a2a2a2a2a2a25303a444c52545e5b5753514b4846423c332a1f140900000000000000000000000000121f2c3945525f6c7885929faba194887b6e61616e7b86929fa7a79f92867b6e615a50443a3023190c15212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c30231609000000000000000000000000000000000000000000000008131e28313a44515c666e7b86929fa6a69e92857a6d61594f433a2f262f3c45515c666f7c87939fa8a39991847a6d605a50453b2f261c11060000000b1824313e4b5764717e80808080828f9ca9b3a69a8d80808080808080807d706356493d3023160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8997a2a399897d70717d8a99a49d918477685e5246393a46525e697784919ea298897c6f707d8a99a3a197887c6f6255493c3025190d0100000000000000000004101d2935404b556976828f9ca9aea298887b6e6255483b2f373737373737373737373737323a414647514e4a4745403b3a373128231c140c02000000000000000000000000121f2c3945525f6c7885929faba194877b6e616c76828f98a2aba0958c7f72695e53483e32281e110815212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000000000000000000000003101d293643505c6976838f9ca9afa296897c6f6356493c3023160900000000000000000000000000000000000000000000010d19242f3a434f59606d78839098a2a99e948a7e71685e52473e31281d2834404b54606b74808d96a1aba0968e81746c61574d42382d22170b0000000f1c2936424f5c6975828c8c8c8c8f949fabb5a99d928d8c8c8c8c8c8c8c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c566673808c99a99f92867a6d6d7a86939fa095877a6e6154473b3b4754616e7b8796a09f9285796d6d7a86929fa9998c7f7366564c41362a1d110500000000000000000006131f2c3845515d677885919eabac9f9285796c6053464444444444444444444444444444444444444444444444444444443a38342e261e140a000000000000000000000000121f2c3945525f6c7885929faba094877a6d68717e8a949faaa3999083786d60574d42362c20160c0815212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000000000101010101010101010103101d293643505c6976838f9ca9afa296897c6f6356493c302316090101010101010101010100000000000000000000000004111d2935414c55606b73808d959f9fa2978f82756c61564c41352c1f18232e39424f59606d7984919ea5a89e938a7e71695e544a3f33281c0f0300000f1c2936424f5c6975828f9999999c9fa6b0b9aea49d9a9999999999998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687683909da99c90837667687783909da7978a7e7164574b3e3e4b5764717e8a97a89c8f827666677683909da99d908376685e5246392d2013060000000000000000000714202d3a4753606d7a8696a1adaa9d908377665b505050505050505050505050505050505050505050505050505050505046443f3830261c11060000000000000000000000121f2c3945525f6c7885929faba093877a6d6d7a85929ea6a89f92877c6f665c50453b31241a0e040815212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000000000000406070d0d0d0d0d0d0d0d0d0d0d101d293643505c6976838f9ca9afa296897c6f6356493c3023160d0d0d0d0d0d0d0d0d0d0d0a0a080400000000000000000613202c3945515d676f7d87939393939392857b6e615a50443a30231a121d27303d45515d67707d8a939393939392857b6e665b5044382b1f120600000f1c2936424f5c6975828f9c9f9fa0acafb5bdb1a9a3a19f9f9f9f9f998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939fab998c8073666673808d99aa9a8e817467574d42414d566774818e9aaa998c7f72666673808c99aa9f93867a6d6154473a2d22170b0000000000000000000815222e3b4855616e7b8894a9b2a99c8f837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d53504a42382e23170b0000000000000000000000121f2c3945525f6c7885929fabaa93867a6d74818e97a1aca1968d80736a5f544a3f33291f1208000815212e3b4854616e7b8794a1ada194877a6e6154473b2e211408000000000001070c1013141a1a1a1a1a1a1a1a1a1a1a1a1d293643505c6976838f9ca9afa296897c6f6356493c30231a1a1a1a1a1a1a1a1a1a1a1a171614100b050000000000000714212d3a4754606d7a84868686868686867f71695e52483e32281e110b151e2935414b55616b75818686868686868682796c605346392d20130600000f1c2936424f5c6975828f939393939fa4abb5a99f97949393939393938c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495364717e8a99a4a399897d706363707d8998a39e918477695e534646525e687784919ea298897c6f6263707c8998a3a4998a7e7164544a3f33281c0f0300000000000000000916232f3c4956626f7c8995a2afa89b8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a605c544a3f34281c100300000000000000000000121f2c3945525f6c7885929faba3988679707d89939da9a59e9184796d60584e42382e21170d00000815212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000000030b12181c1f2027272727272727272727272727293643505c6976838f9ca9afa296897c6f6356493c30272727272727272727272727272423201c17100800000000000613202c3945515d676d7879797979797979716d62574d42362c20160c030c18242f3a434f59656f7579797979797979766c665b5044382b1f120600000f1c2936424f5c69758286868686879399a4afa3978d8786868686868686807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6575818e9bab9f92867a6d60606d7986929fa096877b6e6154484754616e7a8796a09f9285796d60606d7986929fab9b8e8175665b5044382b1f120600000000000000000a1723303d4a5663707d8996a3b0a79b8e8177777777777777777777777777777777777777777777777777777777777777776d665c5044382b1f120600000000000000000000121f2c3945525f6c7885929fab9f9285797984919da5a99e938a7d70675d51463c30261c0f0500000815212e3b4854616e7b8794a1ada194877a6e6154473b2e211408000000030d151d23292c2d34343434343434343434343434343643505c6976838f9ca9afa296897c6f6356493c343434343434343434343434343431302d28211a11080000000004111d2935414c555d606b6c6c6c6c6c6c6c65625a50453b30241a0e040007131d28313e47535d65686c6c6c6c6c6c6c69605b544a3f33281c0f0300000f1b2835414d5a657075797979797987939faca194877b79797979797979736e63574b3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7885929ea99c908376675d5c6776828f9ca8988b7e7165584b4b5764717e8a97a89c8f8275665c5c6776828f9ca99e9285796c605346392d20130800000000000000000a1724313d4a5764707d8a97a3b0ab9e92858383838383838383838383838383838383838383838383838383838383838383786d6053463a2d20130700000000000000000000121f2c3945525f6c7885929fab9e928578808c96a0aca2978e81756b61554b40342a1e140a0000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e2114080000010b151f272f34383a40404040404040404040404040404043505c6976838f9ca9afa296897c6f6356494040404040404040404040404040403d3c39332c231a1005000000010d19242f3a434c51545e60606060606060585650483f33291f12080000010c161f2c35414b53595b606060606060605c53504a42382d22170b0000000d1925313d49545e65696c6c6c677784909daaa194877b6e6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8897a1ab998c807366555566727f8c99a99b8e817568574e4d566774818e9aa9988c7f7265545566727f8c99a9a197897c6f6256493c3025190e02000000000000000b1724313e4a5764717d8a97a4b0ada197929090909090909090909090909090909090909090909090909090909090909086796c605346392d20130600000000000000000000121f2c3945525f6c7885929faa9e91847b86929fa8a69f92857a6d61594f43392f22190c020000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e211408000007121d2731394045474d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d505c6976838f9ca9afa296897c6f63564d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49443e352c21170b0000000008131e28313a41454751535353535353534b4a453f362d20170d00000000040d1a232f3941484d4e535353535353535046443f382f261c11060000000915212c37424c545a5c6060556774818e9aa7a194877b6e6160606060605957524a40352a1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5666737f8c99a9a399897c70635655626f7c8897a29e9184786a5f53525e687784919da197887c6f625556626f7c8997a2a9998c807366564d41362a1e1105000000000000000b1724313e4a5764717d8a97a4b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d928679655b5044372b1f120500000000000000000000121f2c3945525f6c7885929faa9d9083839099a3aa9f948b7e71685e52473e31281d1007000000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e21140800000c18232f39434b51535a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5c6976838f9ca9afa296897c6f635a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a57554f473e33281c1004000000010c161f282f35393a45464646464646463e3d3a342d241b0e05000000000008111d272f373d404246464646464646433938332d261d140a0000000004101b26303942494d4f53535864717e8b97a9a194877b6e6154535353534d4b4740382e24190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d687683909ca99f9286796d605353606c7985929ea196887b6e625554616e7a8796a09e9285786c605353606d7985929faa9d908377685e5246392d201407000000000000000a1724303d4a5763707d8a96a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faaaaaaaaaa9f9285786c5f493f33271b0f0300000000000000000000121f2c3945525f6c7885929fab9f928790949faba3988f82766c62564c41352c1f160c00000000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e2114080004101c2934404b555c606767676767676767676767676767676767676976838f9ca9afa296897c6f6767676767676767676767676767676767676461594f44392d20140800000000040d161e24292c2d383939393939393932312e29221b1209000000000000000b151d252c31343539393939393939362d2b28221c140b02000000000009141e2730373d4142464855626e7b8897a1a194877b6e615448464646403f3b352e261c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929fa99c908376675d51505b6675828e9ba9988b7e7265535764717e8a97a89b8e8275655b50505c6675828f9ba89f93877a6e6154473b2e23180c000000000000000a1623303d495663707c8996a3afb0a69f9c93939393939393939393939393939393939393939393939393a0a8b2ab9e9185786b5e52452d22170b0000000000000000000000121f2c3945525f6c7885929faba39992999fa6a79f92867b6e625a50443a30231a0d0400000000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e2114080006131f2c3845515c676d7373737373737373737373737373737373737376838f9ca9afa296897c73737373737373737373737373737373737373706c6155493c3023160a0000000000040c13191d20212b2d2d2d2d2d2d2d2524211d1811090000000000000000030b131a202527282d2d2d2d2d2d2d29201f1c17110a02000000000000020c151e262c3135363a47535f697885929ea194877b6e6154483b393933322f2a241c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a99a3aa998c807366554b4a5465727e8b98a89b8e8275655b566774818e9aa9988b7e726553494a5465727f8b98a9a49a8b7e7165544a4034281c10040000000000000915222f3c4855626f7b8895aab3ab9f948f8686868686868686868686868686868686868686868686868996a0acaa9d9083776a5d5044372a1d060000000000000000000000121f2c3945525f6c7885929fababa39fa3abaca0958c7f73695f53483f32291e11080000000000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e211408000714202d3a4753606d7a808080808080808080808080808080808080808084919eabb4a89b8e81808080808080808080808080808080808080807e7064574a3d3124170a00000000000001080d1113141e20202020202020181715110c060000000000000000000002090f14181b1b202020202020201d13120f0b06000000000000000000030c141b2125282b37424d576975828f9ca194877b6e6154483b2e2d2626231f19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586774818e9aaba398897c706356494855616e7b8896a19e9285796c605e687784919da196887b6e6255484855626f7b8897a1ac9b8e8275665c5144382c1f12060000000000000714212e3a4754616d7a8798a2aea99c8f8279797979797979797979797979797979797979797979797984919eaaa99c8f8276695c4f4336291c100300000000000000000000121f2c3945525f6c7885929fabb5afacafafa49a9083786d60574d42362d20170d000000000000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e211408000714212d3a4754606d7a878d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9196a1adb6aa9e938e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8074675a4d4134271a0e00000000000000000104060712131313131313130b0b0905010000000000000000000000000004080c0e0f131313131313131006060300000000000000000000000002091015191a2631404c5966737f8c999f94877b6e6154483b2e211a1917130e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7884919eab9f9286796d60534746535f697884919ea197887c6f62616e7a8796a09e918478695f534747535f6a7885919eab9f9285796d6053463a2d2013090000000000000713202d3946525d687885929fabaa9d9084776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7986929faca79a8d8174675a4e4134271b0e0100000000000000000000121f2c3945525f6c7885929fabb8bbb9b2a99f93887c6f665c51453c31241b0e05000000000000000815212e3b4854616e7b8794a1ada194877a6e6154473b2e211408000714212d3a4754606d7a87939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea1a8b2baafa59e9b9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8d8074675a4d4134271a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000409091623303d495663707c89999393877b6e6154483b2e2115080a0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c8896a1a99c8f8376675c5145424d576774818e9aa9988b7f726564717e8a97a89b8e817568574d42434e586875818e9ba8a298897c706356493d31251a0e02000000000005111d2935414c566a7683909da9ab9f928578695e606060606060606060606060606060606060626e7b8899a3afab988b7f7265584c3f3225190c0000000000000000000000121f2c3945525f6c7885929fabacacacada1968d81746b60544a40332a1f120900000000000000000815212e3b4854616e7b8794a1aca194877a6e6154473b2e211408000714212d3a4754606d7a8793a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6abadb2acacacafaaa8a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8d8074675a4d4134271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7987868686867b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b5566727f8c99a9aa998c7f7366554b403e4b5764717e8a9aa49b8f8275666774818d9aa8988b7e7165584b3e3e4b5865717e8b98a8aa9a8d807367574d42362a1e12050000000000010d192430414e5a6774818d9aabada297877b6e6154535353535353535353535353535353535764717d8a97abaea399897c706356493d3023160a0000000000000000000000121f2c3945525f6c7885929f9f9f9f9fa59e91847a6d60594f42392e21180e0000000000000000000815212e3b4854616e7b87949f9f9f94877a6e6154473b2e211408000714212d3a4754606d7a87939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8d8074675a4d4134271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6775797979797976695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6776838f9ca9a398897c6f6356493c3a4754616d7a87939f9f9285796c687784919da096877b6e6154483b3b4854616e7b8796a0aa9d908477695e53463a2d211407000000000000081724313e4a5764717e8a99a4afa9978b7e7164564d41464646464646464646464646434f596774818e9aa7ac9f92867a6d6053473a2d2014070000000000000000000000121f2c3945525f6c788592939393939393938a7e71685d52463d30271c0f060000000000000000000815212e3b4854616e7b879393939393877a6e6154473b2e211408000714212d3a4754606d7a87939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938d8074675a4d4134271a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b555d6a6c6c6c6c6c6c5e574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929fac9f9286796d6053463a3946525e687783909da297887c6f6e7a8796a09e918477695e53463a3a46535e697784919eaaa095877b6e6154483b2e23180c0000000000000714212e3a4754616d7a86939faca89b8e8175685e52463c313939393939393939313a4854606b7884919eaba99d908376675d5145392c1f13060000000000000000000000121f2c3945525f6c7885868686868686868681756c61564c41342b1e150b000000000000000000000815212e3b4854616e7b868686868686867a6e6154473b2e211408000714212d3a4754606d7a8686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868074675a4d4134271a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a434b515e5f606060605f524d453b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a99a3a99c8f8376675c51453836414c566773808d9aa9988c7f72717e8a97a89a8e817467574d423636424d576774818e9aaca7988b7e7265554b4034281c100400000000000713202d3946525e6876838f9ca9ac9f92867b6e61584e433a322c292424292c323a434e58636f7c8996a1aca6998c7f7266554b4035291d10040000000000000000000000121e2b3844515d6973787979797979797979756f655a50433a2f22190c03000000000000000000000714212d3a46535e69767979797979797976685e5246392d201407000713202c3945525d6876797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746e64584c3f33261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a40454753535353534846423b33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586774818d9aabaa998c7f7366554b4034303d4a5663707d8998a39b8f827574808d9aa8978a7e7164574b3e31313e4a5764717e8a9aa4a89c8f8275675c5145382c1f1306000000000005111d2a36414c5665717e8b97a1ada3998d80736a5f554c443d39352f2f35393d444c56606a75828f9ca8ab9f94887b6e6155483b2f24180c000000000000000000000000101c2835414c5761696c6c6c6c6c6c6c6c6c68655d54483e31281e1007000000000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6c6c5e564c41362a1e11050004111d2935414c565d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645c52473c3023170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a46464646463b3a36302921170d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a7884919eaba298897c6f6356493c2e2d3a4753606d7986929f9e9285797683909da095877a6e6154473b2e2e3a4754616d7a87939fac9f9285796d6053463a2d2013090000000000010d1925303a4753606d7985919ea8ab9f92867c6f675e564f47454041414045474e565d686f7c87939faca69c8f8276695f53463a2d1d12070000000000000000000000000c1824303b464f575d5f60606060606060605c59544b42362c1f160c000000000000000000000000020e1a25313b454d535f606060606060605f524c443b3025190e0200010d19242f3a444c525f6060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605a58524a40362b1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d24292c2d39393939392e2d2a251f170f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8896a1ac9f9286796d6053463a2d2c3845515d6776838f9ca197887b7986929f9d918477685e5246392d2d3946525e687784909daaa298897d7063564a3d31261a0e02000000000008131f2c3845515c67727f8c96a0aba3989183796d68605953514b4e4e4b51535860686d7a84919aa4aa9f94897d7063574d42362a1e0b0100000000000000000000000008131f29343d464c515253535353535353534f4d49423930241a0d040000000000000000000000000009141f29333b424648535353535353535346413b32291e140800000008131e28323a4145535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534d4c4740382f24190e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d20202c2d2d2d2d21201e1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b5565727f8c98a8a99c8f8276665c5145382c2935404b5566737f8c99a9978b7e7c8998a39a8d817467564d41362a2a36414c566774808d9aabaa9a8d807467574d42372b1e1205000000000004101c2934404b55606d79849199a3aaa09590837a706b64605d555b5b555d60636a6f7a828f96a0aca3988f82766b6055453b31261a0e00000000000000000000000000020d18222b343b414445464646464646464642413d3730271e12080000000000000000000000000000030d17212931363a3b464646464646463b3936302920170d02000000010c1620282f353946464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646413f3c362f261d120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11131420202020201514120e0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d6776828f9ca9aa998c7f7366544b403428242f3c4956626f7c8997a29a8d817f8b98a49a8a7d7164574a3e302525303d4a5763707d8a99a3aa9e918477695f53463a2d2114070000000000000c18232f3945515c67707d87929fa4a79f9590847d75706d6769676869676d70757c848f949fa8a49f92867c6f62594f44332a1f1409000000000000000000000000000006101922293035383939393939393939393534312c261e150c00000000000000000000000000000000050f171f252a2d2e393939393939392e2d2a251e170e050000000000040d161e24292c393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393433302b241d140b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929faca298897c6f6356493c2e23202d3a4653606d7985929f9d9083818e9b9f93877a6d6154473a2e21212d3a4754606d7a86929faca096887b6e6155483b2f24180c00000000000007121d2834404b55606b727f8c929da4a79f969189827d7a7675747475777a7d828991969fa6a49d928b7f726a5f53473d3321180e030000000000000000000000000000000710181f24282b2c2d2d2d2d2d2d2d2d292825211b140c030000000000000000000000000000000000050d141a1e21212d2d2d2d2d2d2d21201e19140d0500000000000000040c13191d202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726231f19120b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a98a3ac9f9285796d6053463a2d201f2b3844505c6675828f9b9f928784919e9d908377685e5246392d20202c3945515d677683909da9a8988b7f7265554b4035291d10040000000000010c18232e39434f59636d74808d929fa2a8a09e948f8a86838281818283868a8f949ea0a8a29f928d80746d62584e43352c210f060000000000000000000000000000000000060d13181c1e1f20202020202020201c1b19151009020000000000000000000000000000000000000003090e121415202020202020201414110e080200000000000000000001080d1113142020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201a1a17130e0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774808d9aaaa99c8f8276665c5144382c1f1c28343f4a5465727e8b98a399929196a19a8d807367564c4135291d1d2935414b556673808c99aaa99c8f8276675d5145392c1f130600000000000007121d27303d47515b606c77808a92979fa3a69e9c9992908f8e8e8f9092999c9ea6a49f98928b80776c605b51463c31231a0f0000000000000000000000000000000000000002080c10121213131313131313130f0e0c0904000000000000000000000000000000000000000000000002050708131313131313130807050200000000000000000000000000010407071313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130e0d0b0703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697784919eaaaa998c7f7266544a4034281c17232e3b4855626e7b8896a1a39f9ea1a3998a7d7063574a3d30251918242f3d495663707c8998a2ac9f92867a6d6053473a2d20140a000000000000000b151e2b353f44505b656c737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a19e9a938f867e746c655b50493f342a2011080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a0aca298897c6f6256493c2e231814212e3a47535f697884919eabacabac9f92867a6d6054473a2d211413202d3a4653606d7986929faca3988a7d7063574a3d31261a0f02000000000000030c192327333f49535b606c717a81878d9196989b9c9e9f9f9f9f9e9c9b9897928d87827b716c605b53493f372d22180e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b5565727f8b98a89f9f9285796d6053463a2d2013121e2b37424d576874818e9b9f9f9f9f9d908376675d5145392c2013131f2c3845515c6776828f9c9f9f9a8d817467584e43372b1f120600000000000000071117222d384149505a61686e747b8084888b8e90919292929291908e8c8985817b756e69625a504941382d251b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6775828f939393938f8276665c5044382c1f120e1a26313e4b5764717e8a9393939393938d807366554c4135291d11101c2834404b5566727f8c939393939184786a5f53473a2e211408000000000000000006111b262f383f4450565e61696e73787c7f818384858686858483817f7c79746e6a615e5750443f382f261b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79868686868686867f7266544a3f34281c100914212e3b4754616e7a86868686868686867d7063564a3d2f24190d0c18232e3c4956626f7c868686868686867b6e6255483b2f2215080000000000000000000a141d262d333e444c52575e61656c6f7274767878797978787675726f6d66625f58534d453f332d261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676d79797979797979726d635742382e23170c0714202d3946525e68767979797979797979706b6054483c2f1e13080715222e3b4754606a6f79797979797979766a5f53473a2e211408000000000000000000020b141b2227323b41464d53535b60626568696b6c6c6c6c6b69686562605c54534e46423b3327221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b555c606c6c6c6c6c6c6c66635b514630261c110605111e2a36414c565e6c6c6c6c6c6c6c6c6c6360594f44382c200c0106131f2b37434e5860626c6c6c6c6c6c6c6c5f584e43372b1f120600000000000000000000020a1117202930363b424649505355585b5d5e5f5f5f5f5e5d5b595653504a47433c3631292117110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39434b51535f606060606060595751493f351e150a00010d1925303b444c525f606060606060606056544f473d33271c1000030f1b27323d464e54566060606060606055534e463c31261a0f02000000000000000000000000060e171e252a3136383f4446494c4e50515253535251504e4c4946443f3837312a251f170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273039404546525353535353534c4b463f372e230c03000008141e29323b41465353535353535353534a48443d352b21160b00000a15202b343d434749535353535353534847433c342a20150a0000000000000000000000000000050d14191f252a2d3337393c3f414345454646454543423f3c3a38342e2b26201a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a464646464646463f3e3a352e251c11000000020d1720293036393b46464646464646463d3c38332b23190f050000040f19222b32373b3c464646464646463b3a37312a22180e0300000000000000000000000000000002080d141a1b22272b2d2f3235363839393939383635322f2d2b28231c1a150e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d3939393939393933322e2a231c130a00000000050e171e252a2d2e3939393939393939302f2c27211911080000000007101920272b2e2f393939393939392f2e2b2620180f0600000000000000000000000000000000000003090e11171b1f202225282a2b2c2c2c2c2b2a282623201f1c17110f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202c2d2d2d2d2d2d2625221e18110a010000000000050d14191e20212d2d2d2d2d2d2d2d2322201c160f08000000000000070f151b1f22232d2d2d2d2d2d2d22211f1a150e0600000000000000000000000000000000000000000000060b0f121316191b1d1e1f20201f1e1d1b19161312100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013131f202020202020191816120d07000000000000000002080d1114142020202020202020171613100b050000000000000000040a0f131516202020202020201514120f0a0300000000000000000000000000000000000000000000000000030506090c0e10121213131212100f0c09070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607131313131313130c0c0a060200000000000000000000000105070813131313131313130a090704000000000000000000000000030608091313131313131308080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m_StreamData: serializedVersion: 2 offset: 0