diff --git a/Classes/Notes/assets/heal_note.png b/Classes/Notes/assets/heal_note.png new file mode 100644 index 00000000..5fe43120 Binary files /dev/null and b/Classes/Notes/assets/heal_note.png differ diff --git a/Classes/Notes/assets/heal_note.png.import b/Classes/Notes/assets/heal_note.png.import new file mode 100644 index 00000000..22f3a997 --- /dev/null +++ b/Classes/Notes/assets/heal_note.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdf3g3174du4r" +path="res://.godot/imported/heal_note.png-09ca289a296eee82d33c64101a4e593a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Notes/assets/heal_note.png" +dest_files=["res://.godot/imported/heal_note.png-09ca289a296eee82d33c64101a4e593a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Classes/Notes/assets/quarter_note.png b/Classes/Notes/assets/quarter_note.png new file mode 100644 index 00000000..a8cbd41b Binary files /dev/null and b/Classes/Notes/assets/quarter_note.png differ diff --git a/Classes/Notes/assets/quarter_note.png.import b/Classes/Notes/assets/quarter_note.png.import new file mode 100644 index 00000000..0729e611 --- /dev/null +++ b/Classes/Notes/assets/quarter_note.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://uksjoqp7p0gq" +path="res://.godot/imported/quarter_note.png-2b4c9985d99038807abfd63e553c2d6a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Notes/assets/quarter_note.png" +dest_files=["res://.godot/imported/quarter_note.png-2b4c9985d99038807abfd63e553c2d6a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Classes/Notes/assets/vampire_note.png b/Classes/Notes/assets/vampire_note.png new file mode 100644 index 00000000..d00b6a3f Binary files /dev/null and b/Classes/Notes/assets/vampire_note.png differ diff --git a/Classes/Notes/assets/vampire_note.png.import b/Classes/Notes/assets/vampire_note.png.import new file mode 100644 index 00000000..65be637e --- /dev/null +++ b/Classes/Notes/assets/vampire_note.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dg0lmu0pip4lr" +path="res://.godot/imported/vampire_note.png-4331f817a6feee1f1066a9e9f95934c8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Notes/assets/vampire_note.png" +dest_files=["res://.godot/imported/vampire_note.png-4331f817a6feee1f1066a9e9f95934c8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Globals/FunkEngineNameSpace.cs b/Globals/FunkEngineNameSpace.cs index 7d422ea6..d1a69629 100644 --- a/Globals/FunkEngineNameSpace.cs +++ b/Globals/FunkEngineNameSpace.cs @@ -1,7 +1,24 @@ -using Godot; +using System; +using System.Linq; +using Godot; namespace FunkEngine; +public struct SongData +{ + public int Bpm; + public double SongLength; + public int NumLoops; +} + +public struct ArrowData +{ + public Color Color; + public string Key; + public NoteChecker Node; + public ArrowType Type; +} + public enum ArrowType { Up = 0, @@ -10,14 +27,6 @@ public enum ArrowType Right = 3, } -public enum BattleEffectTrigger -{ - NotePlaced, - NoteHit, - SelfNoteHit, - OnPickup, -} - public enum Timing { Miss = 0, @@ -27,6 +36,22 @@ public enum Timing Perfect = 4, } +public struct BattleConfig +{ + public MapRooms RoomType { get; private set; } + public MapGrid.Room CurRoom { get; private set; } + public SongData CurSong { get; set; } + public int TodoEnemyAndChart; +} + +public enum BattleEffectTrigger +{ + NotePlaced, + NoteHit, + SelfNoteHit, + OnPickup, +} + public enum Stages { Title, @@ -35,19 +60,127 @@ public enum Stages Map, } -public struct SongData +public enum MapRooms { - public int Bpm; - public double SongLength; - public int NumLoops; + Battle, + Chest, + Boss, } -public struct ArrowData +public class MapGrid { - public Color Color; - public string Key; - public NoteChecker Node; - public ArrowType Type; + private int[,] _map; + private Room[] _rooms; + private int _curIdx = 0; + private int _curRoom = 0; + + public Room[] GetRooms() + { + return _rooms; + } + + public class Room + { + public Room(int idx, int x, int y) + { + Idx = idx; + X = x; + Y = y; + } + + public void SetType(MapRooms type) + { + Type = type; + } + + public void AddChild(int newIdx) + { + if (Children.Contains(newIdx)) + return; + Children = Children.Append(newIdx).ToArray(); + } + + public int Idx { get; private set; } + public int[] Children { get; private set; } = Array.Empty(); + public int X { get; private set; } + public int Y { get; private set; } + public MapRooms Type { get; private set; } + } + + public void InitMapGrid(int width, int height, int paths) + { + _curIdx = 0; + _rooms = Array.Empty(); + _map = new int[width, height]; //x,y + + int startX = (width / 2); + _rooms = _rooms.Append(new Room(_curIdx, startX, 0)).ToArray(); + _map[startX, 0] = _curIdx++; + + for (int i = 0; i < paths; i++) + { + GeneratePath_r(startX, 0, width, height); + } + CreateCommonChildren(width, height); + AddBossRoom(width, height); + } + + //Start at x, y, assume prev room exists. Picks new x pos within +/- 1, attaches recursively + private void GeneratePath_r(int x, int y, int width, int height) + { + int nextX = StageProducer.GlobalRng.RandiRange( + Math.Max(x - 1, 0), + Math.Min(x + 1, width - 1) + ); + if (_map[nextX, y + 1] == 0) + { + _rooms = _rooms.Append(new Room(_curIdx, nextX, y + 1)).ToArray(); + _map[nextX, y + 1] = _curIdx; + _rooms[_map[x, y]].AddChild(_curIdx++); + _rooms[^1].SetType(MapRooms.Battle); + if (y > 0 && y % 3 == 0) + { + _rooms[^1].SetType(MapRooms.Chest); + } + } + else + { + _rooms[_map[x, y]].AddChild(_map[nextX, y + 1]); + } + if (y < height - 2) + { + GeneratePath_r(nextX, y + 1, width, height); + } + } + + //Asserts that if there is a room at the same x, but y+1 they are connected + private void CreateCommonChildren(int width, int height) + { + foreach (Room room in _rooms) + { + Vector2I curPos = new Vector2I(room.X, room.Y); + if (room.Y + 1 >= height) + continue; + if (_map[curPos.X, curPos.Y + 1] == 0) + continue; + GD.Print("Added child on same X."); + room.AddChild(_map[curPos.X, curPos.Y + 1]); + } + } + + //Adds a boss room at the end of rooms, all max height rooms connect to it. + private void AddBossRoom(int width, int height) + { + _rooms = _rooms.Append(new Room(_curIdx, width / 2, height)).ToArray(); + _rooms[_curIdx].SetType(MapRooms.Boss); + for (int i = 0; i < width; i++) //Attach all last rooms to a boss room + { + if (_map[i, height - 1] != 0) + { + _rooms[_map[i, height - 1]].AddChild(_curIdx); + } + } + } } public interface IBattleEvent diff --git a/Globals/Scribe.cs b/Globals/Scribe.cs index 45bc8588..a17cd900 100644 --- a/Globals/Scribe.cs +++ b/Globals/Scribe.cs @@ -45,6 +45,40 @@ public partial class Scribe : Node director.Enemy.TakeDamage(2 * (int)timing); } ), + new Note( + "PlayerHeal", + "Basic player note, heals player", + GD.Load("res://Classes/Notes/assets/heal_note.png"), + null, + 1, + (director, note, timing) => + { + director.Player.Heal((int)timing); + } + ), + new Note( + "PlayerVampire", + "Steals health from enemy", + GD.Load("res://Classes/Notes/assets/vampire_note.png"), + null, + 1, + (director, note, timing) => + { + director.Player.Heal((int)timing); + director.Enemy.TakeDamage((int)timing); + } + ), + new Note( + "PlayerQuarter", + "Basic note at a quarter of the cost", + GD.Load("res://Classes/Notes/assets/quarter_note.png"), + null, + 1, + (director, note, timing) => + { + director.Enemy.TakeDamage((int)timing); + } + ), }; public static readonly RelicTemplate[] RelicDictionary = new[] diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index d304eaaa..2167a8d9 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -12,125 +12,19 @@ public partial class StageProducer : Node private ulong _lastRngState; private bool _isInitialized = false; - private Stages _curStage = Stages.Title; + private Stages _curStage = Stages.Title; //TODO: State Machine kinda deal? private Node _curScene; public static MapGrid.Room CurRoom { get; private set; } public static Vector2I MapSize { get; private set; } = new Vector2I(7, 6); //For now, make width an odd number public static MapGrid Map { get; } = new MapGrid(); + public static BattleConfig Config; + //Hold here to persist between changes //TODO: Allow for permanent changes and battle temporary stat changes. public static PlayerStats PlayerStats; - public class MapGrid - { - private int[,] _map; - private Room[] _rooms; - private int _curIdx = 0; - private int _curRoom = 0; - - public Room[] GetRooms() - { - return _rooms; - } - - public class Room - { - public Room(int idx, int x, int y) - { - Idx = idx; - X = x; - Y = y; - } - - public void SetType(string type) - { - Type = type; - } - - public void AddChild(int newIdx) - { - if (Children.Contains(newIdx)) - return; - Children = Children.Append(newIdx).ToArray(); - } - - public int Idx { get; private set; } - public int[] Children { get; private set; } = Array.Empty(); - public int X { get; private set; } - public int Y { get; private set; } - private string Type; - } - - public void InitMapGrid(int width, int height, int paths) - { - _curIdx = 0; - _rooms = Array.Empty(); - _map = new int[width, height]; //x,y - - int startX = (width / 2); - _rooms = _rooms.Append(new Room(_curIdx, startX, 0)).ToArray(); - _map[startX, 0] = _curIdx++; - - for (int i = 0; i < paths; i++) - { - GeneratePath_r(startX, 0, width, height); - } - CreateCommonChildren(width, height); - AddBossRoom(width, height); - } - - //Start at x, y, assume prev room exists. Picks new x pos within +/- 1, attaches recursively - private void GeneratePath_r(int x, int y, int width, int height) - { - int nextX = GlobalRng.RandiRange(Math.Max(x - 1, 0), Math.Min(x + 1, width - 1)); - if (_map[nextX, y + 1] == 0) - { - _rooms = _rooms.Append(new Room(_curIdx, nextX, y + 1)).ToArray(); - _map[nextX, y + 1] = _curIdx; - _rooms[_map[x, y]].AddChild(_curIdx++); - } - else - { - _rooms[_map[x, y]].AddChild(_map[nextX, y + 1]); - } - if (y < height - 2) - { - GeneratePath_r(nextX, y + 1, width, height); - } - } - - //Asserts that if there is a room at the same x, but y+1 they are connected - private void CreateCommonChildren(int width, int height) - { - foreach (Room room in _rooms) - { - Vector2I curPos = new Vector2I(room.X, room.Y); - if (room.Y + 1 >= height) - continue; - if (_map[curPos.X, curPos.Y + 1] == 0) - continue; - GD.Print("Added child on same X."); - room.AddChild(_map[curPos.X, curPos.Y + 1]); - } - } - - //Adds a boss room at the end of rooms, all max height rooms connect to it. - private void AddBossRoom(int width, int height) - { - _rooms = _rooms.Append(new Room(_curIdx, width / 2, height)).ToArray(); - _rooms[_curIdx].SetType("Boss"); - for (int i = 0; i < width; i++) //Attach all last rooms to a boss room - { - if (_map[i, height - 1] != 0) - { - _rooms[_map[i, height - 1]].AddChild(_curIdx); - } - } - } - } - public void StartGame() { Map.InitMapGrid(MapSize.X, MapSize.Y, 3); @@ -158,6 +52,7 @@ public void TransitionStage(Stages nextStage) GetTree().ChangeSceneToFile("res://scenes/SceneTransitions/TitleScreen.tscn"); break; case Stages.Battle: + Config = new BattleConfig() { }; GetTree().ChangeSceneToFile("res://scenes/BattleDirector/test_battle_scene.tscn"); break; case Stages.Map: diff --git a/project.godot b/project.godot index 5ff99624..a677fd5d 100644 --- a/project.godot +++ b/project.godot @@ -38,24 +38,28 @@ arrowUp={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) ] } arrowDown={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"location":0,"echo":false,"script":null) ] } arrowLeft={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) ] } arrowRight={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":86,"key_label":0,"unicode":118,"location":0,"echo":false,"script":null) ] } Pause={ diff --git a/scenes/BattleDirector/scripts/BattleDirector.cs b/scenes/BattleDirector/scripts/BattleDirector.cs index 9a0822c1..b1dc9afa 100644 --- a/scenes/BattleDirector/scripts/BattleDirector.cs +++ b/scenes/BattleDirector/scripts/BattleDirector.cs @@ -71,18 +71,18 @@ public override void _Ready() }; TimeKeeper.Bpm = _curSong.Bpm; - Player = new PlayerPuppet(); + Player = GD.Load("res://scenes/Puppets/PlayerPuppet.tscn") + .Instantiate(); AddChild(Player); Player.Defeated += CheckBattleStatus; EventizeRelics(); NotePlacementBar.Setup(StageProducer.PlayerStats); //TODO: Refine - Enemy = new PuppetTemplate(); - Enemy.SetPosition(new Vector2(400, 0)); + Enemy = GD.Load("res://scenes/Puppets/Enemies/Boss1.tscn") + .Instantiate(); AddChild(Enemy); Enemy.Defeated += CheckBattleStatus; - Enemy.Init(GD.Load("res://scenes/BattleDirector/assets/Enemy1.png"), "Enemy"); //TODO: This is a temporary measure Button startButton = new Button(); @@ -105,7 +105,6 @@ private void Begin() CD.TimedInput += OnTimedInput; //TODO: Make enemies, can put this in an enemy subclass - Enemy.Sprite.Scale *= 2; var enemTween = CreateTween(); enemTween.TweenProperty(Enemy.Sprite, "position", Vector2.Down * 5, 1f).AsRelative(); enemTween.TweenProperty(Enemy.Sprite, "position", Vector2.Up * 5, 1f).AsRelative(); diff --git a/scenes/BattleDirector/scripts/NotePlacementBar.cs b/scenes/BattleDirector/scripts/NotePlacementBar.cs index 342164ed..cd8389c7 100644 --- a/scenes/BattleDirector/scripts/NotePlacementBar.cs +++ b/scenes/BattleDirector/scripts/NotePlacementBar.cs @@ -133,13 +133,20 @@ public void MissNote() // Placing a note resets the note placement bar public Note PlacedNote() { - _currentBarValue = 0; + if (_noteQueue.Peek().Name == "PlayerQuarter") + _currentBarValue -= MaxValue / 4; + else + _currentBarValue = 0; + UpdateNotePlacementBar(_currentBarValue); return GetNote(); } public bool CanPlaceNote() { + if (_noteQueue.Peek().Name == "PlayerQuarter") + return _currentBarValue >= MaxValue / 4; + return _currentBarValue >= MaxValue; } diff --git a/scenes/ChartViewport/ChartManager.cs b/scenes/ChartViewport/ChartManager.cs index 7a1516d9..42b0fd85 100644 --- a/scenes/ChartViewport/ChartManager.cs +++ b/scenes/ChartViewport/ChartManager.cs @@ -48,7 +48,6 @@ public void PrepChart(SongData songData) TimeKeeper.ChartLength = (float)ChartLength; TimeKeeper.Bpm = songData.Bpm; - InitBackgrounds(); _arrowGroup = ChartLoopables.GetNode("ArrowGroup"); IH.Connect(nameof(InputHandler.NotePressed), new Callable(this, nameof(OnNotePressed))); @@ -74,21 +73,6 @@ public void PrepChart(SongData songData) tween.SetLoops().Play(); } - private void InitBackgrounds() - { - int i = 0; - foreach (Node child in ChartLoopables.GetChildren()) - { - if (child is not Loopable) - continue; - Loopable loopable = (Loopable)child; - loopable.Position = Vector2.Zero; - loopable.SetSize(new Vector2((float)ChartLength / 2 + 1, Size.Y)); - loopable.Bounds = (float)ChartLength / 2 * i; - i++; - } - } - private void TweenArrows(Vector2 scale) { foreach (var node in _arrowGroup.GetChildren()) diff --git a/scenes/ChartViewport/ChartViewport.tscn b/scenes/ChartViewport/ChartViewport.tscn index 8708038b..0b14f4bf 100644 --- a/scenes/ChartViewport/ChartViewport.tscn +++ b/scenes/ChartViewport/ChartViewport.tscn @@ -1,9 +1,15 @@ [gd_scene load_steps=5 format=3 uid="uid://dfevfib11kou1"] -[ext_resource type="Texture2D" uid="uid://b0tvsewgnf2x7" path="res://icon.svg" id="1_0wnka"] [ext_resource type="Script" path="res://scenes/ChartViewport/ChartManager.cs" id="1_ruh2l"] -[ext_resource type="Script" path="res://scenes/ChartViewport/Loopable.cs" id="3_5u57h"] [ext_resource type="PackedScene" uid="uid://bn8txx53xlguw" path="res://scenes/NoteManager/note_manager.tscn" id="4_fd5fw"] +[ext_resource type="Shader" path="res://scenes/ChartViewport/StarryNight.gdshader" id="5_kqrxg"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_5uw0y"] +shader = ExtResource("5_kqrxg") +shader_parameter/bg_top_color = Vector4(0.18, 0.08, 0.12, 0) +shader_parameter/bg_bottom_color = Vector4(0.028, 0.008, 0.184, 0) +shader_parameter/gradient_ratio = 1.0 +shader_parameter/time_scale = 1.0 [node name="VPContainer" type="SubViewportContainer" node_paths=PackedStringArray("IH", "ChartLoopables")] offset_right = 480.0 @@ -17,13 +23,6 @@ handle_input_locally = false size = Vector2i(480, 180) render_target_update_mode = 4 -[node name="ColorFill" type="ColorRect" parent="SubViewport"] -z_index = -2 -offset_left = -60.0 -offset_right = 690.0 -offset_bottom = 360.0 -color = Color(0.129412, 0.145098, 0.196078, 1) - [node name="Camera2D" type="Camera2D" parent="SubViewport"] position = Vector2(-50, 0) anchor_mode = 0 @@ -33,16 +32,12 @@ unique_name_in_owner = true [node name="ArrowGroup" type="Node" parent="SubViewport/ChartLoopables"] -[node name="ChartBG2" type="TextureRect" parent="SubViewport/ChartLoopables"] -offset_right = 701.0 -offset_bottom = 300.0 -texture = ExtResource("1_0wnka") -script = ExtResource("3_5u57h") - -[node name="ChartBG1" type="TextureRect" parent="SubViewport/ChartLoopables"] -offset_right = 701.0 -offset_bottom = 300.0 -texture = ExtResource("1_0wnka") -script = ExtResource("3_5u57h") +[node name="StarShader" type="ColorRect" parent="SubViewport"] +material = SubResource("ShaderMaterial_5uw0y") +offset_left = -60.0 +offset_right = 415.0 +offset_bottom = 177.0 +scale = Vector2(2.18, 2.18) +color = Color(0, 0, 0, 1) [node name="noteManager" parent="SubViewport" instance=ExtResource("4_fd5fw")] diff --git a/scenes/ChartViewport/StarryNight.gdshader b/scenes/ChartViewport/StarryNight.gdshader new file mode 100644 index 00000000..126e5eab --- /dev/null +++ b/scenes/ChartViewport/StarryNight.gdshader @@ -0,0 +1,27 @@ +//based on this star shader. Thanks gerardogc2378 +//https://godotshaders.com/shader/stars-shader/ + +shader_type canvas_item; + +uniform vec4 bg_top_color; +uniform vec4 bg_bottom_color; +uniform float gradient_ratio; +uniform float time_scale; + +float rand(vec2 st) { + return fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123); +} + +void fragment() { + float color = 0.0; + + if (rand(SCREEN_UV.xy / 20.0) > 0.996) + { + float r = rand(SCREEN_UV.xy); + color = r * (0.85 * sin((TIME * time_scale) * (r * 5.0) + 720.0 * r) + 0.95); + } + + vec4 gradient_color = mix(bg_top_color, bg_bottom_color, SCREEN_UV.y / gradient_ratio); + + COLOR = vec4(vec3(color),1.0) + gradient_color; +} \ No newline at end of file diff --git a/scenes/Maps/assets/BattleIcon.png b/scenes/Maps/assets/BattleIcon.png new file mode 100644 index 00000000..a93306c1 Binary files /dev/null and b/scenes/Maps/assets/BattleIcon.png differ diff --git a/scenes/Maps/assets/BattleIcon.png.import b/scenes/Maps/assets/BattleIcon.png.import new file mode 100644 index 00000000..7e2ba8f7 --- /dev/null +++ b/scenes/Maps/assets/BattleIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7ius17ox1e70" +path="res://.godot/imported/BattleIcon.png-7774ff140253fc7228adca1e1cc84da5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/Maps/assets/BattleIcon.png" +dest_files=["res://.godot/imported/BattleIcon.png-7774ff140253fc7228adca1e1cc84da5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/Maps/assets/BossIcon.png b/scenes/Maps/assets/BossIcon.png new file mode 100644 index 00000000..565eb878 Binary files /dev/null and b/scenes/Maps/assets/BossIcon.png differ diff --git a/scenes/Maps/assets/BossIcon.png.import b/scenes/Maps/assets/BossIcon.png.import new file mode 100644 index 00000000..8954c123 --- /dev/null +++ b/scenes/Maps/assets/BossIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xwx7j1wufwx1" +path="res://.godot/imported/BossIcon.png-d10acdd0cb08fa24b6fb43e6a501cfba.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/Maps/assets/BossIcon.png" +dest_files=["res://.godot/imported/BossIcon.png-d10acdd0cb08fa24b6fb43e6a501cfba.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/Maps/assets/ChestIcon.png b/scenes/Maps/assets/ChestIcon.png new file mode 100644 index 00000000..d4686e92 Binary files /dev/null and b/scenes/Maps/assets/ChestIcon.png differ diff --git a/scenes/Maps/assets/ChestIcon.png.import b/scenes/Maps/assets/ChestIcon.png.import new file mode 100644 index 00000000..7b4992d1 --- /dev/null +++ b/scenes/Maps/assets/ChestIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://othbopej2fym" +path="res://.godot/imported/ChestIcon.png-83b4a439102e920a2f15bc896417dcfc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/Maps/assets/ChestIcon.png" +dest_files=["res://.godot/imported/ChestIcon.png-83b4a439102e920a2f15bc896417dcfc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/Maps/scripts/Cartographer.cs b/scenes/Maps/scripts/Cartographer.cs index e7804e02..5a9e20d9 100644 --- a/scenes/Maps/scripts/Cartographer.cs +++ b/scenes/Maps/scripts/Cartographer.cs @@ -20,7 +20,7 @@ private Vector2 GetPosition(int x, int y) private void DrawMap() { var rooms = StageProducer.Map.GetRooms(); - foreach (StageProducer.MapGrid.Room room in rooms) + foreach (MapGrid.Room room in rooms) { DrawMapSprite(room); foreach (int roomIdx in room.Children) @@ -36,7 +36,7 @@ private void DrawMap() AddFocusNeighbors(); } - private void DrawMapSprite(StageProducer.MapGrid.Room room) + private void DrawMapSprite(MapGrid.Room room) { var newButton = new Button(); AddChild(newButton); @@ -55,8 +55,19 @@ private void DrawMapSprite(StageProducer.MapGrid.Room room) }; validButtons = validButtons.Append(newButton).ToArray(); } - newButton.Icon = (Texture2D)GD.Load("res://icon.svg"); //TODO: Room types icons - newButton.Scale *= .25f; + + switch (room.Type) + { + case MapRooms.Battle: + newButton.Icon = (Texture2D)GD.Load("res://scenes/Maps/assets/BattleIcon.png"); + break; + case MapRooms.Boss: + newButton.Icon = (Texture2D)GD.Load("res://scenes/Maps/assets/BossIcon.png"); + break; + case MapRooms.Chest: + newButton.Icon = (Texture2D)GD.Load("res://scenes/Maps/assets/ChestIcon.png"); + break; + } newButton.ZIndex = 1; newButton.Position = GetPosition(room.X, room.Y) - newButton.Size * 2; } diff --git a/scenes/NoteManager/note_manager.tscn b/scenes/NoteManager/note_manager.tscn index 64469369..e0e38332 100644 --- a/scenes/NoteManager/note_manager.tscn +++ b/scenes/NoteManager/note_manager.tscn @@ -21,23 +21,23 @@ script = ExtResource("3_0cioe") modulate = Color(0, 0, 0, 1) texture = ExtResource("4_3mttx") -[node name="arrowDown" type="Sprite2D" parent="noteCheckers"] +[node name="arrowUp" type="Sprite2D" parent="noteCheckers"] position = Vector2(0, 70) -rotation = 1.5708 +rotation = -1.5708 texture = ExtResource("2_pb1qk") script = ExtResource("3_0cioe") -[node name="Outline" type="Sprite2D" parent="noteCheckers/arrowDown"] +[node name="Outline" type="Sprite2D" parent="noteCheckers/arrowUp"] modulate = Color(0, 0, 0, 1) texture = ExtResource("4_3mttx") -[node name="arrowUp" type="Sprite2D" parent="noteCheckers"] +[node name="arrowDown" type="Sprite2D" parent="noteCheckers"] position = Vector2(0, 111) -rotation = -1.5708 +rotation = 1.5708 texture = ExtResource("2_pb1qk") script = ExtResource("3_0cioe") -[node name="Outline" type="Sprite2D" parent="noteCheckers/arrowUp"] +[node name="Outline" type="Sprite2D" parent="noteCheckers/arrowDown"] modulate = Color(0, 0, 0, 1) texture = ExtResource("4_3mttx") diff --git a/scenes/Puppets/Enemies/Boss1.tscn b/scenes/Puppets/Enemies/Boss1.tscn new file mode 100644 index 00000000..9ee3ee20 --- /dev/null +++ b/scenes/Puppets/Enemies/Boss1.tscn @@ -0,0 +1,49 @@ +[gd_scene load_steps=8 format=3 uid="uid://bi5iqbwpsd381"] + +[ext_resource type="Script" path="res://scenes/Puppets/scripts/PuppetTemplate.cs" id="1_310x1"] +[ext_resource type="Texture2D" uid="uid://veedngaorx3l" path="res://scenes/BattleDirector/assets/Enemy1.png" id="2_bxcx7"] +[ext_resource type="Texture2D" uid="uid://b2iptr3o8rg4t" path="res://scenes/Puppets/Enemies/assets/Boss1EmissionShape.tres" id="3_ct4k8"] +[ext_resource type="PackedScene" uid="uid://bgomxovxs7sr8" path="res://scenes/Puppets/HealthBar.tscn" id="3_otelj"] + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3jiu6"] +emission_shape = 4 +emission_point_texture = ExtResource("3_ct4k8") +emission_point_count = 1078 +gravity = Vector3(0, 98, 0) +scale_min = 4.0 +scale_max = 4.0 +turbulence_noise_strength = 14.2 + +[sub_resource type="Gradient" id="Gradient_s7p55"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0.641048, 0.0406094, 0.0473231, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_16sp0"] +gradient = SubResource("Gradient_s7p55") +width = 1 + +[node name="EnemPuppet" type="Node2D" node_paths=PackedStringArray("_healthBar", "Sprite")] +script = ExtResource("1_310x1") +_healthBar = NodePath("ProgressBar") +Sprite = NodePath("Sprite") +StartPos = Vector2(500, 125) +InitScale = Vector2(2, 2) + +[node name="Sprite" type="Sprite2D" parent="."] +position = Vector2(0, -32) +texture = ExtResource("2_bxcx7") + +[node name="Blood Particles" type="GPUParticles2D" parent="Sprite"] +z_index = -1 +position = Vector2(-32, -32) +amount = 4 +process_material = SubResource("ParticleProcessMaterial_3jiu6") +texture = SubResource("GradientTexture1D_16sp0") +lifetime = 2.0 +trail_lifetime = 10.0 + +[node name="ProgressBar" parent="." instance=ExtResource("3_otelj")] +offset_left = -75.0 +offset_top = 32.0 +offset_right = 75.0 +offset_bottom = 52.0 diff --git a/scenes/Puppets/Enemies/EnemyPuppet.tscn b/scenes/Puppets/Enemies/EnemyPuppet.tscn new file mode 100644 index 00000000..e7020df5 --- /dev/null +++ b/scenes/Puppets/Enemies/EnemyPuppet.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=3 format=3 uid="uid://cwm0n2wu851nx"] + +[ext_resource type="Script" path="res://scenes/Puppets/scripts/PuppetTemplate.cs" id="1_kgmh0"] +[ext_resource type="PackedScene" uid="uid://bgomxovxs7sr8" path="res://scenes/Puppets/HealthBar.tscn" id="1_sxlrs"] + +[node name="EnemPuppet" type="Node2D" node_paths=PackedStringArray("_healthBar", "Sprite")] +script = ExtResource("1_kgmh0") +_healthBar = NodePath("ProgressBar") +Sprite = NodePath("Sprite") + +[node name="Sprite" type="Sprite2D" parent="."] + +[node name="ProgressBar" parent="." instance=ExtResource("1_sxlrs")] +offset_left = -75.0 +offset_top = 32.0 +offset_right = 75.0 +offset_bottom = 52.0 diff --git a/scenes/Puppets/Enemies/assets/Boss1EmissionShape.tres b/scenes/Puppets/Enemies/assets/Boss1EmissionShape.tres new file mode 100644 index 00000000..46b09170 --- /dev/null +++ b/scenes/Puppets/Enemies/assets/Boss1EmissionShape.tres @@ -0,0 +1,13 @@ +[gd_resource type="ImageTexture" load_steps=2 format=3 uid="uid://b2iptr3o8rg4t"] + +[sub_resource type="Image" id="Image_jc6cb"] +data = { +"data": PackedByteArray(0, 0, 64, 64, 0, 0, 232, 65, 0, 0, 64, 64, 0, 0, 240, 65, 0, 0, 64, 64, 0, 0, 248, 65, 0, 0, 64, 64, 0, 0, 0, 66, 0, 0, 64, 64, 0, 0, 4, 66, 0, 0, 128, 64, 0, 0, 200, 65, 0, 0, 128, 64, 0, 0, 208, 65, 0, 0, 128, 64, 0, 0, 216, 65, 0, 0, 128, 64, 0, 0, 224, 65, 0, 0, 128, 64, 0, 0, 232, 65, 0, 0, 128, 64, 0, 0, 240, 65, 0, 0, 128, 64, 0, 0, 248, 65, 0, 0, 128, 64, 0, 0, 0, 66, 0, 0, 160, 64, 0, 0, 200, 65, 0, 0, 160, 64, 0, 0, 208, 65, 0, 0, 160, 64, 0, 0, 216, 65, 0, 0, 160, 64, 0, 0, 224, 65, 0, 0, 160, 64, 0, 0, 232, 65, 0, 0, 160, 64, 0, 0, 240, 65, 0, 0, 160, 64, 0, 0, 248, 65, 0, 0, 192, 64, 0, 0, 192, 65, 0, 0, 192, 64, 0, 0, 200, 65, 0, 0, 192, 64, 0, 0, 208, 65, 0, 0, 192, 64, 0, 0, 216, 65, 0, 0, 192, 64, 0, 0, 224, 65, 0, 0, 192, 64, 0, 0, 232, 65, 0, 0, 192, 64, 0, 0, 240, 65, 0, 0, 224, 64, 0, 0, 192, 65, 0, 0, 224, 64, 0, 0, 200, 65, 0, 0, 224, 64, 0, 0, 208, 65, 0, 0, 224, 64, 0, 0, 216, 65, 0, 0, 224, 64, 0, 0, 224, 65, 0, 0, 224, 64, 0, 0, 232, 65, 0, 0, 224, 64, 0, 0, 240, 65, 0, 0, 0, 65, 0, 0, 192, 65, 0, 0, 0, 65, 0, 0, 200, 65, 0, 0, 0, 65, 0, 0, 208, 65, 0, 0, 0, 65, 0, 0, 216, 65, 0, 0, 0, 65, 0, 0, 224, 65, 0, 0, 0, 65, 0, 0, 232, 65, 0, 0, 0, 65, 0, 0, 48, 66, 0, 0, 16, 65, 0, 0, 192, 65, 0, 0, 16, 65, 0, 0, 200, 65, 0, 0, 16, 65, 0, 0, 208, 65, 0, 0, 16, 65, 0, 0, 216, 65, 0, 0, 16, 65, 0, 0, 224, 65, 0, 0, 16, 65, 0, 0, 44, 66, 0, 0, 16, 65, 0, 0, 48, 66, 0, 0, 32, 65, 0, 0, 184, 65, 0, 0, 32, 65, 0, 0, 192, 65, 0, 0, 32, 65, 0, 0, 200, 65, 0, 0, 32, 65, 0, 0, 208, 65, 0, 0, 32, 65, 0, 0, 216, 65, 0, 0, 32, 65, 0, 0, 224, 65, 0, 0, 32, 65, 0, 0, 36, 66, 0, 0, 32, 65, 0, 0, 40, 66, 0, 0, 32, 65, 0, 0, 44, 66, 0, 0, 32, 65, 0, 0, 48, 66, 0, 0, 48, 65, 0, 0, 168, 65, 0, 0, 48, 65, 0, 0, 176, 65, 0, 0, 48, 65, 0, 0, 184, 65, 0, 0, 48, 65, 0, 0, 192, 65, 0, 0, 48, 65, 0, 0, 200, 65, 0, 0, 48, 65, 0, 0, 208, 65, 0, 0, 48, 65, 0, 0, 216, 65, 0, 0, 48, 65, 0, 0, 28, 66, 0, 0, 48, 65, 0, 0, 32, 66, 0, 0, 48, 65, 0, 0, 36, 66, 0, 0, 48, 65, 0, 0, 40, 66, 0, 0, 48, 65, 0, 0, 44, 66, 0, 0, 48, 65, 0, 0, 48, 66, 0, 0, 64, 65, 0, 0, 160, 65, 0, 0, 64, 65, 0, 0, 168, 65, 0, 0, 64, 65, 0, 0, 192, 65, 0, 0, 64, 65, 0, 0, 200, 65, 0, 0, 64, 65, 0, 0, 208, 65, 0, 0, 64, 65, 0, 0, 16, 66, 0, 0, 64, 65, 0, 0, 20, 66, 0, 0, 64, 65, 0, 0, 24, 66, 0, 0, 64, 65, 0, 0, 28, 66, 0, 0, 64, 65, 0, 0, 32, 66, 0, 0, 64, 65, 0, 0, 36, 66, 0, 0, 64, 65, 0, 0, 40, 66, 0, 0, 64, 65, 0, 0, 44, 66, 0, 0, 64, 65, 0, 0, 48, 66, 0, 0, 64, 65, 0, 0, 52, 66, 0, 0, 80, 65, 0, 0, 152, 65, 0, 0, 80, 65, 0, 0, 160, 65, 0, 0, 80, 65, 0, 0, 168, 65, 0, 0, 80, 65, 0, 0, 192, 65, 0, 0, 80, 65, 0, 0, 200, 65, 0, 0, 80, 65, 0, 0, 208, 65, 0, 0, 80, 65, 0, 0, 8, 66, 0, 0, 80, 65, 0, 0, 12, 66, 0, 0, 80, 65, 0, 0, 16, 66, 0, 0, 80, 65, 0, 0, 20, 66, 0, 0, 80, 65, 0, 0, 24, 66, 0, 0, 80, 65, 0, 0, 28, 66, 0, 0, 80, 65, 0, 0, 32, 66, 0, 0, 80, 65, 0, 0, 36, 66, 0, 0, 80, 65, 0, 0, 40, 66, 0, 0, 80, 65, 0, 0, 44, 66, 0, 0, 96, 65, 0, 0, 144, 65, 0, 0, 96, 65, 0, 0, 152, 65, 0, 0, 96, 65, 0, 0, 160, 65, 0, 0, 96, 65, 0, 0, 184, 65, 0, 0, 96, 65, 0, 0, 192, 65, 0, 0, 96, 65, 0, 0, 200, 65, 0, 0, 96, 65, 0, 0, 248, 65, 0, 0, 96, 65, 0, 0, 0, 66, 0, 0, 96, 65, 0, 0, 4, 66, 0, 0, 96, 65, 0, 0, 8, 66, 0, 0, 96, 65, 0, 0, 12, 66, 0, 0, 96, 65, 0, 0, 16, 66, 0, 0, 96, 65, 0, 0, 20, 66, 0, 0, 96, 65, 0, 0, 24, 66, 0, 0, 96, 65, 0, 0, 28, 66, 0, 0, 96, 65, 0, 0, 32, 66, 0, 0, 96, 65, 0, 0, 36, 66, 0, 0, 112, 65, 0, 0, 136, 65, 0, 0, 112, 65, 0, 0, 144, 65, 0, 0, 112, 65, 0, 0, 152, 65, 0, 0, 112, 65, 0, 0, 160, 65, 0, 0, 112, 65, 0, 0, 184, 65, 0, 0, 112, 65, 0, 0, 192, 65, 0, 0, 112, 65, 0, 0, 200, 65, 0, 0, 112, 65, 0, 0, 240, 65, 0, 0, 112, 65, 0, 0, 248, 65, 0, 0, 112, 65, 0, 0, 0, 66, 0, 0, 112, 65, 0, 0, 4, 66, 0, 0, 112, 65, 0, 0, 8, 66, 0, 0, 112, 65, 0, 0, 12, 66, 0, 0, 112, 65, 0, 0, 16, 66, 0, 0, 112, 65, 0, 0, 20, 66, 0, 0, 112, 65, 0, 0, 24, 66, 0, 0, 128, 65, 0, 0, 136, 65, 0, 0, 128, 65, 0, 0, 144, 65, 0, 0, 128, 65, 0, 0, 152, 65, 0, 0, 128, 65, 0, 0, 160, 65, 0, 0, 128, 65, 0, 0, 184, 65, 0, 0, 128, 65, 0, 0, 192, 65, 0, 0, 128, 65, 0, 0, 224, 65, 0, 0, 128, 65, 0, 0, 232, 65, 0, 0, 128, 65, 0, 0, 240, 65, 0, 0, 128, 65, 0, 0, 248, 65, 0, 0, 128, 65, 0, 0, 0, 66, 0, 0, 128, 65, 0, 0, 4, 66, 0, 0, 128, 65, 0, 0, 8, 66, 0, 0, 128, 65, 0, 0, 12, 66, 0, 0, 128, 65, 0, 0, 16, 66, 0, 0, 136, 65, 0, 0, 136, 65, 0, 0, 136, 65, 0, 0, 144, 65, 0, 0, 136, 65, 0, 0, 152, 65, 0, 0, 136, 65, 0, 0, 160, 65, 0, 0, 136, 65, 0, 0, 184, 65, 0, 0, 136, 65, 0, 0, 192, 65, 0, 0, 136, 65, 0, 0, 224, 65, 0, 0, 136, 65, 0, 0, 232, 65, 0, 0, 136, 65, 0, 0, 240, 65, 0, 0, 136, 65, 0, 0, 248, 65, 0, 0, 136, 65, 0, 0, 0, 66, 0, 0, 136, 65, 0, 0, 4, 66, 0, 0, 136, 65, 0, 0, 8, 66, 0, 0, 136, 65, 0, 0, 12, 66, 0, 0, 144, 65, 0, 0, 144, 65, 0, 0, 144, 65, 0, 0, 152, 65, 0, 0, 144, 65, 0, 0, 160, 65, 0, 0, 144, 65, 0, 0, 168, 65, 0, 0, 144, 65, 0, 0, 184, 65, 0, 0, 144, 65, 0, 0, 192, 65, 0, 0, 144, 65, 0, 0, 216, 65, 0, 0, 144, 65, 0, 0, 224, 65, 0, 0, 144, 65, 0, 0, 232, 65, 0, 0, 144, 65, 0, 0, 240, 65, 0, 0, 144, 65, 0, 0, 248, 65, 0, 0, 144, 65, 0, 0, 0, 66, 0, 0, 144, 65, 0, 0, 4, 66, 0, 0, 144, 65, 0, 0, 8, 66, 0, 0, 144, 65, 0, 0, 12, 66, 0, 0, 144, 65, 0, 0, 16, 66, 0, 0, 144, 65, 0, 0, 20, 66, 0, 0, 144, 65, 0, 0, 24, 66, 0, 0, 144, 65, 0, 0, 28, 66, 0, 0, 152, 65, 0, 0, 152, 65, 0, 0, 152, 65, 0, 0, 160, 65, 0, 0, 152, 65, 0, 0, 168, 65, 0, 0, 152, 65, 0, 0, 176, 65, 0, 0, 152, 65, 0, 0, 184, 65, 0, 0, 152, 65, 0, 0, 192, 65, 0, 0, 152, 65, 0, 0, 208, 65, 0, 0, 152, 65, 0, 0, 216, 65, 0, 0, 152, 65, 0, 0, 224, 65, 0, 0, 152, 65, 0, 0, 232, 65, 0, 0, 152, 65, 0, 0, 240, 65, 0, 0, 152, 65, 0, 0, 248, 65, 0, 0, 152, 65, 0, 0, 0, 66, 0, 0, 152, 65, 0, 0, 4, 66, 0, 0, 152, 65, 0, 0, 8, 66, 0, 0, 152, 65, 0, 0, 12, 66, 0, 0, 152, 65, 0, 0, 16, 66, 0, 0, 160, 65, 0, 0, 160, 65, 0, 0, 160, 65, 0, 0, 168, 65, 0, 0, 160, 65, 0, 0, 176, 65, 0, 0, 160, 65, 0, 0, 184, 65, 0, 0, 160, 65, 0, 0, 192, 65, 0, 0, 160, 65, 0, 0, 200, 65, 0, 0, 160, 65, 0, 0, 208, 65, 0, 0, 160, 65, 0, 0, 216, 65, 0, 0, 160, 65, 0, 0, 224, 65, 0, 0, 160, 65, 0, 0, 232, 65, 0, 0, 160, 65, 0, 0, 240, 65, 0, 0, 160, 65, 0, 0, 248, 65, 0, 0, 160, 65, 0, 0, 0, 66, 0, 0, 160, 65, 0, 0, 4, 66, 0, 0, 168, 65, 0, 0, 176, 65, 0, 0, 168, 65, 0, 0, 184, 65, 0, 0, 168, 65, 0, 0, 192, 65, 0, 0, 168, 65, 0, 0, 200, 65, 0, 0, 168, 65, 0, 0, 208, 65, 0, 0, 168, 65, 0, 0, 216, 65, 0, 0, 168, 65, 0, 0, 224, 65, 0, 0, 168, 65, 0, 0, 232, 65, 0, 0, 168, 65, 0, 0, 240, 65, 0, 0, 168, 65, 0, 0, 248, 65, 0, 0, 168, 65, 0, 0, 0, 66, 0, 0, 168, 65, 0, 0, 4, 66, 0, 0, 168, 65, 0, 0, 8, 66, 0, 0, 168, 65, 0, 0, 12, 66, 0, 0, 168, 65, 0, 0, 16, 66, 0, 0, 168, 65, 0, 0, 20, 66, 0, 0, 168, 65, 0, 0, 24, 66, 0, 0, 168, 65, 0, 0, 28, 66, 0, 0, 168, 65, 0, 0, 32, 66, 0, 0, 168, 65, 0, 0, 36, 66, 0, 0, 168, 65, 0, 0, 40, 66, 0, 0, 168, 65, 0, 0, 44, 66, 0, 0, 168, 65, 0, 0, 48, 66, 0, 0, 168, 65, 0, 0, 52, 66, 0, 0, 168, 65, 0, 0, 56, 66, 0, 0, 168, 65, 0, 0, 60, 66, 0, 0, 176, 65, 0, 0, 184, 65, 0, 0, 176, 65, 0, 0, 192, 65, 0, 0, 176, 65, 0, 0, 200, 65, 0, 0, 176, 65, 0, 0, 208, 65, 0, 0, 176, 65, 0, 0, 216, 65, 0, 0, 176, 65, 0, 0, 224, 65, 0, 0, 176, 65, 0, 0, 232, 65, 0, 0, 176, 65, 0, 0, 240, 65, 0, 0, 176, 65, 0, 0, 248, 65, 0, 0, 176, 65, 0, 0, 0, 66, 0, 0, 176, 65, 0, 0, 4, 66, 0, 0, 176, 65, 0, 0, 8, 66, 0, 0, 176, 65, 0, 0, 12, 66, 0, 0, 176, 65, 0, 0, 16, 66, 0, 0, 176, 65, 0, 0, 20, 66, 0, 0, 176, 65, 0, 0, 24, 66, 0, 0, 176, 65, 0, 0, 28, 66, 0, 0, 176, 65, 0, 0, 32, 66, 0, 0, 176, 65, 0, 0, 36, 66, 0, 0, 176, 65, 0, 0, 40, 66, 0, 0, 176, 65, 0, 0, 44, 66, 0, 0, 176, 65, 0, 0, 48, 66, 0, 0, 176, 65, 0, 0, 52, 66, 0, 0, 176, 65, 0, 0, 56, 66, 0, 0, 176, 65, 0, 0, 60, 66, 0, 0, 176, 65, 0, 0, 64, 66, 0, 0, 176, 65, 0, 0, 68, 66, 0, 0, 176, 65, 0, 0, 72, 66, 0, 0, 176, 65, 0, 0, 76, 66, 0, 0, 184, 65, 0, 0, 184, 65, 0, 0, 184, 65, 0, 0, 192, 65, 0, 0, 184, 65, 0, 0, 200, 65, 0, 0, 184, 65, 0, 0, 208, 65, 0, 0, 184, 65, 0, 0, 216, 65, 0, 0, 184, 65, 0, 0, 224, 65, 0, 0, 184, 65, 0, 0, 232, 65, 0, 0, 184, 65, 0, 0, 240, 65, 0, 0, 184, 65, 0, 0, 248, 65, 0, 0, 184, 65, 0, 0, 0, 66, 0, 0, 184, 65, 0, 0, 4, 66, 0, 0, 184, 65, 0, 0, 8, 66, 0, 0, 184, 65, 0, 0, 12, 66, 0, 0, 184, 65, 0, 0, 16, 66, 0, 0, 184, 65, 0, 0, 20, 66, 0, 0, 184, 65, 0, 0, 24, 66, 0, 0, 184, 65, 0, 0, 28, 66, 0, 0, 184, 65, 0, 0, 32, 66, 0, 0, 184, 65, 0, 0, 36, 66, 0, 0, 184, 65, 0, 0, 40, 66, 0, 0, 184, 65, 0, 0, 44, 66, 0, 0, 184, 65, 0, 0, 48, 66, 0, 0, 192, 65, 0, 0, 192, 65, 0, 0, 192, 65, 0, 0, 200, 65, 0, 0, 192, 65, 0, 0, 208, 65, 0, 0, 192, 65, 0, 0, 216, 65, 0, 0, 192, 65, 0, 0, 224, 65, 0, 0, 192, 65, 0, 0, 232, 65, 0, 0, 192, 65, 0, 0, 240, 65, 0, 0, 192, 65, 0, 0, 248, 65, 0, 0, 192, 65, 0, 0, 0, 66, 0, 0, 192, 65, 0, 0, 4, 66, 0, 0, 192, 65, 0, 0, 8, 66, 0, 0, 192, 65, 0, 0, 12, 66, 0, 0, 192, 65, 0, 0, 16, 66, 0, 0, 192, 65, 0, 0, 20, 66, 0, 0, 192, 65, 0, 0, 24, 66, 0, 0, 192, 65, 0, 0, 28, 66, 0, 0, 192, 65, 0, 0, 32, 66, 0, 0, 192, 65, 0, 0, 36, 66, 0, 0, 192, 65, 0, 0, 40, 66, 0, 0, 192, 65, 0, 0, 44, 66, 0, 0, 192, 65, 0, 0, 48, 66, 0, 0, 200, 65, 0, 0, 192, 65, 0, 0, 200, 65, 0, 0, 200, 65, 0, 0, 200, 65, 0, 0, 208, 65, 0, 0, 200, 65, 0, 0, 216, 65, 0, 0, 200, 65, 0, 0, 224, 65, 0, 0, 200, 65, 0, 0, 232, 65, 0, 0, 200, 65, 0, 0, 240, 65, 0, 0, 200, 65, 0, 0, 248, 65, 0, 0, 200, 65, 0, 0, 0, 66, 0, 0, 200, 65, 0, 0, 4, 66, 0, 0, 200, 65, 0, 0, 8, 66, 0, 0, 200, 65, 0, 0, 12, 66, 0, 0, 200, 65, 0, 0, 16, 66, 0, 0, 200, 65, 0, 0, 20, 66, 0, 0, 200, 65, 0, 0, 24, 66, 0, 0, 200, 65, 0, 0, 28, 66, 0, 0, 200, 65, 0, 0, 32, 66, 0, 0, 200, 65, 0, 0, 36, 66, 0, 0, 200, 65, 0, 0, 40, 66, 0, 0, 200, 65, 0, 0, 44, 66, 0, 0, 200, 65, 0, 0, 48, 66, 0, 0, 200, 65, 0, 0, 52, 66, 0, 0, 200, 65, 0, 0, 56, 66, 0, 0, 200, 65, 0, 0, 60, 66, 0, 0, 208, 65, 0, 0, 192, 65, 0, 0, 208, 65, 0, 0, 200, 65, 0, 0, 208, 65, 0, 0, 208, 65, 0, 0, 208, 65, 0, 0, 216, 65, 0, 0, 208, 65, 0, 0, 224, 65, 0, 0, 208, 65, 0, 0, 232, 65, 0, 0, 208, 65, 0, 0, 240, 65, 0, 0, 208, 65, 0, 0, 248, 65, 0, 0, 208, 65, 0, 0, 0, 66, 0, 0, 208, 65, 0, 0, 4, 66, 0, 0, 208, 65, 0, 0, 8, 66, 0, 0, 208, 65, 0, 0, 12, 66, 0, 0, 208, 65, 0, 0, 16, 66, 0, 0, 208, 65, 0, 0, 20, 66, 0, 0, 208, 65, 0, 0, 24, 66, 0, 0, 208, 65, 0, 0, 28, 66, 0, 0, 208, 65, 0, 0, 32, 66, 0, 0, 208, 65, 0, 0, 36, 66, 0, 0, 208, 65, 0, 0, 40, 66, 0, 0, 208, 65, 0, 0, 44, 66, 0, 0, 208, 65, 0, 0, 48, 66, 0, 0, 208, 65, 0, 0, 52, 66, 0, 0, 208, 65, 0, 0, 56, 66, 0, 0, 208, 65, 0, 0, 60, 66, 0, 0, 208, 65, 0, 0, 64, 66, 0, 0, 208, 65, 0, 0, 68, 66, 0, 0, 208, 65, 0, 0, 72, 66, 0, 0, 208, 65, 0, 0, 76, 66, 0, 0, 208, 65, 0, 0, 80, 66, 0, 0, 216, 65, 0, 0, 216, 65, 0, 0, 216, 65, 0, 0, 224, 65, 0, 0, 216, 65, 0, 0, 232, 65, 0, 0, 216, 65, 0, 0, 240, 65, 0, 0, 216, 65, 0, 0, 248, 65, 0, 0, 216, 65, 0, 0, 0, 66, 0, 0, 216, 65, 0, 0, 4, 66, 0, 0, 216, 65, 0, 0, 8, 66, 0, 0, 216, 65, 0, 0, 12, 66, 0, 0, 216, 65, 0, 0, 16, 66, 0, 0, 216, 65, 0, 0, 20, 66, 0, 0, 216, 65, 0, 0, 24, 66, 0, 0, 216, 65, 0, 0, 28, 66, 0, 0, 216, 65, 0, 0, 32, 66, 0, 0, 216, 65, 0, 0, 36, 66, 0, 0, 216, 65, 0, 0, 40, 66, 0, 0, 216, 65, 0, 0, 44, 66, 0, 0, 216, 65, 0, 0, 48, 66, 0, 0, 216, 65, 0, 0, 52, 66, 0, 0, 216, 65, 0, 0, 56, 66, 0, 0, 216, 65, 0, 0, 60, 66, 0, 0, 216, 65, 0, 0, 64, 66, 0, 0, 216, 65, 0, 0, 68, 66, 0, 0, 216, 65, 0, 0, 72, 66, 0, 0, 216, 65, 0, 0, 76, 66, 0, 0, 216, 65, 0, 0, 80, 66, 0, 0, 216, 65, 0, 0, 84, 66, 0, 0, 216, 65, 0, 0, 88, 66, 0, 0, 216, 65, 0, 0, 92, 66, 0, 0, 216, 65, 0, 0, 96, 66, 0, 0, 216, 65, 0, 0, 100, 66, 0, 0, 224, 65, 0, 0, 232, 65, 0, 0, 224, 65, 0, 0, 240, 65, 0, 0, 224, 65, 0, 0, 248, 65, 0, 0, 224, 65, 0, 0, 0, 66, 0, 0, 224, 65, 0, 0, 4, 66, 0, 0, 224, 65, 0, 0, 8, 66, 0, 0, 224, 65, 0, 0, 12, 66, 0, 0, 224, 65, 0, 0, 16, 66, 0, 0, 224, 65, 0, 0, 20, 66, 0, 0, 224, 65, 0, 0, 24, 66, 0, 0, 224, 65, 0, 0, 28, 66, 0, 0, 224, 65, 0, 0, 32, 66, 0, 0, 224, 65, 0, 0, 36, 66, 0, 0, 224, 65, 0, 0, 40, 66, 0, 0, 224, 65, 0, 0, 44, 66, 0, 0, 224, 65, 0, 0, 48, 66, 0, 0, 224, 65, 0, 0, 52, 66, 0, 0, 224, 65, 0, 0, 56, 66, 0, 0, 224, 65, 0, 0, 60, 66, 0, 0, 224, 65, 0, 0, 64, 66, 0, 0, 224, 65, 0, 0, 68, 66, 0, 0, 224, 65, 0, 0, 72, 66, 0, 0, 224, 65, 0, 0, 76, 66, 0, 0, 224, 65, 0, 0, 80, 66, 0, 0, 224, 65, 0, 0, 84, 66, 0, 0, 224, 65, 0, 0, 88, 66, 0, 0, 224, 65, 0, 0, 92, 66, 0, 0, 224, 65, 0, 0, 96, 66, 0, 0, 224, 65, 0, 0, 100, 66, 0, 0, 224, 65, 0, 0, 104, 66, 0, 0, 232, 65, 0, 0, 240, 65, 0, 0, 232, 65, 0, 0, 248, 65, 0, 0, 232, 65, 0, 0, 0, 66, 0, 0, 232, 65, 0, 0, 4, 66, 0, 0, 232, 65, 0, 0, 8, 66, 0, 0, 232, 65, 0, 0, 12, 66, 0, 0, 232, 65, 0, 0, 16, 66, 0, 0, 232, 65, 0, 0, 20, 66, 0, 0, 232, 65, 0, 0, 24, 66, 0, 0, 232, 65, 0, 0, 28, 66, 0, 0, 232, 65, 0, 0, 32, 66, 0, 0, 232, 65, 0, 0, 36, 66, 0, 0, 232, 65, 0, 0, 40, 66, 0, 0, 232, 65, 0, 0, 44, 66, 0, 0, 232, 65, 0, 0, 48, 66, 0, 0, 232, 65, 0, 0, 52, 66, 0, 0, 232, 65, 0, 0, 56, 66, 0, 0, 232, 65, 0, 0, 60, 66, 0, 0, 232, 65, 0, 0, 64, 66, 0, 0, 232, 65, 0, 0, 68, 66, 0, 0, 232, 65, 0, 0, 72, 66, 0, 0, 232, 65, 0, 0, 76, 66, 0, 0, 232, 65, 0, 0, 80, 66, 0, 0, 232, 65, 0, 0, 84, 66, 0, 0, 232, 65, 0, 0, 88, 66, 0, 0, 232, 65, 0, 0, 92, 66, 0, 0, 232, 65, 0, 0, 96, 66, 0, 0, 232, 65, 0, 0, 100, 66, 0, 0, 240, 65, 0, 0, 248, 65, 0, 0, 240, 65, 0, 0, 0, 66, 0, 0, 240, 65, 0, 0, 4, 66, 0, 0, 240, 65, 0, 0, 8, 66, 0, 0, 240, 65, 0, 0, 12, 66, 0, 0, 240, 65, 0, 0, 16, 66, 0, 0, 240, 65, 0, 0, 20, 66, 0, 0, 240, 65, 0, 0, 24, 66, 0, 0, 240, 65, 0, 0, 28, 66, 0, 0, 240, 65, 0, 0, 32, 66, 0, 0, 240, 65, 0, 0, 36, 66, 0, 0, 240, 65, 0, 0, 40, 66, 0, 0, 240, 65, 0, 0, 44, 66, 0, 0, 240, 65, 0, 0, 48, 66, 0, 0, 240, 65, 0, 0, 52, 66, 0, 0, 240, 65, 0, 0, 56, 66, 0, 0, 240, 65, 0, 0, 60, 66, 0, 0, 240, 65, 0, 0, 64, 66, 0, 0, 240, 65, 0, 0, 68, 66, 0, 0, 240, 65, 0, 0, 72, 66, 0, 0, 240, 65, 0, 0, 76, 66, 0, 0, 240, 65, 0, 0, 80, 66, 0, 0, 248, 65, 0, 0, 248, 65, 0, 0, 248, 65, 0, 0, 0, 66, 0, 0, 248, 65, 0, 0, 4, 66, 0, 0, 248, 65, 0, 0, 8, 66, 0, 0, 248, 65, 0, 0, 12, 66, 0, 0, 248, 65, 0, 0, 16, 66, 0, 0, 248, 65, 0, 0, 20, 66, 0, 0, 248, 65, 0, 0, 24, 66, 0, 0, 248, 65, 0, 0, 28, 66, 0, 0, 248, 65, 0, 0, 32, 66, 0, 0, 248, 65, 0, 0, 36, 66, 0, 0, 248, 65, 0, 0, 40, 66, 0, 0, 248, 65, 0, 0, 44, 66, 0, 0, 248, 65, 0, 0, 48, 66, 0, 0, 248, 65, 0, 0, 52, 66, 0, 0, 248, 65, 0, 0, 56, 66, 0, 0, 248, 65, 0, 0, 60, 66, 0, 0, 248, 65, 0, 0, 64, 66, 0, 0, 248, 65, 0, 0, 68, 66, 0, 0, 248, 65, 0, 0, 72, 66, 0, 0, 0, 66, 0, 0, 248, 65, 0, 0, 0, 66, 0, 0, 0, 66, 0, 0, 0, 66, 0, 0, 4, 66, 0, 0, 0, 66, 0, 0, 8, 66, 0, 0, 0, 66, 0, 0, 12, 66, 0, 0, 0, 66, 0, 0, 16, 66, 0, 0, 0, 66, 0, 0, 20, 66, 0, 0, 0, 66, 0, 0, 24, 66, 0, 0, 0, 66, 0, 0, 28, 66, 0, 0, 0, 66, 0, 0, 32, 66, 0, 0, 0, 66, 0, 0, 36, 66, 0, 0, 0, 66, 0, 0, 40, 66, 0, 0, 0, 66, 0, 0, 44, 66, 0, 0, 0, 66, 0, 0, 48, 66, 0, 0, 0, 66, 0, 0, 52, 66, 0, 0, 0, 66, 0, 0, 56, 66, 0, 0, 0, 66, 0, 0, 60, 66, 0, 0, 0, 66, 0, 0, 64, 66, 0, 0, 0, 66, 0, 0, 68, 66, 0, 0, 4, 66, 0, 0, 240, 65, 0, 0, 4, 66, 0, 0, 248, 65, 0, 0, 4, 66, 0, 0, 0, 66, 0, 0, 4, 66, 0, 0, 4, 66, 0, 0, 4, 66, 0, 0, 8, 66, 0, 0, 4, 66, 0, 0, 12, 66, 0, 0, 4, 66, 0, 0, 16, 66, 0, 0, 4, 66, 0, 0, 20, 66, 0, 0, 4, 66, 0, 0, 24, 66, 0, 0, 4, 66, 0, 0, 28, 66, 0, 0, 4, 66, 0, 0, 32, 66, 0, 0, 4, 66, 0, 0, 36, 66, 0, 0, 4, 66, 0, 0, 40, 66, 0, 0, 4, 66, 0, 0, 44, 66, 0, 0, 4, 66, 0, 0, 48, 66, 0, 0, 4, 66, 0, 0, 52, 66, 0, 0, 4, 66, 0, 0, 56, 66, 0, 0, 4, 66, 0, 0, 60, 66, 0, 0, 4, 66, 0, 0, 64, 66, 0, 0, 4, 66, 0, 0, 68, 66, 0, 0, 4, 66, 0, 0, 72, 66, 0, 0, 8, 66, 0, 0, 232, 65, 0, 0, 8, 66, 0, 0, 240, 65, 0, 0, 8, 66, 0, 0, 248, 65, 0, 0, 8, 66, 0, 0, 0, 66, 0, 0, 8, 66, 0, 0, 4, 66, 0, 0, 8, 66, 0, 0, 8, 66, 0, 0, 8, 66, 0, 0, 12, 66, 0, 0, 8, 66, 0, 0, 16, 66, 0, 0, 8, 66, 0, 0, 20, 66, 0, 0, 8, 66, 0, 0, 24, 66, 0, 0, 8, 66, 0, 0, 28, 66, 0, 0, 8, 66, 0, 0, 32, 66, 0, 0, 8, 66, 0, 0, 36, 66, 0, 0, 8, 66, 0, 0, 40, 66, 0, 0, 8, 66, 0, 0, 44, 66, 0, 0, 8, 66, 0, 0, 48, 66, 0, 0, 8, 66, 0, 0, 52, 66, 0, 0, 8, 66, 0, 0, 56, 66, 0, 0, 8, 66, 0, 0, 60, 66, 0, 0, 8, 66, 0, 0, 64, 66, 0, 0, 8, 66, 0, 0, 68, 66, 0, 0, 8, 66, 0, 0, 72, 66, 0, 0, 8, 66, 0, 0, 76, 66, 0, 0, 8, 66, 0, 0, 80, 66, 0, 0, 8, 66, 0, 0, 84, 66, 0, 0, 8, 66, 0, 0, 88, 66, 0, 0, 12, 66, 0, 0, 216, 65, 0, 0, 12, 66, 0, 0, 224, 65, 0, 0, 12, 66, 0, 0, 232, 65, 0, 0, 12, 66, 0, 0, 240, 65, 0, 0, 12, 66, 0, 0, 248, 65, 0, 0, 12, 66, 0, 0, 0, 66, 0, 0, 12, 66, 0, 0, 4, 66, 0, 0, 12, 66, 0, 0, 8, 66, 0, 0, 12, 66, 0, 0, 12, 66, 0, 0, 12, 66, 0, 0, 16, 66, 0, 0, 12, 66, 0, 0, 20, 66, 0, 0, 12, 66, 0, 0, 24, 66, 0, 0, 12, 66, 0, 0, 28, 66, 0, 0, 12, 66, 0, 0, 32, 66, 0, 0, 12, 66, 0, 0, 36, 66, 0, 0, 12, 66, 0, 0, 40, 66, 0, 0, 12, 66, 0, 0, 44, 66, 0, 0, 12, 66, 0, 0, 48, 66, 0, 0, 12, 66, 0, 0, 52, 66, 0, 0, 12, 66, 0, 0, 56, 66, 0, 0, 12, 66, 0, 0, 60, 66, 0, 0, 12, 66, 0, 0, 64, 66, 0, 0, 12, 66, 0, 0, 68, 66, 0, 0, 12, 66, 0, 0, 72, 66, 0, 0, 12, 66, 0, 0, 76, 66, 0, 0, 12, 66, 0, 0, 80, 66, 0, 0, 12, 66, 0, 0, 84, 66, 0, 0, 12, 66, 0, 0, 88, 66, 0, 0, 12, 66, 0, 0, 92, 66, 0, 0, 12, 66, 0, 0, 96, 66, 0, 0, 12, 66, 0, 0, 100, 66, 0, 0, 12, 66, 0, 0, 104, 66, 0, 0, 16, 66, 0, 0, 192, 65, 0, 0, 16, 66, 0, 0, 200, 65, 0, 0, 16, 66, 0, 0, 208, 65, 0, 0, 16, 66, 0, 0, 216, 65, 0, 0, 16, 66, 0, 0, 224, 65, 0, 0, 16, 66, 0, 0, 232, 65, 0, 0, 16, 66, 0, 0, 240, 65, 0, 0, 16, 66, 0, 0, 248, 65, 0, 0, 16, 66, 0, 0, 0, 66, 0, 0, 16, 66, 0, 0, 4, 66, 0, 0, 16, 66, 0, 0, 8, 66, 0, 0, 16, 66, 0, 0, 12, 66, 0, 0, 16, 66, 0, 0, 16, 66, 0, 0, 16, 66, 0, 0, 20, 66, 0, 0, 16, 66, 0, 0, 24, 66, 0, 0, 16, 66, 0, 0, 28, 66, 0, 0, 16, 66, 0, 0, 32, 66, 0, 0, 16, 66, 0, 0, 36, 66, 0, 0, 16, 66, 0, 0, 40, 66, 0, 0, 16, 66, 0, 0, 44, 66, 0, 0, 16, 66, 0, 0, 48, 66, 0, 0, 16, 66, 0, 0, 52, 66, 0, 0, 16, 66, 0, 0, 56, 66, 0, 0, 16, 66, 0, 0, 60, 66, 0, 0, 16, 66, 0, 0, 64, 66, 0, 0, 16, 66, 0, 0, 68, 66, 0, 0, 16, 66, 0, 0, 72, 66, 0, 0, 16, 66, 0, 0, 76, 66, 0, 0, 16, 66, 0, 0, 80, 66, 0, 0, 16, 66, 0, 0, 84, 66, 0, 0, 16, 66, 0, 0, 88, 66, 0, 0, 16, 66, 0, 0, 92, 66, 0, 0, 16, 66, 0, 0, 96, 66, 0, 0, 16, 66, 0, 0, 100, 66, 0, 0, 16, 66, 0, 0, 104, 66, 0, 0, 16, 66, 0, 0, 108, 66, 0, 0, 20, 66, 0, 0, 192, 65, 0, 0, 20, 66, 0, 0, 200, 65, 0, 0, 20, 66, 0, 0, 208, 65, 0, 0, 20, 66, 0, 0, 216, 65, 0, 0, 20, 66, 0, 0, 224, 65, 0, 0, 20, 66, 0, 0, 232, 65, 0, 0, 20, 66, 0, 0, 240, 65, 0, 0, 20, 66, 0, 0, 248, 65, 0, 0, 20, 66, 0, 0, 0, 66, 0, 0, 20, 66, 0, 0, 4, 66, 0, 0, 20, 66, 0, 0, 8, 66, 0, 0, 20, 66, 0, 0, 12, 66, 0, 0, 20, 66, 0, 0, 16, 66, 0, 0, 20, 66, 0, 0, 20, 66, 0, 0, 20, 66, 0, 0, 24, 66, 0, 0, 20, 66, 0, 0, 28, 66, 0, 0, 20, 66, 0, 0, 32, 66, 0, 0, 20, 66, 0, 0, 36, 66, 0, 0, 20, 66, 0, 0, 40, 66, 0, 0, 20, 66, 0, 0, 44, 66, 0, 0, 20, 66, 0, 0, 48, 66, 0, 0, 20, 66, 0, 0, 52, 66, 0, 0, 20, 66, 0, 0, 56, 66, 0, 0, 20, 66, 0, 0, 60, 66, 0, 0, 20, 66, 0, 0, 64, 66, 0, 0, 20, 66, 0, 0, 68, 66, 0, 0, 20, 66, 0, 0, 72, 66, 0, 0, 20, 66, 0, 0, 76, 66, 0, 0, 20, 66, 0, 0, 80, 66, 0, 0, 20, 66, 0, 0, 84, 66, 0, 0, 20, 66, 0, 0, 88, 66, 0, 0, 20, 66, 0, 0, 92, 66, 0, 0, 20, 66, 0, 0, 96, 66, 0, 0, 20, 66, 0, 0, 100, 66, 0, 0, 20, 66, 0, 0, 104, 66, 0, 0, 20, 66, 0, 0, 108, 66, 0, 0, 20, 66, 0, 0, 112, 66, 0, 0, 20, 66, 0, 0, 116, 66, 0, 0, 24, 66, 0, 0, 184, 65, 0, 0, 24, 66, 0, 0, 192, 65, 0, 0, 24, 66, 0, 0, 200, 65, 0, 0, 24, 66, 0, 0, 208, 65, 0, 0, 24, 66, 0, 0, 216, 65, 0, 0, 24, 66, 0, 0, 224, 65, 0, 0, 24, 66, 0, 0, 232, 65, 0, 0, 24, 66, 0, 0, 240, 65, 0, 0, 24, 66, 0, 0, 248, 65, 0, 0, 24, 66, 0, 0, 0, 66, 0, 0, 24, 66, 0, 0, 4, 66, 0, 0, 24, 66, 0, 0, 8, 66, 0, 0, 24, 66, 0, 0, 12, 66, 0, 0, 24, 66, 0, 0, 16, 66, 0, 0, 24, 66, 0, 0, 20, 66, 0, 0, 24, 66, 0, 0, 24, 66, 0, 0, 24, 66, 0, 0, 28, 66, 0, 0, 24, 66, 0, 0, 32, 66, 0, 0, 24, 66, 0, 0, 36, 66, 0, 0, 24, 66, 0, 0, 40, 66, 0, 0, 24, 66, 0, 0, 44, 66, 0, 0, 24, 66, 0, 0, 48, 66, 0, 0, 24, 66, 0, 0, 52, 66, 0, 0, 24, 66, 0, 0, 56, 66, 0, 0, 24, 66, 0, 0, 60, 66, 0, 0, 24, 66, 0, 0, 64, 66, 0, 0, 28, 66, 0, 0, 184, 65, 0, 0, 28, 66, 0, 0, 192, 65, 0, 0, 28, 66, 0, 0, 200, 65, 0, 0, 28, 66, 0, 0, 208, 65, 0, 0, 28, 66, 0, 0, 216, 65, 0, 0, 28, 66, 0, 0, 224, 65, 0, 0, 28, 66, 0, 0, 232, 65, 0, 0, 28, 66, 0, 0, 240, 65, 0, 0, 28, 66, 0, 0, 248, 65, 0, 0, 28, 66, 0, 0, 0, 66, 0, 0, 28, 66, 0, 0, 4, 66, 0, 0, 28, 66, 0, 0, 8, 66, 0, 0, 28, 66, 0, 0, 12, 66, 0, 0, 28, 66, 0, 0, 16, 66, 0, 0, 28, 66, 0, 0, 20, 66, 0, 0, 28, 66, 0, 0, 24, 66, 0, 0, 28, 66, 0, 0, 28, 66, 0, 0, 28, 66, 0, 0, 32, 66, 0, 0, 28, 66, 0, 0, 36, 66, 0, 0, 28, 66, 0, 0, 40, 66, 0, 0, 28, 66, 0, 0, 44, 66, 0, 0, 28, 66, 0, 0, 48, 66, 0, 0, 28, 66, 0, 0, 52, 66, 0, 0, 32, 66, 0, 0, 184, 65, 0, 0, 32, 66, 0, 0, 192, 65, 0, 0, 32, 66, 0, 0, 200, 65, 0, 0, 32, 66, 0, 0, 208, 65, 0, 0, 32, 66, 0, 0, 216, 65, 0, 0, 32, 66, 0, 0, 224, 65, 0, 0, 32, 66, 0, 0, 232, 65, 0, 0, 32, 66, 0, 0, 240, 65, 0, 0, 32, 66, 0, 0, 248, 65, 0, 0, 32, 66, 0, 0, 0, 66, 0, 0, 32, 66, 0, 0, 4, 66, 0, 0, 32, 66, 0, 0, 8, 66, 0, 0, 32, 66, 0, 0, 12, 66, 0, 0, 32, 66, 0, 0, 16, 66, 0, 0, 32, 66, 0, 0, 20, 66, 0, 0, 32, 66, 0, 0, 24, 66, 0, 0, 32, 66, 0, 0, 28, 66, 0, 0, 32, 66, 0, 0, 32, 66, 0, 0, 32, 66, 0, 0, 36, 66, 0, 0, 32, 66, 0, 0, 40, 66, 0, 0, 32, 66, 0, 0, 44, 66, 0, 0, 32, 66, 0, 0, 48, 66, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0, 32, 66, 0, 0, 56, 66, 0, 0, 32, 66, 0, 0, 60, 66, 0, 0, 32, 66, 0, 0, 64, 66, 0, 0, 32, 66, 0, 0, 68, 66, 0, 0, 32, 66, 0, 0, 72, 66, 0, 0, 32, 66, 0, 0, 76, 66, 0, 0, 36, 66, 0, 0, 184, 65, 0, 0, 36, 66, 0, 0, 192, 65, 0, 0, 36, 66, 0, 0, 200, 65, 0, 0, 36, 66, 0, 0, 208, 65, 0, 0, 36, 66, 0, 0, 216, 65, 0, 0, 36, 66, 0, 0, 224, 65, 0, 0, 36, 66, 0, 0, 232, 65, 0, 0, 36, 66, 0, 0, 240, 65, 0, 0, 36, 66, 0, 0, 248, 65, 0, 0, 36, 66, 0, 0, 0, 66, 0, 0, 36, 66, 0, 0, 4, 66, 0, 0, 36, 66, 0, 0, 8, 66, 0, 0, 36, 66, 0, 0, 12, 66, 0, 0, 36, 66, 0, 0, 16, 66, 0, 0, 36, 66, 0, 0, 20, 66, 0, 0, 36, 66, 0, 0, 24, 66, 0, 0, 36, 66, 0, 0, 28, 66, 0, 0, 36, 66, 0, 0, 32, 66, 0, 0, 36, 66, 0, 0, 36, 66, 0, 0, 36, 66, 0, 0, 40, 66, 0, 0, 36, 66, 0, 0, 44, 66, 0, 0, 36, 66, 0, 0, 48, 66, 0, 0, 36, 66, 0, 0, 52, 66, 0, 0, 36, 66, 0, 0, 56, 66, 0, 0, 36, 66, 0, 0, 60, 66, 0, 0, 36, 66, 0, 0, 64, 66, 0, 0, 36, 66, 0, 0, 68, 66, 0, 0, 36, 66, 0, 0, 72, 66, 0, 0, 36, 66, 0, 0, 76, 66, 0, 0, 36, 66, 0, 0, 80, 66, 0, 0, 40, 66, 0, 0, 176, 65, 0, 0, 40, 66, 0, 0, 184, 65, 0, 0, 40, 66, 0, 0, 192, 65, 0, 0, 40, 66, 0, 0, 200, 65, 0, 0, 40, 66, 0, 0, 208, 65, 0, 0, 40, 66, 0, 0, 216, 65, 0, 0, 40, 66, 0, 0, 224, 65, 0, 0, 40, 66, 0, 0, 232, 65, 0, 0, 40, 66, 0, 0, 240, 65, 0, 0, 40, 66, 0, 0, 248, 65, 0, 0, 40, 66, 0, 0, 0, 66, 0, 0, 40, 66, 0, 0, 4, 66, 0, 0, 40, 66, 0, 0, 8, 66, 0, 0, 40, 66, 0, 0, 12, 66, 0, 0, 40, 66, 0, 0, 16, 66, 0, 0, 40, 66, 0, 0, 20, 66, 0, 0, 40, 66, 0, 0, 24, 66, 0, 0, 40, 66, 0, 0, 28, 66, 0, 0, 44, 66, 0, 0, 168, 65, 0, 0, 44, 66, 0, 0, 176, 65, 0, 0, 44, 66, 0, 0, 184, 65, 0, 0, 44, 66, 0, 0, 192, 65, 0, 0, 44, 66, 0, 0, 200, 65, 0, 0, 44, 66, 0, 0, 208, 65, 0, 0, 44, 66, 0, 0, 216, 65, 0, 0, 44, 66, 0, 0, 224, 65, 0, 0, 44, 66, 0, 0, 232, 65, 0, 0, 44, 66, 0, 0, 240, 65, 0, 0, 44, 66, 0, 0, 248, 65, 0, 0, 44, 66, 0, 0, 0, 66, 0, 0, 44, 66, 0, 0, 4, 66, 0, 0, 44, 66, 0, 0, 8, 66, 0, 0, 48, 66, 0, 0, 160, 65, 0, 0, 48, 66, 0, 0, 168, 65, 0, 0, 48, 66, 0, 0, 176, 65, 0, 0, 48, 66, 0, 0, 184, 65, 0, 0, 48, 66, 0, 0, 192, 65, 0, 0, 48, 66, 0, 0, 200, 65, 0, 0, 48, 66, 0, 0, 208, 65, 0, 0, 48, 66, 0, 0, 216, 65, 0, 0, 48, 66, 0, 0, 224, 65, 0, 0, 48, 66, 0, 0, 232, 65, 0, 0, 48, 66, 0, 0, 240, 65, 0, 0, 48, 66, 0, 0, 248, 65, 0, 0, 48, 66, 0, 0, 0, 66, 0, 0, 48, 66, 0, 0, 4, 66, 0, 0, 48, 66, 0, 0, 8, 66, 0, 0, 48, 66, 0, 0, 12, 66, 0, 0, 48, 66, 0, 0, 16, 66, 0, 0, 52, 66, 0, 0, 152, 65, 0, 0, 52, 66, 0, 0, 160, 65, 0, 0, 52, 66, 0, 0, 168, 65, 0, 0, 52, 66, 0, 0, 176, 65, 0, 0, 52, 66, 0, 0, 184, 65, 0, 0, 52, 66, 0, 0, 192, 65, 0, 0, 52, 66, 0, 0, 200, 65, 0, 0, 52, 66, 0, 0, 208, 65, 0, 0, 52, 66, 0, 0, 216, 65, 0, 0, 52, 66, 0, 0, 224, 65, 0, 0, 52, 66, 0, 0, 232, 65, 0, 0, 52, 66, 0, 0, 240, 65, 0, 0, 52, 66, 0, 0, 248, 65, 0, 0, 52, 66, 0, 0, 0, 66, 0, 0, 52, 66, 0, 0, 4, 66, 0, 0, 52, 66, 0, 0, 8, 66, 0, 0, 52, 66, 0, 0, 12, 66, 0, 0, 52, 66, 0, 0, 16, 66, 0, 0, 52, 66, 0, 0, 20, 66, 0, 0, 52, 66, 0, 0, 24, 66, 0, 0, 52, 66, 0, 0, 28, 66, 0, 0, 52, 66, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0, 36, 66, 0, 0, 52, 66, 0, 0, 40, 66, 0, 0, 52, 66, 0, 0, 44, 66, 0, 0, 52, 66, 0, 0, 48, 66, 0, 0, 52, 66, 0, 0, 52, 66, 0, 0, 52, 66, 0, 0, 56, 66, 0, 0, 52, 66, 0, 0, 60, 66, 0, 0, 52, 66, 0, 0, 64, 66, 0, 0, 52, 66, 0, 0, 68, 66, 0, 0, 52, 66, 0, 0, 72, 66, 0, 0, 56, 66, 0, 0, 144, 65, 0, 0, 56, 66, 0, 0, 152, 65, 0, 0, 56, 66, 0, 0, 160, 65, 0, 0, 56, 66, 0, 0, 168, 65, 0, 0, 56, 66, 0, 0, 192, 65, 0, 0, 56, 66, 0, 0, 200, 65, 0, 0, 56, 66, 0, 0, 208, 65, 0, 0, 56, 66, 0, 0, 216, 65, 0, 0, 56, 66, 0, 0, 224, 65, 0, 0, 56, 66, 0, 0, 232, 65, 0, 0, 56, 66, 0, 0, 240, 65, 0, 0, 56, 66, 0, 0, 248, 65, 0, 0, 56, 66, 0, 0, 0, 66, 0, 0, 56, 66, 0, 0, 4, 66, 0, 0, 56, 66, 0, 0, 8, 66, 0, 0, 56, 66, 0, 0, 12, 66, 0, 0, 56, 66, 0, 0, 16, 66, 0, 0, 56, 66, 0, 0, 20, 66, 0, 0, 56, 66, 0, 0, 24, 66, 0, 0, 56, 66, 0, 0, 28, 66, 0, 0, 56, 66, 0, 0, 32, 66, 0, 0, 56, 66, 0, 0, 36, 66, 0, 0, 56, 66, 0, 0, 40, 66, 0, 0, 56, 66, 0, 0, 44, 66, 0, 0, 56, 66, 0, 0, 48, 66, 0, 0, 60, 66, 0, 0, 136, 65, 0, 0, 60, 66, 0, 0, 144, 65, 0, 0, 60, 66, 0, 0, 152, 65, 0, 0, 60, 66, 0, 0, 160, 65, 0, 0, 60, 66, 0, 0, 192, 65, 0, 0, 60, 66, 0, 0, 200, 65, 0, 0, 60, 66, 0, 0, 208, 65, 0, 0, 60, 66, 0, 0, 216, 65, 0, 0, 60, 66, 0, 0, 224, 65, 0, 0, 60, 66, 0, 0, 0, 66, 0, 0, 60, 66, 0, 0, 4, 66, 0, 0, 60, 66, 0, 0, 8, 66, 0, 0, 60, 66, 0, 0, 12, 66, 0, 0, 60, 66, 0, 0, 16, 66, 0, 0, 60, 66, 0, 0, 20, 66, 0, 0, 60, 66, 0, 0, 24, 66, 0, 0, 60, 66, 0, 0, 28, 66, 0, 0, 60, 66, 0, 0, 32, 66, 0, 0, 60, 66, 0, 0, 36, 66, 0, 0, 64, 66, 0, 0, 128, 65, 0, 0, 64, 66, 0, 0, 136, 65, 0, 0, 64, 66, 0, 0, 144, 65, 0, 0, 64, 66, 0, 0, 152, 65, 0, 0, 64, 66, 0, 0, 184, 65, 0, 0, 64, 66, 0, 0, 192, 65, 0, 0, 64, 66, 0, 0, 200, 65, 0, 0, 64, 66, 0, 0, 208, 65, 0, 0, 64, 66, 0, 0, 216, 65, 0, 0, 64, 66, 0, 0, 8, 66, 0, 0, 64, 66, 0, 0, 12, 66, 0, 0, 64, 66, 0, 0, 16, 66, 0, 0, 64, 66, 0, 0, 20, 66, 0, 0, 64, 66, 0, 0, 24, 66, 0, 0, 64, 66, 0, 0, 28, 66, 0, 0, 68, 66, 0, 0, 112, 65, 0, 0, 68, 66, 0, 0, 128, 65, 0, 0, 68, 66, 0, 0, 136, 65, 0, 0, 68, 66, 0, 0, 144, 65, 0, 0, 68, 66, 0, 0, 184, 65, 0, 0, 68, 66, 0, 0, 192, 65, 0, 0, 68, 66, 0, 0, 200, 65, 0, 0, 68, 66, 0, 0, 208, 65, 0, 0, 68, 66, 0, 0, 216, 65, 0, 0, 68, 66, 0, 0, 16, 66, 0, 0, 68, 66, 0, 0, 20, 66, 0, 0, 68, 66, 0, 0, 24, 66, 0, 0, 68, 66, 0, 0, 28, 66, 0, 0, 68, 66, 0, 0, 32, 66, 0, 0, 72, 66, 0, 0, 112, 65, 0, 0, 72, 66, 0, 0, 128, 65, 0, 0, 72, 66, 0, 0, 136, 65, 0, 0, 72, 66, 0, 0, 184, 65, 0, 0, 72, 66, 0, 0, 192, 65, 0, 0, 72, 66, 0, 0, 200, 65, 0, 0, 72, 66, 0, 0, 208, 65, 0, 0, 72, 66, 0, 0, 20, 66, 0, 0, 72, 66, 0, 0, 24, 66, 0, 0, 72, 66, 0, 0, 28, 66, 0, 0, 72, 66, 0, 0, 32, 66, 0, 0, 72, 66, 0, 0, 36, 66, 0, 0, 72, 66, 0, 0, 40, 66, 0, 0, 76, 66, 0, 0, 96, 65, 0, 0, 76, 66, 0, 0, 112, 65, 0, 0, 76, 66, 0, 0, 128, 65, 0, 0, 76, 66, 0, 0, 184, 65, 0, 0, 76, 66, 0, 0, 192, 65, 0, 0, 76, 66, 0, 0, 200, 65, 0, 0, 76, 66, 0, 0, 208, 65, 0, 0, 76, 66, 0, 0, 216, 65, 0, 0, 76, 66, 0, 0, 20, 66, 0, 0, 76, 66, 0, 0, 24, 66, 0, 0, 76, 66, 0, 0, 28, 66, 0, 0, 76, 66, 0, 0, 32, 66, 0, 0, 76, 66, 0, 0, 36, 66, 0, 0, 76, 66, 0, 0, 40, 66, 0, 0, 76, 66, 0, 0, 44, 66, 0, 0, 80, 66, 0, 0, 96, 65, 0, 0, 80, 66, 0, 0, 112, 65, 0, 0, 80, 66, 0, 0, 128, 65, 0, 0, 80, 66, 0, 0, 184, 65, 0, 0, 80, 66, 0, 0, 192, 65, 0, 0, 80, 66, 0, 0, 200, 65, 0, 0, 80, 66, 0, 0, 208, 65, 0, 0, 80, 66, 0, 0, 216, 65, 0, 0, 80, 66, 0, 0, 224, 65, 0, 0, 80, 66, 0, 0, 232, 65, 0, 0, 80, 66, 0, 0, 240, 65, 0, 0, 80, 66, 0, 0, 24, 66, 0, 0, 80, 66, 0, 0, 28, 66, 0, 0, 80, 66, 0, 0, 32, 66, 0, 0, 80, 66, 0, 0, 36, 66, 0, 0, 80, 66, 0, 0, 40, 66, 0, 0, 80, 66, 0, 0, 44, 66, 0, 0, 84, 66, 0, 0, 96, 65, 0, 0, 84, 66, 0, 0, 112, 65, 0, 0, 84, 66, 0, 0, 128, 65, 0, 0, 84, 66, 0, 0, 184, 65, 0, 0, 84, 66, 0, 0, 192, 65, 0, 0, 84, 66, 0, 0, 200, 65, 0, 0, 84, 66, 0, 0, 208, 65, 0, 0, 84, 66, 0, 0, 216, 65, 0, 0, 84, 66, 0, 0, 224, 65, 0, 0, 84, 66, 0, 0, 232, 65, 0, 0, 84, 66, 0, 0, 240, 65, 0, 0, 84, 66, 0, 0, 248, 65, 0, 0, 84, 66, 0, 0, 0, 66, 0, 0, 84, 66, 0, 0, 32, 66, 0, 0, 84, 66, 0, 0, 36, 66, 0, 0, 84, 66, 0, 0, 40, 66, 0, 0, 84, 66, 0, 0, 44, 66, 0, 0, 88, 66, 0, 0, 96, 65, 0, 0, 88, 66, 0, 0, 112, 65, 0, 0, 88, 66, 0, 0, 128, 65, 0, 0, 88, 66, 0, 0, 136, 65, 0, 0, 88, 66, 0, 0, 192, 65, 0, 0, 88, 66, 0, 0, 200, 65, 0, 0, 88, 66, 0, 0, 208, 65, 0, 0, 88, 66, 0, 0, 216, 65, 0, 0, 88, 66, 0, 0, 0, 66, 0, 0, 88, 66, 0, 0, 4, 66, 0, 0, 88, 66, 0, 0, 8, 66, 0, 0, 88, 66, 0, 0, 12, 66, 0, 0, 88, 66, 0, 0, 40, 66, 0, 0, 88, 66, 0, 0, 44, 66, 0, 0, 92, 66, 0, 0, 96, 65, 0, 0, 92, 66, 0, 0, 112, 65, 0, 0, 92, 66, 0, 0, 128, 65, 0, 0, 92, 66, 0, 0, 136, 65, 0, 0, 92, 66, 0, 0, 144, 65, 0, 0, 92, 66, 0, 0, 208, 65, 0, 0, 92, 66, 0, 0, 216, 65, 0, 0, 92, 66, 0, 0, 8, 66, 0, 0, 92, 66, 0, 0, 12, 66, 0, 0, 92, 66, 0, 0, 16, 66, 0, 0, 92, 66, 0, 0, 20, 66, 0, 0, 92, 66, 0, 0, 24, 66, 0, 0, 96, 66, 0, 0, 112, 65, 0, 0, 96, 66, 0, 0, 128, 65, 0, 0, 96, 66, 0, 0, 136, 65, 0, 0, 96, 66, 0, 0, 144, 65, 0, 0, 96, 66, 0, 0, 152, 65, 0, 0, 96, 66, 0, 0, 216, 65, 0, 0, 96, 66, 0, 0, 224, 65, 0, 0, 96, 66, 0, 0, 16, 66, 0, 0, 96, 66, 0, 0, 20, 66, 0, 0, 96, 66, 0, 0, 24, 66, 0, 0, 96, 66, 0, 0, 28, 66, 0, 0, 96, 66, 0, 0, 32, 66, 0, 0, 96, 66, 0, 0, 36, 66, 0, 0, 96, 66, 0, 0, 40, 66, 0, 0, 96, 66, 0, 0, 44, 66, 0, 0, 100, 66, 0, 0, 128, 65, 0, 0, 100, 66, 0, 0, 136, 65, 0, 0, 100, 66, 0, 0, 144, 65, 0, 0, 100, 66, 0, 0, 152, 65, 0, 0, 100, 66, 0, 0, 160, 65, 0, 0, 100, 66, 0, 0, 168, 65, 0, 0, 100, 66, 0, 0, 184, 65, 0, 0, 100, 66, 0, 0, 224, 65, 0, 0, 100, 66, 0, 0, 232, 65, 0, 0, 100, 66, 0, 0, 36, 66, 0, 0, 100, 66, 0, 0, 40, 66, 0, 0, 100, 66, 0, 0, 44, 66, 0, 0, 100, 66, 0, 0, 48, 66, 0, 0, 100, 66, 0, 0, 52, 66, 0, 0, 100, 66, 0, 0, 56, 66, 0, 0, 100, 66, 0, 0, 68, 66, 0, 0, 100, 66, 0, 0, 72, 66, 0, 0, 100, 66, 0, 0, 76, 66, 0, 0, 104, 66, 0, 0, 136, 65, 0, 0, 104, 66, 0, 0, 144, 65, 0, 0, 104, 66, 0, 0, 152, 65, 0, 0, 104, 66, 0, 0, 160, 65, 0, 0, 104, 66, 0, 0, 168, 65, 0, 0, 104, 66, 0, 0, 176, 65, 0, 0, 104, 66, 0, 0, 184, 65, 0, 0, 104, 66, 0, 0, 232, 65, 0, 0, 104, 66, 0, 0, 240, 65, 0, 0, 104, 66, 0, 0, 248, 65, 0, 0, 104, 66, 0, 0, 0, 66, 0, 0, 108, 66, 0, 0, 152, 65, 0, 0, 108, 66, 0, 0, 160, 65, 0, 0, 108, 66, 0, 0, 168, 65, 0, 0, 108, 66, 0, 0, 176, 65, 0, 0, 108, 66, 0, 0, 240, 65, 0, 0, 108, 66, 0, 0, 248, 65, 0, 0, 108, 66, 0, 0, 0, 66, 0, 0, 108, 66, 0, 0, 4, 66, 0, 0, 108, 66, 0, 0, 8, 66, 0, 0, 108, 66, 0, 0, 12, 66, 0, 0, 108, 66, 0, 0, 16, 66, 0, 0, 108, 66, 0, 0, 20, 66, 0, 0, 112, 66, 0, 0, 160, 65, 0, 0, 112, 66, 0, 0, 0, 66, 0, 0, 112, 66, 0, 0, 4, 66, 0, 0, 112, 66, 0, 0, 8, 66, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 93, 4, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 13, 4, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 13, 4, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 13, 4, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 72, 4, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 72, 4, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 42, 5, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 218, 4, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 218, 4, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 218, 4, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 21, 5, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 21, 5, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 176, 5, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 96, 5, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 20, 0, 0, 0, 8, 118, 105, 99, 98, 104, 118, 0, 18, 164, 8, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 155, 5, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 155, 5, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 53, 6, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 229, 5, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 20, 0, 0, 0, 4, 118, 101, 99, 98, 104, 118, 0, 17, 128, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 32, 6, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 32, 6, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 249, 6, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 169, 6, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 169, 6, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 169, 6, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 228, 6, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 228, 6, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 122, 7, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 42, 7, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 17, 128, 117, 116, 121, 112, 101, 0, 17, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 101, 7, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 101, 7, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 47, 8, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 4, 129, 206, 224, 130, 78, 1, 208, 227, 7, 0, 0, 0, 0, 0, 0, 129, 78, 127, 17, 22, 95, 87, 77, 87, 105, 110, 100, 111, 119, 79, 114, 100, 101, 114, 105, 110, 103, 73, 110, 102, 111, 0, 129, 248, 129, 253, 129, 206, 17, 3, 117, 111, 119, 105, 100, 0, 224, 119, 111, 99, 103, 119, 105, 100, 0, 17, 0, 116, 112, 112, 115, 0, 17, 0, 117, 114, 119, 105, 100, 0, 224, 116, 99, 101, 116, 0, 17, 0, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 26, 8, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 26, 8, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 220, 9, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 1, 129, 206, 208, 140, 9, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 111, 17, 36, 56, 0, 65, 0, 56, 0, 49, 0, 51, 0, 55, 0, 52, 0, 69, 0, 45, 0, 50, 0, 69, 0, 53, 0, 67, 0, 45, 0, 52, 0, 49, 0, 49, 0, 65, 0, 45, 0, 56, 0, 69, 0, 70, 0, 50, 0, 45, 0, 53, 0, 54, 0, 68, 0, 51, 0, 54, 0, 50, 0, 55, 0, 53, 0, 70, 0, 69, 0, 55, 0, 70, 0, 130, 72, 1, 24, 255, 255, 255, 255, 255, 255, 255, 255, 115, 102, 114, 0, 79, 17, 32, 0, 0, 0, 0, 0, 0, 89, 64, 0, 0, 0, 0, 0, 0, 89, 64, 0, 0, 0, 0, 0, 104, 144, 64, 0, 0, 0, 0, 0, 192, 134, 64, 115, 116, 105, 0, 96, 115, 119, 108, 0, 17, 0, 118, 99, 103, 119, 105, 100, 0, 17, 0, 130, 35, 7, 17, 0, 119, 116, 121, 112, 101, 105, 100, 0, 224, 117, 112, 114, 101, 115, 0, 17, 0, 117, 112, 119, 105, 100, 0, 224, 118, 112, 115, 110, 104, 105, 0, 17, 0, 118, 112, 115, 110, 108, 111, 0, 17, 0, 117, 102, 114, 101, 116, 0, 24, 209, 176, 56, 225, 6, 6, 2, 0, 117, 102, 100, 99, 115, 0, 18, 0, 4, 118, 115, 104, 112, 114, 112, 0, 224, 117, 100, 105, 99, 114, 0, 130, 98, 2, 117, 99, 114, 97, 100, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 130, 91, 2, 130, 98, 2, 118, 117, 109, 103, 100, 102, 0, 79, 17, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 115, 109, 115, 107, 0, 17, 0, 130, 221, 5, 17, 0, 130, 87, 5, 17, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 199, 9, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 199, 9, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 165, 10, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 85, 10, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 18, 0, 16, 130, 250, 8, 111, 17, 36, 68, 0, 69, 0, 53, 0, 65, 0, 68, 0, 57, 0, 69, 0, 68, 0, 45, 0, 56, 0, 66, 0, 51, 0, 54, 0, 45, 0, 52, 0, 65, 0, 53, 0, 48, 0, 45, 0, 65, 0, 52, 0, 57, 0, 68, 0, 45, 0, 65, 0, 65, 0, 56, 0, 49, 0, 70, 0, 65, 0, 66, 0, 57, 0, 66, 0, 70, 0, 66, 0, 56, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 144, 10, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 144, 10, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 37, 11, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 213, 10, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 17, 64, 130, 219, 8, 18, 238, 204, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 16, 11, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 16, 11, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 216, 11, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 136, 11, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 136, 11, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 136, 11, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 195, 11, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 195, 11, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 148, 12, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 68, 12, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 68, 12, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 68, 12, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 127, 12, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 127, 12, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 19, 13, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 195, 12, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 17, 128, 130, 35, 7, 17, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 254, 12, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 254, 12, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 156, 13, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 76, 13, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 64, 0, 130, 60, 9, 35, 0, 0, 0, 0, 0, 0, 40, 64, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 135, 13, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 135, 13, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 31, 14, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 207, 13, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 8, 130, 87, 5, 18, 164, 8, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 10, 14, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 10, 14, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 161, 14, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 81, 14, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 4, 130, 221, 5, 17, 128, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 140, 14, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 140, 14, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 32, 15, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 208, 14, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 18, 0, 16, 130, 250, 8, 224, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 11, 15, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 11, 15, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 158, 15, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 26, 129, 206, 224, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 208, 106, 15, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 106, 15, 0, 0, 0, 0, 0, 0, 130, 82, 8, 130, 129, 1, 208, 137, 15, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 137, 15, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 75, 16, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 251, 15, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 0, 0, 0, 0, 0, 0, 0, 0, 172, 64, 130, 169, 8, 79, 17, 32, 0, 130, 0, 141, 3, 0, 0, 0, 162, 0, 0, 0, 0, 0, 106, 64, 0, 0, 0, 0, 0, 104, 144, 64, 0, 0, 0, 0, 0, 192, 134, 64, 130, 19, 9, 24, 181, 181, 136, 224, 6, 6, 2, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 54, 16, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 54, 16, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 254, 16, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 174, 16, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 174, 16, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 174, 16, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 233, 16, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 233, 16, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 168, 17, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 88, 17, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 88, 17, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 88, 17, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 147, 17, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 147, 17, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 43, 18, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 219, 17, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 8, 130, 87, 5, 18, 36, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 22, 18, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 22, 18, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 174, 18, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 94, 18, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 4, 130, 221, 5, 18, 0, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 153, 18, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 153, 18, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 97, 19, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 17, 19, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 17, 19, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 17, 19, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 76, 19, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 76, 19, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 29, 20, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 205, 19, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 205, 19, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 205, 19, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 18, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 8, 20, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 8, 20, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 160, 20, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 80, 20, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 8, 130, 87, 5, 18, 68, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 139, 20, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 139, 20, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 35, 21, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 211, 20, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 4, 130, 221, 5, 18, 64, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 14, 21, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 14, 21, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 157, 21, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 77, 21, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 17, 32, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 136, 21, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 136, 21, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 121, 22, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 41, 22, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 11, 2, 130, 72, 1, 17, 16, 130, 91, 2, 208, 41, 22, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 41, 22, 0, 0, 0, 0, 0, 0, 208, 41, 22, 0, 0, 0, 0, 0, 0, 129, 78, 127, 17, 40, 87, 77, 87, 105, 110, 100, 111, 119, 80, 114, 111, 112, 101, 114, 116, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 104, 105, 108, 100, 87, 105, 110, 100, 111, 119, 73, 110, 102, 111, 0, 117, 99, 108, 100, 119, 0, 130, 82, 8, 117, 99, 108, 100, 112, 0, 17, 1, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 100, 22, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 100, 22, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 131, 23, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 51, 23, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 18, 0, 128, 130, 43, 9, 208, 51, 23, 0, 0, 0, 0, 0, 0, 129, 78, 127, 17, 26, 95, 87, 77, 87, 105, 110, 100, 111, 119, 83, 104, 97, 100, 111, 119, 80, 114, 111, 112, 101, 114, 116, 105, 101, 115, 0, 115, 97, 114, 0, 34, 0, 0, 160, 65, 115, 97, 100, 0, 34, 51, 51, 51, 63, 116, 97, 118, 111, 0, 34, 0, 0, 144, 65, 116, 97, 114, 115, 0, 176, 116, 97, 114, 100, 0, 34, 51, 51, 115, 63, 116, 97, 99, 116, 0, 192, 115, 105, 114, 0, 34, 0, 0, 64, 65, 115, 105, 100, 0, 34, 102, 102, 230, 62, 116, 105, 118, 111, 0, 34, 0, 0, 0, 65, 116, 105, 114, 115, 0, 176, 116, 105, 114, 100, 0, 34, 154, 153, 89, 63, 116, 105, 99, 116, 0, 192, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 110, 23, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 110, 23, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 72, 24, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 248, 23, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 248, 23, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 248, 23, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 18, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 51, 24, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 51, 24, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 202, 24, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 122, 24, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 2, 130, 123, 9, 17, 15, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 181, 24, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 181, 24, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 73, 25, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 249, 24, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 17, 128, 130, 35, 7, 17, 2, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 52, 25, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 52, 25, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 219, 25, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 4, 129, 206, 224, 130, 78, 1, 208, 143, 25, 0, 0, 0, 0, 0, 0, 129, 78, 130, 157, 7, 129, 248, 130, 82, 8, 129, 206, 17, 1, 130, 190, 7, 224, 130, 197, 7, 18, 239, 195, 130, 207, 7, 17, 0, 130, 214, 7, 224, 130, 221, 7, 17, 0, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 198, 25, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 198, 25, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 111, 26, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 31, 26, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 17, 1, 130, 208, 8, 107, 79, 0, 112, 0, 101, 0, 110, 0, 32, 0, 97, 0, 32, 0, 70, 0, 105, 0, 108, 0, 101, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 90, 26, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 90, 26, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 61, 27, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 237, 26, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 11, 2, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 237, 26, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 237, 26, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 248, 131, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 40, 27, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 40, 27, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 11, 28, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 187, 27, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 187, 27, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 187, 27, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 134, 0, 0, 0, 0, 0, 0, 0, 248, 18, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 246, 27, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 246, 27, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 226, 28, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 146, 28, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 146, 28, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 146, 28, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 131, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 134, 0, 0, 0, 0, 0, 0, 0, 248, 18, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 205, 28, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 205, 28, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 167, 29, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 87, 29, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 11, 2, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 87, 29, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 87, 29, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 57, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 56, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 146, 29, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 146, 29, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 63, 30, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 4, 129, 206, 224, 130, 78, 1, 208, 243, 29, 0, 0, 0, 0, 0, 0, 129, 78, 130, 157, 7, 129, 248, 130, 82, 8, 129, 206, 17, 4, 130, 190, 7, 224, 130, 197, 7, 17, 0, 130, 207, 7, 17, 0, 130, 214, 7, 224, 130, 221, 7, 24, 181, 181, 136, 224, 6, 6, 2, 0, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 42, 30, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 42, 30, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 184, 30, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 3, 129, 206, 208, 104, 30, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 129, 253, 130, 72, 1, 17, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 163, 30, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 163, 30, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 208, 152, 31, 0, 0, 0, 0, 0, 0, 129, 78, 129, 168, 129, 200, 17, 2, 129, 206, 208, 72, 31, 0, 0, 0, 0, 0, 0, 129, 78, 129, 220, 129, 248, 130, 82, 8, 130, 72, 1, 20, 0, 0, 0, 32, 130, 246, 2, 208, 72, 31, 0, 0, 0, 0, 0, 0, 129, 78, 129, 127, 129, 136, 160, 72, 31, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 248, 13, 0, 0, 0, 0, 0, 0, 0, 248, 134, 0, 0, 0, 0, 0, 0, 0, 248, 131, 0, 0, 0, 0, 0, 0, 0, 248, 18, 0, 0, 0, 0, 0, 0, 0, 248, 19, 0, 0, 0, 0, 0, 0, 0, 248, 22, 0, 0, 0, 0, 0, 0, 0, 248, 30, 0, 0, 0, 0, 0, 0, 0, 130, 78, 1, 224, 130, 82, 1, 224, 130, 90, 1, 224, 130, 98, 1, 224, 130, 105, 1, 224, 130, 114, 1, 224, 130, 122, 1, 224, 130, 129, 1, 208, 131, 31, 0, 0, 0, 0, 0, 0, 129, 78, 130, 144, 1, 129, 136, 160, 131, 31, 0, 0, 0, 0, 0, 0, 130, 162, 1, 130, 193, 1, 17, 0, 130, 201, 1, 224, 130, 208, 1, 224, 130, 216, 1, 224, 130, 224, 1, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 141, 3, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +"format": "RGFloat", +"height": 1, +"mipmaps": false, +"width": 2048 +} + +[resource] +image = SubResource("Image_jc6cb") diff --git a/scenes/Puppets/Enemies/assets/Enemy1.png.import b/scenes/Puppets/Enemies/assets/Enemy1.png.import new file mode 100644 index 00000000..fab1cddf --- /dev/null +++ b/scenes/Puppets/Enemies/assets/Enemy1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kanii866rnyf" +path="res://.godot/imported/Enemy1.png-6cca2af04071b56c63c9ecdd5d897db6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/Puppets/Enemies/assets/Enemy1.png" +dest_files=["res://.godot/imported/Enemy1.png-6cca2af04071b56c63c9ecdd5d897db6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png b/scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png new file mode 100644 index 00000000..851334ba Binary files /dev/null and b/scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png differ diff --git a/scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png.import b/scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png.import new file mode 100644 index 00000000..853abc22 --- /dev/null +++ b/scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5jpi2i502lw5" +path="res://.godot/imported/Enemy1EmissionShape.png-e1502c3313247b217f7d453af1069017.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/Puppets/Enemies/assets/Enemy1EmissionShape.png" +dest_files=["res://.godot/imported/Enemy1EmissionShape.png-e1502c3313247b217f7d453af1069017.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/Puppets/PlayerPuppet.tscn b/scenes/Puppets/PlayerPuppet.tscn new file mode 100644 index 00000000..83e5d034 --- /dev/null +++ b/scenes/Puppets/PlayerPuppet.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=3 uid="uid://eus17omen6yk"] + +[ext_resource type="Script" path="res://scenes/Puppets/scripts/PlayerPuppet.cs" id="1_f4rea"] +[ext_resource type="Texture2D" uid="uid://b6fkei0i83vte" path="res://scenes/BattleDirector/assets/Character1.png" id="2_affso"] +[ext_resource type="PackedScene" uid="uid://bgomxovxs7sr8" path="res://scenes/Puppets/HealthBar.tscn" id="3_rechw"] + +[node name="PlayerPuppet" type="Node2D" node_paths=PackedStringArray("_healthBar", "Sprite")] +script = ExtResource("1_f4rea") +_healthBar = NodePath("ProgressBar") +Sprite = NodePath("Sprite") +StartPos = Vector2(158, 125) + +[node name="Sprite" type="Sprite2D" parent="."] +texture = ExtResource("2_affso") + +[node name="ProgressBar" parent="." instance=ExtResource("3_rechw")] +offset_left = -75.0 +offset_top = 32.0 +offset_right = 75.0 +offset_bottom = 52.0 diff --git a/scenes/Puppets/scripts/PlayerPuppet.cs b/scenes/Puppets/scripts/PlayerPuppet.cs index c831fb6c..350291b7 100644 --- a/scenes/Puppets/scripts/PlayerPuppet.cs +++ b/scenes/Puppets/scripts/PlayerPuppet.cs @@ -12,9 +12,7 @@ public override void _Ready() _currentHealth = Stats.CurrentHealth; _maxHealth = Stats.MaxHealth; - Init(GD.Load("res://scenes/BattleDirector/assets/Character1.png"), "Player"); - SetPosition(new Vector2(80, 0)); - Sprite.Position += Vector2.Down * 30; //TEMP + UniqName = "Player"; base._Ready(); } diff --git a/scenes/Puppets/scripts/PlayerStats.cs b/scenes/Puppets/scripts/PlayerStats.cs index a42bd9cf..472109b6 100644 --- a/scenes/Puppets/scripts/PlayerStats.cs +++ b/scenes/Puppets/scripts/PlayerStats.cs @@ -12,6 +12,7 @@ public partial class PlayerStats : Resource Scribe.NoteDictionary[1].Clone(), Scribe.NoteDictionary[1].Clone(), Scribe.NoteDictionary[2].Clone(), + Scribe.NoteDictionary[3].Clone(), }; //TODO: Get a better method than .Clone public RelicTemplate[] CurRelics = Array.Empty(); diff --git a/scenes/Puppets/scripts/PuppetTemplate.cs b/scenes/Puppets/scripts/PuppetTemplate.cs index 9079b982..2bc1edf0 100644 --- a/scenes/Puppets/scripts/PuppetTemplate.cs +++ b/scenes/Puppets/scripts/PuppetTemplate.cs @@ -9,8 +9,17 @@ public partial class PuppetTemplate : Node2D public delegate void DefeatedHandler(PuppetTemplate self); public event DefeatedHandler Defeated; + [Export] protected HealthBar _healthBar; - public Sprite2D Sprite = new Sprite2D(); + + [Export] + public Sprite2D Sprite; + + [Export] + public Vector2 StartPos; //158, 126 + + [Export] + public Vector2 InitScale = Vector2.One; protected int _maxHealth = 100; protected int _currentHealth = 100; @@ -21,15 +30,9 @@ public partial class PuppetTemplate : Node2D public override void _Ready() { - _healthBar = GD.Load("res://scenes/Puppets/HealthBar.tscn") - .Instantiate(); - AddChild(_healthBar); - _healthBar.Position += Vector2.Down * 155; - - Sprite.Position = new Vector2(75, 86); - AddChild(Sprite); //TODO: DECIDE Whether to replace with packedscenes/robust subclasses - _healthBar.SetHealth(_maxHealth, _currentHealth); + Position = StartPos; + Sprite.Scale = InitScale; } public void Init(Texture2D texture, string name)