diff --git a/game/addons/.gitignore b/game/addons/.gitignore
index 9a1be21..19e2f10 100644
--- a/game/addons/.gitignore
+++ b/game/addons/.gitignore
@@ -2,4 +2,6 @@
!module_manager
!module_manager/**
!Godoxel
-!Godoxel/**
\ No newline at end of file
+!Godoxel/**
+!mat_maker_gd
+!mat_maker_gd/**
\ No newline at end of file
diff --git a/game/addons/mat_maker_gd/LICENSE.md b/game/addons/mat_maker_gd/LICENSE.md
new file mode 100644
index 0000000..ca6aeaf
--- /dev/null
+++ b/game/addons/mat_maker_gd/LICENSE.md
@@ -0,0 +1,22 @@
+# MIT License
+
+Copyright (c) 2020 Péter Magyar
+Copyright (c) 2018-2020 Rodolphe Suescun and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/game/addons/mat_maker_gd/README.md b/game/addons/mat_maker_gd/README.md
new file mode 100644
index 0000000..f5f42f6
--- /dev/null
+++ b/game/addons/mat_maker_gd/README.md
@@ -0,0 +1,22 @@
+# mat_maker_gd
+
+My goal with this project is to take Material Maker's ( https://github.com/RodZill4/material-maker ) code,
+and make it an in-godot texture/image generator.
+
+If it turns out well I'll probably turn it into a c++ engine module eventually.
+
+Multi threading uses my threadpool engine module for now.
+
+## Status:
+
+Missing ~ 60 nodes from ~ 195.
+
+## TODOS
+
+- [ ] Go through the current MaterialMaker and add the code from all the new nodes.
+- [ ] Go through the current MaterialMaker and update any old code.
+- [ ] Add note to all files that has code from MaterialMaker.
+- [ ] Proper readme.md.
+- [ ] Per node seed like in the original.
+- [ ] Port all the nodes. Missing ~ 60 from ~ 195
+- [ ] Somehow get ctrl-s to always just save the edited material, instead of having to double click it (for the inspector to update), and then clicking the save icon and selecting save.
diff --git a/game/addons/mat_maker_gd/editor/CreateNamePopup.gd b/game/addons/mat_maker_gd/editor/CreateNamePopup.gd
new file mode 100644
index 0000000..c014226
--- /dev/null
+++ b/game/addons/mat_maker_gd/editor/CreateNamePopup.gd
@@ -0,0 +1,65 @@
+tool
+extends ConfirmationDialog
+
+signal ok_pressed
+
+export(NodePath) var line_edit_path : NodePath
+export(NodePath) var tree_path : NodePath
+
+export(PoolStringArray) var type_folders : PoolStringArray
+
+var _resource_type : String = "MMNode"
+
+var _line_edit : LineEdit
+var _tree : Tree
+
+func _ready():
+ _line_edit = get_node(line_edit_path) as LineEdit
+ _tree = get_node(tree_path) as Tree
+
+ connect("confirmed", self, "_on_OK_pressed")
+ connect("about_to_show", self, "about_to_show")
+
+func set_resource_type(resource_type : String) -> void:
+ _resource_type = resource_type
+
+func about_to_show():
+ _tree.clear()
+
+ var root : TreeItem = _tree.create_item()
+
+ for s in type_folders:
+ evaluate_folder(s, root)
+
+func evaluate_folder(folder : String, root : TreeItem) -> void:
+ var ti : TreeItem = _tree.create_item(root)
+ ti.set_text(0, folder.substr(folder.find_last("/") + 1))
+
+ var dir = Directory.new()
+ if dir.open(folder) == OK:
+ dir.list_dir_begin()
+ var file_name = dir.get_next()
+ while file_name != "":
+ if !dir.current_is_dir():
+ print("Found file: " + file_name)
+ var e : TreeItem = _tree.create_item(ti)
+
+ e.set_text(0, file_name.get_file())
+ e.set_meta("file", folder + "/" + file_name)
+
+ file_name = dir.get_next()
+ else:
+ print("An error occurred when trying to access the path.")
+
+func _on_OK_pressed():
+ var selected : TreeItem = _tree.get_selected()
+
+ if selected:
+ if !selected.has_meta("file"):
+ hide()
+ return
+
+ var file_name : String = selected.get_meta("file")
+ emit_signal("ok_pressed", file_name)
+
+ hide()
diff --git a/game/addons/mat_maker_gd/editor/CreateNamePopup.tscn b/game/addons/mat_maker_gd/editor/CreateNamePopup.tscn
new file mode 100644
index 0000000..b2f22ac
--- /dev/null
+++ b/game/addons/mat_maker_gd/editor/CreateNamePopup.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/editor/CreateNamePopup.gd" type="Script" id=1]
+
+[node name="CreateNamePopup" type="ConfirmationDialog"]
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -245.5
+margin_top = -220.0
+margin_right = 245.5
+margin_bottom = 220.0
+window_title = "Create New Resource"
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+line_edit_path = NodePath("VBoxContainer/LineEdit")
+tree_path = NodePath("VBoxContainer/Tree")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 483.0
+margin_bottom = 404.0
+size_flags_horizontal = 3
+size_flags_vertical = 3
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Label2" type="Label" parent="VBoxContainer"]
+margin_right = 475.0
+margin_bottom = 14.0
+size_flags_horizontal = 3
+text = "Type"
+
+[node name="Tree" type="Tree" parent="VBoxContainer"]
+margin_top = 18.0
+margin_right = 475.0
+margin_bottom = 350.0
+size_flags_horizontal = 3
+size_flags_vertical = 3
+hide_root = true
+
+[node name="Label" type="Label" parent="VBoxContainer"]
+visible = false
+margin_top = 354.0
+margin_right = 475.0
+margin_bottom = 368.0
+size_flags_horizontal = 3
+text = "Name"
+
+[node name="LineEdit" type="LineEdit" parent="VBoxContainer"]
+visible = false
+margin_top = 372.0
+margin_right = 475.0
+margin_bottom = 396.0
+size_flags_horizontal = 3
+caret_blink = true
diff --git a/game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd
new file mode 100644
index 0000000..d7fb043
--- /dev/null
+++ b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd
@@ -0,0 +1,148 @@
+tool
+extends MarginContainer
+
+var MMGraphNode = preload("res://addons/mat_maker_gd/editor/mm_graph_node.gd")
+
+export(PoolColorArray) var slot_colors : PoolColorArray
+
+export(NodePath) var graph_edit_path : NodePath = "VBoxContainer/GraphEdit"
+export(NodePath) var add_popup_path : NodePath = "Popups/AddPopup"
+
+var _graph_edit : GraphEdit = null
+
+var _material : MMMateial
+
+func _enter_tree():
+ ensure_objs()
+
+func ensure_objs() -> void:
+ if !_graph_edit:
+ _graph_edit = get_node(graph_edit_path)
+
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR)
+
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL)
+
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3)
+ _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR)
+
+ _graph_edit.connect("connection_request", self, "on_graph_edit_connection_request")
+ _graph_edit.connect("disconnection_request", self, "on_graph_edit_disconnection_request")
+
+func recreate() -> void:
+ ensure_objs()
+
+ _graph_edit.clear_connections()
+
+ for c in _graph_edit.get_children():
+ if c is GraphNode:
+ _graph_edit.remove_child(c)
+ c.queue_free()
+
+ if !_material:
+ return
+
+ _material.cancel_render_and_wait()
+
+ for n in _material.nodes:
+ var gn : GraphNode = MMGraphNode.new()
+ gn.slot_colors = slot_colors
+ gn.set_node(_material, n)
+ _graph_edit.add_child(gn)
+
+ #connect them
+ for n in _material.nodes:
+ if n:
+ for ip in n.input_properties:
+ if ip.input_property:
+ var input_node : Node = find_graph_node_for(n)
+ var output_node : Node = find_graph_node_for(ip.input_property.owner)
+
+ var to_slot : int = input_node.get_input_property_graph_node_slot_index(ip)
+ var from_slot : int = output_node.get_output_property_graph_node_slot_index(ip.input_property)
+
+ _graph_edit.connect_node(output_node.name, from_slot, input_node.name, to_slot)
+
+ _material.render()
+
+func find_graph_node_for(nnode) -> Node:
+ for c in _graph_edit.get_children():
+ if c is GraphNode:
+ if c.has_method("get_material_node"):
+ var n = c.get_material_node()
+
+ if n == nnode:
+ return c
+
+ return null
+
+func set_mmmaterial(object : MMMateial):
+ _material = object
+
+ recreate()
+
+func on_graph_edit_connection_request(from: String, from_slot: int, to: String, to_slot: int):
+ var from_node : GraphNode = _graph_edit.get_node(from)
+ var to_node : GraphNode = _graph_edit.get_node(to)
+
+ _material.cancel_render_and_wait()
+
+ if from_node.connect_slot(from_slot, to_node, to_slot):
+ _graph_edit.connect_node(from, from_slot, to, to_slot)
+
+func on_graph_edit_disconnection_request(from: String, from_slot: int, to: String, to_slot: int):
+ var from_node : GraphNode = _graph_edit.get_node(from)
+ var to_node : GraphNode = _graph_edit.get_node(to)
+
+ _material.cancel_render_and_wait()
+
+ if from_node.disconnect_slot(from_slot, to_node, to_slot):
+ _graph_edit.disconnect_node(from, from_slot, to, to_slot)
+
+func on_graph_node_close_request(node : GraphNode) -> void:
+ if _material:
+ _material.cancel_render_and_wait()
+ _material.remove_node(node._node)
+ recreate()
+
+func _on_AddButton_pressed():
+ get_node(add_popup_path).popup_centered()
+
+func _on_AddPopup_ok_pressed(script_path : String):
+ if !_material:
+ return
+
+ ensure_objs()
+
+ _material.cancel_render_and_wait()
+
+ var sc = load(script_path)
+ var nnode : MMNode = sc.new()
+
+ if !nnode:
+ print("_on_AddPopup_ok_pressed: Error !nnode! script: " + script_path)
+ return
+
+ _material.add_node(nnode)
+
+ var gn : GraphNode = MMGraphNode.new()
+ gn.slot_colors = slot_colors
+ gn.set_node(_material, nnode)
+ _graph_edit.add_child(gn)
+
diff --git a/game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn
new file mode 100644
index 0000000..c8e3a63
--- /dev/null
+++ b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn
@@ -0,0 +1,55 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/editor/MatMakerGDEditor.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/editor/CreateNamePopup.tscn" type="PackedScene" id=2]
+
+[node name="MatMakerGDEditor" type="MarginContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+rect_min_size = Vector2( 0, 200 )
+size_flags_horizontal = 3
+size_flags_vertical = 3
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+slot_colors = PoolColorArray( 0.905882, 0.0627451, 0.0627451, 1, 0.431373, 0.0352941, 0.0352941, 1, 0.827451, 0.376471, 0.376471, 1, 0.0431373, 0.478431, 0.427451, 1, 0.352941, 0.0352941, 0.341176, 1, 0.0352941, 0.0509804, 1, 1, 0.372549, 0.372549, 0.372549, 1 )
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+margin_right = 1024.0
+margin_bottom = 600.0
+
+[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"]
+margin_right = 1024.0
+margin_bottom = 34.0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer"]
+margin_left = 7.0
+margin_top = 7.0
+margin_right = 1017.0
+margin_bottom = 27.0
+
+[node name="AddButton" type="Button" parent="VBoxContainer/PanelContainer/HBoxContainer"]
+margin_right = 37.0
+margin_bottom = 20.0
+text = "Add"
+
+[node name="GraphEdit" type="GraphEdit" parent="VBoxContainer"]
+margin_top = 38.0
+margin_right = 1024.0
+margin_bottom = 600.0
+size_flags_horizontal = 3
+size_flags_vertical = 3
+right_disconnects = true
+scroll_offset = Vector2( 0, -20 )
+
+[node name="Popups" type="Control" parent="."]
+margin_right = 1024.0
+margin_bottom = 600.0
+mouse_filter = 2
+
+[node name="AddPopup" parent="Popups" instance=ExtResource( 2 )]
+type_folders = PoolStringArray( "res://addons/mat_maker_gd/nodes/uniform", "res://addons/mat_maker_gd/nodes/noise", "res://addons/mat_maker_gd/nodes/filter", "res://addons/mat_maker_gd/nodes/gradient", "res://addons/mat_maker_gd/nodes/pattern", "res://addons/mat_maker_gd/nodes/sdf2d", "res://addons/mat_maker_gd/nodes/sdf3d", "res://addons/mat_maker_gd/nodes/transform", "res://addons/mat_maker_gd/nodes/simple", "res://addons/mat_maker_gd/nodes/other" )
+
+[connection signal="pressed" from="VBoxContainer/PanelContainer/HBoxContainer/AddButton" to="." method="_on_AddButton_pressed"]
+[connection signal="ok_pressed" from="Popups/AddPopup" to="." method="_on_AddPopup_ok_pressed"]
diff --git a/game/addons/mat_maker_gd/editor/mm_graph_node.gd b/game/addons/mat_maker_gd/editor/mm_graph_node.gd
new file mode 100644
index 0000000..b12fc2e
--- /dev/null
+++ b/game/addons/mat_maker_gd/editor/mm_graph_node.gd
@@ -0,0 +1,607 @@
+tool
+extends GraphNode
+
+var gradient_editor_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn")
+var polygon_edit_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn")
+var curve_edit_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn")
+
+var slot_colors : PoolColorArray
+
+var _material : MMMateial = null
+var _node : MMNode = null
+var properties : Array = Array()
+
+func _init():
+ show_close = true
+ connect("offset_changed", self, "on_offset_changed")
+ connect("close_request", self, "on_close_request")
+
+func add_slot_texture(getter : String, setter : String) -> int:
+ var t : TextureRect = TextureRect.new()
+ t.rect_min_size = Vector2(128, 128)
+ t.expand = true
+ t.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, t)
+
+ t.texture = _node.call(getter, _material, slot_idx)
+ properties[slot_idx].append(t.texture)
+
+ return slot_idx
+
+func add_slot_texture_universal(property : MMNodeUniversalProperty) -> int:
+ var t : TextureRect = TextureRect.new()
+ t.rect_min_size = Vector2(128, 128)
+ t.expand = true
+ t.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", t)
+
+ var img : Image = property.get_active_image()
+
+ var tex : ImageTexture = ImageTexture.new()
+
+ if img:
+ tex.create_from_image(img, 0)
+
+ t.texture = tex
+
+ properties[slot_idx].append(property)
+
+ property.connect("changed", self, "on_universal_texture_changed", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_image_path_universal(property : MMNodeUniversalProperty, getter : String, setter : String) -> int:
+ var t : TextureButton = load("res://addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn").instance()
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", t)
+
+ properties[slot_idx].append(property)
+ properties[slot_idx].append(getter)
+ properties[slot_idx].append(setter)
+
+ property.connect("changed", self, "on_universal_texture_changed_image_picker", [ slot_idx ])
+
+ t.connect("on_file_selected", self, "on_universal_image_path_changed", [ slot_idx ])
+
+ t.call_deferred("do_set_image_path", _node.call(getter))
+
+ return slot_idx
+
+
+func add_slot_gradient() -> int:
+ var ge : Control = gradient_editor_scene.instance()
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, "", "", ge)
+
+ ge.set_value(_node)
+ #ge.texture = _node.call(getter, _material, slot_idx)
+ #properties[slot_idx].append(ge.texture)
+
+ return slot_idx
+
+func add_slot_polygon() -> int:
+ var ge : Control = polygon_edit_scene.instance()
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, "", "", ge)
+
+ ge.set_value(_node)
+ #ge.texture = _node.call(getter, _material, slot_idx)
+ #properties[slot_idx].append(ge.texture)
+
+ return slot_idx
+
+func add_slot_curve() -> int:
+ var ge : Control = curve_edit_scene.instance()
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, "", "", ge)
+
+ ge.set_value(_node)
+ #ge.texture = _node.call(getter, _material, slot_idx)
+ #properties[slot_idx].append(ge.texture)
+
+ return slot_idx
+
+func add_slot_color(getter : String, setter : String) -> int:
+ var cp : ColorPickerButton = ColorPickerButton.new()
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, cp)
+
+ cp.color = _node.call(getter)
+
+ cp.connect("color_changed", _node, setter)
+
+ return slot_idx
+
+func add_slot_color_universal(property : MMNodeUniversalProperty) -> int:
+ var cp : ColorPickerButton = ColorPickerButton.new()
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", cp)
+
+ cp.color = property.get_default_value()
+
+ properties[slot_idx].append(property)
+
+ cp.connect("color_changed", self, "on_universal_color_changed", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_label(getter : String, setter : String, slot_name : String) -> int:
+ var l : Label = Label.new()
+
+ l.text = slot_name
+
+ return add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, l)
+
+func add_slot_line_edit(getter : String, setter : String, slot_name : String, placeholder : String = "") -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = slot_name
+ bc.add_child(l)
+
+ var le : LineEdit = LineEdit.new()
+ le.placeholder_text = placeholder
+ bc.add_child(le)
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc)
+
+ le.text = _node.call(getter)
+
+ le.connect("text_entered", self, "on_slot_line_edit_text_entered", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_enum(getter : String, setter : String, slot_name : String, values : Array) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ if slot_name:
+ var l : Label = Label.new()
+ l.text = slot_name
+ bc.add_child(l)
+
+ var mb : OptionButton = OptionButton.new()
+
+ for v in values:
+ mb.add_item(v)
+
+ bc.add_child(mb)
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc)
+
+ mb.selected = _node.call(getter)
+
+ mb.connect("item_selected", self, "on_slot_enum_item_selected", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_int(getter : String, setter : String, slot_name : String, prange : Vector2 = Vector2(-1000, 1000)) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = slot_name
+ bc.add_child(l)
+
+ var sb : SpinBox = SpinBox.new()
+ sb.rounded = true
+ sb.min_value = prange.x
+ sb.max_value = prange.y
+ bc.add_child(sb)
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc)
+
+ sb.value = _node.call(getter)
+
+ sb.connect("value_changed", self, "on_int_spinbox_value_changed", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_bool(getter : String, setter : String, slot_name : String) -> int:
+ var cb : CheckBox = CheckBox.new()
+ cb.text = slot_name
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, cb)
+
+ cb.pressed = _node.call(getter)
+
+ cb.connect("toggled", _node, setter)
+
+ return slot_idx
+
+func add_slot_label_universal(property : MMNodeUniversalProperty) -> int:
+ var l : Label = Label.new()
+ l.text = property.slot_name
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", l)
+
+ properties[slot_idx].append(property)
+
+ return slot_idx
+
+func add_slot_int_universal(property : MMNodeUniversalProperty) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = property.slot_name
+ bc.add_child(l)
+
+ var sb : SpinBox = SpinBox.new()
+ sb.rounded = true
+ sb.min_value = property.value_range.x
+ sb.max_value = property.value_range.y
+ bc.add_child(sb)
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", bc)
+
+ sb.value = property.get_default_value()
+
+ sb.connect("value_changed", self, "on_int_universal_spinbox_value_changed", [ slot_idx ])
+
+ properties[slot_idx].append(property)
+
+ return slot_idx
+
+func add_slot_float(getter : String, setter : String, slot_name : String, step : float = 0.1, prange : Vector2 = Vector2(-1000, 1000)) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = slot_name
+ bc.add_child(l)
+
+ var sb : SpinBox = SpinBox.new()
+ bc.add_child(sb)
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc)
+ sb.rounded = false
+ sb.step = step
+ sb.min_value = prange.x
+ sb.max_value = prange.y
+ sb.value = _node.call(getter)
+
+ sb.connect("value_changed", self, "on_float_spinbox_value_changed", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_float_universal(property : MMNodeUniversalProperty) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = property.slot_name
+ bc.add_child(l)
+
+ var sb : SpinBox = SpinBox.new()
+ bc.add_child(sb)
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", bc)
+ sb.rounded = false
+ sb.step = property.value_step
+ sb.min_value = property.value_range.x
+ sb.max_value = property.value_range.y
+ sb.value = property.get_default_value()
+
+ properties[slot_idx].append(property)
+
+ sb.connect("value_changed", self, "on_float_universal_spinbox_value_changed", [ slot_idx ])
+
+ return slot_idx
+
+func add_slot_vector2(getter : String, setter : String, slot_name : String, step : float = 0.1, prange : Vector2 = Vector2(-1000, 1000)) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = slot_name
+ bc.add_child(l)
+
+ var sbx : SpinBox = SpinBox.new()
+ bc.add_child(sbx)
+
+ var sby : SpinBox = SpinBox.new()
+ bc.add_child(sby)
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc)
+ sbx.rounded = false
+ sby.rounded = false
+ sbx.step = step
+ sby.step = step
+ sbx.min_value = prange.x
+ sbx.max_value = prange.y
+ sby.min_value = prange.x
+ sby.max_value = prange.y
+
+ var val : Vector2 = _node.call(getter)
+
+ sbx.value = val.x
+ sby.value = val.y
+
+ sbx.connect("value_changed", self, "on_vector2_spinbox_value_changed", [ slot_idx, sbx, sby ])
+ sby.connect("value_changed", self, "on_vector2_spinbox_value_changed", [ slot_idx, sbx, sby ])
+
+ return slot_idx
+
+func add_slot_vector3(getter : String, setter : String, slot_name : String, step : float = 0.1, prange : Vector2 = Vector2(-1000, 1000)) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = slot_name
+ bc.add_child(l)
+
+ var sbx : SpinBox = SpinBox.new()
+ bc.add_child(sbx)
+
+ var sby : SpinBox = SpinBox.new()
+ bc.add_child(sby)
+
+ var sbz : SpinBox = SpinBox.new()
+ bc.add_child(sbz)
+
+ var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc)
+ sbx.rounded = false
+ sby.rounded = false
+ sbz.rounded = false
+ sbx.step = step
+ sby.step = step
+ sbz.step = step
+ sbx.min_value = prange.x
+ sbx.max_value = prange.y
+ sby.min_value = prange.x
+ sby.max_value = prange.y
+ sbz.min_value = prange.x
+ sbz.max_value = prange.y
+
+ var val : Vector3 = _node.call(getter)
+
+ sbx.value = val.x
+ sby.value = val.y
+ sbz.value = val.z
+
+ sbx.connect("value_changed", self, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ])
+ sby.connect("value_changed", self, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ])
+ sbz.connect("value_changed", self, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ])
+
+ return slot_idx
+
+func add_slot_vector2_universal(property : MMNodeUniversalProperty) -> int:
+ var bc : VBoxContainer = VBoxContainer.new()
+
+ var l : Label = Label.new()
+ l.text = property.slot_name
+ bc.add_child(l)
+
+ var sbx : SpinBox = SpinBox.new()
+ bc.add_child(sbx)
+
+ var sby : SpinBox = SpinBox.new()
+ bc.add_child(sby)
+
+ var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", bc)
+ sbx.rounded = false
+ sby.rounded = false
+ sbx.step = property.value_step
+ sby.step = property.value_step
+ sbx.min_value = property.value_range.x
+ sbx.max_value = property.value_range.y
+ sby.min_value = property.value_range.x
+ sby.max_value = property.value_range.y
+
+ var val : Vector2 = property.get_default_value()
+
+ sbx.value = val.x
+ sby.value = val.y
+
+ properties[slot_idx].append(property)
+
+ sbx.connect("value_changed", self, "on_vector2_universal_spinbox_value_changed", [ slot_idx, sbx, sby ])
+ sby.connect("value_changed", self, "on_vector2_universal_spinbox_value_changed", [ slot_idx, sbx, sby ])
+
+ return slot_idx
+
+func add_slot(input_type : int, output_type : int, getter : String, setter : String, control : Control) -> int:
+ add_child(control)
+ var slot_idx : int = get_child_count() - 1
+
+ var arr : Array = Array()
+
+ arr.append(slot_idx)
+ arr.append(input_type)
+ arr.append(output_type)
+ arr.append(getter)
+ arr.append(setter)
+ arr.append(control)
+
+ properties.append(arr)
+
+ set_slot_enabled_left(slot_idx, input_type != -1)
+ set_slot_enabled_right(slot_idx, output_type != -1)
+
+ if input_type != -1:
+ set_slot_type_left(slot_idx, input_type)
+
+ if output_type != -1:
+ set_slot_type_left(slot_idx, output_type)
+
+ if input_type != -1 && slot_colors.size() > input_type:
+ set_slot_color_left(slot_idx, slot_colors[input_type])
+
+ if output_type != -1 && slot_colors.size() > output_type:
+ set_slot_color_right(slot_idx, slot_colors[output_type])
+
+ return slot_idx
+
+func connect_slot(slot_idx : int, to_node : Node, to_slot_idx : int) -> bool:
+ var from_property_index : int = -1
+ var to_property_index : int = -1
+
+ for i in range(properties.size()):
+ if properties[i][2] != -1:
+ from_property_index += 1
+
+ if from_property_index == slot_idx:
+ from_property_index = i
+ break
+
+ for i in range(to_node.properties.size()):
+ if to_node.properties[i][1] != -1:
+ to_property_index += 1
+
+ if to_property_index == to_slot_idx:
+ to_property_index = i
+ break
+
+ to_node.properties[to_property_index][6].set_input_property(properties[from_property_index][6])
+
+ return true
+
+func disconnect_slot(slot_idx : int, to_node : Node, to_slot_idx : int) -> bool:
+ var from_property_index : int = -1
+ var to_property_index : int = -1
+
+ for i in range(properties.size()):
+ if properties[i][2] != -1:
+ from_property_index += 1
+
+ if from_property_index == slot_idx:
+ from_property_index = i
+ break
+
+ for i in range(to_node.properties.size()):
+ if to_node.properties[i][1] != -1:
+ to_property_index += 1
+
+ if to_property_index == to_slot_idx:
+ to_property_index = i
+ break
+
+ to_node.properties[to_property_index][6].set_input_property(null)
+
+ return true
+
+func get_input_property_graph_node_slot_index(property) -> int:
+ var property_index : int = -1
+
+ for i in range(properties.size()):
+ if properties[i][1] != -1:
+ property_index += 1
+
+ if properties[i][6] == property:
+ break
+
+ return property_index
+
+func get_output_property_graph_node_slot_index(property) -> int:
+ var property_index : int = -1
+
+ for i in range(properties.size()):
+ if properties[i][2] != -1:
+ property_index += 1
+
+ if properties[i][6] == property:
+ break
+
+ return property_index
+
+func get_property_control(slot_idx : int) -> Node:
+ return properties[slot_idx][5]
+
+func set_node(material : MMMateial, node : MMNode) -> void:
+ _node = node
+ _material = material
+
+ if !_node:
+ return
+
+ title = _node.get_class()
+
+ if _node.get_script():
+ title = _node.get_script().resource_path.get_file().get_basename()
+
+ _node.register_methods(self)
+
+ offset = _node.get_graph_position()
+
+ _node.connect("changed", self, "on_node_changed")
+
+func propagate_node_change() -> void:
+ pass
+
+func on_offset_changed():
+ if _node:
+ _node.set_graph_position(offset)
+
+func on_node_changed():
+ #get all properties again
+ #_node.recalculate_image(_material)
+
+ propagate_node_change()
+
+func on_int_spinbox_value_changed(val : float, slot_idx) -> void:
+ _node.call(properties[slot_idx][4], int(val))
+
+func on_float_spinbox_value_changed(val : float, slot_idx) -> void:
+ _node.call(properties[slot_idx][4], val)
+
+func on_vector2_spinbox_value_changed(val : float, slot_idx, spinbox_x, spinbox_y) -> void:
+ var vv : Vector2 = Vector2(spinbox_x.value, spinbox_y.value)
+
+ _node.call(properties[slot_idx][4], vv)
+
+func on_vector3_spinbox_value_changed(val : float, slot_idx, spinbox_x, spinbox_y, spinbox_z) -> void:
+ var vv : Vector3 = Vector3(spinbox_x.value, spinbox_y.value, spinbox_z.value)
+
+ _node.call(properties[slot_idx][4], vv)
+
+func on_int_universal_spinbox_value_changed(val : float, slot_idx) -> void:
+ properties[slot_idx][6].set_default_value(int(val))
+
+func on_float_universal_spinbox_value_changed(val : float, slot_idx) -> void:
+ properties[slot_idx][6].set_default_value(val)
+
+func on_vector2_universal_spinbox_value_changed(val : float, slot_idx, spinbox_x, spinbox_y) -> void:
+ var vv : Vector2 = Vector2(spinbox_x.value, spinbox_y.value)
+
+ properties[slot_idx][6].set_default_value(vv)
+
+func on_slot_enum_item_selected(val : int, slot_idx : int) -> void:
+ _node.call(properties[slot_idx][4], val)
+
+func on_universal_texture_changed(slot_idx : int) -> void:
+ var img : Image = properties[slot_idx][6].get_active_image()
+
+ var tex : ImageTexture = properties[slot_idx][5].texture
+
+ if img:
+ properties[slot_idx][5].texture.create_from_image(img, 0)
+ else:
+ properties[slot_idx][5].texture = ImageTexture.new()
+
+func on_universal_texture_changed_image_picker(slot_idx : int) -> void:
+ var img : Image = properties[slot_idx][6].get_active_image()
+
+ var tex : ImageTexture = properties[slot_idx][5].texture_normal
+
+ if img:
+ properties[slot_idx][5].texture_normal.create_from_image(img, 0)
+ else:
+ properties[slot_idx][5].texture_normal = ImageTexture.new()
+
+func on_slot_line_edit_text_entered(text : String, slot_idx : int) -> void:
+ _node.call(properties[slot_idx][4], text)
+
+func on_universal_color_changed(c : Color, slot_idx : int) -> void:
+ properties[slot_idx][6].set_default_value(c)
+
+func on_universal_image_path_changed(f : String, slot_idx : int) -> void:
+ _node.call(properties[slot_idx][8], f)
+
+func get_material_node() -> MMNode:
+ return _node
+
+func on_close_request() -> void:
+ var n : Node = get_parent()
+
+ while n:
+ if n.has_method("on_graph_node_close_request"):
+ n.call_deferred("on_graph_node_close_request", self)
+ return
+
+ n = n.get_parent()
diff --git a/game/addons/mat_maker_gd/icons/custom.png b/game/addons/mat_maker_gd/icons/custom.png
new file mode 100644
index 0000000..45a7a18
Binary files /dev/null and b/game/addons/mat_maker_gd/icons/custom.png differ
diff --git a/game/addons/mat_maker_gd/icons/custom.png.import b/game/addons/mat_maker_gd/icons/custom.png.import
new file mode 100644
index 0000000..59e2366
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/custom.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/custom.png-b026bd10e22818d25d499d2eddb137a8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/mat_maker_gd/icons/custom.png"
+dest_files=[ "res://.import/custom.png-b026bd10e22818d25d499d2eddb137a8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/game/addons/mat_maker_gd/icons/down.tres b/game/addons/mat_maker_gd/icons/down.tres
new file mode 100644
index 0000000..aca6f4c
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/down.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 4
+atlas = ExtResource( 1 )
+region = Rect2( 32, 48, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/edit.tres b/game/addons/mat_maker_gd/icons/edit.tres
new file mode 100644
index 0000000..aa39c29
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/edit.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 16, 16, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/godot_logo.svg b/game/addons/mat_maker_gd/icons/godot_logo.svg
new file mode 100644
index 0000000..d7aef39
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/godot_logo.svg
@@ -0,0 +1 @@
+
diff --git a/game/addons/mat_maker_gd/icons/godot_logo.svg.import b/game/addons/mat_maker_gd/icons/godot_logo.svg.import
new file mode 100644
index 0000000..e96628e
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/godot_logo.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/godot_logo.svg-4e4bf625f601f4dc5d1d367a2f781011.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/mat_maker_gd/icons/godot_logo.svg"
+dest_files=[ "res://.import/godot_logo.svg-4e4bf625f601f4dc5d1d367a2f781011.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/game/addons/mat_maker_gd/icons/icons.svg b/game/addons/mat_maker_gd/icons/icons.svg
new file mode 100644
index 0000000..cc85b87
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/icons.svg
@@ -0,0 +1,3522 @@
+
+
+
+
diff --git a/game/addons/mat_maker_gd/icons/icons.svg.import b/game/addons/mat_maker_gd/icons/icons.svg.import
new file mode 100644
index 0000000..733f804
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/icons.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/icons.svg-bac181e82e23c7264cdf6c36903654b9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/mat_maker_gd/icons/icons.svg"
+dest_files=[ "res://.import/icons.svg-bac181e82e23c7264cdf6c36903654b9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/game/addons/mat_maker_gd/icons/icons.tres b/game/addons/mat_maker_gd/icons/icons.tres
new file mode 100644
index 0000000..e347b32
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/icons.tres
@@ -0,0 +1,30 @@
+[gd_resource type="ProxyTexture" load_steps=4 format=2]
+
+[sub_resource type="Image" id=2]
+data = {
+"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 13, 13, 13, 0, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 102, 53, 0, 123, 110, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 1, 0, 117, 0, 1, 0, 234, 45, 3, 0, 235, 77, 3, 0, 235, 77, 3, 0, 235, 46, 0, 0, 171, 2, 1, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 39, 255, 255, 255, 50, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 71, 255, 255, 255, 191, 255, 255, 255, 254, 255, 255, 255, 235, 255, 255, 255, 128, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 5, 255, 4, 4, 107, 191, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 5, 5, 101, 191, 3, 3, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 191, 6, 44, 24, 255, 9, 128, 24, 255, 9, 128, 17, 191, 5, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 16, 16, 16, 78, 26, 26, 26, 179, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 25, 25, 25, 163, 19, 19, 19, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 14, 23, 23, 23, 158, 27, 27, 27, 221, 24, 24, 24, 163, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 79, 255, 255, 255, 151, 255, 255, 255, 156, 255, 255, 255, 103, 255, 255, 255, 20, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 54, 29, 0, 242, 214, 113, 59, 241, 213, 111, 143, 247, 221, 116, 164, 247, 221, 116, 113, 244, 216, 114, 31, 122, 109, 58, 0, 55, 55, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 8, 2, 0, 234, 117, 6, 4, 236, 229, 10, 10, 237, 255, 12, 14, 237, 255, 13, 15, 237, 255, 11, 12, 237, 255, 8, 7, 236, 231, 4, 2, 234, 127, 0, 0, 173, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 9, 255, 255, 255, 255, 255, 255, 255, 233, 191, 191, 191, 27, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 207, 255, 255, 255, 179, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 24, 255, 255, 255, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 148, 128, 128, 128, 0, 0, 0, 0, 0, 191, 0, 0, 6, 255, 6, 6, 175, 255, 9, 9, 255, 255, 6, 6, 163, 191, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 8, 8, 135, 255, 9, 9, 255, 255, 7, 7, 197, 191, 4, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 9, 86, 24, 255, 9, 255, 24, 255, 9, 255, 22, 255, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 56, 67, 67, 67, 252, 207, 207, 207, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 244, 244, 244, 255, 247, 247, 247, 255, 166, 166, 166, 255, 26, 26, 26, 191, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 8, 26, 26, 26, 193, 147, 147, 147, 255, 239, 239, 239, 255, 155, 155, 155, 255, 27, 27, 27, 203, 17, 17, 17, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 105, 255, 255, 255, 162, 255, 255, 255, 176, 255, 255, 255, 153, 255, 255, 255, 132, 255, 255, 255, 114, 255, 255, 255, 95, 255, 255, 255, 77, 255, 255, 255, 51, 255, 255, 255, 22, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 6, 255, 255, 255, 75, 255, 255, 255, 95, 255, 255, 255, 38, 128, 128, 128, 0, 191, 191, 191, 2, 255, 255, 255, 167, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 178, 255, 255, 255, 87, 191, 191, 191, 8, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 147, 74, 2, 246, 220, 115, 63, 247, 220, 116, 99, 247, 219, 116, 50, 120, 106, 56, 0, 120, 106, 55, 0, 247, 220, 116, 129, 248, 221, 117, 255, 249, 230, 155, 255, 251, 237, 184, 255, 249, 232, 168, 255, 243, 217, 117, 254, 244, 217, 115, 192, 235, 219, 113, 100, 185, 164, 86, 16, 122, 110, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 176, 29, 4, 13, 223, 206, 9, 43, 204, 255, 19, 27, 234, 255, 24, 33, 239, 255, 27, 38, 240, 255, 28, 39, 240, 255, 26, 36, 240, 255, 22, 30, 239, 255, 16, 20, 238, 255, 8, 8, 236, 216, 1, 0, 117, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 233, 255, 255, 255, 255, 255, 255, 255, 197, 255, 255, 255, 22, 255, 255, 255, 206, 255, 255, 255, 255, 255, 255, 255, 205, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 255, 255, 255, 103, 255, 255, 255, 239, 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 255, 106, 191, 191, 191, 5, 255, 255, 255, 46, 255, 255, 255, 244, 255, 255, 255, 250, 255, 255, 255, 23, 128, 2, 2, 0, 255, 6, 6, 142, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 165, 191, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 8, 8, 138, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 172, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 9, 85, 24, 255, 9, 255, 24, 255, 9, 255, 22, 255, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 123, 158, 158, 158, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 45, 45, 45, 248, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 3, 26, 26, 26, 173, 139, 139, 139, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 155, 155, 155, 255, 26, 26, 26, 193, 15, 15, 15, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 9, 255, 255, 255, 46, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 46, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 24, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 202, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 255, 255, 255, 38, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 68, 255, 255, 255, 237, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 255, 255, 255, 137, 255, 255, 255, 170, 255, 255, 255, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 158, 255, 255, 255, 65, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 23, 0, 138, 132, 67, 43, 248, 221, 116, 223, 248, 222, 122, 255, 245, 220, 126, 255, 237, 211, 112, 255, 231, 205, 108, 219, 230, 203, 106, 136, 237, 211, 110, 169, 238, 212, 111, 224, 226, 202, 106, 255, 218, 195, 105, 255, 223, 208, 149, 255, 235, 227, 194, 255, 242, 232, 195, 255, 234, 217, 150, 255, 232, 206, 108, 248, 241, 215, 113, 171, 246, 219, 115, 80, 181, 160, 85, 5, 55, 55, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 15, 5, 2, 236, 213, 6, 125, 118, 255, 0, 209, 28, 255, 12, 145, 110, 255, 38, 56, 241, 255, 42, 62, 242, 255, 43, 63, 243, 255, 39, 64, 235, 255, 22, 105, 164, 255, 29, 41, 240, 255, 20, 27, 238, 255, 10, 10, 237, 225, 2, 0, 175, 20, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 138, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 193, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 171, 191, 191, 191, 25, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 199, 255, 255, 255, 255, 255, 255, 255, 51, 0, 0, 0, 0, 191, 5, 5, 21, 255, 8, 8, 209, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 167, 191, 0, 0, 4, 191, 0, 0, 0, 255, 8, 8, 140, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 226, 191, 5, 5, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 7, 84, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 70, 81, 81, 81, 254, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 241, 241, 255, 232, 232, 232, 255, 161, 161, 161, 255, 26, 26, 26, 189, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 151, 117, 117, 117, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 143, 143, 143, 255, 24, 24, 24, 181, 16, 16, 16, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 11, 11, 11, 37, 23, 23, 23, 154, 26, 26, 26, 172, 16, 16, 16, 64, 6, 6, 6, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 113, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 255, 255, 255, 149, 191, 191, 191, 20, 128, 128, 128, 0, 255, 255, 255, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 50, 255, 255, 255, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 189, 255, 255, 255, 151, 255, 255, 255, 79, 255, 255, 255, 145, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 204, 191, 191, 191, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 195, 101, 22, 248, 221, 117, 236, 251, 239, 193, 255, 245, 237, 206, 255, 235, 223, 176, 255, 238, 230, 201, 255, 235, 224, 186, 255, 213, 196, 130, 255, 199, 177, 92, 255, 202, 180, 93, 199, 205, 182, 94, 162, 192, 176, 90, 80, 183, 164, 83, 132, 177, 157, 80, 222, 181, 162, 88, 255, 210, 198, 152, 255, 234, 227, 201, 255, 238, 227, 185, 255, 236, 216, 137, 255, 244, 218, 115, 222, 235, 216, 111, 58, 30, 26, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 20, 15, 0, 153, 19, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 3, 1, 224, 145, 13, 15, 237, 255, 20, 58, 207, 255, 0, 207, 30, 255, 0, 209, 28, 255, 28, 137, 146, 255, 56, 87, 245, 255, 48, 105, 212, 255, 10, 184, 68, 255, 0, 208, 29, 255, 32, 85, 203, 255, 31, 44, 240, 255, 20, 26, 238, 255, 7, 6, 233, 162, 1, 0, 114, 0, 0, 0, 0, 0, 255, 255, 255, 41, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 154, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 94, 191, 191, 191, 3, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 190, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 90, 255, 255, 255, 74, 255, 255, 255, 67, 191, 191, 191, 10, 128, 128, 128, 0, 255, 255, 255, 93, 255, 255, 255, 252, 255, 255, 255, 244, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 20, 255, 8, 8, 207, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 169, 255, 6, 6, 144, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 224, 191, 5, 5, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 7, 83, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 106, 26, 26, 26, 208, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 219, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 26, 26, 26, 157, 19, 19, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 126, 98, 98, 98, 255, 244, 244, 244, 255, 246, 246, 246, 255, 246, 246, 246, 255, 230, 230, 230, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 131, 131, 131, 255, 24, 24, 24, 170, 14, 14, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 23, 23, 23, 74, 46, 46, 46, 240, 169, 169, 169, 255, 190, 190, 190, 255, 56, 56, 56, 252, 26, 26, 26, 36, 64, 64, 64, 0, 255, 255, 255, 121, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 255, 255, 255, 24, 255, 255, 255, 57, 255, 255, 255, 82, 255, 255, 255, 102, 255, 255, 255, 74, 255, 255, 255, 35, 255, 255, 255, 54, 255, 255, 255, 77, 255, 255, 255, 98, 255, 255, 255, 116, 255, 255, 255, 135, 255, 255, 255, 153, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 171, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 177, 255, 255, 255, 137, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 244, 255, 255, 255, 137, 255, 255, 255, 17, 255, 255, 255, 74, 255, 255, 255, 166, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 55, 29, 0, 247, 220, 116, 130, 250, 235, 173, 255, 236, 220, 159, 255, 212, 188, 98, 197, 196, 172, 91, 133, 183, 162, 83, 195, 179, 162, 92, 255, 204, 193, 153, 255, 229, 224, 203, 255, 218, 208, 169, 255, 196, 178, 109, 255, 200, 178, 92, 250, 213, 191, 98, 159, 131, 117, 60, 25, 149, 131, 67, 61, 149, 132, 66, 152, 164, 146, 74, 237, 187, 169, 99, 255, 223, 211, 167, 255, 244, 235, 199, 255, 242, 218, 121, 237, 122, 110, 57, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 27, 43, 0, 207, 27, 183, 0, 153, 19, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 15, 7, 6, 236, 248, 20, 27, 238, 255, 8, 163, 85, 255, 0, 209, 28, 255, 7, 196, 51, 255, 57, 115, 218, 255, 71, 110, 247, 255, 42, 153, 155, 255, 0, 209, 28, 255, 0, 209, 28, 255, 6, 189, 58, 255, 16, 143, 119, 255, 16, 101, 160, 255, 12, 43, 207, 252, 3, 1, 232, 30, 64, 64, 64, 0, 255, 255, 255, 101, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 89, 255, 255, 255, 76, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 30, 255, 255, 255, 255, 255, 255, 255, 220, 255, 255, 255, 146, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 19, 255, 8, 8, 206, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 223, 191, 5, 5, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 12, 255, 4, 40, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 134, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 8, 127, 23, 255, 8, 77, 23, 255, 7, 66, 22, 255, 7, 51, 22, 255, 7, 51, 11, 255, 4, 26, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 26, 26, 26, 0, 13, 13, 13, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 13, 13, 13, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 25, 25, 25, 102, 81, 81, 81, 254, 240, 240, 240, 255, 246, 246, 246, 255, 246, 246, 246, 255, 175, 175, 175, 255, 28, 28, 28, 250, 153, 153, 153, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 118, 118, 118, 255, 20, 20, 20, 157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 26, 26, 26, 116, 67, 67, 67, 252, 220, 220, 220, 255, 246, 246, 246, 255, 246, 246, 246, 255, 138, 138, 138, 254, 26, 26, 26, 103, 191, 191, 191, 17, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 163, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 173, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 174, 191, 191, 191, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 57, 255, 255, 255, 156, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 193, 191, 191, 191, 8, 128, 128, 128, 0, 191, 191, 191, 13, 255, 255, 255, 94, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 129, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 110, 58, 0, 247, 220, 116, 209, 247, 238, 205, 255, 213, 190, 99, 210, 148, 135, 68, 4, 46, 39, 21, 0, 85, 74, 38, 0, 170, 157, 81, 35, 171, 151, 77, 149, 140, 125, 62, 216, 163, 149, 94, 255, 206, 198, 164, 255, 232, 226, 203, 255, 215, 199, 137, 255, 217, 193, 101, 219, 172, 151, 78, 22, 70, 61, 30, 0, 105, 96, 48, 6, 158, 141, 70, 81, 174, 156, 80, 187, 203, 184, 108, 255, 243, 233, 195, 255, 242, 216, 113, 169, 122, 109, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 207, 27, 43, 0, 209, 28, 255, 0, 206, 27, 182, 0, 150, 20, 7, 0, 0, 0, 0, 3, 0, 235, 84, 12, 13, 237, 255, 19, 71, 194, 255, 0, 209, 28, 255, 5, 199, 46, 255, 56, 119, 212, 255, 77, 120, 248, 255, 85, 133, 250, 255, 77, 145, 224, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 8, 114, 135, 255, 7, 7, 234, 102, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 81, 255, 255, 255, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 123, 64, 64, 64, 0, 0, 0, 0, 0, 255, 255, 255, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 38, 255, 255, 255, 185, 255, 255, 255, 216, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 188, 255, 255, 255, 181, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 89, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 18, 255, 8, 8, 204, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 255, 255, 9, 9, 221, 191, 6, 6, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 12, 255, 5, 133, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 12, 255, 5, 132, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 42, 27, 27, 27, 197, 45, 45, 45, 251, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 63, 63, 63, 255, 31, 31, 31, 225, 25, 25, 25, 75, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 24, 24, 24, 80, 66, 66, 66, 252, 233, 233, 233, 255, 246, 246, 246, 255, 246, 246, 246, 255, 192, 192, 192, 255, 33, 33, 33, 221, 25, 25, 25, 37, 27, 27, 27, 200, 164, 164, 164, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 106, 106, 106, 255, 20, 20, 20, 143, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 8, 26, 26, 26, 161, 98, 98, 98, 255, 237, 237, 237, 255, 246, 246, 246, 255, 246, 246, 246, 255, 237, 237, 237, 255, 69, 69, 69, 253, 25, 25, 25, 54, 255, 255, 255, 59, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 129, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 4, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 9, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 123, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 14, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 245, 255, 255, 255, 174, 255, 255, 255, 146, 255, 255, 255, 160, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 116, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 205, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 110, 58, 0, 244, 218, 115, 229, 237, 224, 178, 255, 198, 178, 93, 145, 95, 86, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 108, 56, 0, 242, 215, 114, 220, 219, 194, 101, 188, 162, 143, 73, 147, 147, 130, 62, 149, 162, 145, 74, 235, 216, 205, 165, 255, 215, 195, 121, 255, 228, 200, 103, 157, 104, 91, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 113, 55, 0, 182, 161, 81, 177, 226, 214, 167, 255, 234, 211, 120, 241, 180, 159, 85, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 208, 27, 214, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 234, 0, 209, 28, 255, 0, 209, 28, 255, 0, 206, 27, 181, 0, 133, 34, 7, 2, 0, 219, 121, 15, 18, 238, 255, 27, 53, 224, 255, 0, 208, 29, 255, 39, 131, 170, 255, 72, 111, 247, 255, 85, 134, 250, 255, 97, 153, 252, 255, 101, 160, 253, 255, 67, 164, 190, 255, 56, 150, 182, 255, 37, 150, 149, 255, 2, 205, 36, 255, 0, 209, 28, 255, 19, 58, 205, 255, 6, 7, 233, 136, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 13, 255, 255, 255, 227, 255, 255, 255, 255, 255, 255, 255, 150, 191, 191, 191, 0, 128, 128, 128, 0, 255, 255, 255, 112, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 161, 255, 255, 255, 50, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 151, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 214, 255, 255, 255, 156, 255, 255, 255, 209, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 184, 255, 255, 255, 70, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 1, 255, 6, 6, 156, 255, 8, 8, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 180, 191, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 12, 255, 5, 131, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 12, 255, 5, 133, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 29, 29, 29, 213, 200, 200, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 230, 230, 255, 44, 44, 44, 244, 19, 19, 19, 8, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 22, 22, 22, 61, 55, 55, 55, 247, 224, 224, 224, 255, 246, 246, 246, 255, 246, 246, 246, 255, 207, 207, 207, 255, 40, 40, 40, 234, 13, 13, 13, 37, 0, 0, 0, 0, 19, 19, 19, 18, 28, 28, 28, 209, 174, 174, 174, 255, 246, 246, 246, 255, 246, 246, 246, 255, 243, 243, 243, 255, 95, 95, 95, 255, 26, 26, 26, 128, 6, 6, 6, 0, 0, 0, 0, 0, 19, 19, 19, 25, 27, 27, 27, 199, 137, 137, 137, 255, 245, 245, 245, 255, 246, 246, 246, 255, 246, 246, 246, 255, 220, 220, 220, 255, 67, 67, 67, 252, 25, 25, 25, 110, 6, 6, 6, 0, 255, 255, 255, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 38, 255, 255, 255, 36, 255, 255, 255, 17, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 13, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 139, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 153, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 112, 255, 255, 255, 185, 255, 255, 255, 251, 255, 255, 255, 221, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 247, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 110, 58, 0, 242, 215, 113, 212, 237, 227, 188, 255, 194, 173, 89, 193, 124, 114, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 98, 50, 0, 227, 207, 108, 141, 230, 205, 110, 255, 216, 198, 133, 255, 181, 161, 82, 206, 161, 142, 71, 110, 170, 151, 77, 172, 200, 177, 92, 247, 223, 198, 104, 250, 181, 169, 54, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 160, 81, 94, 215, 199, 138, 255, 237, 221, 157, 255, 243, 214, 112, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 209, 28, 238, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 206, 26, 113, 2, 17, 139, 121, 16, 19, 238, 255, 30, 43, 240, 255, 6, 185, 62, 255, 13, 185, 72, 255, 72, 115, 245, 255, 88, 138, 250, 255, 102, 161, 253, 255, 74, 184, 180, 255, 38, 186, 116, 255, 41, 168, 139, 255, 41, 144, 161, 255, 43, 103, 205, 255, 12, 158, 97, 255, 24, 32, 239, 255, 7, 7, 236, 140, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 167, 255, 255, 255, 153, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 229, 255, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 31, 255, 255, 255, 218, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 172, 255, 255, 255, 209, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 255, 255, 255, 164, 255, 255, 255, 243, 255, 255, 255, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 2, 255, 6, 6, 153, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 178, 191, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 12, 255, 4, 39, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 22, 255, 8, 127, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 8, 133, 23, 255, 8, 92, 23, 255, 8, 102, 23, 255, 8, 102, 23, 255, 8, 102, 12, 255, 4, 54, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 6, 50, 50, 50, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 78, 78, 78, 255, 25, 25, 25, 33, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 44, 45, 45, 45, 239, 213, 213, 213, 255, 246, 246, 246, 255, 246, 246, 246, 255, 219, 219, 219, 255, 49, 49, 49, 243, 13, 13, 13, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 24, 32, 32, 32, 218, 184, 184, 184, 255, 246, 246, 246, 255, 246, 246, 246, 255, 240, 240, 240, 255, 85, 85, 85, 254, 25, 25, 25, 113, 12, 12, 12, 51, 36, 36, 36, 227, 174, 174, 174, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 194, 194, 194, 255, 46, 46, 46, 240, 24, 24, 24, 75, 6, 6, 6, 0, 0, 0, 0, 0, 255, 255, 255, 36, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 161, 255, 255, 255, 139, 255, 255, 255, 120, 255, 255, 255, 102, 255, 255, 255, 77, 255, 255, 255, 58, 255, 255, 255, 39, 255, 255, 255, 38, 255, 255, 255, 166, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 183, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 121, 191, 191, 191, 18, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 45, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 255, 255, 255, 168, 255, 255, 255, 167, 255, 255, 255, 5, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 167, 255, 255, 255, 255, 255, 255, 255, 231, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 110, 56, 0, 234, 214, 111, 143, 239, 227, 183, 255, 201, 182, 109, 255, 161, 146, 58, 148, 141, 126, 51, 28, 65, 58, 27, 0, 21, 21, 0, 0, 175, 158, 84, 21, 244, 218, 115, 227, 238, 223, 163, 255, 233, 225, 195, 255, 196, 181, 124, 255, 160, 142, 72, 243, 156, 136, 69, 175, 179, 160, 81, 165, 212, 192, 98, 32, 37, 33, 17, 0, 0, 0, 0, 0, 44, 38, 20, 0, 183, 161, 82, 126, 220, 207, 153, 255, 235, 217, 146, 255, 243, 211, 110, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 208, 27, 190, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 213, 0, 209, 28, 255, 0, 209, 28, 255, 0, 204, 26, 165, 0, 145, 16, 3, 3, 0, 235, 90, 14, 17, 238, 255, 28, 40, 240, 255, 15, 150, 110, 255, 0, 209, 28, 255, 45, 147, 167, 255, 82, 129, 249, 255, 91, 146, 248, 255, 14, 201, 60, 255, 0, 209, 28, 255, 0, 209, 28, 255, 10, 190, 63, 255, 50, 76, 244, 255, 36, 53, 241, 255, 22, 30, 239, 255, 8, 10, 236, 107, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 172, 255, 255, 255, 255, 255, 255, 255, 195, 255, 255, 255, 36, 255, 255, 255, 25, 255, 255, 255, 115, 255, 255, 255, 142, 255, 255, 255, 98, 255, 255, 255, 142, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 2, 255, 6, 6, 155, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 217, 255, 8, 8, 200, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 180, 191, 1, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 8, 71, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 108, 26, 26, 26, 186, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 25, 25, 25, 161, 13, 13, 13, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 26, 26, 26, 179, 138, 138, 138, 255, 207, 207, 207, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 190, 190, 190, 255, 140, 140, 140, 255, 27, 27, 27, 199, 3, 3, 3, 0, 0, 0, 0, 0, 19, 19, 19, 30, 36, 36, 36, 228, 199, 199, 199, 255, 246, 246, 246, 255, 246, 246, 246, 255, 229, 229, 229, 255, 61, 61, 61, 250, 23, 23, 23, 70, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 31, 35, 35, 35, 226, 194, 194, 194, 255, 246, 246, 246, 255, 246, 246, 246, 255, 236, 236, 236, 255, 76, 76, 76, 253, 53, 53, 53, 248, 205, 205, 205, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 161, 161, 161, 255, 31, 31, 31, 218, 13, 13, 13, 41, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 215, 255, 255, 255, 255, 255, 255, 255, 243, 255, 255, 255, 103, 255, 255, 255, 48, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 47, 255, 255, 255, 101, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 32, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 54, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 174, 255, 255, 255, 84, 255, 255, 255, 7, 255, 255, 255, 62, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 127, 255, 255, 255, 60, 255, 255, 255, 118, 255, 255, 255, 252, 255, 255, 255, 255, 255, 255, 255, 179, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 159, 82, 27, 224, 201, 109, 237, 235, 228, 197, 255, 194, 178, 119, 255, 157, 139, 71, 253, 136, 121, 59, 190, 109, 100, 33, 97, 87, 77, 37, 15, 207, 184, 96, 40, 244, 218, 115, 202, 229, 206, 115, 255, 231, 218, 166, 255, 236, 230, 206, 255, 212, 203, 167, 255, 177, 162, 101, 255, 159, 141, 72, 231, 122, 108, 55, 141, 152, 135, 69, 66, 180, 158, 83, 95, 196, 174, 91, 242, 240, 232, 202, 255, 233, 208, 110, 218, 149, 146, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 207, 27, 43, 0, 209, 28, 255, 0, 204, 26, 166, 0, 143, 16, 3, 0, 0, 0, 0, 2, 0, 233, 22, 10, 10, 236, 251, 24, 33, 239, 255, 15, 138, 121, 255, 6, 193, 53, 255, 58, 102, 232, 255, 72, 112, 247, 255, 73, 129, 232, 255, 3, 205, 37, 255, 0, 209, 28, 255, 0, 209, 28, 255, 24, 152, 124, 255, 45, 67, 243, 255, 31, 45, 241, 255, 18, 23, 238, 254, 3, 3, 234, 34, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 119, 255, 255, 255, 245, 255, 255, 255, 166, 255, 255, 255, 75, 255, 255, 255, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 154, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 241, 255, 255, 255, 255, 191, 191, 191, 17, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 70, 255, 255, 255, 220, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 98, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 2, 255, 6, 6, 158, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 216, 191, 5, 5, 25, 191, 4, 4, 14, 255, 7, 7, 197, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 182, 191, 6, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 7, 70, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 23, 23, 23, 108, 99, 99, 99, 255, 215, 215, 215, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 186, 186, 186, 255, 44, 44, 44, 239, 13, 13, 13, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 12, 25, 25, 25, 128, 26, 26, 26, 177, 26, 26, 26, 179, 26, 26, 26, 179, 26, 26, 26, 179, 26, 26, 26, 179, 26, 26, 26, 153, 26, 26, 26, 153, 26, 26, 26, 153, 26, 26, 26, 120, 18, 18, 18, 16, 0, 0, 0, 0, 18, 18, 18, 8, 30, 30, 30, 214, 183, 183, 183, 255, 246, 246, 246, 255, 246, 246, 246, 255, 237, 237, 237, 255, 74, 74, 74, 253, 26, 26, 26, 91, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 39, 39, 39, 39, 233, 203, 203, 203, 255, 246, 246, 246, 255, 246, 246, 246, 255, 240, 240, 240, 255, 237, 237, 237, 255, 246, 246, 246, 255, 246, 246, 246, 255, 243, 243, 243, 255, 122, 122, 122, 255, 25, 25, 25, 187, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 191, 191, 191, 9, 191, 191, 191, 10, 255, 255, 255, 136, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 255, 255, 255, 82, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 104, 255, 255, 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 155, 255, 255, 255, 68, 255, 255, 255, 86, 255, 255, 255, 176, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 26, 0, 227, 203, 102, 72, 213, 189, 100, 243, 222, 210, 162, 255, 231, 226, 204, 255, 199, 190, 154, 255, 155, 140, 83, 255, 138, 122, 61, 247, 138, 122, 61, 168, 172, 160, 80, 78, 212, 189, 96, 74, 237, 209, 111, 162, 223, 198, 104, 243, 217, 197, 119, 255, 231, 220, 175, 255, 237, 231, 207, 255, 217, 206, 161, 255, 207, 190, 121, 255, 213, 195, 124, 255, 240, 232, 204, 255, 241, 223, 154, 255, 243, 216, 114, 103, 61, 54, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 27, 43, 0, 206, 25, 167, 0, 147, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 4, 3, 235, 158, 18, 22, 238, 255, 11, 135, 118, 255, 31, 97, 189, 255, 52, 78, 244, 255, 60, 92, 245, 255, 65, 101, 246, 255, 31, 157, 131, 255, 0, 209, 28, 255, 6, 193, 54, 255, 44, 79, 230, 255, 37, 54, 241, 255, 24, 34, 239, 255, 9, 12, 235, 176, 1, 1, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 191, 191, 191, 13, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 138, 255, 255, 255, 255, 255, 255, 255, 245, 191, 191, 191, 11, 191, 191, 191, 4, 255, 255, 255, 95, 255, 255, 255, 156, 191, 191, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 50, 128, 128, 128, 0, 191, 191, 191, 22, 255, 255, 255, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 202, 255, 255, 255, 48, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 2, 2, 0, 255, 6, 6, 133, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 214, 191, 5, 5, 24, 0, 0, 0, 0, 0, 0, 0, 0, 191, 3, 3, 13, 255, 8, 8, 195, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 163, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 255, 7, 68, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 26, 26, 26, 179, 209, 209, 209, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 115, 115, 255, 26, 26, 26, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 93, 121, 121, 121, 255, 246, 246, 246, 255, 246, 246, 246, 255, 242, 242, 242, 255, 89, 89, 89, 254, 25, 25, 25, 114, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 48, 45, 45, 45, 239, 211, 211, 211, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 86, 86, 86, 254, 20, 20, 20, 146, 12, 12, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 90, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 255, 255, 255, 69, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 5, 255, 255, 255, 46, 255, 255, 255, 73, 255, 255, 255, 91, 255, 255, 255, 110, 255, 255, 255, 128, 255, 255, 255, 153, 255, 255, 255, 172, 255, 255, 255, 179, 255, 255, 255, 153, 255, 255, 255, 38, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 42, 255, 255, 255, 149, 255, 255, 255, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 228, 255, 255, 255, 157, 255, 255, 255, 150, 255, 255, 255, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 112, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 46, 23, 0, 216, 183, 93, 27, 207, 185, 96, 134, 194, 172, 90, 225, 198, 181, 118, 255, 220, 210, 175, 255, 225, 220, 197, 255, 200, 189, 147, 255, 176, 158, 86, 255, 184, 164, 84, 255, 198, 176, 91, 238, 218, 193, 101, 162, 236, 210, 109, 151, 235, 209, 109, 183, 230, 205, 108, 251, 236, 216, 141, 255, 246, 232, 179, 255, 248, 235, 182, 255, 246, 224, 141, 255, 233, 213, 102, 149, 160, 160, 76, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 17, 11, 0, 150, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 176, 21, 9, 9, 236, 226, 17, 56, 203, 255, 31, 44, 240, 255, 39, 59, 242, 255, 46, 70, 243, 255, 50, 77, 244, 255, 48, 86, 229, 255, 3, 198, 44, 255, 32, 98, 190, 255, 36, 53, 241, 255, 27, 38, 240, 255, 16, 20, 238, 234, 3, 3, 117, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 85, 255, 255, 255, 255, 255, 255, 255, 170, 128, 128, 128, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 183, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 242, 255, 255, 255, 109, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 25, 255, 8, 8, 216, 255, 9, 9, 255, 255, 8, 8, 212, 191, 6, 6, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 4, 4, 12, 255, 8, 8, 193, 255, 9, 9, 255, 255, 9, 9, 231, 255, 2, 2, 41, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 255, 7, 68, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 129, 126, 126, 126, 255, 247, 247, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 55, 55, 55, 250, 24, 24, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 92, 119, 119, 119, 255, 246, 246, 246, 255, 245, 245, 245, 255, 108, 108, 108, 255, 26, 26, 26, 139, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 21, 21, 21, 57, 50, 50, 50, 244, 218, 218, 218, 255, 246, 246, 246, 255, 246, 246, 246, 255, 212, 212, 212, 255, 59, 59, 59, 249, 26, 26, 26, 100, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 30, 255, 255, 255, 128, 255, 255, 255, 167, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 142, 255, 255, 255, 36, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 191, 191, 191, 5, 255, 255, 255, 77, 255, 255, 255, 169, 255, 255, 255, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 203, 191, 191, 191, 10, 255, 255, 255, 34, 255, 255, 255, 120, 255, 255, 255, 173, 255, 255, 255, 141, 255, 255, 255, 52, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 47, 24, 0, 153, 118, 44, 1, 201, 177, 91, 63, 199, 175, 92, 155, 196, 175, 91, 239, 216, 200, 140, 255, 236, 227, 192, 255, 238, 230, 201, 255, 237, 225, 179, 255, 236, 211, 113, 255, 247, 220, 116, 226, 182, 165, 86, 26, 232, 219, 113, 22, 226, 209, 96, 108, 248, 220, 116, 169, 245, 218, 113, 153, 246, 219, 114, 68, 109, 103, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2, 0, 202, 41, 10, 10, 237, 223, 19, 26, 238, 255, 27, 38, 240, 255, 33, 47, 241, 255, 36, 53, 241, 255, 37, 54, 242, 255, 29, 74, 207, 255, 30, 44, 240, 255, 24, 33, 239, 255, 15, 19, 237, 229, 3, 3, 224, 51, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 89, 191, 191, 191, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 255, 255, 255, 147, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 168, 191, 191, 191, 27, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 24, 255, 8, 8, 171, 191, 6, 6, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 4, 4, 11, 255, 7, 7, 167, 255, 4, 4, 39, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 191, 5, 33, 24, 255, 9, 128, 23, 255, 8, 149, 22, 255, 8, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 6, 23, 23, 23, 148, 27, 27, 27, 222, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 26, 26, 26, 202, 24, 24, 24, 77, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 8, 28, 28, 28, 204, 98, 98, 98, 255, 74, 74, 74, 255, 26, 26, 26, 149, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 24, 24, 24, 67, 54, 54, 54, 248, 179, 179, 179, 255, 158, 158, 158, 255, 40, 40, 40, 234, 13, 13, 13, 61, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 191, 191, 191, 15, 255, 255, 255, 97, 255, 255, 255, 184, 255, 255, 255, 235, 255, 255, 255, 219, 255, 255, 255, 140, 191, 191, 191, 15, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 89, 47, 0, 161, 140, 71, 7, 219, 194, 101, 84, 229, 204, 107, 173, 236, 210, 111, 227, 244, 217, 114, 228, 245, 217, 115, 160, 184, 163, 86, 27, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 16, 0, 124, 110, 58, 0, 122, 108, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 167, 17, 6, 6, 219, 144, 14, 16, 237, 244, 19, 24, 238, 255, 21, 29, 239, 255, 22, 30, 239, 255, 20, 27, 239, 255, 16, 21, 238, 249, 8, 10, 234, 152, 5, 4, 175, 22, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 24, 255, 255, 255, 51, 255, 255, 255, 23, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 35, 0, 10, 0, 70, 0, 10, 0, 70, 0, 137, 5, 73, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 153, 21, 76, 0, 10, 0, 70, 0, 4, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 43, 5, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 109, 215, 13, 0, 104, 151, 12, 0, 99, 88, 10, 0, 99, 87, 9, 0, 47, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 3, 26, 26, 26, 66, 24, 24, 24, 44, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 51, 24, 24, 24, 157, 24, 24, 24, 139, 18, 18, 18, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 55, 0, 121, 108, 57, 0, 123, 110, 58, 0, 122, 107, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 101, 0, 1, 1, 176, 10, 7, 5, 235, 70, 10, 11, 236, 105, 10, 11, 236, 102, 9, 8, 235, 77, 5, 5, 176, 13, 2, 2, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 46, 0, 128, 50, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 77, 20, 0, 141, 153, 20, 0, 141, 153, 21, 3, 140, 153, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 61, 46, 149, 160, 20, 0, 141, 153, 18, 0, 137, 86, 5, 0, 35, 0, 0, 0, 0, 0, 199, 176, 20, 51, 207, 185, 28, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 204, 182, 25, 179, 190, 160, 6, 67, 45, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 13, 13, 13, 0, 23, 23, 23, 20, 13, 13, 13, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 83, 83, 83, 5, 117, 117, 117, 59, 117, 117, 117, 92, 117, 117, 117, 95, 116, 116, 116, 63, 85, 85, 85, 7, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 36, 34, 0, 255, 114, 163, 65, 255, 101, 187, 180, 191, 76, 140, 11, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 161, 159, 172, 255, 146, 142, 168, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 253, 19, 0, 139, 93, 5, 0, 35, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 231, 212, 49, 255, 217, 196, 37, 251, 184, 151, 6, 67, 45, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 26, 24, 24, 24, 160, 42, 42, 42, 246, 67, 67, 67, 255, 35, 35, 35, 236, 26, 26, 26, 133, 16, 16, 16, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 24, 24, 24, 63, 25, 25, 25, 158, 27, 27, 27, 197, 27, 27, 27, 192, 20, 20, 20, 141, 18, 18, 18, 34, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 13, 116, 116, 116, 133, 119, 119, 119, 240, 122, 122, 122, 255, 123, 123, 123, 255, 124, 124, 124, 255, 123, 123, 123, 255, 120, 120, 120, 241, 110, 110, 110, 143, 83, 83, 83, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 47, 27, 0, 214, 155, 142, 79, 255, 106, 184, 252, 255, 102, 188, 255, 255, 102, 187, 192, 191, 73, 137, 11, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 103, 94, 159, 255, 29, 10, 143, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 233, 213, 50, 255, 229, 209, 47, 255, 206, 184, 27, 251, 188, 158, 10, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 38, 36, 36, 36, 227, 164, 164, 164, 255, 244, 244, 244, 255, 246, 246, 246, 255, 237, 237, 237, 255, 131, 131, 131, 255, 25, 25, 25, 186, 17, 17, 17, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 24, 24, 24, 165, 84, 84, 84, 255, 178, 178, 178, 255, 219, 219, 219, 255, 215, 215, 215, 255, 160, 160, 160, 255, 54, 54, 54, 247, 26, 26, 26, 102, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 36, 116, 116, 116, 216, 118, 118, 118, 255, 126, 126, 126, 255, 131, 131, 131, 255, 132, 132, 132, 255, 133, 133, 133, 255, 132, 132, 132, 255, 129, 129, 129, 255, 125, 125, 125, 255, 121, 121, 121, 226, 113, 113, 113, 44, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 47, 26, 0, 255, 196, 98, 58, 224, 188, 119, 243, 222, 130, 179, 255, 255, 102, 188, 255, 255, 102, 188, 255, 255, 100, 186, 183, 191, 12, 23, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 103, 94, 159, 255, 29, 10, 143, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 254, 236, 69, 255, 249, 231, 65, 255, 243, 224, 60, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 8, 30, 30, 30, 215, 192, 192, 192, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 141, 141, 141, 255, 26, 26, 26, 175, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 36, 35, 35, 35, 226, 154, 154, 154, 255, 245, 245, 245, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 78, 78, 78, 254, 26, 26, 26, 97, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 12, 12, 12, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 19, 118, 118, 118, 221, 114, 114, 114, 255, 105, 105, 105, 255, 114, 114, 114, 255, 138, 138, 138, 255, 141, 141, 141, 255, 142, 142, 142, 255, 139, 139, 139, 255, 123, 123, 123, 255, 133, 133, 133, 255, 128, 128, 128, 255, 122, 122, 122, 231, 86, 86, 86, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 47, 26, 0, 255, 191, 102, 58, 248, 196, 98, 242, 225, 175, 80, 255, 193, 158, 94, 255, 221, 129, 178, 255, 252, 102, 184, 254, 231, 97, 152, 83, 64, 13, 23, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 132, 126, 165, 255, 87, 76, 155, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 26, 26, 26, 125, 132, 132, 132, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 199, 199, 199, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 91, 91, 91, 255, 16, 16, 16, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 12, 12, 12, 38, 25, 25, 25, 165, 30, 30, 30, 226, 29, 29, 29, 220, 25, 25, 25, 100, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 31, 35, 35, 35, 225, 191, 191, 191, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 49, 49, 49, 243, 13, 13, 13, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 23, 23, 23, 96, 26, 26, 26, 168, 24, 24, 24, 115, 9, 9, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 17, 75, 75, 75, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 112, 112, 112, 153, 123, 123, 123, 255, 126, 126, 126, 255, 105, 105, 105, 255, 105, 105, 105, 255, 127, 127, 127, 255, 150, 150, 150, 255, 141, 141, 141, 255, 111, 111, 111, 255, 105, 105, 105, 255, 132, 132, 132, 255, 134, 134, 134, 255, 127, 127, 127, 255, 118, 118, 118, 170, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 192, 99, 58, 248, 196, 98, 242, 225, 175, 80, 255, 201, 153, 61, 255, 177, 130, 42, 255, 159, 127, 69, 249, 181, 120, 123, 98, 48, 25, 28, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 26, 51, 51, 51, 245, 236, 236, 236, 255, 246, 246, 246, 255, 246, 246, 246, 255, 111, 111, 111, 255, 26, 26, 26, 226, 143, 143, 143, 255, 246, 246, 246, 255, 246, 246, 246, 255, 212, 212, 212, 255, 31, 31, 31, 217, 18, 18, 18, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 22, 22, 22, 75, 46, 46, 46, 240, 175, 175, 175, 255, 244, 244, 244, 255, 230, 230, 230, 255, 66, 66, 66, 254, 26, 26, 26, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 10, 29, 29, 29, 211, 184, 184, 184, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 142, 142, 142, 255, 43, 43, 43, 244, 50, 50, 50, 247, 208, 208, 208, 255, 246, 246, 246, 255, 246, 246, 246, 255, 179, 179, 179, 255, 25, 25, 25, 184, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 126, 90, 90, 90, 254, 191, 191, 191, 255, 111, 111, 111, 255, 19, 19, 19, 138, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 43, 103, 103, 103, 194, 75, 75, 75, 12, 0, 0, 0, 0, 0, 0, 0, 0, 100, 100, 100, 18, 120, 120, 120, 250, 128, 128, 128, 255, 111, 111, 111, 255, 105, 105, 105, 255, 111, 111, 111, 255, 150, 150, 150, 255, 159, 159, 159, 255, 137, 137, 137, 255, 105, 105, 105, 255, 105, 105, 105, 255, 109, 109, 109, 255, 117, 117, 117, 255, 119, 119, 119, 255, 120, 120, 120, 254, 113, 113, 113, 34, 64, 0, 0, 0, 255, 3, 3, 18, 255, 5, 5, 26, 255, 5, 5, 26, 255, 5, 5, 26, 255, 5, 5, 26, 255, 5, 5, 26, 255, 7, 7, 20, 128, 4, 4, 0, 128, 5, 5, 0, 128, 5, 5, 0, 128, 5, 5, 0, 128, 5, 5, 0, 128, 5, 5, 0, 64, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 58, 248, 196, 98, 242, 225, 175, 80, 255, 201, 153, 61, 255, 177, 130, 42, 255, 153, 107, 23, 248, 127, 88, 3, 73, 33, 27, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 19, 19, 19, 140, 154, 154, 154, 255, 246, 246, 246, 255, 246, 246, 246, 255, 193, 193, 193, 255, 27, 27, 27, 190, 15, 15, 15, 9, 32, 32, 32, 220, 216, 216, 216, 255, 246, 246, 246, 255, 246, 246, 246, 255, 123, 123, 123, 255, 24, 24, 24, 113, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 43, 54, 54, 54, 247, 221, 221, 221, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 124, 124, 124, 255, 26, 26, 26, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 20, 20, 20, 156, 141, 141, 141, 255, 246, 246, 246, 255, 246, 246, 246, 255, 242, 242, 242, 255, 95, 95, 95, 254, 20, 20, 20, 155, 15, 15, 15, 11, 25, 25, 25, 56, 63, 63, 63, 251, 242, 242, 242, 255, 246, 246, 246, 255, 246, 246, 246, 255, 86, 86, 86, 255, 24, 24, 24, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 83, 74, 74, 74, 253, 240, 240, 240, 255, 246, 246, 246, 255, 234, 234, 234, 255, 26, 26, 26, 214, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 105, 105, 105, 43, 105, 105, 105, 255, 103, 103, 103, 193, 76, 76, 76, 11, 0, 0, 0, 0, 117, 117, 117, 88, 123, 123, 123, 255, 125, 125, 125, 255, 105, 105, 105, 255, 110, 110, 110, 255, 149, 149, 149, 255, 162, 162, 162, 255, 167, 167, 167, 255, 161, 161, 161, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 116, 116, 116, 255, 118, 118, 118, 105, 128, 4, 4, 0, 255, 8, 8, 180, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 59, 248, 196, 97, 242, 225, 175, 80, 255, 201, 152, 61, 255, 177, 130, 42, 255, 153, 107, 23, 248, 127, 88, 3, 73, 31, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 64, 50, 150, 255, 111, 103, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 89, 78, 156, 255, 22, 2, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 21, 47, 47, 47, 242, 239, 239, 239, 255, 246, 246, 246, 255, 246, 246, 246, 255, 79, 79, 79, 255, 23, 23, 23, 56, 6, 6, 6, 0, 26, 26, 26, 84, 98, 98, 98, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 43, 43, 43, 239, 15, 15, 15, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 7, 28, 28, 28, 207, 193, 193, 193, 255, 246, 246, 246, 255, 246, 246, 246, 255, 238, 238, 238, 255, 174, 174, 174, 255, 45, 45, 45, 240, 12, 12, 12, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 71, 81, 81, 81, 255, 244, 244, 244, 255, 246, 246, 246, 255, 246, 246, 246, 255, 110, 110, 110, 255, 20, 20, 20, 142, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 0, 20, 20, 20, 148, 152, 152, 152, 255, 246, 246, 246, 255, 246, 246, 246, 255, 199, 199, 199, 255, 27, 27, 27, 199, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 46, 50, 50, 50, 244, 224, 224, 224, 255, 246, 246, 246, 255, 246, 246, 246, 255, 174, 174, 174, 255, 25, 25, 25, 168, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 105, 105, 105, 214, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 234, 105, 105, 105, 255, 105, 105, 105, 255, 104, 104, 104, 192, 77, 77, 77, 11, 111, 111, 111, 122, 124, 124, 124, 255, 130, 130, 130, 255, 105, 105, 105, 255, 135, 135, 135, 255, 159, 159, 159, 255, 167, 167, 167, 255, 174, 174, 174, 255, 177, 177, 177, 255, 159, 159, 159, 255, 150, 150, 150, 255, 134, 134, 134, 255, 107, 107, 107, 255, 105, 105, 105, 255, 125, 125, 125, 255, 116, 116, 116, 137, 128, 4, 4, 0, 255, 8, 8, 178, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 59, 248, 195, 98, 242, 225, 175, 80, 255, 201, 152, 61, 255, 177, 129, 42, 255, 153, 107, 23, 248, 129, 85, 3, 73, 31, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 28, 9, 142, 255, 171, 171, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 71, 58, 152, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 20, 20, 20, 140, 151, 151, 151, 255, 246, 246, 246, 255, 246, 246, 246, 255, 183, 183, 183, 255, 26, 26, 26, 178, 12, 12, 12, 0, 0, 0, 0, 0, 3, 3, 3, 1, 26, 26, 26, 195, 194, 194, 194, 255, 246, 246, 246, 255, 246, 246, 246, 255, 150, 150, 150, 255, 19, 19, 19, 144, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 20, 20, 20, 142, 131, 131, 131, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 60, 60, 60, 249, 23, 23, 23, 155, 24, 24, 24, 47, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 6, 30, 30, 30, 216, 209, 209, 209, 255, 246, 246, 246, 255, 246, 246, 246, 255, 160, 160, 160, 255, 25, 25, 25, 177, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 19, 42, 42, 42, 237, 230, 230, 230, 255, 246, 246, 246, 255, 246, 246, 246, 255, 103, 103, 103, 255, 22, 22, 22, 91, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 13, 13, 13, 35, 33, 33, 33, 222, 200, 200, 200, 255, 246, 246, 246, 255, 246, 246, 246, 255, 212, 212, 212, 255, 40, 40, 40, 233, 18, 18, 18, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 105, 105, 105, 238, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 93, 93, 93, 111, 108, 108, 108, 120, 125, 125, 125, 255, 133, 133, 133, 255, 111, 111, 111, 255, 113, 113, 113, 255, 158, 158, 158, 255, 168, 168, 168, 255, 176, 176, 176, 255, 154, 154, 154, 255, 128, 128, 128, 255, 131, 131, 131, 255, 133, 133, 133, 255, 141, 141, 141, 255, 117, 117, 117, 255, 130, 130, 130, 255, 116, 116, 116, 139, 64, 2, 2, 0, 255, 8, 8, 89, 255, 9, 9, 128, 255, 9, 9, 128, 255, 9, 9, 128, 255, 9, 9, 128, 255, 8, 8, 137, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 8, 8, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 59, 247, 195, 98, 242, 225, 175, 80, 255, 201, 152, 61, 255, 177, 129, 42, 255, 153, 107, 23, 248, 130, 83, 3, 72, 32, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 26, 51, 51, 51, 246, 240, 240, 240, 255, 246, 246, 246, 255, 246, 246, 246, 255, 73, 73, 73, 254, 25, 25, 25, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 53, 71, 71, 71, 254, 245, 245, 245, 255, 246, 246, 246, 255, 241, 241, 241, 255, 65, 65, 65, 252, 15, 15, 15, 58, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 86, 79, 79, 79, 254, 242, 242, 242, 255, 246, 246, 246, 255, 246, 246, 246, 255, 104, 104, 104, 255, 26, 26, 26, 106, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 24, 24, 24, 118, 125, 125, 125, 255, 246, 246, 246, 255, 246, 246, 246, 255, 222, 222, 222, 255, 35, 35, 35, 228, 17, 17, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 111, 124, 124, 124, 255, 246, 246, 246, 255, 246, 246, 246, 255, 220, 220, 220, 255, 34, 34, 34, 226, 19, 19, 19, 10, 0, 0, 0, 0, 6, 6, 6, 0, 23, 23, 23, 63, 41, 41, 41, 236, 189, 189, 189, 255, 246, 246, 246, 255, 246, 246, 246, 255, 233, 233, 233, 255, 60, 60, 60, 250, 25, 25, 25, 62, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 105, 105, 105, 166, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 191, 105, 105, 105, 255, 105, 105, 105, 255, 104, 104, 104, 151, 72, 72, 72, 1, 117, 117, 117, 87, 124, 124, 124, 255, 132, 132, 132, 255, 118, 118, 118, 255, 105, 105, 105, 255, 138, 138, 138, 255, 165, 165, 165, 255, 169, 169, 169, 255, 113, 113, 113, 255, 105, 105, 105, 255, 105, 105, 105, 255, 113, 113, 113, 255, 146, 146, 146, 255, 137, 137, 137, 255, 129, 129, 129, 255, 119, 119, 119, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 64, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 32, 0, 255, 194, 109, 58, 247, 196, 98, 242, 225, 174, 80, 255, 201, 152, 61, 255, 177, 129, 42, 255, 153, 107, 23, 248, 130, 83, 3, 72, 32, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 19, 19, 19, 32, 20, 20, 20, 169, 159, 159, 159, 255, 246, 246, 246, 255, 246, 246, 246, 255, 189, 189, 189, 255, 26, 26, 26, 180, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 26, 26, 26, 166, 169, 169, 169, 255, 246, 246, 246, 255, 246, 246, 246, 255, 206, 206, 206, 255, 37, 37, 37, 230, 16, 16, 16, 75, 24, 24, 24, 101, 50, 50, 50, 244, 226, 226, 226, 255, 246, 246, 246, 255, 246, 246, 246, 255, 172, 172, 172, 255, 26, 26, 26, 185, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 23, 47, 47, 47, 242, 234, 234, 234, 255, 246, 246, 246, 255, 246, 246, 246, 255, 108, 108, 108, 255, 25, 25, 25, 96, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 7, 34, 34, 34, 226, 223, 223, 223, 255, 246, 246, 246, 255, 246, 246, 246, 255, 135, 135, 135, 255, 26, 26, 26, 146, 19, 19, 19, 18, 25, 25, 25, 129, 60, 60, 60, 250, 214, 214, 214, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 89, 89, 89, 254, 25, 25, 25, 103, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 105, 105, 105, 43, 105, 105, 105, 255, 104, 104, 104, 152, 77, 77, 77, 1, 0, 0, 0, 0, 113, 113, 113, 19, 121, 121, 121, 249, 130, 130, 130, 255, 118, 118, 118, 255, 111, 111, 111, 255, 150, 150, 150, 255, 158, 158, 158, 255, 158, 158, 158, 255, 108, 108, 108, 255, 105, 105, 105, 255, 105, 105, 105, 255, 124, 124, 124, 255, 142, 142, 142, 255, 134, 134, 134, 255, 126, 126, 126, 254, 112, 112, 112, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 111, 83, 0, 255, 222, 164, 193, 230, 184, 97, 238, 200, 152, 60, 255, 177, 129, 42, 255, 152, 107, 23, 248, 127, 85, 3, 72, 31, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 3, 3, 3, 0, 26, 26, 26, 124, 62, 62, 62, 252, 135, 135, 135, 255, 245, 245, 245, 255, 246, 246, 246, 255, 244, 244, 244, 255, 69, 69, 69, 253, 24, 24, 24, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 30, 45, 45, 45, 240, 225, 225, 225, 255, 246, 246, 246, 255, 246, 246, 246, 255, 203, 203, 203, 255, 107, 107, 107, 255, 124, 124, 124, 255, 223, 223, 223, 255, 246, 246, 246, 255, 246, 246, 246, 255, 223, 223, 223, 255, 43, 43, 43, 237, 20, 20, 20, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 139, 152, 152, 152, 255, 246, 246, 246, 255, 246, 246, 246, 255, 204, 204, 204, 255, 28, 28, 28, 206, 3, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 24, 24, 24, 95, 101, 101, 101, 255, 246, 246, 246, 255, 246, 246, 246, 255, 242, 242, 242, 255, 106, 106, 106, 255, 54, 54, 54, 253, 142, 142, 142, 255, 235, 235, 235, 255, 246, 246, 246, 255, 246, 246, 246, 255, 245, 245, 245, 255, 112, 112, 112, 255, 19, 19, 19, 147, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 43, 100, 100, 100, 153, 74, 74, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 116, 116, 116, 149, 126, 126, 126, 255, 116, 116, 116, 255, 132, 132, 132, 255, 146, 146, 146, 255, 151, 151, 151, 255, 154, 154, 154, 255, 130, 130, 130, 255, 105, 105, 105, 255, 111, 111, 111, 255, 141, 141, 141, 255, 137, 137, 137, 255, 130, 130, 130, 255, 119, 119, 119, 167, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 220, 164, 52, 255, 224, 167, 255, 253, 221, 162, 240, 192, 148, 67, 238, 152, 107, 23, 248, 127, 85, 3, 72, 31, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 13, 13, 13, 19, 57, 57, 57, 251, 240, 240, 240, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 152, 152, 152, 255, 26, 26, 26, 155, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 26, 26, 26, 89, 86, 86, 86, 254, 241, 241, 241, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 67, 67, 67, 252, 23, 23, 23, 79, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 37, 37, 37, 235, 239, 239, 239, 255, 246, 246, 246, 255, 246, 246, 246, 255, 84, 84, 84, 255, 16, 16, 16, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 1, 26, 26, 26, 186, 175, 175, 175, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 241, 241, 241, 255, 110, 110, 110, 255, 20, 20, 20, 158, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 8, 64, 64, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 16, 120, 120, 120, 219, 124, 124, 124, 255, 134, 134, 134, 255, 139, 139, 139, 255, 143, 143, 143, 255, 145, 145, 145, 255, 144, 144, 144, 255, 108, 108, 108, 255, 132, 132, 132, 255, 137, 137, 137, 255, 131, 131, 131, 255, 125, 125, 125, 227, 88, 88, 88, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 93, 70, 0, 239, 205, 154, 155, 255, 224, 167, 255, 255, 224, 167, 255, 250, 218, 160, 192, 158, 107, 38, 68, 31, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 35, 17, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 82, 70, 154, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 24, 24, 24, 26, 66, 66, 66, 254, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 177, 177, 177, 255, 31, 31, 31, 217, 19, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 134, 86, 86, 86, 254, 227, 227, 227, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 196, 196, 196, 255, 64, 64, 64, 252, 26, 26, 26, 99, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 5, 42, 42, 42, 243, 241, 241, 241, 255, 246, 246, 246, 255, 175, 175, 175, 255, 26, 26, 26, 180, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 29, 37, 37, 37, 228, 188, 188, 188, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 219, 219, 219, 255, 78, 78, 78, 254, 26, 26, 26, 135, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 33, 120, 120, 120, 214, 127, 127, 127, 255, 131, 131, 131, 255, 135, 135, 135, 255, 137, 137, 137, 255, 137, 137, 137, 255, 131, 131, 131, 255, 133, 133, 133, 255, 129, 129, 129, 255, 124, 124, 124, 221, 60, 60, 60, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 79, 62, 18, 85, 78, 65, 246, 242, 210, 153, 151, 255, 221, 163, 50, 128, 111, 83, 0, 50, 37, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 21, 1, 141, 255, 135, 131, 166, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 162, 160, 172, 255, 41, 24, 146, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 10, 10, 10, 0, 24, 24, 24, 161, 95, 95, 95, 255, 137, 137, 137, 255, 86, 86, 86, 255, 26, 26, 26, 195, 19, 19, 19, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 93, 37, 37, 37, 233, 110, 110, 110, 255, 148, 148, 148, 255, 140, 140, 140, 255, 88, 88, 88, 255, 27, 27, 27, 203, 26, 26, 26, 51, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 127, 77, 77, 77, 255, 124, 124, 124, 255, 39, 39, 39, 234, 19, 19, 19, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 37, 29, 29, 29, 209, 114, 114, 114, 255, 189, 189, 189, 255, 212, 212, 212, 255, 188, 188, 188, 255, 117, 117, 117, 255, 31, 31, 31, 221, 21, 21, 21, 83, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 11, 119, 119, 119, 128, 122, 122, 122, 235, 126, 126, 126, 255, 128, 128, 128, 255, 128, 128, 128, 255, 127, 127, 127, 255, 125, 125, 125, 241, 121, 121, 121, 136, 89, 89, 89, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 87, 70, 20, 95, 81, 64, 13, 114, 99, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 102, 20, 0, 141, 204, 20, 0, 141, 204, 32, 14, 143, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 21, 2, 141, 204, 20, 0, 141, 204, 20, 0, 140, 164, 10, 0, 70, 0, 198, 177, 21, 47, 205, 184, 27, 170, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 206, 185, 28, 169, 199, 176, 20, 63, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 3, 26, 26, 26, 72, 26, 26, 26, 93, 26, 26, 26, 51, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 17, 17, 17, 6, 26, 26, 26, 75, 26, 26, 26, 113, 26, 26, 26, 103, 25, 25, 25, 52, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 59, 26, 26, 26, 92, 19, 19, 19, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 5, 16, 16, 16, 91, 26, 26, 26, 164, 26, 26, 26, 183, 26, 26, 26, 164, 26, 26, 26, 94, 19, 19, 19, 5, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 42, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 114, 63, 106, 0, 134, 96, 128, 4, 131, 105, 127, 55, 133, 107, 128, 90, 133, 107, 128, 88, 132, 106, 127, 59, 133, 95, 127, 5, 115, 64, 106, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 35, 0, 226, 223, 241, 20, 255, 255, 255, 153, 226, 223, 241, 71, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 0, 0, 0, 0, 255, 255, 255, 8, 255, 255, 255, 153, 255, 255, 255, 83, 170, 161, 103, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 162, 151, 74, 0, 233, 225, 167, 10, 241, 235, 196, 51, 241, 235, 196, 27, 226, 215, 138, 0, 49, 43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 1, 0, 103, 2, 2, 0, 104, 2, 2, 0, 67, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 13, 13, 13, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 255, 255, 255, 255, 131, 255, 255, 255, 25, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 14, 255, 255, 255, 37, 255, 255, 255, 255, 255, 255, 255, 149, 255, 255, 255, 26, 191, 191, 191, 1, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 11, 255, 255, 255, 137, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 164, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 1, 1, 1, 131, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 1, 1, 1, 132, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 150, 2, 0, 0, 153, 74, 2, 2, 153, 192, 4, 4, 173, 231, 5, 5, 200, 231, 5, 5, 201, 194, 4, 4, 175, 77, 2, 2, 153, 3, 0, 0, 153, 0, 0, 0, 151, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 32, 0, 42, 42, 99, 11, 82, 82, 155, 110, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 110, 110, 179, 116, 120, 120, 185, 107, 120, 120, 185, 107, 120, 120, 185, 107, 120, 120, 185, 107, 120, 120, 185, 107, 143, 143, 200, 101, 41, 41, 54, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 21, 255, 255, 255, 51, 255, 255, 255, 36, 191, 191, 191, 2, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 255, 255, 255, 13, 255, 255, 255, 96, 191, 191, 191, 15, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 17, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 140, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 10, 128, 128, 128, 0, 255, 255, 255, 75, 255, 255, 255, 223, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 189, 255, 255, 255, 237, 255, 255, 255, 255, 255, 255, 255, 158, 128, 128, 128, 0, 0, 0, 0, 0, 1, 1, 1, 67, 60, 60, 60, 248, 188, 188, 188, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 189, 189, 189, 255, 62, 62, 62, 249, 1, 1, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 112, 112, 112, 255, 218, 175, 175, 255, 245, 43, 43, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 246, 41, 41, 255, 219, 172, 172, 255, 118, 118, 118, 255, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 33, 0, 50, 50, 100, 26, 68, 68, 142, 141, 75, 75, 154, 245, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 91, 91, 168, 255, 195, 195, 239, 253, 108, 108, 127, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 19, 255, 255, 255, 125, 255, 255, 255, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 255, 255, 255, 169, 255, 255, 255, 53, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 80, 255, 255, 255, 144, 255, 255, 255, 255, 255, 255, 255, 186, 255, 255, 255, 123, 255, 255, 255, 109, 255, 255, 255, 255, 255, 255, 255, 175, 191, 191, 191, 1, 64, 64, 64, 0, 255, 255, 255, 94, 255, 255, 255, 248, 255, 255, 255, 101, 128, 128, 128, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 70, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 196, 255, 255, 255, 128, 255, 255, 255, 30, 255, 255, 255, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 197, 255, 255, 255, 44, 128, 128, 128, 0, 191, 191, 191, 28, 255, 255, 255, 245, 255, 255, 255, 249, 255, 255, 255, 14, 0, 0, 0, 0, 3, 3, 3, 187, 237, 237, 237, 255, 211, 211, 211, 255, 144, 144, 144, 255, 247, 247, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 148, 148, 148, 255, 202, 202, 202, 255, 238, 238, 238, 255, 4, 4, 4, 191, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 206, 253, 201, 201, 255, 255, 19, 19, 255, 255, 6, 6, 255, 255, 34, 34, 255, 255, 135, 135, 255, 255, 185, 185, 255, 255, 186, 186, 255, 255, 137, 137, 255, 255, 37, 37, 255, 255, 6, 6, 255, 255, 17, 17, 255, 254, 197, 197, 255, 20, 20, 20, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 60, 0, 50, 50, 119, 45, 71, 71, 146, 161, 76, 76, 156, 252, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 89, 89, 167, 255, 194, 194, 239, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 50, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 226, 255, 255, 255, 196, 255, 255, 255, 216, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 141, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 33, 255, 255, 255, 255, 255, 255, 255, 118, 0, 0, 0, 0, 255, 255, 255, 76, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 117, 255, 255, 255, 92, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 13, 255, 255, 255, 255, 255, 255, 255, 138, 255, 255, 255, 62, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 104, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255, 255, 25, 0, 0, 0, 0, 30, 30, 30, 221, 255, 255, 255, 255, 74, 74, 74, 255, 0, 0, 0, 255, 176, 176, 176, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 196, 196, 255, 0, 0, 0, 255, 53, 53, 53, 255, 255, 255, 255, 255, 33, 33, 33, 224, 0, 0, 0, 0, 0, 0, 0, 0, 38, 26, 26, 219, 255, 33, 33, 255, 255, 6, 6, 255, 167, 4, 4, 255, 179, 170, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 202, 194, 194, 255, 164, 3, 3, 255, 255, 5, 5, 255, 255, 28, 28, 255, 49, 34, 34, 228, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 65, 0, 64, 64, 128, 66, 69, 69, 143, 182, 76, 76, 158, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 88, 88, 166, 255, 192, 192, 238, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 230, 218, 156, 255, 239, 231, 192, 255, 239, 231, 192, 255, 239, 231, 192, 255, 230, 218, 156, 255, 221, 204, 119, 255, 222, 205, 121, 255, 236, 227, 181, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 236, 227, 181, 255, 222, 205, 121, 255, 221, 204, 119, 255, 230, 218, 156, 255, 239, 231, 192, 255, 239, 231, 192, 255, 239, 231, 192, 255, 230, 218, 156, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 55, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 54, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 124, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 177, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 0, 191, 191, 191, 0, 128, 128, 128, 0, 255, 255, 255, 44, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 10, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255, 255, 174, 255, 255, 255, 88, 255, 255, 255, 128, 255, 255, 255, 115, 255, 255, 255, 31, 191, 191, 191, 16, 255, 255, 255, 162, 255, 255, 255, 255, 255, 255, 255, 214, 191, 191, 191, 1, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 193, 193, 193, 255, 113, 113, 113, 255, 240, 240, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 117, 117, 117, 255, 181, 181, 181, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 16, 0, 0, 0, 130, 7, 7, 223, 255, 6, 6, 255, 248, 53, 53, 255, 127, 123, 123, 255, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 249, 255, 250, 145, 145, 255, 233, 9, 9, 255, 255, 6, 6, 255, 255, 6, 6, 255, 137, 7, 7, 231, 19, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 33, 33, 68, 0, 65, 65, 136, 88, 72, 72, 147, 205, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 87, 87, 165, 255, 191, 191, 237, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 84, 255, 141, 44, 92, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 142, 45, 93, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 250, 242, 255, 221, 204, 119, 255, 231, 220, 161, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 220, 161, 255, 221, 204, 119, 255, 252, 250, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 171, 69, 154, 255, 201, 135, 189, 255, 218, 174, 211, 255, 203, 140, 192, 255, 171, 70, 154, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 191, 191, 191, 6, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 150, 191, 191, 191, 3, 128, 128, 128, 0, 255, 255, 255, 139, 255, 255, 255, 246, 255, 255, 255, 226, 255, 255, 255, 72, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 117, 64, 64, 64, 0, 64, 64, 64, 0, 191, 191, 191, 4, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 4, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 129, 255, 255, 255, 203, 255, 255, 255, 179, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 255, 255, 255, 39, 255, 255, 255, 15, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 175, 255, 255, 255, 232, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 57, 64, 64, 64, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 95, 1, 1, 0, 218, 5, 5, 243, 255, 6, 6, 255, 255, 187, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 251, 255, 255, 157, 157, 255, 255, 35, 35, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 223, 5, 5, 247, 99, 1, 1, 0, 0, 0, 0, 0, 36, 36, 82, 5, 43, 43, 121, 106, 73, 73, 150, 226, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 85, 85, 164, 255, 189, 189, 236, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 151, 62, 106, 255, 250, 246, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 249, 250, 255, 155, 70, 113, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 223, 184, 216, 255, 255, 255, 255, 255, 252, 247, 251, 255, 255, 255, 255, 255, 227, 195, 222, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 255, 255, 255, 96, 255, 255, 255, 255, 255, 255, 255, 209, 191, 191, 191, 4, 0, 0, 0, 0, 255, 255, 255, 20, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 187, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 248, 255, 255, 255, 13, 255, 255, 255, 57, 255, 255, 255, 240, 255, 255, 255, 109, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 118, 255, 255, 255, 240, 255, 255, 255, 48, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 167, 255, 255, 255, 54, 255, 255, 255, 102, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 47, 255, 255, 255, 184, 255, 255, 255, 246, 255, 255, 255, 255, 255, 255, 255, 231, 255, 255, 255, 159, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 35, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 112, 112, 112, 255, 110, 110, 110, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 255, 0, 0, 5, 254, 6, 6, 255, 255, 10, 10, 255, 255, 251, 251, 255, 255, 255, 255, 255, 255, 252, 252, 255, 255, 164, 164, 255, 251, 36, 36, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 39, 39, 255, 255, 160, 160, 255, 255, 15, 15, 255, 255, 6, 6, 255, 255, 0, 0, 11, 0, 0, 0, 0, 102, 102, 157, 86, 132, 132, 189, 255, 126, 126, 183, 255, 123, 123, 180, 255, 119, 119, 177, 255, 115, 115, 175, 255, 114, 114, 174, 255, 109, 109, 173, 255, 108, 108, 173, 255, 106, 106, 175, 255, 103, 103, 172, 255, 98, 98, 167, 255, 103, 103, 172, 252, 112, 112, 180, 255, 108, 108, 178, 255, 107, 107, 177, 255, 95, 95, 170, 255, 92, 92, 168, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 84, 84, 164, 255, 187, 187, 235, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 175, 79, 159, 255, 218, 174, 211, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 223, 185, 217, 255, 255, 255, 255, 255, 216, 169, 208, 255, 170, 68, 153, 255, 211, 158, 202, 255, 255, 255, 255, 255, 225, 189, 219, 255, 221, 180, 214, 255, 221, 180, 214, 255, 218, 173, 210, 255, 175, 78, 158, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 255, 255, 255, 83, 255, 255, 255, 255, 255, 255, 255, 233, 191, 191, 191, 27, 0, 0, 0, 0, 191, 191, 191, 10, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 91, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 10, 255, 255, 255, 44, 255, 255, 255, 251, 255, 255, 255, 251, 255, 255, 255, 61, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 68, 255, 255, 255, 253, 255, 255, 255, 249, 255, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 255, 255, 255, 120, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 18, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 182, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 52, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 57, 255, 255, 255, 213, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 181, 255, 255, 255, 173, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 233, 255, 255, 255, 170, 255, 255, 255, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 10, 10, 10, 255, 9, 9, 9, 255, 246, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 255, 3, 3, 18, 255, 6, 6, 255, 255, 21, 21, 255, 255, 254, 254, 255, 255, 170, 170, 255, 255, 46, 46, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 34, 34, 255, 255, 155, 155, 255, 255, 250, 250, 255, 255, 255, 255, 255, 255, 29, 29, 255, 255, 6, 6, 255, 255, 5, 5, 26, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 137, 137, 193, 255, 141, 141, 195, 255, 141, 141, 196, 255, 175, 175, 223, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 179, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 244, 239, 214, 255, 221, 204, 119, 255, 225, 210, 136, 255, 251, 249, 240, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 251, 250, 240, 255, 225, 210, 136, 255, 221, 204, 119, 255, 244, 239, 213, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 236, 227, 180, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 187, 106, 174, 255, 245, 232, 242, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 248, 239, 246, 255, 255, 255, 255, 255, 201, 136, 190, 255, 170, 68, 153, 255, 196, 126, 184, 255, 255, 255, 255, 255, 248, 240, 247, 255, 247, 236, 245, 255, 247, 236, 245, 255, 244, 231, 242, 255, 186, 104, 173, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 191, 191, 191, 0, 255, 255, 255, 171, 255, 255, 255, 255, 255, 255, 255, 210, 191, 191, 191, 31, 128, 128, 128, 0, 255, 255, 255, 58, 255, 255, 255, 146, 255, 255, 255, 127, 191, 191, 191, 24, 128, 128, 128, 0, 255, 255, 255, 81, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 86, 64, 64, 64, 0, 64, 64, 64, 0, 255, 255, 255, 120, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 64, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 70, 255, 255, 255, 239, 255, 255, 255, 255, 255, 255, 255, 111, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 84, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 60, 128, 128, 128, 0, 191, 191, 191, 8, 255, 255, 255, 216, 255, 255, 255, 255, 255, 255, 255, 209, 255, 255, 255, 97, 191, 191, 191, 7, 64, 64, 64, 0, 64, 64, 64, 0, 255, 255, 255, 74, 255, 255, 255, 248, 255, 255, 255, 255, 255, 255, 255, 211, 255, 255, 255, 146, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 161, 255, 255, 255, 190, 255, 255, 255, 255, 255, 255, 255, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 205, 205, 255, 204, 204, 204, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 189, 1, 1, 2, 250, 5, 5, 253, 255, 6, 6, 255, 255, 50, 50, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 30, 30, 255, 250, 144, 144, 255, 255, 248, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 243, 255, 255, 9, 9, 255, 252, 6, 6, 254, 255, 0, 0, 5, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 223, 207, 126, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 208, 130, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 222, 205, 122, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 222, 205, 122, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 224, 208, 130, 255, 224, 209, 133, 255, 224, 209, 133, 255, 223, 207, 126, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 171, 71, 155, 255, 241, 224, 238, 255, 249, 242, 248, 255, 223, 185, 217, 255, 248, 239, 246, 255, 244, 231, 242, 255, 173, 74, 157, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 204, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 106, 191, 191, 191, 10, 255, 255, 255, 0, 191, 191, 191, 0, 255, 255, 255, 31, 255, 255, 255, 150, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 133, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 162, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 142, 255, 255, 255, 33, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 37, 255, 255, 255, 148, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 152, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 33, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 162, 255, 255, 255, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 158, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 217, 255, 255, 255, 255, 255, 255, 255, 134, 191, 191, 191, 5, 191, 191, 191, 6, 255, 255, 255, 71, 255, 255, 255, 88, 255, 255, 255, 77, 255, 255, 255, 199, 255, 255, 255, 255, 255, 255, 255, 224, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 67, 1, 1, 0, 194, 4, 4, 236, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 27, 27, 255, 255, 142, 142, 255, 255, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 247, 247, 255, 255, 158, 158, 255, 255, 6, 6, 255, 199, 5, 5, 242, 81, 1, 1, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 222, 205, 121, 255, 232, 220, 162, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 228, 215, 147, 255, 221, 204, 119, 255, 221, 204, 119, 255, 228, 214, 147, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 232, 220, 162, 255, 222, 205, 121, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 181, 92, 166, 255, 229, 198, 224, 255, 246, 236, 244, 255, 231, 202, 226, 255, 183, 97, 169, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 10, 255, 255, 255, 171, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 217, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 102, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 123, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 117, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 14, 255, 255, 255, 214, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 64, 64, 64, 0, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 237, 191, 191, 191, 1, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 10, 255, 255, 255, 136, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 222, 255, 255, 255, 44, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 102, 102, 102, 255, 17, 17, 17, 255, 222, 222, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 255, 14, 14, 14, 255, 117, 117, 117, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 2, 0, 0, 0, 93, 12, 12, 220, 255, 6, 6, 255, 255, 6, 6, 255, 150, 7, 7, 255, 219, 207, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 209, 209, 209, 255, 38, 11, 11, 255, 236, 10, 10, 255, 255, 6, 6, 255, 102, 14, 14, 229, 4, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 234, 223, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 252, 249, 255, 223, 208, 129, 255, 223, 207, 129, 255, 253, 253, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 223, 171, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 71, 255, 255, 255, 186, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 237, 255, 255, 255, 150, 255, 255, 255, 32, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 37, 255, 255, 255, 152, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 150, 255, 255, 255, 32, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 201, 255, 255, 255, 200, 255, 255, 255, 110, 255, 255, 255, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 255, 255, 255, 124, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 217, 191, 191, 191, 1, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 234, 255, 255, 255, 254, 255, 255, 255, 63, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 221, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 137, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 214, 255, 255, 255, 255, 85, 85, 85, 255, 8, 8, 8, 255, 216, 216, 216, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 202, 202, 202, 255, 6, 6, 6, 255, 101, 101, 101, 255, 255, 255, 255, 255, 24, 24, 24, 217, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 218, 255, 77, 77, 255, 255, 6, 6, 255, 226, 5, 5, 255, 222, 159, 159, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 157, 157, 255, 223, 5, 5, 255, 255, 6, 6, 255, 255, 71, 71, 255, 37, 36, 36, 227, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 228, 234, 255, 238, 224, 231, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 213, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 191, 191, 191, 1, 255, 255, 255, 34, 255, 255, 255, 21, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 10, 191, 191, 191, 11, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 128, 128, 128, 0, 64, 64, 64, 0, 191, 191, 191, 0, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 148, 191, 191, 191, 0, 191, 191, 191, 14, 255, 255, 255, 125, 255, 255, 255, 72, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 118, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 255, 255, 255, 47, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 154, 187, 187, 187, 254, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 190, 190, 190, 254, 1, 1, 1, 157, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 180, 223, 208, 208, 255, 255, 65, 65, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 51, 51, 255, 255, 102, 102, 255, 255, 103, 103, 255, 255, 53, 53, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 60, 60, 255, 227, 209, 209, 255, 5, 5, 5, 187, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 242, 245, 255, 145, 51, 98, 255, 142, 46, 94, 255, 244, 235, 240, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 213, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 175, 79, 159, 255, 213, 163, 205, 255, 227, 193, 221, 255, 206, 148, 196, 255, 171, 70, 154, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 182, 255, 255, 255, 255, 255, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 113, 255, 255, 255, 230, 255, 255, 255, 255, 255, 255, 255, 215, 255, 255, 255, 103, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 7, 7, 7, 191, 86, 86, 86, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 86, 86, 86, 255, 7, 7, 7, 193, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 23, 23, 23, 223, 95, 89, 89, 255, 138, 18, 18, 255, 239, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 241, 6, 6, 255, 141, 17, 17, 255, 96, 88, 88, 255, 26, 26, 26, 226, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 144, 50, 98, 255, 151, 62, 107, 255, 139, 40, 90, 255, 147, 54, 101, 255, 169, 94, 131, 255, 208, 168, 188, 255, 253, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 145, 170, 255, 137, 35, 86, 255, 138, 38, 88, 255, 189, 132, 161, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 233, 222, 167, 255, 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 251, 246, 255, 223, 207, 127, 255, 223, 207, 126, 255, 252, 251, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 253, 255, 233, 222, 168, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 172, 72, 155, 255, 239, 219, 235, 255, 254, 252, 253, 255, 243, 230, 241, 255, 255, 255, 255, 255, 222, 182, 215, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 34, 255, 255, 255, 76, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 26, 0, 0, 0, 26, 44, 0, 0, 30, 211, 4, 4, 76, 242, 4, 4, 106, 243, 4, 4, 107, 213, 4, 4, 78, 48, 0, 0, 31, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 144, 50, 97, 255, 177, 110, 144, 255, 192, 137, 164, 255, 182, 120, 151, 255, 155, 70, 112, 255, 136, 34, 85, 255, 154, 67, 110, 255, 234, 216, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 241, 244, 255, 144, 48, 96, 255, 175, 106, 140, 255, 182, 121, 152, 255, 140, 42, 91, 255, 243, 233, 238, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 229, 215, 150, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 225, 210, 135, 255, 221, 204, 119, 255, 221, 204, 119, 255, 225, 210, 135, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 229, 215, 150, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 179, 88, 164, 255, 227, 194, 221, 255, 230, 199, 224, 255, 230, 199, 224, 255, 235, 210, 230, 255, 255, 255, 255, 255, 199, 132, 188, 255, 170, 68, 153, 255, 218, 174, 211, 255, 255, 254, 254, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 227, 193, 221, 255, 178, 87, 163, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 171, 171, 220, 254, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 137, 37, 87, 255, 197, 147, 172, 255, 251, 247, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 222, 193, 208, 255, 149, 58, 104, 255, 142, 46, 94, 255, 235, 217, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 144, 170, 255, 137, 36, 86, 255, 234, 217, 226, 255, 240, 228, 234, 255, 139, 39, 89, 255, 187, 128, 158, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 225, 210, 135, 255, 230, 217, 154, 255, 230, 217, 154, 255, 229, 217, 153, 255, 222, 206, 123, 255, 221, 204, 119, 255, 221, 204, 119, 255, 225, 210, 134, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 225, 210, 135, 255, 221, 204, 119, 255, 221, 204, 119, 255, 222, 206, 123, 255, 229, 217, 153, 255, 230, 217, 154, 255, 230, 217, 154, 255, 225, 210, 136, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 183, 97, 169, 255, 236, 212, 232, 255, 238, 218, 235, 255, 238, 218, 235, 255, 242, 226, 239, 255, 255, 255, 255, 255, 195, 123, 183, 255, 170, 68, 153, 255, 214, 164, 206, 255, 255, 255, 255, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 235, 212, 231, 255, 183, 96, 168, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 128, 255, 255, 255, 119, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 143, 255, 255, 255, 124, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 95, 0, 0, 0, 149, 0, 0, 0, 175, 0, 0, 0, 201, 0, 0, 0, 201, 0, 0, 0, 175, 0, 0, 0, 149, 0, 0, 0, 97, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 207, 207, 249, 204, 99, 99, 121, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 35, 86, 255, 214, 179, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 232, 237, 255, 149, 58, 104, 255, 154, 68, 111, 255, 253, 251, 252, 255, 255, 255, 255, 255, 247, 240, 244, 255, 143, 47, 95, 255, 176, 109, 143, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 124, 155, 255, 140, 41, 90, 255, 164, 86, 125, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 244, 226, 255, 221, 204, 119, 255, 227, 213, 144, 255, 254, 253, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 253, 250, 255, 227, 214, 145, 255, 221, 204, 119, 255, 247, 244, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 180, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 173, 75, 157, 255, 243, 228, 240, 255, 251, 247, 251, 255, 236, 212, 232, 255, 254, 254, 254, 255, 227, 194, 222, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 241, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 133, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 114, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 1, 1, 190, 56, 56, 56, 252, 135, 135, 135, 255, 197, 197, 197, 255, 223, 223, 223, 255, 249, 249, 249, 255, 249, 249, 249, 255, 223, 223, 223, 255, 197, 197, 197, 255, 137, 137, 137, 255, 58, 58, 58, 252, 1, 1, 1, 192, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 198, 198, 243, 86, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 180, 116, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 221, 192, 207, 255, 136, 34, 85, 255, 209, 170, 190, 255, 255, 255, 255, 255, 194, 143, 169, 255, 137, 36, 87, 255, 236, 219, 227, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 230, 236, 255, 139, 40, 90, 255, 137, 37, 87, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 179, 87, 164, 255, 221, 181, 214, 255, 234, 210, 230, 255, 214, 165, 206, 255, 173, 75, 157, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 10, 255, 255, 255, 255, 255, 255, 255, 243, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 124, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 105, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1, 1, 1, 184, 89, 89, 89, 255, 221, 221, 221, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 92, 92, 92, 255, 2, 2, 2, 187, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 208, 208, 249, 221, 99, 99, 121, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 233, 214, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 69, 112, 255, 149, 58, 103, 255, 171, 100, 136, 255, 140, 42, 91, 255, 178, 112, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 186, 127, 157, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 7, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 114, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 96, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 19, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 78, 38, 38, 38, 242, 203, 203, 203, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 206, 206, 206, 255, 41, 41, 41, 244, 1, 1, 1, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 126, 126, 248, 101, 0, 0, 64, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 142, 46, 94, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 121, 152, 255, 136, 34, 85, 255, 135, 33, 85, 255, 138, 37, 87, 255, 237, 222, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 232, 238, 255, 140, 41, 91, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 249, 238, 255, 221, 204, 119, 255, 230, 217, 154, 255, 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 255, 230, 217, 155, 255, 221, 204, 119, 255, 251, 249, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 5, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 105, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 88, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 15, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 67, 67, 67, 252, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 207, 207, 255, 132, 132, 132, 255, 202, 202, 202, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 205, 205, 255, 130, 130, 130, 255, 205, 205, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 240, 240, 255, 71, 71, 71, 252, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 210, 210, 251, 233, 115, 115, 167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 148, 57, 103, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 133, 161, 255, 136, 34, 85, 255, 136, 34, 85, 255, 180, 116, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 188, 131, 160, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 228, 215, 147, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 175, 255, 227, 213, 144, 255, 221, 204, 119, 255, 221, 204, 119, 255, 232, 220, 162, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 232, 220, 162, 255, 221, 204, 119, 255, 221, 204, 119, 255, 227, 213, 143, 255, 235, 225, 175, 255, 235, 225, 176, 255, 235, 225, 176, 255, 228, 215, 148, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 204, 142, 194, 255, 239, 219, 235, 255, 239, 219, 235, 255, 204, 143, 194, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 2, 255, 255, 255, 255, 255, 255, 255, 251, 191, 191, 191, 0, 191, 191, 191, 0, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 96, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 80, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 27, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 24, 255, 255, 255, 34, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 70, 255, 255, 255, 189, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 71, 71, 71, 253, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 187, 187, 187, 255, 55, 55, 55, 251, 0, 0, 0, 170, 0, 0, 0, 182, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 184, 0, 0, 0, 167, 52, 52, 52, 250, 183, 183, 183, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 75, 75, 75, 253, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 196, 196, 241, 116, 46, 46, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 138, 38, 88, 255, 251, 248, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 107, 141, 255, 136, 34, 85, 255, 138, 38, 88, 255, 239, 224, 232, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 244, 234, 239, 255, 141, 43, 92, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 199, 131, 188, 255, 255, 255, 255, 255, 236, 213, 232, 255, 236, 213, 232, 255, 255, 255, 255, 255, 199, 132, 188, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 255, 255, 255, 255, 253, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 133, 255, 255, 255, 255, 255, 255, 255, 120, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 51, 255, 255, 255, 202, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 198, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 22, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 33, 64, 64, 64, 0, 0, 0, 0, 0, 255, 255, 255, 90, 255, 255, 255, 254, 255, 255, 255, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 255, 255, 255, 248, 255, 255, 255, 249, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 39, 39, 39, 243, 239, 239, 239, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 250, 250, 255, 103, 103, 103, 255, 0, 0, 0, 176, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 172, 97, 97, 97, 255, 249, 249, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 255, 42, 42, 42, 244, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 211, 211, 252, 242, 147, 147, 176, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 217, 184, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 246, 248, 255, 144, 48, 96, 255, 135, 33, 85, 255, 182, 119, 151, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 134, 162, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 229, 217, 153, 255, 252, 251, 244, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 248, 245, 229, 255, 222, 205, 122, 255, 222, 205, 122, 255, 248, 245, 229, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 252, 251, 244, 255, 230, 217, 153, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 187, 104, 173, 255, 244, 231, 242, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 252, 248, 251, 255, 243, 229, 241, 255, 171, 70, 154, 255, 171, 69, 154, 255, 243, 228, 240, 255, 252, 248, 251, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 244, 230, 241, 255, 186, 103, 172, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 252, 255, 255, 255, 255, 191, 191, 191, 1, 128, 128, 128, 0, 255, 255, 255, 131, 255, 255, 255, 255, 255, 255, 255, 242, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 155, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 54, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 14, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 40, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 126, 255, 255, 255, 255, 255, 255, 255, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 84, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 191, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 249, 249, 255, 70, 70, 70, 252, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 65, 65, 65, 251, 248, 248, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 214, 214, 255, 3, 3, 3, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 201, 201, 244, 131, 48, 48, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 157, 73, 115, 255, 252, 249, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 143, 169, 255, 136, 34, 85, 255, 136, 34, 85, 255, 204, 160, 182, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 209, 170, 190, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 212, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 176, 80, 160, 255, 219, 175, 211, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 241, 223, 238, 255, 249, 241, 248, 255, 178, 86, 163, 255, 178, 86, 163, 255, 249, 241, 247, 255, 241, 223, 238, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 218, 174, 211, 255, 175, 79, 159, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 3, 128, 128, 128, 0, 255, 255, 255, 130, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 173, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 69, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 17, 255, 255, 255, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 46, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 119, 255, 255, 255, 255, 255, 255, 255, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 139, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 119, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 74, 96, 96, 96, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 99, 99, 99, 255, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 105, 105, 105, 255, 153, 153, 153, 255, 153, 153, 153, 255, 108, 108, 108, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 93, 93, 93, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 101, 101, 101, 254, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 161, 78, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 212, 212, 253, 248, 145, 145, 179, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 175, 107, 141, 255, 252, 249, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 212, 175, 193, 255, 137, 36, 87, 255, 135, 33, 84, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 213, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 185, 101, 171, 255, 252, 248, 251, 255, 253, 251, 253, 255, 253, 251, 253, 255, 252, 248, 251, 255, 185, 102, 171, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 247, 255, 255, 255, 255, 255, 255, 255, 6, 128, 128, 128, 0, 255, 255, 255, 130, 255, 255, 255, 255, 255, 255, 255, 136, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 17, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 65, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 255, 51, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 79, 255, 255, 255, 255, 255, 255, 255, 99, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 178, 255, 255, 255, 246, 255, 255, 255, 17, 255, 255, 255, 17, 64, 64, 64, 0, 0, 0, 0, 0, 5, 5, 5, 199, 226, 226, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 182, 182, 182, 254, 1, 1, 1, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 176, 176, 176, 254, 255, 255, 255, 255, 255, 255, 255, 255, 229, 229, 229, 255, 7, 7, 7, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 41, 0, 109, 109, 148, 22, 146, 146, 200, 98, 141, 141, 195, 135, 140, 140, 196, 207, 136, 136, 193, 250, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 205, 205, 247, 147, 49, 49, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 156, 72, 114, 255, 216, 182, 199, 255, 251, 247, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 209, 220, 255, 178, 112, 145, 255, 136, 34, 85, 255, 135, 33, 84, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 235, 225, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 251, 255, 225, 210, 135, 255, 224, 209, 134, 255, 254, 254, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 225, 176, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 183, 95, 168, 255, 214, 164, 205, 255, 214, 164, 205, 255, 183, 95, 168, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 8, 128, 128, 128, 0, 255, 255, 255, 131, 255, 255, 255, 255, 255, 255, 255, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 61, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 25, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 255, 255, 255, 58, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 219, 255, 255, 255, 244, 255, 255, 255, 90, 191, 191, 191, 1, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 11, 255, 255, 255, 137, 255, 255, 255, 255, 255, 255, 255, 152, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 69, 69, 69, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 48, 48, 48, 247, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 42, 42, 42, 245, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 74, 74, 74, 255, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 50, 0, 73, 73, 101, 0, 71, 71, 98, 0, 149, 149, 200, 58, 142, 142, 197, 115, 140, 140, 193, 162, 139, 139, 195, 232, 135, 135, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 213, 213, 254, 253, 149, 149, 181, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 148, 56, 102, 255, 140, 41, 91, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 224, 208, 130, 255, 238, 229, 187, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 234, 223, 171, 255, 221, 204, 119, 255, 221, 204, 119, 255, 234, 223, 171, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 238, 230, 187, 255, 224, 208, 130, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 242, 255, 255, 255, 255, 255, 255, 255, 11, 128, 128, 128, 0, 255, 255, 255, 133, 255, 255, 255, 255, 255, 255, 255, 174, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 102, 191, 191, 191, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 58, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 30, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 65, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 38, 255, 255, 255, 221, 255, 255, 255, 255, 255, 255, 255, 230, 255, 255, 255, 178, 255, 255, 255, 153, 255, 255, 255, 147, 255, 255, 255, 176, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 187, 191, 191, 191, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 147, 147, 147, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 196, 196, 255, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 152, 152, 152, 255, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 98, 0, 72, 72, 100, 0, 111, 111, 149, 15, 146, 146, 201, 88, 127, 127, 175, 126, 141, 141, 196, 198, 137, 137, 194, 247, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 194, 194, 238, 163, 88, 88, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 240, 255, 255, 255, 255, 255, 255, 255, 13, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 54, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 35, 255, 255, 255, 229, 255, 255, 255, 249, 255, 255, 255, 72, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 8, 255, 255, 255, 100, 255, 255, 255, 178, 255, 255, 255, 212, 255, 255, 255, 239, 255, 255, 255, 251, 255, 255, 255, 223, 255, 255, 255, 189, 255, 255, 255, 85, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 215, 215, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 121, 121, 121, 254, 0, 0, 0, 139, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 135, 116, 116, 116, 255, 255, 255, 255, 255, 255, 255, 255, 255, 220, 220, 220, 255, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 36, 0, 74, 74, 100, 0, 71, 71, 98, 0, 147, 147, 200, 47, 143, 143, 198, 110, 140, 140, 194, 150, 140, 140, 195, 225, 135, 135, 192, 254, 134, 134, 191, 255, 134, 134, 191, 255, 169, 169, 219, 254, 172, 172, 233, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 143, 255, 255, 255, 153, 255, 255, 255, 9, 128, 128, 128, 0, 255, 255, 255, 81, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 36, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 40, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 244, 244, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 162, 162, 162, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 60, 60, 60, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 111, 111, 111, 255, 153, 153, 153, 255, 153, 153, 153, 255, 114, 114, 114, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 58, 58, 58, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 160, 160, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 50, 0, 73, 73, 100, 0, 110, 110, 148, 9, 147, 147, 201, 80, 140, 140, 195, 122, 156, 156, 207, 130, 81, 81, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 185, 185, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 115, 115, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 15, 15, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 54, 0, 0, 0, 85, 0, 0, 0, 84, 0, 0, 0, 51, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 0, 48, 48, 100, 25, 103, 103, 172, 107, 102, 102, 147, 18, 68, 68, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 185, 185, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 115, 115, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 27, 27, 27, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 222, 77, 77, 77, 255, 77, 77, 77, 255, 7, 7, 7, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 120, 22, 22, 22, 233, 97, 97, 97, 255, 132, 132, 132, 254, 131, 131, 131, 255, 93, 93, 93, 255, 19, 19, 19, 229, 0, 0, 0, 112, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 0, 46, 46, 98, 23, 69, 69, 143, 146, 75, 75, 156, 250, 77, 77, 159, 255, 85, 85, 164, 251, 109, 109, 179, 167, 134, 134, 195, 69, 65, 65, 96, 0, 34, 34, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 203, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 236, 236, 255, 230, 230, 230, 255, 230, 230, 230, 255, 230, 230, 230, 255, 108, 108, 108, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 167, 167, 167, 255, 230, 230, 230, 255, 230, 230, 230, 255, 171, 171, 171, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 104, 104, 104, 255, 230, 230, 230, 255, 230, 230, 230, 255, 230, 230, 230, 255, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 255, 4, 4, 4, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 20, 1, 128, 0, 15, 1, 128, 0, 20, 0, 255, 13, 39, 3, 255, 60, 39, 2, 255, 105, 34, 1, 255, 74, 15, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 23, 123, 56, 255, 98, 165, 120, 255, 98, 165, 120, 255, 23, 123, 56, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 6, 6, 202, 138, 138, 138, 255, 248, 248, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 130, 130, 130, 255, 3, 3, 3, 194, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 96, 128, 0, 64, 192, 255, 40, 66, 191, 255, 77, 66, 191, 255, 70, 48, 143, 191, 17, 29, 92, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 32, 0, 49, 49, 99, 23, 70, 70, 143, 144, 76, 76, 155, 249, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 99, 99, 173, 224, 119, 119, 185, 118, 105, 105, 147, 18, 68, 68, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 229, 229, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 97, 97, 255, 0, 0, 0, 202, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 200, 91, 91, 91, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 234, 234, 255, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 2, 191, 24, 39, 2, 255, 133, 40, 3, 255, 178, 40, 4, 255, 223, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 20, 121, 53, 255, 198, 222, 206, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 222, 206, 255, 20, 121, 53, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 202, 189, 189, 189, 255, 255, 255, 255, 255, 231, 231, 231, 255, 121, 121, 121, 255, 71, 71, 71, 255, 74, 74, 74, 255, 125, 125, 125, 255, 235, 235, 235, 255, 255, 255, 255, 255, 178, 178, 178, 254, 4, 4, 4, 192, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 64, 191, 255, 55, 66, 192, 255, 205, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 250, 62, 189, 255, 153, 46, 142, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 91, 6, 70, 70, 141, 141, 75, 75, 155, 249, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 84, 84, 164, 251, 112, 112, 179, 168, 139, 139, 171, 35, 0, 0, 0, 0, 0, 0, 0, 135, 176, 176, 176, 255, 255, 255, 255, 255, 255, 255, 255, 255, 167, 167, 167, 255, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 161, 161, 161, 254, 255, 255, 255, 255, 255, 255, 255, 255, 181, 181, 181, 255, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 191, 2, 40, 4, 255, 198, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 239, 35, 1, 255, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 62, 145, 90, 255, 255, 255, 255, 255, 122, 179, 141, 255, 122, 179, 141, 255, 255, 255, 255, 255, 62, 145, 90, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 78, 175, 159, 255, 141, 203, 193, 255, 141, 203, 193, 255, 78, 175, 158, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 140, 140, 140, 255, 255, 255, 255, 255, 181, 181, 181, 254, 19, 19, 19, 226, 0, 0, 0, 89, 0, 0, 0, 26, 0, 0, 0, 29, 0, 0, 0, 94, 23, 23, 23, 231, 190, 190, 190, 254, 255, 255, 255, 255, 127, 127, 127, 255, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 45, 64, 0, 63, 186, 255, 68, 67, 193, 255, 248, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 206, 49, 142, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 126, 126, 183, 255, 99, 99, 167, 255, 78, 78, 158, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 123, 123, 190, 255, 202, 202, 245, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 56, 98, 98, 98, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 18, 18, 18, 226, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 15, 15, 222, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 102, 102, 102, 255, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 2, 255, 43, 40, 4, 255, 249, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 38, 3, 255, 176, 19, 1, 255, 35, 4, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 45, 135, 75, 255, 253, 254, 253, 255, 185, 215, 195, 255, 185, 215, 195, 255, 253, 254, 253, 255, 45, 135, 75, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 70, 171, 154, 255, 141, 203, 193, 255, 238, 247, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 247, 246, 255, 140, 203, 193, 255, 70, 171, 154, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 25, 25, 234, 249, 249, 249, 255, 231, 231, 231, 255, 18, 18, 18, 225, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 24, 24, 232, 237, 237, 237, 255, 244, 244, 244, 255, 17, 17, 17, 224, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 143, 191, 12, 66, 193, 255, 232, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 144, 32, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 128, 128, 185, 255, 103, 103, 169, 255, 80, 80, 158, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 102, 102, 176, 255, 181, 181, 231, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 2, 22, 22, 22, 231, 249, 249, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 130, 130, 255, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 123, 123, 123, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 251, 251, 255, 25, 25, 25, 234, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 39, 3, 255, 129, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 239, 36, 1, 255, 71, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 122, 179, 141, 255, 251, 253, 251, 255, 251, 253, 251, 255, 122, 179, 141, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 158, 213, 241, 255, 140, 206, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 113, 190, 178, 255, 219, 239, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 239, 235, 255, 113, 190, 178, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 16, 7, 7, 7, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 43, 43, 43, 251, 255, 255, 255, 255, 255, 255, 255, 255, 46, 46, 46, 252, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 7, 7, 7, 230, 0, 0, 0, 18, 0, 0, 0, 56, 101, 101, 101, 255, 255, 255, 255, 255, 119, 119, 119, 255, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 133, 133, 133, 254, 255, 255, 255, 255, 87, 87, 87, 255, 0, 0, 0, 43, 0, 0, 0, 0, 0, 32, 64, 0, 41, 167, 255, 96, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 244, 46, 141, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 130, 130, 187, 255, 106, 106, 170, 255, 86, 86, 162, 252, 77, 77, 159, 255, 86, 86, 165, 255, 159, 159, 216, 255, 215, 215, 254, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 147, 147, 147, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 42, 42, 42, 243, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 53, 53, 53, 255, 77, 77, 77, 255, 77, 77, 77, 255, 54, 54, 54, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 37, 37, 37, 241, 246, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 152, 152, 152, 255, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 191, 7, 40, 3, 255, 214, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 246, 35, 1, 255, 56, 8, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 190, 218, 199, 255, 190, 218, 199, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 254, 255, 255, 198, 231, 247, 255, 139, 205, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 91, 180, 165, 255, 192, 226, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 226, 220, 255, 91, 180, 165, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 18, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 73, 73, 255, 0, 0, 0, 20, 0, 0, 0, 89, 138, 138, 138, 254, 255, 255, 255, 255, 69, 69, 69, 255, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 83, 83, 83, 255, 255, 255, 255, 255, 126, 126, 126, 255, 0, 0, 0, 76, 0, 0, 0, 0, 31, 94, 128, 0, 64, 191, 255, 149, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 135, 135, 192, 254, 136, 136, 194, 252, 208, 208, 249, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 22, 22, 22, 230, 243, 243, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 218, 218, 218, 255, 19, 19, 19, 227, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 17, 17, 17, 224, 215, 215, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 25, 25, 25, 233, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 24, 1, 255, 59, 40, 4, 255, 254, 39, 3, 255, 192, 38, 2, 255, 80, 40, 3, 255, 221, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 222, 27, 0, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 27, 124, 59, 255, 65, 146, 92, 255, 33, 128, 65, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 190, 218, 199, 255, 190, 218, 199, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 33, 128, 65, 255, 65, 146, 92, 255, 27, 124, 59, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 172, 219, 243, 255, 209, 235, 248, 255, 255, 255, 255, 255, 204, 233, 248, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 76, 174, 158, 255, 164, 214, 206, 255, 249, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 252, 252, 255, 164, 214, 205, 255, 76, 174, 157, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 18, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 73, 73, 255, 0, 0, 0, 20, 0, 0, 0, 89, 138, 138, 138, 254, 255, 255, 255, 255, 68, 68, 68, 255, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 80, 80, 80, 255, 255, 255, 255, 255, 126, 126, 126, 255, 0, 0, 0, 76, 0, 0, 0, 0, 31, 96, 128, 0, 65, 192, 255, 156, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 191, 255, 56, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 96, 96, 96, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 213, 213, 255, 31, 31, 31, 238, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 28, 28, 28, 236, 209, 209, 209, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 102, 102, 102, 255, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 128, 0, 29, 2, 255, 150, 35, 2, 255, 104, 8, 0, 64, 0, 28, 2, 191, 20, 40, 4, 255, 225, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 119, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 50, 138, 80, 255, 230, 241, 234, 255, 255, 255, 255, 255, 242, 247, 244, 255, 73, 151, 100, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 190, 218, 199, 255, 190, 218, 199, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 73, 151, 100, 255, 242, 247, 244, 255, 255, 255, 255, 255, 230, 241, 234, 255, 50, 138, 80, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 201, 232, 247, 255, 254, 255, 255, 255, 152, 211, 240, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 69, 170, 154, 255, 136, 201, 190, 255, 236, 246, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 246, 244, 255, 136, 201, 190, 255, 69, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 16, 7, 7, 7, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 43, 43, 43, 251, 255, 255, 255, 255, 255, 255, 255, 255, 46, 46, 46, 252, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 7, 7, 7, 230, 0, 0, 0, 18, 0, 0, 0, 56, 101, 101, 101, 255, 255, 255, 255, 255, 119, 119, 119, 255, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 131, 131, 131, 254, 255, 255, 255, 255, 88, 88, 88, 255, 0, 0, 0, 43, 0, 0, 0, 0, 15, 44, 64, 0, 63, 186, 255, 113, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 251, 59, 173, 255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 143, 143, 143, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 238, 238, 255, 97, 97, 97, 255, 2, 2, 2, 192, 0, 0, 0, 82, 0, 0, 0, 134, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 138, 0, 0, 0, 79, 1, 1, 1, 189, 94, 94, 94, 255, 236, 236, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 148, 148, 255, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 3, 0, 255, 11, 11, 20, 64, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 191, 14, 29, 2, 191, 19, 0, 0, 0, 0, 0, 0, 64, 0, 24, 2, 255, 87, 40, 4, 255, 255, 40, 4, 255, 255, 39, 4, 255, 221, 5, 0, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 14, 14, 13, 191, 13, 13, 8, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 158, 199, 171, 255, 242, 248, 244, 255, 97, 165, 120, 255, 224, 237, 228, 255, 191, 218, 200, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 169, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 235, 244, 238, 255, 235, 244, 238, 255, 169, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 169, 205, 181, 255, 22, 122, 55, 255, 191, 218, 200, 255, 224, 237, 228, 255, 97, 165, 120, 255, 242, 248, 244, 255, 157, 199, 171, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 157, 213, 241, 255, 255, 255, 255, 255, 176, 221, 244, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 84, 177, 162, 255, 191, 226, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 226, 220, 255, 84, 177, 161, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 25, 25, 235, 249, 249, 249, 255, 231, 231, 231, 255, 18, 18, 18, 225, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 24, 24, 232, 237, 237, 237, 255, 244, 244, 244, 255, 16, 16, 16, 224, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 59, 172, 255, 26, 67, 193, 255, 246, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 173, 31, 90, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 142, 27, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 190, 154, 154, 154, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 255, 116, 116, 116, 255, 44, 44, 44, 255, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 42, 42, 42, 255, 115, 115, 115, 255, 217, 217, 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 158, 158, 158, 255, 4, 4, 4, 194, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 10, 10, 17, 255, 21, 21, 236, 255, 18, 18, 85, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 191, 4, 40, 4, 255, 246, 40, 4, 255, 255, 40, 4, 255, 255, 38, 3, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 20, 20, 46, 255, 21, 21, 217, 255, 20, 20, 86, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 158, 199, 172, 255, 242, 248, 244, 255, 97, 165, 120, 255, 224, 237, 228, 255, 191, 219, 200, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 168, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 187, 216, 197, 255, 187, 216, 197, 255, 168, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 168, 205, 181, 255, 22, 122, 55, 255, 191, 219, 200, 255, 224, 237, 228, 255, 97, 165, 120, 255, 242, 248, 244, 255, 158, 199, 172, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 157, 213, 241, 255, 140, 206, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 140, 206, 239, 255, 255, 255, 255, 255, 192, 228, 246, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 81, 176, 160, 255, 107, 188, 174, 255, 68, 170, 153, 255, 113, 190, 177, 255, 219, 239, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 239, 235, 255, 112, 190, 177, 255, 68, 170, 153, 255, 107, 188, 174, 255, 82, 176, 161, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 139, 139, 139, 255, 255, 255, 255, 255, 182, 182, 182, 254, 19, 19, 19, 227, 0, 0, 0, 90, 0, 0, 0, 28, 0, 0, 0, 30, 0, 0, 0, 96, 23, 23, 23, 232, 191, 191, 191, 254, 255, 255, 255, 255, 127, 127, 127, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 43, 64, 0, 65, 192, 255, 109, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 234, 49, 144, 191, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 43, 0, 145, 145, 199, 86, 139, 139, 194, 227, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 214, 214, 254, 255, 205, 205, 247, 160, 146, 146, 175, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 165, 111, 111, 111, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 116, 116, 116, 255, 0, 0, 0, 169, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 21, 21, 105, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 136, 191, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 128, 0, 39, 3, 255, 200, 40, 4, 255, 255, 40, 4, 255, 255, 24, 2, 255, 108, 0, 0, 64, 0, 128, 5, 5, 0, 255, 21, 21, 99, 255, 22, 22, 246, 255, 22, 22, 255, 255, 22, 22, 181, 128, 8, 8, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 51, 138, 80, 255, 230, 241, 234, 255, 255, 255, 255, 255, 242, 247, 244, 255, 73, 151, 100, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 73, 151, 100, 255, 242, 247, 244, 255, 255, 255, 255, 255, 230, 241, 234, 255, 50, 138, 80, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 248, 253, 255, 156, 213, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 237, 247, 252, 255, 221, 240, 250, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 161, 215, 242, 255, 214, 237, 249, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 254, 254, 254, 255, 184, 223, 216, 255, 86, 178, 163, 255, 70, 171, 154, 255, 142, 204, 193, 255, 239, 248, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 248, 246, 255, 141, 203, 193, 255, 70, 171, 154, 255, 86, 178, 163, 255, 185, 223, 217, 255, 254, 255, 254, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 202, 188, 188, 188, 255, 255, 255, 255, 255, 232, 232, 232, 255, 123, 123, 123, 255, 73, 73, 73, 255, 76, 76, 76, 255, 127, 127, 127, 254, 236, 236, 236, 255, 255, 255, 255, 255, 177, 177, 177, 254, 4, 4, 4, 192, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 65, 191, 255, 103, 67, 193, 255, 242, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 193, 255, 206, 58, 172, 255, 40, 13, 38, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 138, 4, 143, 143, 198, 120, 136, 136, 193, 245, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 210, 210, 251, 230, 196, 196, 240, 71, 49, 49, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 119, 43, 43, 43, 245, 179, 179, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 182, 182, 182, 255, 45, 45, 45, 247, 0, 0, 0, 122, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 255, 22, 22, 199, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 186, 191, 15, 15, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 128, 0, 37, 3, 255, 153, 40, 4, 255, 255, 40, 4, 255, 255, 39, 2, 255, 151, 183, 10, 95, 10, 255, 16, 16, 161, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 251, 255, 10, 10, 24, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 27, 124, 59, 255, 65, 146, 92, 255, 33, 128, 65, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 33, 128, 65, 255, 65, 146, 92, 255, 27, 124, 59, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 175, 221, 244, 255, 243, 250, 253, 255, 226, 243, 251, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 195, 229, 246, 255, 254, 255, 255, 255, 162, 215, 242, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 156, 213, 241, 255, 250, 253, 254, 255, 233, 246, 252, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 251, 250, 255, 155, 209, 200, 255, 73, 172, 156, 255, 79, 175, 159, 255, 171, 217, 209, 255, 251, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 253, 253, 255, 171, 217, 209, 255, 79, 175, 159, 255, 73, 172, 156, 255, 156, 210, 201, 255, 246, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 6, 6, 201, 136, 136, 136, 255, 247, 247, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 129, 129, 129, 255, 3, 3, 3, 193, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 48, 143, 191, 18, 66, 192, 255, 96, 64, 187, 255, 131, 65, 190, 255, 124, 65, 192, 255, 66, 31, 138, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 50, 0, 111, 111, 150, 20, 142, 142, 197, 154, 135, 135, 192, 253, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 214, 214, 254, 255, 205, 205, 247, 162, 144, 144, 180, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 159, 57, 57, 57, 252, 144, 144, 144, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 226, 226, 226, 255, 146, 146, 146, 255, 60, 60, 60, 253, 0, 0, 0, 162, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 18, 18, 39, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 214, 191, 16, 16, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 4, 255, 128, 40, 4, 255, 255, 40, 4, 255, 255, 64, 5, 228, 193, 255, 21, 21, 212, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 20, 20, 115, 72, 65, 31, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 31, 127, 63, 255, 194, 220, 203, 255, 55, 140, 83, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 55, 141, 84, 255, 194, 220, 203, 255, 31, 127, 63, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 198, 230, 247, 255, 252, 254, 255, 255, 139, 205, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 142, 207, 239, 255, 239, 248, 253, 255, 243, 250, 253, 255, 157, 213, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 166, 217, 242, 255, 250, 253, 254, 255, 233, 245, 252, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 229, 243, 241, 255, 125, 196, 184, 255, 68, 170, 153, 255, 97, 183, 168, 255, 201, 230, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 230, 225, 255, 96, 183, 168, 255, 68, 170, 153, 255, 126, 196, 185, 255, 229, 243, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 222, 77, 77, 77, 255, 77, 77, 77, 255, 7, 7, 7, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 118, 20, 20, 20, 231, 93, 93, 93, 255, 130, 130, 130, 255, 129, 129, 129, 255, 89, 89, 89, 255, 18, 18, 18, 227, 0, 0, 0, 111, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 44, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 44, 0, 125, 125, 177, 43, 139, 139, 195, 184, 147, 147, 200, 255, 210, 210, 251, 231, 196, 196, 243, 72, 48, 48, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 106, 0, 0, 0, 185, 30, 30, 30, 238, 57, 57, 57, 255, 83, 83, 83, 255, 84, 84, 84, 255, 58, 58, 58, 255, 32, 32, 32, 239, 0, 0, 0, 187, 0, 0, 0, 107, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 21, 21, 133, 255, 22, 22, 241, 255, 22, 22, 251, 255, 22, 22, 255, 255, 22, 22, 255, 255, 19, 19, 104, 191, 9, 9, 6, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 4, 255, 128, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 188, 228, 16, 47, 32, 255, 21, 21, 192, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 251, 255, 22, 22, 210, 136, 67, 33, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 168, 218, 243, 255, 255, 255, 255, 255, 206, 234, 248, 255, 163, 216, 242, 255, 161, 215, 241, 255, 172, 219, 243, 255, 174, 220, 243, 255, 174, 220, 243, 255, 193, 228, 246, 255, 250, 253, 254, 255, 253, 254, 255, 255, 209, 235, 248, 255, 190, 227, 246, 255, 188, 226, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 215, 237, 249, 255, 254, 255, 255, 255, 233, 245, 252, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 204, 232, 227, 255, 99, 184, 170, 255, 68, 170, 153, 255, 122, 194, 182, 255, 226, 242, 239, 255, 226, 242, 239, 255, 121, 194, 182, 255, 68, 170, 153, 255, 100, 184, 170, 255, 205, 232, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 22, 61, 61, 61, 26, 61, 61, 61, 26, 61, 61, 61, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 0, 0, 0, 0, 2, 0, 0, 0, 50, 0, 0, 0, 83, 0, 0, 0, 81, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 72, 100, 0, 155, 155, 210, 63, 146, 146, 176, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 95, 58, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 45, 45, 26, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 20, 20, 29, 255, 9, 9, 2, 255, 21, 21, 156, 255, 22, 22, 255, 255, 22, 22, 255, 255, 20, 20, 193, 191, 12, 12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 4, 255, 128, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 182, 210, 9, 61, 35, 255, 22, 22, 242, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 206, 255, 13, 13, 4, 255, 20, 20, 38, 166, 45, 19, 2, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 203, 233, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 223, 244, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 254, 254, 255, 174, 218, 211, 255, 81, 176, 160, 255, 70, 171, 154, 255, 69, 170, 153, 255, 81, 176, 160, 255, 175, 219, 212, 255, 252, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 182, 182, 182, 15, 153, 153, 153, 102, 245, 245, 245, 171, 245, 245, 245, 202, 245, 245, 245, 201, 245, 245, 245, 171, 153, 153, 153, 101, 182, 182, 182, 15, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 83, 255, 255, 255, 79, 62, 62, 62, 0, 39, 39, 39, 0, 184, 184, 184, 30, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 43, 64, 0, 42, 86, 128, 0, 80, 168, 255, 19, 88, 173, 255, 54, 87, 172, 255, 53, 80, 168, 255, 19, 40, 88, 121, 0, 21, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, 58, 0, 194, 191, 118, 140, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 195, 191, 120, 153, 188, 184, 112, 80, 48, 47, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 16, 16, 18, 255, 21, 21, 215, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 214, 255, 20, 20, 76, 191, 3, 3, 3, 128, 10, 10, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 38, 3, 255, 131, 40, 4, 255, 255, 40, 4, 255, 255, 75, 6, 216, 210, 255, 22, 22, 229, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 245, 255, 11, 11, 52, 64, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 56, 141, 85, 255, 248, 251, 249, 255, 97, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 97, 165, 120, 255, 248, 251, 249, 255, 56, 141, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 163, 215, 242, 255, 252, 254, 255, 255, 231, 245, 252, 255, 182, 224, 244, 255, 174, 220, 243, 255, 174, 220, 243, 255, 183, 224, 244, 255, 245, 250, 253, 255, 255, 255, 255, 255, 222, 241, 250, 255, 192, 228, 246, 255, 189, 227, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 214, 237, 249, 255, 254, 255, 255, 255, 233, 246, 252, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 249, 247, 255, 96, 182, 168, 255, 94, 182, 167, 255, 241, 249, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 0, 244, 244, 244, 102, 246, 246, 246, 233, 244, 244, 244, 167, 244, 244, 244, 92, 245, 245, 245, 55, 245, 245, 245, 55, 244, 244, 244, 92, 244, 244, 244, 168, 245, 245, 245, 232, 244, 244, 244, 100, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 199, 251, 251, 251, 247, 106, 106, 106, 180, 96, 96, 96, 179, 241, 241, 241, 234, 255, 255, 255, 202, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 21, 191, 0, 86, 172, 255, 84, 89, 174, 255, 201, 89, 174, 255, 255, 85, 179, 242, 255, 50, 226, 111, 255, 40, 240, 71, 255, 63, 208, 159, 203, 87, 171, 255, 83, 11, 21, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 239, 242, 181, 255, 204, 203, 132, 254, 193, 191, 119, 93, 49, 47, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 67, 255, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 14, 14, 26, 255, 20, 20, 197, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 230, 255, 21, 21, 172, 255, 13, 13, 117, 255, 20, 20, 63, 255, 20, 20, 42, 255, 20, 20, 26, 191, 14, 14, 10, 128, 10, 10, 0, 255, 19, 19, 20, 255, 21, 21, 34, 228, 17, 49, 51, 71, 5, 221, 187, 40, 4, 255, 255, 40, 4, 255, 255, 130, 11, 157, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 236, 255, 17, 17, 67, 64, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 24, 123, 57, 255, 144, 192, 160, 255, 39, 132, 70, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 39, 132, 70, 255, 144, 192, 160, 255, 23, 123, 56, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 185, 225, 245, 255, 255, 255, 255, 255, 152, 211, 240, 255, 136, 204, 238, 255, 136, 204, 238, 255, 138, 205, 238, 255, 226, 243, 251, 255, 250, 253, 254, 255, 173, 220, 243, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 165, 216, 242, 255, 250, 253, 254, 255, 234, 246, 252, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 114, 114, 114, 0, 237, 237, 237, 144, 246, 246, 246, 209, 242, 242, 242, 41, 120, 120, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 120, 0, 242, 242, 242, 42, 246, 246, 246, 210, 235, 235, 235, 142, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 168, 255, 255, 255, 255, 241, 241, 241, 217, 243, 243, 243, 221, 255, 255, 255, 255, 255, 255, 255, 152, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 96, 128, 0, 64, 191, 255, 31, 66, 191, 255, 71, 65, 192, 255, 61, 47, 144, 191, 11, 32, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 128, 191, 9, 85, 171, 255, 170, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 59, 215, 141, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 75, 192, 204, 255, 88, 173, 255, 168, 61, 128, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 239, 242, 181, 255, 217, 218, 151, 255, 212, 212, 143, 254, 194, 190, 115, 87, 48, 48, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 137, 255, 255, 255, 143, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 11, 11, 5, 255, 20, 20, 110, 255, 22, 22, 235, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 93, 8, 197, 255, 40, 4, 255, 255, 40, 4, 255, 255, 157, 13, 127, 255, 255, 22, 22, 254, 255, 19, 19, 166, 191, 15, 15, 29, 64, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 211, 236, 249, 255, 244, 250, 253, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 181, 223, 244, 255, 255, 255, 255, 255, 178, 222, 244, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 156, 212, 241, 255, 250, 253, 254, 255, 234, 246, 252, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 227, 170, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 170, 179, 255, 204, 102, 119, 255, 204, 102, 119, 255, 227, 170, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 170, 179, 255, 204, 102, 119, 255, 204, 102, 119, 255, 227, 170, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 170, 179, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 61, 61, 61, 0, 245, 245, 245, 106, 245, 245, 245, 207, 183, 183, 183, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 184, 184, 13, 245, 245, 245, 208, 245, 245, 245, 104, 61, 61, 61, 0, 191, 191, 191, 49, 255, 255, 255, 124, 255, 255, 255, 102, 255, 255, 255, 188, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 225, 225, 101, 165, 165, 165, 26, 165, 165, 165, 26, 126, 126, 126, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 47, 64, 0, 64, 191, 255, 50, 66, 193, 255, 196, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 247, 66, 192, 255, 145, 47, 143, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 101, 191, 1, 87, 172, 255, 171, 86, 179, 243, 255, 63, 209, 158, 255, 63, 209, 159, 255, 86, 178, 244, 255, 53, 222, 121, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 34, 255, 65, 206, 167, 255, 89, 174, 255, 255, 85, 171, 255, 169, 49, 100, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 240, 243, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 239, 243, 187, 255, 243, 247, 187, 255, 230, 231, 168, 255, 229, 230, 167, 255, 201, 199, 128, 179, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 207, 255, 255, 255, 225, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 191, 13, 13, 8, 255, 21, 21, 90, 255, 21, 21, 179, 255, 22, 22, 242, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 66, 6, 226, 255, 40, 4, 255, 255, 40, 4, 255, 255, 157, 12, 127, 158, 255, 19, 19, 39, 128, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 31, 127, 63, 255, 194, 220, 203, 255, 55, 140, 83, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 55, 141, 84, 255, 194, 220, 203, 255, 31, 127, 63, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 163, 216, 242, 255, 193, 228, 246, 255, 253, 254, 255, 255, 205, 234, 248, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 228, 244, 251, 255, 232, 245, 252, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 161, 215, 242, 255, 214, 237, 249, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 184, 184, 184, 20, 246, 246, 246, 234, 238, 238, 238, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 37, 246, 246, 246, 234, 248, 248, 248, 19, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 231, 231, 255, 192, 192, 192, 93, 255, 255, 255, 160, 255, 255, 255, 255, 253, 253, 253, 255, 244, 244, 244, 255, 235, 235, 235, 255, 169, 169, 169, 194, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 63, 189, 255, 63, 67, 193, 255, 246, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 200, 38, 133, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 39, 64, 0, 84, 166, 255, 89, 89, 174, 255, 255, 42, 237, 81, 255, 30, 255, 32, 255, 30, 255, 32, 255, 43, 236, 83, 255, 43, 236, 83, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 34, 255, 81, 183, 228, 255, 89, 174, 255, 255, 89, 174, 255, 255, 87, 171, 255, 87, 21, 43, 64, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 230, 233, 186, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 210, 212, 186, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 23, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 191, 12, 12, 4, 255, 20, 20, 49, 255, 21, 21, 89, 255, 21, 21, 123, 255, 21, 21, 147, 255, 21, 21, 153, 255, 20, 20, 155, 255, 21, 21, 153, 255, 19, 19, 145, 180, 14, 102, 133, 41, 4, 254, 255, 40, 4, 255, 255, 40, 4, 255, 252, 19, 0, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 218, 239, 250, 255, 142, 207, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 138, 205, 238, 255, 254, 254, 255, 255, 197, 230, 247, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 243, 243, 243, 114, 243, 243, 243, 156, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 119, 119, 0, 244, 244, 244, 157, 241, 241, 241, 112, 189, 189, 189, 3, 234, 234, 234, 108, 255, 255, 255, 241, 255, 255, 255, 255, 154, 154, 154, 245, 68, 68, 68, 8, 190, 190, 190, 5, 250, 250, 250, 254, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 203, 172, 172, 172, 208, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 143, 191, 10, 66, 193, 255, 228, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 50, 176, 255, 140, 16, 80, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 86, 128, 0, 88, 174, 255, 208, 87, 176, 248, 255, 30, 255, 33, 255, 30, 255, 32, 255, 30, 255, 32, 255, 29, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 29, 255, 31, 255, 29, 255, 31, 255, 34, 250, 46, 255, 50, 227, 109, 255, 85, 180, 239, 255, 88, 173, 255, 206, 43, 86, 128, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 91, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 135, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 128, 10, 74, 0, 128, 9, 9, 0, 128, 10, 10, 0, 128, 8, 72, 0, 24, 2, 255, 96, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 199, 14, 1, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 150, 210, 240, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 151, 210, 240, 255, 255, 255, 255, 255, 182, 224, 245, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 83, 177, 161, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 84, 177, 162, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 245, 245, 245, 186, 243, 243, 243, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 77, 246, 246, 246, 184, 0, 0, 0, 167, 0, 0, 0, 210, 167, 167, 167, 245, 255, 255, 255, 255, 197, 197, 197, 253, 137, 137, 137, 13, 255, 255, 255, 73, 255, 255, 255, 255, 243, 243, 243, 251, 251, 251, 251, 62, 170, 170, 170, 8, 169, 169, 169, 208, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 41, 120, 255, 94, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 106, 206, 255, 255, 76, 196, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 193, 255, 242, 45, 141, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 87, 171, 255, 29, 89, 174, 255, 255, 89, 174, 255, 255, 52, 225, 115, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 33, 255, 30, 255, 32, 255, 30, 255, 32, 255, 29, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 49, 228, 104, 255, 89, 174, 255, 255, 85, 173, 255, 27, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 241, 245, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 241, 245, 187, 255, 204, 203, 133, 178, 161, 160, 123, 0, 255, 255, 255, 31, 255, 255, 255, 162, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 255, 255, 255, 179, 255, 255, 255, 182, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 197, 255, 255, 255, 40, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 191, 14, 19, 1, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 191, 0, 39, 3, 255, 200, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 106, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 56, 141, 85, 255, 248, 251, 249, 255, 97, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 97, 165, 120, 255, 248, 251, 249, 255, 56, 141, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 160, 215, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 184, 223, 216, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 223, 216, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 246, 246, 246, 219, 244, 244, 244, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 37, 246, 246, 246, 216, 0, 0, 0, 188, 168, 168, 168, 131, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 253, 254, 255, 255, 255, 38, 153, 153, 153, 8, 169, 169, 169, 208, 159, 159, 159, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 31, 94, 128, 0, 64, 191, 255, 149, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 160, 224, 255, 255, 255, 255, 255, 255, 231, 247, 255, 255, 69, 194, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 49, 0, 0, 0, 0, 0, 0, 0, 0, 88, 173, 255, 64, 89, 174, 255, 255, 89, 174, 255, 255, 67, 203, 173, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 33, 255, 30, 255, 32, 255, 31, 253, 37, 255, 88, 175, 251, 255, 88, 173, 255, 61, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 226, 229, 186, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 229, 233, 186, 255, 204, 203, 133, 178, 97, 96, 59, 0, 64, 64, 64, 0, 191, 191, 191, 25, 255, 255, 255, 177, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 171, 191, 191, 191, 17, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 191, 7, 39, 3, 255, 189, 40, 3, 255, 93, 0, 0, 0, 0, 9, 0, 64, 0, 38, 2, 255, 97, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 238, 27, 0, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 24, 123, 57, 255, 144, 192, 160, 255, 39, 132, 70, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 39, 132, 70, 255, 144, 192, 160, 255, 23, 123, 56, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 143, 207, 239, 255, 237, 247, 252, 255, 239, 248, 253, 255, 139, 205, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 69, 170, 154, 255, 136, 201, 190, 255, 236, 246, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 246, 244, 255, 136, 201, 190, 255, 69, 170, 154, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 246, 246, 246, 224, 245, 245, 245, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 245, 245, 32, 245, 245, 245, 221, 3, 3, 3, 188, 246, 246, 246, 232, 255, 255, 255, 245, 168, 168, 168, 243, 238, 238, 238, 243, 255, 255, 255, 255, 255, 255, 255, 230, 244, 244, 244, 253, 255, 255, 255, 255, 255, 255, 255, 192, 196, 196, 196, 9, 169, 169, 169, 208, 255, 255, 255, 156, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 113, 64, 64, 64, 0, 31, 96, 128, 0, 65, 192, 255, 156, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 210, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 202, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 56, 0, 0, 0, 0, 0, 0, 0, 0, 87, 172, 255, 66, 89, 174, 255, 255, 89, 174, 255, 255, 49, 228, 107, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 31, 254, 35, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 33, 255, 34, 249, 49, 255, 89, 174, 255, 255, 88, 173, 255, 64, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 90, 255, 255, 255, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 102, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 191, 2, 37, 3, 255, 170, 40, 4, 255, 255, 36, 2, 255, 130, 24, 0, 191, 4, 38, 2, 255, 106, 40, 4, 255, 250, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 116, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 21, 121, 54, 255, 51, 139, 80, 255, 24, 123, 57, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 24, 123, 57, 255, 51, 139, 80, 255, 21, 121, 54, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 137, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 165, 216, 242, 255, 189, 227, 245, 255, 241, 249, 253, 255, 253, 254, 255, 255, 164, 216, 242, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 76, 174, 158, 255, 165, 214, 206, 255, 249, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 252, 252, 255, 165, 214, 206, 255, 76, 174, 158, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 245, 245, 245, 196, 214, 214, 214, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 64, 245, 245, 245, 194, 0, 0, 0, 188, 108, 108, 108, 64, 170, 170, 170, 14, 0, 0, 0, 215, 197, 197, 197, 219, 255, 255, 255, 255, 240, 240, 240, 126, 90, 90, 90, 218, 215, 215, 215, 234, 255, 255, 255, 141, 183, 183, 183, 8, 169, 169, 169, 208, 255, 255, 255, 221, 255, 255, 255, 26, 255, 255, 255, 50, 255, 255, 255, 188, 128, 128, 128, 0, 14, 46, 64, 0, 61, 188, 255, 115, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 252, 50, 187, 255, 19, 0, 0, 0, 0, 0, 0, 0, 0, 87, 171, 255, 34, 89, 174, 255, 255, 89, 174, 255, 255, 54, 221, 125, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 33, 255, 30, 254, 34, 255, 72, 197, 191, 255, 66, 205, 168, 255, 30, 255, 33, 255, 30, 255, 32, 255, 30, 255, 32, 255, 63, 209, 158, 255, 89, 174, 255, 255, 86, 171, 255, 32, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 23, 255, 255, 255, 218, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 255, 255, 255, 44, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 128, 0, 29, 2, 255, 149, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 237, 40, 4, 255, 242, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 191, 24, 0, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 43, 134, 73, 255, 220, 235, 225, 255, 255, 255, 255, 255, 233, 242, 236, 255, 63, 145, 91, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 64, 146, 91, 255, 233, 242, 236, 255, 255, 255, 255, 255, 220, 235, 225, 255, 43, 134, 73, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 177, 222, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 245, 252, 255, 160, 214, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 91, 181, 166, 255, 193, 227, 221, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 226, 220, 255, 91, 181, 166, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 245, 245, 245, 130, 183, 183, 183, 136, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 0, 215, 215, 215, 138, 224, 224, 224, 128, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 153, 153, 153, 208, 255, 255, 255, 255, 211, 211, 211, 44, 77, 77, 77, 215, 168, 168, 168, 215, 159, 159, 159, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 51, 186, 255, 29, 67, 193, 255, 247, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 191, 255, 177, 28, 93, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 86, 128, 0, 89, 174, 255, 217, 89, 174, 255, 255, 80, 185, 223, 255, 34, 250, 46, 255, 30, 255, 32, 255, 30, 255, 32, 255, 39, 242, 68, 255, 88, 176, 250, 255, 47, 231, 98, 255, 30, 255, 32, 255, 30, 255, 32, 255, 41, 239, 76, 255, 89, 174, 255, 255, 88, 174, 255, 215, 43, 86, 128, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 224, 227, 186, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 228, 231, 186, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 64, 0, 39, 3, 255, 125, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 201, 28, 1, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 152, 196, 167, 255, 245, 250, 247, 255, 114, 174, 134, 255, 230, 240, 233, 255, 187, 216, 197, 255, 39, 131, 70, 255, 149, 194, 164, 255, 155, 198, 169, 255, 155, 198, 169, 255, 140, 189, 157, 255, 19, 120, 53, 255, 39, 131, 70, 255, 149, 194, 164, 255, 155, 198, 169, 255, 155, 198, 169, 255, 140, 189, 157, 255, 19, 120, 53, 255, 39, 131, 70, 255, 149, 194, 164, 255, 155, 198, 169, 255, 155, 198, 169, 255, 140, 189, 157, 255, 19, 120, 53, 255, 187, 216, 197, 255, 230, 240, 233, 255, 115, 175, 135, 255, 245, 250, 247, 255, 152, 196, 167, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 137, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 114, 191, 178, 255, 220, 239, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 239, 235, 255, 113, 191, 178, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 241, 241, 241, 36, 246, 246, 246, 233, 183, 183, 183, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 183, 183, 19, 246, 246, 246, 234, 180, 180, 180, 35, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 87, 87, 87, 208, 181, 181, 181, 56, 102, 102, 102, 0, 77, 77, 77, 215, 168, 168, 168, 215, 84, 84, 84, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 13, 47, 64, 0, 66, 192, 255, 115, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 237, 32, 180, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 42, 64, 0, 88, 170, 255, 101, 89, 174, 255, 255, 89, 174, 255, 255, 82, 183, 230, 255, 60, 213, 148, 255, 61, 211, 152, 255, 85, 180, 239, 255, 89, 174, 255, 255, 33, 250, 44, 255, 30, 255, 32, 255, 30, 254, 33, 255, 30, 255, 33, 255, 84, 180, 239, 255, 85, 173, 255, 100, 20, 43, 64, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 79, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 142, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 64, 0, 37, 3, 255, 102, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 248, 39, 3, 255, 141, 29, 0, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 161, 201, 174, 255, 240, 246, 242, 255, 77, 153, 102, 255, 218, 234, 224, 255, 196, 221, 204, 255, 62, 145, 90, 255, 227, 239, 231, 255, 236, 244, 239, 255, 236, 244, 239, 255, 210, 229, 216, 255, 25, 124, 58, 255, 62, 145, 90, 255, 227, 239, 231, 255, 236, 244, 239, 255, 236, 244, 239, 255, 210, 229, 216, 255, 25, 124, 58, 255, 62, 145, 90, 255, 227, 239, 231, 255, 236, 244, 239, 255, 236, 244, 239, 255, 210, 229, 216, 255, 25, 124, 58, 255, 196, 221, 204, 255, 218, 234, 224, 255, 77, 153, 102, 255, 240, 246, 242, 255, 161, 201, 174, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 70, 171, 154, 255, 141, 203, 193, 255, 239, 248, 246, 255, 119, 193, 181, 255, 118, 193, 180, 255, 239, 248, 246, 255, 141, 203, 193, 255, 70, 171, 154, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 111, 111, 111, 0, 235, 235, 235, 141, 245, 245, 245, 176, 166, 166, 166, 2, 0, 0, 0, 0, 0, 0, 0, 0, 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, 172, 172, 2, 245, 245, 245, 177, 235, 235, 235, 139, 111, 111, 111, 0, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 77, 77, 77, 208, 68, 68, 68, 8, 39, 39, 39, 0, 77, 77, 77, 215, 168, 168, 168, 215, 84, 84, 84, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 48, 64, 0, 66, 192, 255, 112, 67, 193, 255, 245, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 66, 193, 255, 213, 61, 181, 255, 45, 7, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 123, 191, 4, 88, 173, 255, 187, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 48, 230, 101, 255, 30, 255, 32, 255, 30, 255, 32, 255, 36, 245, 58, 255, 86, 174, 252, 186, 63, 128, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 161, 255, 255, 255, 255, 255, 255, 255, 204, 191, 191, 191, 30, 191, 191, 191, 12, 255, 255, 255, 161, 255, 255, 255, 255, 255, 255, 255, 233, 191, 191, 191, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 191, 3, 29, 2, 255, 145, 40, 4, 255, 243, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 112, 32, 2, 255, 22, 8, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 59, 143, 87, 255, 240, 246, 242, 255, 255, 255, 255, 255, 248, 251, 249, 255, 85, 157, 109, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 85, 157, 109, 255, 248, 251, 249, 255, 255, 255, 255, 255, 239, 246, 242, 255, 59, 143, 87, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 78, 175, 159, 255, 84, 177, 162, 255, 84, 177, 162, 255, 78, 175, 159, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 177, 177, 177, 5, 245, 245, 245, 187, 244, 244, 244, 171, 183, 183, 183, 12, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 183, 183, 183, 13, 245, 245, 245, 172, 244, 244, 244, 186, 176, 176, 176, 5, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 77, 77, 77, 208, 68, 68, 68, 8, 39, 39, 39, 0, 77, 77, 77, 215, 168, 168, 168, 215, 84, 84, 84, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 40, 64, 0, 57, 167, 255, 23, 237, 249, 255, 215, 255, 255, 255, 255, 255, 255, 255, 255, 155, 222, 255, 99, 44, 134, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 129, 191, 16, 87, 173, 255, 189, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 85, 179, 240, 255, 57, 217, 137, 255, 51, 225, 115, 255, 76, 187, 217, 188, 64, 129, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 224, 227, 186, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 228, 231, 186, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 238, 255, 255, 255, 162, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 91, 255, 255, 255, 242, 255, 255, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 128, 0, 29, 0, 191, 15, 38, 2, 255, 113, 39, 4, 255, 222, 40, 4, 255, 255, 40, 4, 255, 255, 38, 3, 255, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 36, 130, 68, 255, 86, 158, 110, 255, 45, 135, 75, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 45, 135, 75, 255, 86, 158, 110, 255, 36, 130, 68, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 181, 181, 181, 6, 240, 240, 240, 151, 246, 246, 246, 229, 242, 242, 242, 118, 244, 244, 244, 42, 183, 183, 183, 6, 183, 183, 183, 6, 245, 245, 245, 42, 243, 243, 243, 119, 246, 246, 246, 230, 239, 239, 239, 149, 180, 180, 180, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 77, 77, 77, 208, 69, 69, 69, 8, 58, 58, 58, 0, 77, 77, 77, 215, 168, 168, 168, 215, 126, 126, 126, 0, 155, 155, 155, 8, 169, 169, 169, 208, 255, 255, 255, 218, 191, 191, 191, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 128, 191, 4, 87, 172, 255, 107, 88, 173, 255, 224, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 88, 174, 255, 223, 88, 171, 255, 106, 55, 123, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 66, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 34, 255, 255, 255, 121, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 20, 0, 191, 3, 39, 3, 255, 79, 39, 3, 255, 189, 34, 3, 255, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 117, 117, 0, 240, 240, 240, 48, 243, 243, 243, 150, 246, 246, 246, 221, 246, 246, 246, 251, 246, 246, 246, 250, 246, 246, 246, 220, 243, 243, 243, 150, 240, 240, 240, 47, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 198, 77, 77, 77, 162, 78, 78, 78, 230, 78, 78, 78, 230, 77, 77, 77, 180, 168, 168, 168, 180, 169, 169, 169, 230, 169, 169, 169, 230, 167, 167, 167, 162, 255, 255, 255, 199, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 143, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 43, 64, 0, 44, 86, 128, 0, 86, 171, 255, 41, 88, 173, 255, 76, 88, 173, 255, 76, 87, 172, 255, 40, 44, 86, 128, 0, 22, 42, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 61, 0, 205, 203, 134, 220, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 199, 196, 125, 155, 97, 95, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 128, 0, 18, 0, 255, 10, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 120, 0, 123, 123, 123, 0, 123, 123, 123, 0, 123, 123, 123, 0, 123, 123, 123, 0, 120, 120, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 38, 0, 39, 39, 39, 0, 39, 39, 39, 0, 38, 38, 38, 0, 83, 83, 83, 0, 84, 84, 84, 0, 84, 84, 84, 0, 83, 83, 83, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 96, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 55, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 65, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 52, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 68, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 101, 0, 0, 0, 133, 0, 0, 0, 153, 0, 0, 0, 123, 0, 0, 0, 67, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 195, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 223, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 31, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 138, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 132, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 54, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 167, 191, 0, 252, 254, 255, 197, 255, 255, 255, 255, 255, 255, 255, 255, 217, 242, 255, 45, 16, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 145, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 138, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 207, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 255, 25, 25, 25, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 15, 15, 15, 255, 62, 62, 62, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 57, 57, 57, 255, 20, 20, 20, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 23, 23, 23, 255, 55, 55, 55, 255, 42, 42, 42, 255, 0, 0, 0, 255, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 125, 255, 255, 255, 199, 255, 255, 255, 50, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 46, 64, 0, 58, 185, 255, 44, 66, 192, 255, 188, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 202, 255, 243, 66, 192, 255, 137, 49, 142, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 255, 50, 50, 50, 255, 169, 169, 169, 255, 209, 209, 209, 255, 230, 230, 230, 255, 195, 195, 195, 255, 111, 111, 111, 255, 2, 2, 2, 255, 0, 0, 0, 213, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 255, 207, 207, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 50, 50, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 255, 183, 183, 183, 255, 247, 247, 247, 255, 17, 17, 17, 255, 0, 0, 0, 255, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 123, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 147, 191, 191, 191, 16, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 46, 64, 0, 54, 188, 255, 58, 67, 193, 255, 243, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 66, 191, 255, 194, 49, 142, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 13, 13, 13, 255, 237, 237, 237, 255, 255, 255, 255, 255, 237, 237, 237, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 255, 0, 0, 0, 255, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 50, 50, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 255, 183, 183, 183, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 93, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 141, 191, 9, 67, 193, 255, 226, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 135, 17, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 59, 59, 59, 255, 255, 255, 255, 255, 217, 217, 217, 255, 13, 13, 13, 255, 2, 2, 2, 255, 163, 163, 163, 255, 255, 255, 255, 255, 186, 186, 186, 255, 0, 0, 0, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 50, 50, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 255, 183, 183, 183, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 118, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 193, 255, 255, 255, 43, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 191, 255, 91, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 241, 45, 140, 191, 7, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 252, 77, 77, 77, 255, 255, 255, 255, 255, 178, 178, 178, 255, 0, 0, 0, 255, 0, 0, 0, 255, 113, 113, 113, 255, 255, 255, 255, 255, 187, 187, 187, 255, 0, 0, 0, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 166, 166, 166, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 43, 43, 43, 255, 147, 147, 147, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 138, 138, 138, 255, 62, 62, 62, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 67, 67, 67, 255, 134, 134, 134, 255, 179, 179, 179, 255, 28, 28, 28, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 139, 191, 191, 191, 12, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 32, 93, 128, 0, 65, 190, 255, 148, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 49, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 49, 49, 49, 255, 255, 255, 255, 255, 253, 253, 253, 255, 138, 138, 138, 255, 114, 114, 114, 255, 236, 236, 236, 255, 255, 255, 255, 255, 152, 152, 152, 255, 0, 0, 0, 255, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 71, 71, 71, 255, 51, 51, 51, 255, 14, 14, 14, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 17, 17, 17, 255, 49, 49, 49, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 59, 59, 59, 255, 7, 7, 7, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 12, 12, 12, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 113, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 32, 95, 128, 0, 65, 192, 255, 155, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 58, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 12, 12, 12, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 90, 90, 90, 255, 0, 0, 0, 254, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 110, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 255, 255, 255, 40, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 65, 192, 255, 117, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 253, 61, 181, 255, 21, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 148, 0, 0, 0, 255, 196, 196, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 246, 246, 255, 17, 17, 17, 255, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 108, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 255, 255, 255, 72, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 189, 255, 31, 67, 193, 255, 249, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 181, 31, 93, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 120, 120, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 161, 161, 161, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 243, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 105, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 109, 191, 191, 191, 4, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 47, 64, 0, 66, 192, 255, 121, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 240, 58, 172, 255, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 158, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 155, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 255, 40, 40, 40, 255, 51, 51, 51, 255, 51, 51, 51, 255, 8, 8, 8, 255, 38, 38, 38, 255, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 56, 56, 56, 255, 2, 2, 2, 255, 25, 25, 25, 255, 26, 26, 26, 255, 23, 23, 23, 255, 0, 0, 0, 255, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 103, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 145, 191, 191, 191, 18, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 191, 1, 66, 192, 255, 120, 67, 193, 255, 248, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 219, 37, 180, 255, 50, 13, 42, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 234, 2, 2, 2, 255, 237, 237, 237, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 113, 255, 0, 0, 0, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 183, 183, 255, 0, 0, 0, 255, 101, 101, 101, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 250, 250, 255, 9, 9, 9, 255, 0, 0, 0, 245, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 119, 119, 119, 255, 85, 85, 85, 255, 24, 24, 24, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 28, 28, 28, 255, 81, 81, 81, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 99, 99, 99, 255, 11, 11, 11, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 20, 20, 20, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 100, 255, 255, 255, 182, 255, 255, 255, 41, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 138, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 132, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 54, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 88, 199, 255, 28, 237, 249, 255, 217, 255, 255, 255, 255, 255, 255, 255, 255, 154, 221, 255, 107, 48, 143, 191, 5, 0, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 255, 51, 51, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 214, 214, 255, 1, 1, 1, 255, 90, 90, 90, 255, 255, 255, 255, 255, 254, 254, 254, 255, 53, 53, 53, 255, 7, 7, 7, 255, 225, 225, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 60, 60, 60, 255, 0, 0, 0, 255, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 119, 119, 119, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 15, 15, 15, 255, 95, 95, 95, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 85, 85, 85, 255, 24, 24, 24, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 28, 28, 28, 255, 81, 81, 81, 255, 128, 128, 128, 255, 23, 23, 23, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 11, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 72, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 95, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 255, 64, 64, 64, 255, 153, 153, 153, 255, 178, 178, 178, 255, 179, 179, 179, 255, 202, 202, 202, 255, 43, 43, 43, 255, 7, 7, 7, 255, 230, 230, 230, 255, 172, 172, 172, 255, 0, 0, 0, 255, 107, 107, 107, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 116, 116, 116, 255, 0, 0, 0, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 255, 118, 118, 118, 255, 151, 151, 151, 255, 128, 128, 128, 255, 127, 127, 127, 255, 102, 102, 102, 255, 81, 81, 81, 255, 0, 0, 0, 255, 109, 109, 109, 255, 32, 32, 32, 255, 6, 6, 6, 255, 38, 38, 38, 255, 78, 78, 78, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 171, 171, 171, 255, 0, 0, 0, 255, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 244, 7, 7, 7, 255, 246, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 253, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 255, 141, 141, 141, 255, 120, 120, 120, 255, 167, 167, 167, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 228, 228, 228, 255, 0, 0, 0, 255, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 128, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 255, 65, 65, 65, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 156, 156, 156, 255, 0, 0, 0, 255, 42, 42, 42, 255, 239, 239, 239, 255, 48, 48, 48, 255, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 29, 29, 29, 255, 0, 0, 0, 255, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 2, 2, 0, 255, 20, 20, 179, 255, 21, 21, 143, 128, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 167, 191, 0, 254, 255, 255, 196, 255, 255, 255, 255, 255, 255, 255, 255, 221, 243, 255, 43, 16, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 255, 132, 132, 132, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 26, 26, 26, 255, 188, 188, 188, 255, 146, 146, 146, 255, 141, 141, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 85, 255, 0, 0, 0, 255, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 95, 95, 95, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 12, 12, 12, 255, 76, 76, 76, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 68, 68, 68, 255, 19, 19, 19, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 22, 22, 22, 255, 65, 65, 65, 255, 102, 102, 102, 255, 16, 16, 16, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 21, 21, 84, 255, 22, 22, 255, 255, 22, 22, 253, 255, 19, 19, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 44, 64, 0, 53, 181, 255, 38, 66, 192, 255, 180, 211, 240, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 96, 202, 255, 238, 65, 192, 255, 128, 49, 142, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 255, 200, 200, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 203, 203, 203, 255, 252, 252, 252, 255, 49, 49, 49, 255, 241, 241, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 141, 141, 141, 255, 0, 0, 0, 255, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 143, 143, 143, 255, 117, 117, 117, 255, 14, 14, 14, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 148, 148, 148, 255, 152, 152, 152, 255, 153, 153, 153, 255, 153, 153, 153, 255, 48, 48, 48, 255, 83, 83, 83, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 134, 134, 134, 255, 0, 0, 0, 255, 152, 152, 152, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 24, 24, 24, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 12, 12, 8, 255, 21, 21, 223, 247, 112, 29, 255, 250, 76, 26, 255, 255, 21, 21, 188, 128, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 61, 189, 255, 53, 67, 193, 255, 240, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 65, 192, 255, 188, 49, 142, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 250, 15, 15, 15, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 228, 228, 228, 255, 57, 57, 57, 255, 94, 94, 94, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 197, 197, 197, 255, 0, 0, 0, 255, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 20, 20, 123, 254, 35, 23, 255, 242, 167, 33, 255, 242, 163, 33, 255, 255, 23, 22, 255, 255, 12, 12, 76, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 143, 191, 7, 66, 192, 255, 222, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 130, 16, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 255, 79, 79, 79, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 193, 193, 193, 255, 77, 77, 77, 255, 70, 70, 70, 255, 183, 183, 183, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 247, 247, 255, 6, 6, 6, 255, 0, 0, 0, 242, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 9, 9, 27, 255, 22, 22, 243, 244, 148, 32, 255, 250, 85, 28, 255, 247, 121, 31, 255, 248, 104, 28, 255, 255, 21, 21, 215, 191, 12, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 191, 255, 88, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 239, 44, 140, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 255, 146, 146, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 230, 230, 230, 255, 230, 230, 230, 255, 230, 230, 230, 255, 191, 191, 191, 255, 83, 83, 83, 255, 51, 51, 51, 255, 150, 150, 150, 255, 225, 225, 225, 255, 46, 46, 46, 255, 0, 0, 0, 255, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 9, 9, 0, 255, 20, 20, 162, 252, 55, 24, 255, 236, 249, 40, 255, 250, 85, 28, 255, 247, 121, 31, 255, 237, 227, 39, 255, 254, 30, 23, 255, 255, 21, 21, 111, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 95, 128, 0, 66, 191, 255, 146, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 64, 191, 255, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 19, 19, 56, 255, 22, 22, 254, 241, 184, 35, 255, 235, 255, 41, 255, 250, 85, 28, 255, 247, 121, 31, 255, 235, 255, 41, 255, 245, 138, 31, 255, 255, 22, 22, 239, 191, 13, 13, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 95, 128, 0, 67, 192, 255, 157, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 191, 234, 255, 255, 255, 255, 255, 255, 251, 254, 255, 255, 81, 198, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 242, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 205, 0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 192, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 48, 48, 48, 255, 39, 39, 39, 255, 5, 5, 5, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 16, 16, 16, 255, 28, 28, 28, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 45, 45, 45, 255, 0, 0, 0, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 8, 8, 8, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 2, 2, 2, 255, 21, 21, 203, 249, 88, 27, 255, 235, 255, 41, 255, 235, 255, 41, 255, 249, 95, 29, 255, 245, 132, 31, 255, 235, 255, 41, 255, 236, 246, 40, 255, 253, 49, 24, 255, 255, 16, 16, 152, 128, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 65, 192, 255, 120, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 94, 202, 255, 255, 181, 230, 255, 255, 132, 214, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 253, 63, 191, 255, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 190, 190, 190, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 44, 44, 44, 255, 132, 132, 132, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 156, 156, 156, 255, 18, 18, 18, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 66, 66, 66, 255, 110, 110, 110, 255, 204, 204, 204, 255, 32, 32, 32, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 4, 0, 255, 19, 19, 100, 255, 27, 22, 255, 238, 218, 38, 255, 235, 255, 41, 255, 235, 255, 41, 255, 237, 234, 39, 255, 236, 247, 40, 255, 235, 255, 41, 255, 235, 255, 41, 255, 242, 174, 34, 255, 255, 22, 22, 252, 255, 19, 19, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 187, 255, 34, 67, 193, 255, 250, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 185, 32, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 165, 165, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 255, 138, 138, 138, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 13, 13, 16, 255, 22, 22, 234, 246, 127, 30, 255, 235, 255, 41, 255, 235, 255, 41, 255, 235, 255, 41, 255, 246, 130, 31, 255, 242, 171, 35, 255, 235, 255, 41, 255, 235, 255, 41, 255, 235, 255, 41, 255, 250, 77, 26, 255, 255, 21, 21, 192, 191, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 47, 64, 0, 66, 192, 255, 128, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 242, 64, 191, 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 165, 165, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 255, 138, 138, 138, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 5, 5, 0, 255, 15, 15, 142, 255, 24, 22, 255, 244, 149, 32, 255, 243, 162, 33, 255, 243, 162, 33, 255, 243, 162, 33, 255, 244, 154, 32, 255, 243, 162, 33, 255, 243, 162, 33, 255, 243, 162, 33, 255, 243, 162, 33, 255, 247, 119, 29, 255, 255, 22, 22, 255, 255, 21, 21, 84, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 128, 191, 2, 66, 192, 255, 128, 67, 193, 255, 251, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 224, 51, 186, 255, 56, 15, 47, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 255, 221, 221, 221, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 165, 165, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 255, 138, 138, 138, 255, 254, 254, 254, 255, 25, 25, 25, 255, 0, 0, 0, 255, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 255, 20, 20, 158, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 15, 15, 114, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 47, 64, 0, 60, 187, 255, 34, 63, 190, 255, 120, 66, 191, 255, 155, 65, 191, 255, 149, 65, 191, 255, 91, 46, 140, 191, 8, 9, 46, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 255, 50, 50, 50, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 28, 28, 28, 255, 83, 83, 83, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 98, 98, 98, 255, 11, 11, 11, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 41, 41, 41, 255, 69, 69, 69, 255, 79, 79, 79, 255, 0, 0, 0, 255, 0, 0, 0, 227, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 46, 64, 0, 33, 95, 128, 0, 31, 94, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 226, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 244, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 99, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 111, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 20, 20, 5, 128, 75, 75, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 77, 77, 0, 191, 17, 17, 5, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 4, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 83, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 124, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 172, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 131, 255, 243, 243, 179, 255, 45, 45, 222, 255, 123, 123, 195, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 133, 133, 192, 255, 38, 38, 225, 255, 240, 240, 179, 255, 255, 255, 138, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 167, 255, 255, 255, 186, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 95, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 224, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 192, 255, 255, 255, 255, 255, 255, 255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 178, 255, 255, 255, 247, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 233, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 244, 244, 188, 255, 62, 62, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 126, 126, 232, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 135, 135, 229, 255, 1, 1, 255, 255, 0, 0, 255, 255, 56, 56, 255, 255, 241, 241, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 166, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 149, 255, 255, 255, 164, 191, 191, 191, 1, 64, 64, 64, 0, 128, 128, 128, 0, 191, 191, 191, 10, 255, 255, 255, 126, 255, 255, 255, 255, 255, 255, 255, 24, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 160, 255, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 51, 255, 32, 26, 26, 255, 0, 204, 26, 255, 0, 204, 53, 255, 32, 90, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 64, 64, 64, 0, 255, 255, 255, 66, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 209, 255, 255, 255, 213, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 191, 22, 22, 9, 255, 53, 53, 224, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 21, 21, 110, 191, 128, 128, 0, 191, 128, 128, 0, 255, 21, 21, 102, 255, 0, 0, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 48, 48, 230, 191, 21, 21, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 166, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 93, 255, 255, 255, 255, 255, 255, 255, 122, 255, 255, 255, 100, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 255, 255, 255, 130, 255, 255, 255, 31, 255, 255, 255, 191, 255, 255, 255, 241, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 191, 29, 29, 3, 255, 80, 80, 215, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 108, 255, 0, 0, 99, 255, 0, 0, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 73, 73, 223, 191, 28, 28, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 164, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 255, 255, 255, 112, 255, 255, 255, 76, 255, 255, 255, 72, 255, 255, 255, 101, 255, 255, 255, 164, 255, 255, 255, 249, 255, 255, 255, 251, 255, 255, 255, 253, 255, 255, 255, 74, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 231, 255, 255, 255, 51, 255, 255, 255, 193, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 252, 252, 188, 255, 81, 81, 247, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 254, 255, 0, 0, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 73, 73, 248, 255, 250, 250, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 164, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 191, 191, 191, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 42, 255, 255, 255, 238, 255, 255, 255, 226, 255, 255, 255, 56, 128, 128, 128, 0, 191, 191, 191, 31, 255, 255, 255, 159, 255, 255, 255, 172, 255, 255, 255, 66, 191, 191, 191, 0, 255, 255, 255, 24, 255, 255, 255, 187, 255, 255, 255, 254, 255, 255, 255, 96, 64, 64, 64, 0, 191, 191, 191, 3, 255, 255, 255, 15, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 191, 191, 191, 10, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 53, 255, 32, 52, 25, 255, 0, 77, 25, 255, 0, 77, 24, 255, 0, 99, 26, 255, 0, 255, 26, 255, 0, 255, 25, 255, 0, 155, 25, 255, 0, 77, 25, 255, 0, 77, 25, 255, 0, 76, 226, 255, 223, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 246, 246, 180, 255, 0, 0, 170, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 178, 255, 239, 239, 172, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 112, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 131, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 195, 255, 255, 255, 226, 191, 191, 191, 23, 64, 64, 64, 0, 191, 191, 191, 0, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 255, 255, 255, 33, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 176, 255, 255, 255, 240, 255, 255, 255, 26, 255, 255, 255, 32, 255, 255, 255, 254, 255, 255, 255, 92, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 26, 255, 255, 255, 230, 255, 255, 255, 111, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 26, 255, 0, 173, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 253, 198, 255, 191, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 255, 255, 178, 255, 85, 85, 5, 255, 0, 0, 173, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 181, 255, 85, 85, 7, 255, 255, 255, 168, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 45, 255, 255, 255, 255, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 20, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 41, 255, 255, 255, 255, 255, 255, 255, 115, 191, 191, 191, 1, 255, 255, 255, 160, 255, 255, 255, 250, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 198, 255, 255, 255, 229, 191, 191, 191, 24, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 26, 255, 0, 173, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 253, 198, 255, 191, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 255, 255, 178, 191, 128, 128, 0, 255, 0, 0, 94, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 104, 191, 128, 128, 0, 255, 255, 255, 168, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 209, 255, 255, 255, 215, 191, 191, 191, 13, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 41, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 158, 255, 255, 255, 247, 255, 255, 255, 36, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 184, 255, 255, 255, 253, 255, 255, 255, 137, 191, 191, 191, 18, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 66, 255, 255, 255, 219, 255, 255, 255, 251, 255, 255, 255, 61, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 52, 255, 32, 35, 25, 255, 0, 51, 25, 255, 0, 51, 24, 255, 0, 77, 26, 255, 0, 255, 26, 255, 0, 255, 25, 255, 0, 141, 25, 255, 0, 51, 25, 255, 0, 51, 25, 255, 0, 51, 226, 255, 223, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 255, 255, 178, 255, 21, 21, 86, 255, 0, 0, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 253, 255, 21, 21, 95, 255, 255, 255, 168, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 95, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 211, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 143, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 55, 255, 255, 255, 247, 255, 255, 255, 211, 255, 255, 255, 35, 191, 191, 191, 0, 255, 255, 255, 45, 255, 255, 255, 183, 255, 255, 255, 197, 255, 255, 255, 87, 128, 128, 128, 0, 191, 191, 191, 11, 255, 255, 255, 165, 255, 255, 255, 255, 255, 255, 255, 116, 64, 64, 64, 0, 0, 0, 0, 0, 191, 191, 191, 10, 255, 255, 255, 205, 255, 255, 255, 237, 255, 255, 255, 252, 255, 255, 255, 249, 255, 255, 255, 186, 255, 255, 255, 152, 255, 255, 255, 142, 255, 255, 255, 168, 255, 255, 255, 220, 255, 255, 255, 255, 255, 255, 255, 222, 255, 255, 255, 252, 255, 255, 255, 149, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 238, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 211, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 157, 157, 221, 255, 0, 0, 251, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 253, 255, 145, 145, 220, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 145, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 54, 255, 255, 255, 230, 255, 255, 255, 251, 255, 255, 255, 169, 255, 255, 255, 87, 255, 255, 255, 52, 255, 255, 255, 41, 255, 255, 255, 77, 255, 255, 255, 140, 255, 255, 255, 238, 255, 255, 255, 250, 255, 255, 255, 103, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 149, 255, 255, 255, 244, 255, 255, 255, 47, 255, 255, 255, 29, 255, 255, 255, 126, 255, 255, 255, 184, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 196, 255, 255, 255, 163, 255, 255, 255, 74, 191, 191, 191, 3, 255, 255, 255, 102, 255, 255, 255, 255, 255, 255, 255, 66, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 160, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 251, 255, 255, 255, 244, 255, 255, 255, 230, 255, 255, 255, 221, 128, 128, 128, 0, 128, 86, 86, 0, 255, 167, 167, 193, 255, 5, 5, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 189, 255, 0, 0, 182, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 3, 3, 255, 255, 160, 160, 204, 128, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 21, 255, 255, 255, 125, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 155, 255, 255, 255, 44, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 83, 255, 255, 255, 63, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 92, 255, 255, 255, 255, 255, 255, 255, 10, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 53, 191, 191, 191, 21, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 51, 255, 32, 23, 26, 255, 0, 179, 26, 255, 0, 179, 53, 255, 32, 79, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 191, 191, 191, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 228, 255, 255, 255, 160, 191, 191, 191, 0, 128, 128, 128, 0, 0, 0, 0, 0, 255, 0, 0, 12, 255, 11, 11, 243, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 192, 191, 0, 0, 11, 191, 0, 0, 8, 255, 0, 0, 185, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 10, 10, 248, 255, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 147, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 2, 255, 255, 255, 34, 255, 255, 255, 67, 255, 255, 255, 74, 255, 255, 255, 41, 191, 191, 191, 9, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 44, 255, 255, 255, 200, 191, 191, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 232, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 208, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 243, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 244, 255, 255, 255, 160, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 93, 93, 0, 255, 198, 198, 189, 255, 15, 15, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 53, 53, 239, 255, 149, 149, 114, 255, 255, 255, 102, 255, 255, 255, 102, 255, 149, 149, 111, 255, 58, 58, 236, 255, 0, 0, 255, 255, 0, 0, 255, 255, 12, 12, 255, 255, 190, 190, 200, 128, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 154, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 14, 128, 128, 128, 0, 255, 255, 255, 149, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 144, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 199, 199, 255, 255, 14, 14, 255, 255, 58, 58, 255, 255, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 255, 255, 65, 65, 255, 255, 11, 11, 255, 255, 192, 192, 255, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 148, 255, 255, 255, 197, 191, 191, 191, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 94, 94, 0, 255, 0, 0, 52, 191, 25, 25, 14, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 27, 27, 11, 255, 0, 0, 55, 128, 93, 93, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 2, 101, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 2, 2, 92, 3, 3, 3, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 5, 178, 3, 0, 107, 254, 2, 0, 84, 255, 0, 0, 2, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 188, 151, 151, 151, 254, 37, 37, 37, 225, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 27, 29, 29, 29, 220, 25, 25, 25, 213, 1, 1, 1, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 3, 0, 107, 254, 5, 0, 173, 255, 5, 0, 173, 255, 2, 0, 72, 255, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 176, 251, 251, 251, 255, 207, 207, 207, 254, 9, 9, 9, 180, 0, 0, 0, 24, 27, 27, 27, 215, 220, 220, 220, 255, 185, 185, 185, 255, 2, 2, 2, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 90, 2, 0, 76, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 170, 255, 1, 0, 61, 253, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 223, 223, 223, 255, 255, 255, 255, 255, 152, 152, 152, 255, 23, 23, 23, 236, 216, 216, 216, 255, 255, 255, 255, 255, 124, 124, 124, 254, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 138, 71, 71, 71, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 69, 69, 69, 255, 61, 61, 61, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 3, 3, 3, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 1, 0, 47, 244, 5, 0, 171, 255, 5, 0, 173, 255, 5, 0, 158, 255, 1, 0, 42, 242, 0, 0, 1, 86, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 94, 0, 0, 0, 80, 0, 0, 0, 77, 1, 1, 1, 160, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 62, 62, 240, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 213, 213, 255, 62, 62, 62, 239, 4, 4, 4, 177, 0, 0, 0, 165, 39, 39, 39, 227, 176, 176, 176, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 1, 0, 25, 227, 5, 0, 162, 255, 5, 0, 173, 255, 4, 0, 136, 254, 1, 0, 19, 219, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 71, 105, 105, 105, 254, 157, 157, 157, 255, 153, 153, 153, 255, 149, 149, 149, 250, 238, 238, 238, 255, 252, 252, 252, 255, 190, 190, 190, 255, 196, 196, 196, 255, 254, 254, 254, 255, 255, 255, 255, 255, 22, 22, 22, 236, 0, 0, 0, 161, 0, 0, 0, 136, 6, 6, 6, 114, 0, 0, 0, 16, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 217, 217, 217, 255, 10, 10, 10, 196, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 1, 1, 150, 160, 160, 160, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 18, 18, 18, 224, 28, 27, 46, 255, 4, 1, 130, 255, 3, 0, 106, 254, 0, 0, 5, 180, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 116, 124, 124, 124, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 73, 73, 244, 0, 0, 0, 122, 1, 1, 1, 133, 101, 101, 101, 251, 255, 255, 255, 255, 255, 255, 255, 255, 237, 237, 237, 255, 212, 212, 212, 255, 131, 131, 131, 255, 2, 2, 2, 93, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 72, 72, 72, 244, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 19, 19, 204, 244, 244, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 7, 198, 148, 148, 148, 255, 177, 177, 177, 255, 8, 7, 18, 254, 0, 0, 0, 130, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 97, 46, 46, 46, 233, 197, 197, 197, 254, 255, 255, 255, 255, 218, 218, 218, 255, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 171, 243, 243, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 234, 234, 255, 107, 107, 107, 254, 3, 3, 3, 110, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 251, 251, 251, 255, 9, 9, 9, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 123, 198, 198, 198, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 162, 12, 12, 12, 239, 14, 14, 14, 255, 45, 45, 45, 255, 170, 170, 170, 255, 49, 49, 49, 253, 1, 1, 1, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 3, 3, 3, 220, 231, 231, 231, 255, 235, 235, 235, 255, 5, 5, 5, 182, 0, 0, 0, 2, 0, 0, 0, 6, 18, 18, 18, 206, 250, 250, 250, 255, 228, 228, 228, 255, 101, 101, 101, 254, 8, 8, 8, 181, 1, 1, 1, 69, 1, 1, 1, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 244, 244, 244, 255, 1, 1, 1, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 105, 179, 179, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 53, 25, 0, 0, 239, 77, 0, 0, 255, 32, 11, 11, 255, 47, 47, 47, 255, 35, 35, 35, 255, 8, 8, 8, 237, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 134, 134, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 163, 163, 163, 254, 33, 33, 33, 218, 39, 39, 39, 224, 182, 182, 182, 254, 255, 255, 255, 255, 175, 175, 175, 254, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 37, 37, 37, 221, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 229, 229, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 207, 235, 0, 0, 255, 255, 0, 0, 255, 239, 0, 0, 255, 50, 4, 4, 255, 44, 44, 44, 255, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 73, 92, 92, 92, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 247, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 161, 161, 161, 254, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 63, 96, 96, 96, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 87, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 178, 0, 0, 255, 8, 8, 8, 254, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 164, 208, 208, 208, 255, 221, 221, 221, 255, 127, 127, 127, 254, 42, 42, 42, 245, 201, 201, 201, 255, 255, 255, 255, 255, 252, 252, 252, 255, 119, 119, 119, 254, 213, 213, 213, 255, 255, 255, 255, 255, 226, 226, 226, 255, 14, 14, 14, 193, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 128, 128, 255, 3, 3, 3, 169, 1, 1, 1, 81, 0, 0, 0, 69, 2, 2, 2, 137, 79, 79, 79, 248, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 121, 0, 0, 255, 255, 0, 0, 255, 226, 0, 0, 255, 204, 0, 0, 255, 159, 0, 0, 255, 1, 0, 0, 189, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 18, 18, 213, 0, 0, 0, 156, 0, 0, 0, 63, 0, 0, 0, 66, 138, 138, 138, 253, 255, 255, 255, 255, 189, 189, 189, 255, 1, 1, 1, 148, 3, 3, 3, 160, 92, 92, 92, 252, 186, 186, 186, 255, 21, 21, 21, 210, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 155, 165, 165, 165, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 141, 141, 141, 255, 76, 76, 76, 254, 64, 64, 64, 253, 121, 121, 121, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 5, 5, 5, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 128, 0, 0, 255, 84, 0, 0, 254, 0, 0, 0, 178, 0, 0, 0, 128, 1, 0, 0, 115, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 90, 90, 90, 254, 255, 255, 255, 255, 104, 104, 104, 254, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 40, 1, 1, 1, 142, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 49, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 5, 5, 5, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 9, 0, 0, 251, 1, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 31, 31, 31, 221, 176, 176, 176, 255, 22, 22, 22, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 81, 1, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 1, 1, 1, 101, 3, 3, 3, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 167, 0, 0, 0, 221, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 225, 0, 0, 0, 174, 0, 0, 27, 70, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 166, 1, 1, 1, 220, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 226, 0, 0, 0, 174, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 165, 0, 0, 0, 218, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 226, 0, 0, 0, 175, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 163, 1, 1, 1, 218, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 228, 0, 0, 0, 176, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 162, 0, 0, 0, 217, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 228, 0, 0, 0, 177, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 160, 1, 1, 1, 216, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 229, 0, 0, 0, 178, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 158, 0, 0, 0, 215, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 230, 0, 0, 0, 179, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 157, 1, 1, 1, 214, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 231, 0, 0, 0, 180, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 2, 2, 2, 248, 52, 52, 52, 253, 85, 85, 85, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 33, 31, 112, 254, 2, 0, 82, 255, 0, 0, 8, 255, 0, 0, 22, 136, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 101, 3, 3, 3, 247, 92, 92, 92, 253, 153, 153, 153, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 128, 127, 166, 253, 19, 15, 160, 255, 7, 4, 132, 255, 5, 4, 26, 252, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 2, 2, 2, 246, 50, 50, 50, 253, 84, 84, 84, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 88, 88, 88, 253, 58, 58, 58, 253, 5, 5, 5, 252, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 3, 3, 3, 246, 89, 89, 89, 253, 151, 151, 151, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 159, 159, 159, 253, 107, 107, 107, 253, 10, 10, 10, 253, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 1, 1, 1, 244, 48, 48, 48, 253, 83, 83, 83, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 88, 88, 88, 253, 60, 60, 60, 253, 6, 6, 6, 253, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 2, 2, 244, 85, 85, 85, 253, 149, 149, 149, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 161, 161, 161, 253, 110, 110, 110, 253, 11, 11, 11, 254, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 1, 1, 1, 242, 46, 46, 46, 253, 82, 82, 82, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 89, 89, 89, 253, 61, 61, 61, 253, 7, 7, 7, 253, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 1, 1, 1, 241, 81, 81, 81, 253, 148, 148, 148, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 162, 162, 162, 253, 112, 112, 112, 253, 14, 14, 14, 254, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 48, 2, 2, 2, 248, 89, 89, 89, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 90, 89, 132, 253, 5, 0, 173, 255, 5, 0, 173, 255, 4, 0, 141, 255, 0, 0, 9, 255, 0, 0, 38, 86, 0, 0, 0, 45, 4, 4, 4, 247, 159, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 210, 210, 214, 252, 40, 36, 180, 254, 5, 0, 173, 255, 5, 0, 173, 255, 12, 7, 163, 255, 5, 4, 32, 253, 0, 0, 0, 70, 0, 0, 0, 42, 1, 1, 1, 245, 86, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 99, 99, 99, 252, 7, 7, 7, 253, 0, 0, 0, 74, 0, 0, 0, 39, 2, 2, 2, 244, 152, 152, 152, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 182, 182, 182, 252, 14, 14, 14, 254, 0, 0, 0, 78, 0, 0, 0, 35, 1, 1, 1, 242, 82, 82, 82, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 102, 102, 102, 252, 8, 8, 8, 253, 0, 0, 0, 83, 0, 0, 0, 33, 1, 1, 1, 241, 145, 145, 145, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 17, 17, 17, 254, 0, 0, 0, 87, 0, 0, 0, 30, 0, 0, 0, 239, 78, 78, 78, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 104, 104, 252, 10, 10, 10, 253, 0, 0, 0, 92, 0, 0, 0, 27, 1, 1, 1, 238, 138, 138, 138, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 190, 190, 190, 252, 21, 21, 21, 254, 0, 0, 0, 97, 0, 0, 0, 169, 53, 53, 53, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 121, 252, 21, 17, 165, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 2, 0, 92, 255, 0, 0, 2, 193, 0, 0, 0, 166, 92, 92, 92, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 111, 109, 194, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 22, 20, 110, 254, 1, 1, 1, 197, 0, 0, 0, 161, 49, 49, 49, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 67, 67, 67, 253, 0, 0, 0, 200, 0, 0, 0, 157, 84, 84, 84, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 126, 126, 126, 253, 1, 1, 1, 205, 0, 0, 0, 152, 44, 44, 44, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 72, 72, 72, 253, 0, 0, 0, 209, 0, 0, 0, 147, 77, 77, 77, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 134, 134, 134, 253, 1, 1, 1, 214, 0, 0, 0, 142, 41, 41, 41, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 114, 125, 252, 159, 93, 142, 253, 167, 88, 145, 253, 132, 106, 132, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 76, 76, 76, 253, 0, 0, 0, 219, 0, 0, 0, 137, 69, 69, 69, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 201, 210, 252, 205, 140, 188, 253, 205, 125, 182, 253, 201, 173, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 141, 141, 141, 253, 1, 1, 1, 225, 0, 0, 0, 223, 86, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 58, 56, 147, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 4, 0, 141, 255, 0, 0, 4, 245, 1, 1, 1, 219, 152, 152, 152, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 181, 180, 208, 252, 11, 6, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 40, 37, 163, 254, 1, 1, 1, 244, 0, 0, 0, 214, 82, 82, 82, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 1, 1, 1, 247, 1, 1, 1, 210, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 249, 0, 0, 0, 205, 78, 78, 78, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 105, 105, 105, 252, 1, 1, 1, 250, 1, 1, 1, 203, 138, 138, 138, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 194, 194, 194, 252, 1, 1, 1, 252, 0, 0, 0, 200, 74, 74, 74, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 133, 105, 129, 253, 199, 72, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 212, 68, 161, 255, 142, 100, 138, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 110, 110, 110, 252, 1, 1, 1, 253, 1, 1, 1, 198, 130, 130, 130, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 178, 201, 253, 204, 77, 165, 255, 215, 67, 161, 255, 215, 67, 161, 255, 212, 68, 161, 255, 198, 154, 194, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 201, 201, 201, 252, 2, 2, 2, 253, 1, 1, 1, 253, 103, 103, 103, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 97, 97, 129, 252, 7, 2, 172, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 164, 255, 0, 0, 1, 254, 1, 1, 1, 249, 183, 183, 183, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 215, 252, 53, 50, 182, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 32, 28, 177, 254, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 175, 175, 175, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 214, 252, 3, 3, 3, 254, 0, 0, 0, 240, 94, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 51, 51, 51, 253, 2, 2, 2, 255, 3, 3, 3, 255, 38, 38, 38, 253, 111, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 237, 166, 166, 166, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 95, 95, 95, 253, 4, 4, 4, 255, 4, 4, 4, 255, 67, 67, 67, 253, 199, 199, 199, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 9, 9, 9, 254, 0, 0, 0, 235, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 151, 97, 138, 253, 213, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 208, 68, 161, 255, 132, 107, 131, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 7, 7, 7, 253, 1, 1, 1, 233, 159, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 153, 192, 253, 213, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 209, 69, 162, 255, 202, 175, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 17, 17, 17, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 119, 252, 28, 24, 162, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 49, 46, 143, 253, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 128, 126, 197, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 20, 15, 176, 255, 169, 168, 201, 253, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 166, 78, 78, 253, 223, 28, 28, 254, 150, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 228, 144, 144, 253, 245, 50, 50, 254, 224, 163, 163, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 112, 112, 252, 28, 28, 28, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 25, 25, 25, 254, 114, 114, 114, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 204, 252, 54, 54, 54, 254, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 42, 42, 42, 254, 204, 204, 204, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 167, 88, 147, 253, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 200, 71, 160, 255, 124, 112, 127, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 202, 125, 183, 253, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 204, 74, 164, 255, 204, 191, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 67, 66, 143, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 51, 48, 150, 254, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 192, 191, 210, 252, 17, 12, 175, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 18, 13, 175, 255, 172, 172, 206, 253, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 175, 69, 69, 253, 254, 1, 1, 255, 255, 0, 0, 255, 182, 63, 63, 253, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 231, 129, 129, 253, 255, 2, 2, 255, 255, 0, 0, 255, 234, 110, 110, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 100, 100, 100, 252, 117, 117, 117, 252, 108, 108, 108, 252, 23, 23, 23, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 51, 51, 51, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 181, 181, 181, 252, 210, 210, 210, 252, 197, 197, 197, 252, 44, 44, 44, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 88, 88, 88, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 116, 121, 252, 183, 80, 150, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 190, 76, 156, 254, 120, 116, 123, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 209, 213, 252, 206, 105, 174, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 203, 87, 169, 254, 208, 204, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 103, 126, 252, 10, 5, 171, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 49, 46, 151, 254, 118, 118, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 69, 66, 185, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 16, 12, 175, 255, 170, 169, 205, 253, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 182, 64, 64, 253, 255, 0, 0, 255, 255, 0, 0, 255, 225, 26, 26, 254, 127, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 233, 119, 119, 253, 255, 1, 1, 255, 255, 0, 0, 255, 246, 45, 45, 254, 218, 200, 200, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 93, 93, 93, 253, 14, 14, 14, 254, 3, 3, 3, 255, 17, 17, 17, 254, 18, 18, 18, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 9, 9, 9, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 171, 171, 171, 253, 27, 27, 27, 254, 6, 6, 6, 255, 30, 30, 30, 254, 34, 34, 34, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 12, 12, 12, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 122, 114, 125, 252, 193, 75, 154, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 175, 82, 152, 254, 119, 118, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 200, 210, 252, 208, 92, 170, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 198, 102, 174, 254, 214, 213, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 140, 101, 101, 252, 129, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 35, 32, 157, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 46, 44, 152, 254, 118, 118, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 145, 144, 201, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 15, 11, 175, 255, 167, 166, 205, 253, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 188, 58, 58, 253, 255, 0, 0, 255, 255, 0, 0, 255, 220, 30, 30, 254, 125, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 234, 109, 109, 253, 255, 0, 0, 255, 255, 0, 0, 255, 245, 52, 52, 254, 217, 203, 203, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 116, 116, 252, 13, 13, 13, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 12, 12, 12, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 211, 211, 211, 252, 25, 25, 25, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 19, 19, 19, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 127, 110, 128, 253, 195, 73, 158, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 158, 89, 148, 254, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 188, 206, 253, 204, 84, 168, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 193, 121, 182, 254, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 211, 44, 44, 254, 252, 11, 11, 255, 249, 14, 14, 255, 151, 92, 92, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 141, 141, 153, 253, 114, 112, 181, 255, 17, 13, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 44, 42, 153, 254, 118, 118, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 222, 176, 176, 253, 245, 59, 59, 254, 245, 62, 62, 254, 222, 174, 174, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 210, 252, 69, 66, 180, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 14, 9, 175, 255, 164, 163, 204, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 194, 53, 53, 253, 255, 0, 0, 255, 255, 0, 0, 255, 215, 35, 35, 254, 123, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 237, 99, 99, 253, 255, 0, 0, 255, 255, 0, 0, 255, 244, 60, 60, 254, 217, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 3, 3, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 65, 65, 65, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 187, 187, 187, 252, 6, 6, 6, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 114, 114, 114, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 99, 114, 134, 253, 65, 98, 176, 255, 199, 70, 163, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 137, 102, 135, 253, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 174, 188, 207, 253, 72, 106, 185, 255, 197, 70, 163, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 198, 161, 196, 253, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 138, 103, 103, 252, 255, 9, 9, 255, 254, 10, 10, 255, 255, 9, 9, 255, 208, 47, 47, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 127, 127, 132, 252, 184, 184, 187, 255, 188, 188, 188, 255, 129, 128, 182, 255, 5, 0, 173, 255, 43, 40, 154, 254, 117, 117, 120, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 247, 47, 47, 254, 255, 9, 9, 255, 255, 12, 12, 255, 248, 46, 46, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 193, 254, 188, 188, 188, 255, 102, 100, 180, 255, 5, 0, 173, 255, 14, 9, 175, 255, 162, 161, 203, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 120, 118, 118, 252, 200, 47, 47, 254, 255, 0, 0, 255, 255, 0, 0, 255, 210, 39, 39, 254, 122, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 214, 214, 252, 238, 89, 89, 254, 255, 0, 0, 255, 255, 0, 0, 255, 242, 68, 68, 254, 216, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 20, 20, 20, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 50, 50, 50, 253, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 212, 212, 252, 39, 39, 39, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 87, 87, 87, 253, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 89, 112, 143, 253, 41, 101, 183, 255, 39, 101, 185, 255, 81, 92, 178, 255, 214, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 172, 84, 151, 254, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 152, 174, 204, 253, 44, 104, 186, 255, 39, 101, 185, 255, 79, 93, 179, 255, 214, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 196, 107, 176, 254, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 126, 113, 113, 252, 247, 15, 15, 255, 255, 9, 9, 255, 255, 9, 9, 255, 187, 63, 63, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 120, 120, 120, 252, 169, 169, 174, 254, 188, 188, 188, 255, 188, 188, 188, 255, 187, 187, 188, 255, 59, 57, 157, 254, 117, 117, 120, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 249, 36, 36, 254, 255, 9, 9, 255, 255, 9, 9, 255, 250, 34, 34, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 196, 196, 202, 253, 188, 188, 188, 255, 188, 188, 188, 255, 185, 185, 188, 255, 31, 27, 175, 255, 160, 159, 203, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 117, 117, 252, 206, 42, 42, 254, 255, 0, 0, 255, 255, 0, 0, 255, 204, 44, 44, 254, 121, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 212, 212, 252, 240, 80, 80, 254, 255, 0, 0, 255, 255, 0, 0, 255, 240, 76, 76, 254, 216, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 61, 61, 61, 253, 8, 8, 8, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 61, 61, 61, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 115, 115, 115, 253, 15, 15, 15, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 107, 107, 107, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 119, 119, 252, 77, 109, 153, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 116, 85, 173, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 166, 88, 146, 253, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 215, 252, 125, 157, 199, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 112, 86, 174, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 202, 122, 181, 253, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 148, 95, 95, 253, 206, 48, 48, 254, 185, 64, 64, 253, 123, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 146, 145, 151, 253, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 165, 165, 173, 254, 120, 120, 123, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 227, 151, 151, 253, 252, 22, 22, 255, 252, 22, 22, 255, 227, 149, 149, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 207, 211, 252, 184, 184, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 186, 186, 188, 255, 184, 183, 203, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 122, 116, 116, 252, 211, 38, 38, 254, 255, 0, 0, 255, 255, 0, 0, 255, 199, 49, 49, 254, 120, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 210, 210, 252, 241, 71, 71, 254, 255, 0, 0, 255, 255, 0, 0, 255, 238, 85, 85, 254, 215, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 68, 68, 68, 253, 81, 81, 81, 253, 94, 94, 94, 253, 6, 6, 6, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 71, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 125, 125, 125, 253, 143, 143, 143, 253, 173, 173, 173, 253, 14, 14, 14, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 126, 126, 126, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 118, 121, 252, 65, 106, 163, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 148, 79, 169, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 199, 71, 160, 255, 124, 112, 127, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 211, 214, 252, 99, 140, 195, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 145, 80, 170, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 204, 75, 164, 255, 204, 192, 207, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 106, 106, 106, 253, 79, 79, 79, 254, 60, 60, 60, 255, 59, 59, 59, 255, 115, 115, 116, 255, 186, 186, 187, 255, 188, 188, 188, 255, 166, 166, 174, 254, 120, 120, 123, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 130, 130, 130, 253, 121, 121, 121, 254, 156, 156, 159, 254, 188, 188, 188, 255, 188, 188, 188, 255, 187, 187, 188, 255, 192, 192, 202, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 124, 115, 115, 252, 216, 33, 33, 254, 255, 0, 0, 255, 255, 0, 0, 255, 193, 54, 54, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 208, 208, 252, 243, 63, 63, 254, 255, 0, 0, 255, 255, 0, 0, 255, 237, 95, 95, 253, 215, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 60, 60, 60, 253, 88, 88, 88, 253, 119, 119, 119, 252, 119, 119, 119, 252, 87, 87, 87, 253, 2, 2, 2, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 81, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 112, 112, 112, 253, 157, 157, 157, 253, 215, 215, 215, 252, 215, 215, 215, 252, 159, 159, 159, 253, 6, 6, 6, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 117, 125, 252, 55, 104, 171, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 40, 101, 185, 255, 171, 75, 166, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 198, 72, 157, 254, 125, 112, 128, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 205, 212, 252, 76, 125, 191, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 100, 184, 255, 169, 75, 167, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 207, 79, 166, 254, 204, 190, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 93, 93, 253, 127, 40, 40, 255, 93, 49, 49, 255, 59, 59, 59, 255, 59, 59, 59, 255, 59, 59, 59, 255, 116, 115, 121, 255, 167, 167, 175, 254, 120, 120, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 208, 208, 208, 252, 105, 105, 105, 254, 59, 59, 59, 255, 59, 59, 59, 255, 59, 59, 59, 255, 61, 61, 61, 255, 140, 140, 144, 255, 187, 187, 188, 255, 191, 191, 202, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 126, 113, 113, 252, 221, 29, 29, 254, 255, 0, 0, 255, 255, 0, 0, 255, 186, 60, 60, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 217, 205, 205, 252, 244, 55, 55, 254, 255, 0, 0, 255, 255, 0, 0, 255, 235, 105, 105, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 55, 55, 55, 253, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 79, 79, 79, 253, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 63, 63, 63, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 212, 212, 252, 101, 101, 101, 254, 170, 170, 170, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 146, 146, 146, 253, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 111, 111, 111, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 115, 130, 253, 48, 103, 177, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 50, 98, 183, 255, 189, 71, 164, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 190, 77, 153, 254, 124, 114, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 195, 209, 252, 60, 115, 189, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 48, 99, 183, 255, 187, 71, 164, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 209, 94, 170, 254, 209, 197, 209, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 151, 89, 89, 253, 246, 4, 4, 255, 255, 0, 0, 255, 254, 0, 0, 255, 173, 25, 25, 255, 60, 59, 59, 255, 59, 59, 59, 255, 70, 70, 70, 255, 120, 120, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 210, 210, 252, 210, 68, 68, 254, 240, 4, 4, 255, 217, 11, 11, 255, 115, 42, 42, 255, 59, 59, 59, 255, 59, 59, 59, 255, 67, 67, 68, 255, 192, 192, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 128, 111, 111, 252, 226, 25, 25, 254, 255, 0, 0, 255, 255, 0, 0, 255, 180, 66, 66, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 202, 202, 252, 246, 48, 48, 254, 255, 0, 0, 255, 255, 0, 0, 255, 233, 115, 115, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 51, 51, 51, 253, 102, 102, 102, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 33, 33, 33, 253, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 6, 6, 6, 254, 102, 102, 102, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 93, 93, 93, 253, 182, 182, 182, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 212, 212, 252, 64, 64, 64, 253, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 10, 10, 10, 254, 181, 181, 181, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 95, 113, 139, 253, 43, 102, 182, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 66, 95, 181, 255, 206, 69, 162, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 179, 83, 149, 254, 119, 117, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 164, 182, 206, 253, 48, 107, 186, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 64, 96, 181, 255, 204, 69, 162, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 206, 108, 176, 254, 213, 210, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 235, 17, 17, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 151, 31, 31, 255, 59, 59, 59, 255, 65, 65, 65, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 235, 103, 103, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 253, 1, 1, 255, 117, 41, 41, 255, 59, 59, 59, 255, 59, 59, 59, 255, 210, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 131, 108, 108, 252, 230, 21, 21, 254, 255, 0, 0, 255, 254, 1, 1, 255, 173, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 197, 197, 252, 247, 41, 41, 254, 255, 0, 0, 255, 255, 1, 1, 255, 232, 125, 125, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 112, 112, 252, 56, 44, 44, 253, 125, 93, 93, 253, 137, 105, 105, 253, 137, 105, 105, 253, 137, 105, 105, 253, 137, 105, 105, 253, 137, 105, 105, 253, 131, 102, 102, 253, 51, 50, 50, 253, 102, 102, 102, 252, 72, 72, 72, 253, 14, 14, 14, 254, 26, 26, 26, 254, 93, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 203, 203, 203, 252, 89, 77, 77, 253, 190, 159, 159, 253, 214, 182, 182, 253, 214, 182, 182, 253, 214, 182, 182, 253, 214, 182, 182, 253, 214, 182, 182, 253, 207, 177, 177, 253, 92, 92, 92, 253, 183, 183, 183, 252, 133, 133, 133, 253, 27, 27, 27, 254, 46, 46, 46, 254, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 83, 110, 148, 253, 40, 101, 184, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 82, 91, 178, 255, 213, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 161, 90, 144, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 139, 166, 202, 253, 41, 102, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 80, 92, 178, 255, 213, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 201, 129, 184, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 144, 98, 98, 253, 197, 56, 56, 253, 180, 69, 69, 253, 122, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 141, 99, 99, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 245, 3, 3, 255, 71, 55, 55, 255, 72, 72, 72, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 222, 176, 176, 252, 222, 177, 177, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 213, 213, 252, 251, 16, 16, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 239, 5, 5, 255, 67, 57, 57, 255, 64, 64, 64, 255, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 134, 106, 106, 252, 234, 18, 18, 254, 255, 0, 0, 255, 253, 2, 2, 255, 168, 76, 76, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 219, 193, 193, 252, 249, 35, 35, 254, 255, 0, 0, 255, 255, 3, 3, 255, 230, 135, 135, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 107, 107, 107, 252, 70, 34, 34, 254, 198, 50, 50, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 197, 50, 50, 255, 69, 34, 34, 254, 108, 107, 107, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 195, 195, 195, 252, 88, 53, 53, 254, 197, 49, 49, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 198, 50, 50, 255, 88, 52, 52, 254, 193, 192, 192, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 73, 108, 156, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 96, 89, 176, 255, 214, 67, 161, 255, 205, 69, 161, 255, 143, 101, 134, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 118, 152, 198, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 93, 90, 176, 255, 213, 67, 161, 255, 207, 70, 162, 255, 204, 160, 195, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 125, 114, 114, 252, 245, 17, 17, 255, 252, 10, 10, 255, 255, 9, 9, 255, 185, 65, 65, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 155, 78, 78, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 129, 38, 38, 255, 86, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 235, 111, 111, 253, 255, 9, 9, 255, 254, 13, 13, 255, 235, 110, 110, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 188, 188, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 131, 37, 37, 255, 94, 94, 94, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 137, 103, 103, 252, 238, 15, 15, 255, 255, 0, 0, 255, 252, 3, 3, 255, 162, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 220, 188, 188, 252, 249, 29, 29, 255, 255, 0, 0, 255, 254, 5, 5, 255, 228, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 102, 101, 101, 252, 77, 32, 32, 254, 204, 51, 51, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 189, 47, 47, 255, 66, 37, 37, 254, 112, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 185, 185, 252, 90, 47, 47, 254, 203, 51, 51, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 191, 48, 48, 255, 88, 58, 58, 254, 201, 201, 201, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 101, 115, 133, 252, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 116, 89, 167, 254, 128, 109, 129, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 180, 192, 209, 252, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 124, 99, 178, 255, 203, 183, 204, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 139, 102, 102, 252, 255, 9, 9, 255, 254, 9, 9, 255, 255, 9, 9, 255, 208, 47, 47, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 174, 65, 65, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 166, 27, 27, 255, 110, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 250, 30, 30, 255, 255, 9, 9, 255, 255, 10, 10, 255, 251, 27, 27, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 211, 150, 150, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 183, 22, 22, 255, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 141, 100, 100, 252, 241, 12, 12, 255, 255, 0, 0, 255, 250, 4, 4, 255, 157, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 221, 183, 183, 252, 251, 24, 24, 255, 255, 0, 0, 255, 254, 7, 7, 255, 227, 152, 152, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 96, 95, 95, 253, 88, 30, 30, 254, 208, 52, 52, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 179, 45, 45, 255, 64, 42, 42, 254, 115, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 175, 173, 173, 253, 96, 41, 41, 254, 207, 52, 52, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 181, 47, 47, 255, 91, 68, 68, 254, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 91, 112, 141, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 58, 105, 168, 254, 113, 118, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 158, 178, 205, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 79, 127, 191, 254, 200, 206, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 120, 118, 118, 252, 216, 40, 40, 254, 255, 9, 9, 255, 251, 12, 12, 255, 155, 89, 89, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 185, 56, 56, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 179, 55, 55, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 243, 68, 68, 254, 255, 9, 9, 255, 255, 9, 9, 255, 244, 66, 66, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 124, 124, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 209, 32, 32, 255, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 144, 96, 96, 253, 244, 10, 10, 255, 255, 0, 0, 255, 248, 6, 6, 255, 152, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 222, 176, 176, 253, 251, 19, 19, 255, 255, 0, 0, 255, 253, 10, 10, 255, 225, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 89, 88, 88, 253, 102, 30, 30, 254, 210, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 167, 43, 43, 255, 64, 49, 49, 254, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 162, 161, 161, 253, 106, 36, 36, 254, 210, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 170, 44, 44, 255, 98, 82, 82, 254, 211, 211, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 111, 117, 125, 252, 43, 102, 182, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 68, 107, 159, 254, 117, 118, 121, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 201, 206, 213, 252, 48, 107, 186, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 102, 141, 195, 254, 210, 212, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 121, 118, 118, 252, 146, 96, 96, 252, 132, 108, 108, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 191, 47, 47, 254, 255, 0, 0, 255, 255, 0, 0, 255, 230, 13, 13, 254, 200, 46, 46, 254, 201, 48, 48, 254, 178, 66, 66, 253, 126, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 218, 201, 201, 252, 235, 109, 109, 253, 235, 109, 109, 253, 218, 200, 200, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 115, 115, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 249, 22, 22, 254, 226, 149, 149, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 148, 93, 93, 253, 246, 8, 8, 255, 255, 0, 0, 255, 246, 8, 8, 255, 147, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 223, 170, 170, 253, 252, 15, 15, 255, 255, 0, 0, 255, 252, 13, 13, 255, 223, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 99, 97, 97, 252, 106, 30, 30, 254, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 154, 39, 39, 255, 66, 58, 58, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 180, 179, 179, 252, 106, 33, 33, 254, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 158, 41, 41, 255, 108, 99, 99, 253, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 91, 112, 141, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 184, 255, 80, 110, 150, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 157, 177, 205, 253, 40, 102, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 40, 102, 185, 255, 128, 159, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 197, 38, 38, 254, 255, 0, 0, 255, 174, 56, 56, 253, 119, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 227, 109, 109, 253, 255, 0, 0, 255, 240, 17, 17, 255, 214, 133, 133, 253, 216, 206, 206, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 153, 89, 89, 253, 248, 6, 6, 255, 255, 0, 0, 255, 243, 11, 11, 255, 144, 97, 97, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 224, 163, 163, 253, 253, 12, 12, 255, 255, 0, 0, 255, 252, 17, 17, 255, 222, 173, 173, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 64, 52, 52, 253, 209, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 141, 36, 36, 255, 70, 67, 67, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 104, 95, 95, 253, 208, 52, 52, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 144, 38, 38, 255, 121, 117, 117, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 79, 109, 151, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 42, 102, 182, 255, 93, 113, 140, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 130, 160, 200, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 45, 105, 186, 255, 155, 176, 204, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 136, 105, 105, 252, 134, 107, 107, 252, 119, 119, 119, 252, 204, 30, 30, 254, 178, 53, 53, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 230, 97, 97, 254, 240, 18, 18, 255, 210, 180, 180, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 158, 84, 84, 253, 250, 4, 4, 255, 255, 0, 0, 255, 240, 13, 13, 255, 140, 101, 101, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 226, 156, 156, 253, 253, 8, 8, 255, 255, 0, 0, 255, 251, 22, 22, 255, 221, 180, 180, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 72, 47, 47, 253, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 127, 33, 33, 255, 78, 76, 76, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 105, 83, 83, 253, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 131, 35, 35, 255, 135, 134, 134, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 66, 106, 161, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 47, 102, 178, 255, 102, 114, 132, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 102, 142, 195, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 55, 112, 188, 255, 176, 190, 208, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 188, 63, 63, 253, 252, 11, 11, 255, 254, 10, 10, 255, 171, 76, 76, 253, 175, 45, 45, 253, 119, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 219, 194, 194, 252, 243, 71, 71, 254, 246, 54, 54, 254, 227, 151, 151, 253, 223, 79, 79, 253, 211, 160, 160, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 163, 80, 80, 253, 252, 3, 3, 255, 255, 0, 0, 255, 237, 16, 16, 255, 137, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 227, 148, 148, 253, 254, 6, 6, 255, 255, 0, 0, 255, 250, 27, 27, 255, 221, 185, 185, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 73, 71, 71, 253, 170, 43, 43, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 111, 31, 31, 254, 85, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 133, 131, 131, 253, 168, 43, 43, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 117, 34, 34, 254, 150, 148, 148, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 118, 121, 252, 56, 104, 170, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 53, 104, 172, 254, 110, 117, 126, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 210, 212, 214, 252, 79, 126, 191, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 69, 121, 190, 254, 194, 201, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 249, 13, 13, 255, 253, 10, 10, 255, 255, 9, 9, 255, 232, 27, 27, 254, 126, 107, 107, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 183, 183, 183, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 240, 84, 84, 254, 255, 9, 9, 255, 254, 12, 12, 255, 253, 17, 17, 255, 202, 138, 138, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 149, 93, 93, 253, 253, 2, 2, 255, 255, 0, 0, 255, 233, 19, 19, 254, 133, 107, 107, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 175, 175, 175, 253, 215, 215, 215, 252, 215, 215, 215, 252, 224, 170, 170, 252, 254, 4, 4, 255, 255, 0, 0, 255, 249, 32, 32, 254, 219, 191, 191, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 65, 53, 53, 253, 110, 29, 29, 255, 131, 36, 36, 255, 76, 33, 33, 254, 94, 92, 92, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 213, 213, 213, 252, 106, 95, 95, 253, 111, 30, 30, 255, 134, 39, 39, 255, 92, 47, 47, 254, 165, 164, 164, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 117, 125, 252, 48, 103, 177, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 62, 106, 164, 254, 115, 118, 122, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 160, 160, 160, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 200, 205, 212, 252, 61, 115, 189, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 90, 134, 193, 254, 206, 209, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 0, 0, 0, 228, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 230, 29, 29, 254, 255, 9, 9, 255, 255, 9, 9, 255, 212, 43, 43, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 99, 99, 99, 252, 0, 0, 0, 246, 1, 1, 1, 225, 158, 158, 158, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 243, 73, 73, 254, 255, 9, 9, 255, 255, 9, 9, 255, 255, 10, 10, 255, 218, 202, 202, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 184, 184, 252, 1, 1, 1, 248, 0, 0, 0, 222, 85, 85, 85, 253, 119, 119, 119, 252, 119, 119, 119, 252, 171, 73, 73, 253, 255, 0, 0, 255, 229, 22, 22, 254, 130, 109, 109, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 104, 104, 252, 1, 1, 1, 250, 1, 1, 1, 218, 150, 150, 150, 253, 215, 215, 215, 252, 215, 215, 215, 252, 230, 135, 135, 253, 255, 0, 0, 255, 248, 38, 38, 254, 219, 196, 196, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 192, 192, 192, 252, 1, 1, 1, 251, 0, 0, 0, 213, 81, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 111, 111, 252, 102, 102, 102, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 109, 109, 109, 252, 1, 1, 1, 252, 1, 1, 1, 210, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 201, 201, 201, 252, 183, 183, 183, 252, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 199, 199, 252, 2, 2, 2, 253, 0, 0, 0, 207, 77, 77, 77, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 115, 130, 253, 43, 102, 181, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 74, 108, 155, 254, 118, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 112, 112, 252, 1, 1, 1, 253, 1, 1, 1, 206, 135, 135, 135, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 195, 209, 252, 50, 108, 187, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 114, 149, 197, 254, 213, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 205, 205, 205, 252, 3, 3, 3, 253, 0, 0, 0, 178, 60, 60, 60, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 136, 105, 105, 252, 201, 51, 51, 253, 195, 57, 57, 253, 130, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 69, 69, 69, 253, 0, 0, 0, 199, 0, 0, 0, 173, 105, 105, 105, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 222, 176, 176, 253, 250, 34, 34, 254, 254, 14, 14, 255, 233, 120, 120, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 130, 130, 130, 253, 1, 1, 1, 203, 0, 0, 0, 168, 56, 56, 56, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 146, 95, 95, 253, 122, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 74, 74, 74, 253, 0, 0, 0, 208, 0, 0, 0, 164, 97, 97, 97, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 223, 172, 172, 253, 216, 209, 209, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 137, 137, 137, 253, 1, 1, 1, 213, 0, 0, 0, 160, 51, 51, 51, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 78, 78, 78, 253, 0, 0, 0, 218, 0, 0, 0, 156, 89, 89, 89, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 145, 145, 145, 253, 1, 1, 1, 223, 0, 0, 0, 151, 47, 47, 47, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 106, 116, 129, 252, 69, 107, 159, 254, 65, 106, 163, 254, 96, 114, 137, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 83, 83, 83, 253, 0, 0, 0, 227, 0, 0, 0, 146, 81, 81, 81, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 189, 198, 210, 252, 108, 145, 196, 254, 97, 139, 195, 254, 164, 182, 206, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 153, 153, 153, 253, 1, 1, 1, 231, 0, 0, 0, 65, 5, 5, 5, 252, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 105, 105, 105, 252, 9, 9, 9, 253, 0, 0, 0, 84, 0, 0, 0, 61, 8, 8, 8, 252, 176, 176, 176, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 192, 192, 192, 252, 18, 18, 18, 254, 0, 0, 0, 89, 0, 0, 0, 57, 4, 4, 4, 251, 96, 96, 96, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 107, 107, 107, 252, 11, 11, 11, 253, 0, 0, 0, 94, 0, 0, 0, 53, 5, 5, 5, 250, 172, 172, 172, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 196, 196, 196, 252, 22, 22, 22, 254, 0, 0, 0, 98, 0, 0, 0, 50, 2, 2, 2, 248, 93, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 109, 109, 109, 252, 13, 13, 13, 253, 0, 0, 0, 103, 0, 0, 0, 47, 4, 4, 4, 248, 166, 166, 166, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 199, 199, 252, 27, 27, 27, 254, 0, 0, 0, 108, 0, 0, 0, 43, 1, 1, 1, 246, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 111, 111, 252, 16, 16, 16, 253, 0, 0, 0, 112, 0, 0, 0, 40, 3, 3, 3, 245, 159, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 202, 202, 202, 252, 31, 31, 31, 254, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 130, 6, 6, 6, 253, 66, 66, 66, 253, 99, 99, 99, 252, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 70, 70, 70, 253, 9, 9, 9, 253, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 10, 10, 10, 253, 118, 118, 118, 253, 177, 177, 177, 252, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 183, 183, 183, 252, 128, 128, 128, 253, 18, 18, 18, 254, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 5, 5, 5, 252, 64, 64, 64, 253, 98, 98, 98, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 102, 102, 102, 252, 72, 72, 72, 253, 10, 10, 10, 253, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 9, 9, 9, 252, 114, 114, 114, 253, 176, 176, 176, 252, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 184, 184, 252, 132, 132, 132, 253, 20, 20, 20, 254, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 4, 4, 4, 252, 62, 62, 62, 253, 97, 97, 97, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 74, 74, 74, 253, 12, 12, 12, 253, 0, 0, 0, 168, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 110, 7, 7, 7, 252, 110, 110, 110, 253, 174, 174, 174, 252, 211, 211, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 135, 135, 135, 253, 23, 23, 23, 254, 0, 0, 0, 173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 105, 3, 3, 3, 251, 60, 60, 60, 253, 96, 96, 96, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 75, 75, 75, 253, 14, 14, 14, 253, 0, 0, 0, 177, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 101, 5, 5, 5, 250, 106, 106, 106, 253, 173, 173, 173, 252, 210, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 188, 188, 188, 252, 138, 138, 138, 253, 27, 27, 27, 254, 0, 0, 0, 181, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 198, 0, 0, 0, 245, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 247, 0, 0, 0, 203, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 1, 1, 197, 1, 1, 1, 245, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 248, 1, 1, 1, 204, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 195, 0, 0, 0, 244, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 248, 0, 0, 0, 205, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 1, 1, 194, 1, 1, 1, 244, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 249, 1, 1, 1, 206, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 192, 0, 0, 0, 243, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 249, 0, 0, 0, 206, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 191, 1, 1, 1, 243, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 250, 1, 1, 1, 208, 0, 0, 0, 102, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 189, 0, 0, 0, 242, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 250, 0, 0, 0, 208, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 188, 1, 1, 1, 242, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 251, 1, 1, 1, 210, 0, 0, 0, 107, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 119, 0, 0, 0, 177, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 196, 0, 0, 0, 146, 0, 0, 7, 58, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 117, 0, 0, 0, 176, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 197, 0, 0, 0, 147, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 183, 0, 0, 0, 235, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 229, 0, 0, 0, 176, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 183, 1, 1, 1, 234, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 230, 0, 0, 0, 177, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 218, 25, 25, 25, 253, 64, 64, 64, 253, 82, 82, 82, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 44, 43, 88, 253, 2, 0, 70, 255, 0, 0, 7, 255, 0, 0, 22, 140, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 217, 44, 44, 44, 254, 114, 114, 114, 253, 148, 148, 148, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 139, 139, 148, 253, 22, 19, 135, 254, 4, 1, 112, 255, 4, 3, 27, 251, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 6, 6, 6, 253, 62, 62, 62, 253, 92, 92, 92, 253, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 104, 104, 104, 252, 105, 105, 105, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 88, 88, 88, 253, 55, 55, 55, 253, 2, 2, 2, 249, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 10, 10, 10, 253, 110, 110, 110, 253, 165, 165, 165, 253, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 193, 193, 193, 252, 186, 186, 186, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 161, 161, 161, 253, 101, 101, 101, 253, 5, 5, 5, 250, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 217, 54, 54, 54, 253, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 111, 123, 252, 15, 11, 168, 255, 5, 0, 173, 255, 4, 0, 141, 255, 0, 0, 14, 255, 0, 0, 28, 104, 0, 0, 0, 9, 0, 0, 0, 214, 95, 95, 95, 253, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 92, 89, 190, 254, 5, 0, 173, 255, 5, 0, 173, 255, 11, 7, 164, 255, 6, 5, 38, 254, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 7, 7, 7, 253, 101, 101, 101, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 31, 31, 31, 254, 56, 56, 56, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 90, 90, 90, 253, 2, 2, 2, 248, 0, 0, 0, 48, 0, 0, 0, 72, 12, 12, 12, 253, 180, 180, 180, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 86, 86, 86, 254, 71, 71, 71, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 167, 167, 167, 253, 5, 5, 5, 250, 0, 0, 0, 52, 0, 0, 0, 113, 25, 25, 25, 253, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 48, 45, 152, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 3, 0, 110, 255, 0, 0, 5, 231, 0, 0, 1, 109, 42, 42, 42, 254, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 166, 166, 205, 253, 6, 1, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 25, 21, 137, 254, 1, 1, 1, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 68, 68, 68, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 51, 51, 51, 253, 0, 0, 0, 255, 73, 73, 73, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 52, 52, 52, 253, 0, 0, 0, 167, 1, 1, 1, 195, 119, 119, 119, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 124, 124, 124, 253, 0, 0, 0, 255, 95, 95, 95, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 99, 99, 99, 253, 0, 0, 0, 171, 0, 0, 0, 170, 62, 62, 62, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 89, 88, 133, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 165, 255, 0, 0, 3, 254, 0, 0, 0, 183, 109, 109, 109, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 210, 210, 214, 252, 39, 35, 179, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 28, 24, 175, 254, 5, 5, 5, 253, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 1, 1, 246, 101, 101, 101, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 49, 49, 49, 253, 17, 17, 17, 255, 68, 68, 68, 255, 2, 2, 2, 255, 96, 96, 96, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 85, 85, 85, 253, 0, 0, 0, 218, 1, 1, 1, 243, 177, 177, 177, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 114, 114, 114, 253, 8, 8, 8, 255, 79, 79, 79, 255, 0, 0, 0, 255, 154, 154, 154, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 156, 156, 156, 253, 1, 1, 1, 223, 0, 0, 0, 206, 81, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 121, 252, 20, 16, 165, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 1, 0, 21, 254, 1, 1, 1, 229, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 109, 107, 194, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 27, 27, 36, 254, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 116, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 23, 23, 23, 254, 54, 54, 54, 255, 195, 195, 195, 255, 211, 211, 211, 255, 45, 45, 45, 255, 17, 17, 17, 254, 115, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 206, 206, 206, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 199, 199, 252, 59, 59, 59, 254, 37, 37, 37, 255, 181, 181, 181, 255, 215, 215, 215, 255, 70, 70, 70, 255, 11, 11, 11, 255, 189, 189, 189, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 185, 185, 185, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 57, 54, 147, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 24, 21, 163, 254, 13, 13, 17, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 180, 179, 208, 252, 10, 5, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 122, 120, 196, 253, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 80, 80, 80, 253, 6, 6, 6, 255, 105, 105, 105, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 191, 191, 191, 255, 15, 15, 15, 255, 37, 37, 37, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 165, 165, 165, 253, 21, 21, 21, 254, 80, 80, 80, 255, 210, 210, 210, 255, 215, 215, 215, 255, 215, 215, 215, 255, 205, 205, 205, 255, 33, 33, 33, 255, 46, 46, 46, 254, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 97, 96, 129, 253, 7, 2, 172, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 23, 19, 163, 254, 109, 109, 124, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 213, 213, 215, 252, 52, 48, 182, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 120, 118, 196, 253, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 47, 47, 47, 254, 18, 18, 18, 255, 161, 161, 161, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 153, 153, 153, 255, 0, 0, 0, 255, 71, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 112, 112, 112, 253, 8, 8, 8, 255, 140, 140, 140, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 177, 177, 177, 255, 6, 6, 6, 255, 89, 89, 89, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 120, 252, 27, 23, 162, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 22, 18, 164, 254, 108, 108, 124, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 126, 124, 197, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 115, 113, 195, 253, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 21, 21, 21, 254, 56, 56, 56, 255, 196, 196, 196, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 104, 104, 104, 255, 1, 1, 1, 255, 94, 94, 94, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 196, 196, 196, 252, 55, 55, 55, 254, 39, 39, 39, 255, 182, 182, 182, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 136, 136, 136, 255, 0, 0, 0, 255, 147, 147, 147, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 66, 65, 143, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 21, 17, 165, 255, 107, 107, 125, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 191, 190, 210, 252, 16, 11, 175, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 111, 109, 194, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 78, 78, 78, 253, 5, 5, 5, 255, 112, 112, 112, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 213, 213, 213, 255, 52, 52, 52, 255, 15, 15, 15, 254, 113, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 161, 161, 161, 253, 18, 18, 18, 254, 86, 86, 86, 255, 212, 212, 212, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 79, 79, 79, 255, 9, 9, 9, 255, 185, 185, 185, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 129, 129, 135, 253, 105, 103, 179, 255, 17, 12, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 20, 16, 166, 255, 107, 106, 125, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 90, 87, 185, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 107, 105, 193, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 116, 116, 252, 44, 44, 44, 254, 21, 21, 21, 255, 164, 164, 164, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 197, 197, 197, 255, 19, 19, 19, 255, 34, 34, 34, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 105, 105, 105, 253, 10, 10, 10, 255, 145, 145, 145, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 209, 209, 209, 255, 39, 39, 39, 255, 41, 41, 41, 254, 210, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 121, 121, 252, 173, 173, 179, 254, 188, 188, 188, 255, 146, 146, 184, 255, 5, 1, 173, 255, 19, 15, 166, 255, 105, 105, 125, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 191, 191, 200, 253, 188, 188, 188, 255, 111, 109, 181, 255, 5, 0, 173, 255, 5, 0, 173, 255, 103, 101, 192, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 100, 100, 100, 252, 20, 20, 20, 254, 58, 58, 58, 255, 199, 199, 199, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 161, 161, 161, 255, 1, 1, 1, 255, 66, 66, 66, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 195, 195, 195, 252, 54, 54, 54, 254, 42, 42, 42, 255, 186, 186, 186, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 183, 183, 183, 255, 8, 8, 8, 255, 82, 82, 82, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 149, 149, 157, 254, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 60, 57, 170, 255, 104, 104, 126, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 209, 252, 184, 184, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 43, 40, 176, 255, 99, 96, 192, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 77, 77, 77, 253, 5, 5, 5, 255, 114, 114, 114, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 113, 113, 113, 255, 1, 1, 1, 255, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 160, 160, 160, 253, 16, 16, 16, 254, 88, 88, 88, 255, 212, 212, 212, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 145, 145, 145, 255, 0, 0, 0, 255, 139, 139, 139, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 167, 83, 83, 253, 235, 31, 31, 254, 220, 43, 43, 254, 145, 99, 99, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 128, 128, 133, 253, 185, 185, 187, 255, 188, 188, 188, 255, 188, 188, 188, 255, 179, 179, 185, 255, 126, 126, 133, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 230, 140, 140, 253, 249, 44, 44, 254, 244, 70, 70, 254, 222, 181, 181, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 187, 187, 192, 254, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 159, 158, 193, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 13, 13, 13, 254, 110, 110, 110, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 58, 58, 58, 255, 12, 12, 12, 255, 110, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 58, 58, 58, 254, 81, 81, 81, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 86, 86, 86, 255, 7, 7, 7, 255, 179, 179, 179, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 89, 78, 78, 253, 247, 23, 23, 255, 255, 17, 17, 255, 255, 17, 17, 255, 216, 46, 46, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 92, 92, 92, 253, 72, 72, 72, 254, 71, 71, 71, 254, 111, 111, 111, 254, 186, 186, 187, 255, 188, 188, 188, 255, 179, 179, 186, 255, 128, 128, 134, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 148, 134, 134, 253, 253, 25, 25, 255, 255, 17, 17, 255, 255, 17, 17, 255, 242, 80, 80, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 162, 162, 162, 253, 152, 152, 152, 253, 163, 163, 169, 253, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 181, 181, 193, 254, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 87, 87, 87, 253, 12, 12, 12, 255, 189, 189, 189, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 202, 202, 202, 255, 23, 23, 23, 255, 30, 30, 30, 254, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 179, 179, 179, 252, 7, 7, 7, 255, 169, 169, 169, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 212, 212, 212, 255, 44, 44, 44, 255, 35, 35, 35, 254, 206, 206, 206, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 114, 59, 59, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 249, 20, 20, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 111, 111, 252, 102, 55, 55, 255, 80, 53, 53, 255, 59, 59, 59, 255, 59, 59, 59, 255, 59, 59, 59, 255, 107, 107, 109, 255, 180, 180, 186, 255, 128, 128, 135, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 156, 93, 93, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 252, 31, 31, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 148, 148, 148, 253, 69, 69, 69, 255, 59, 59, 59, 255, 59, 59, 59, 255, 60, 60, 60, 255, 136, 136, 139, 255, 188, 188, 188, 255, 181, 181, 193, 254, 213, 213, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 54, 54, 54, 253, 47, 47, 47, 255, 214, 214, 214, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 167, 167, 167, 255, 1, 1, 1, 255, 59, 59, 59, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 134, 134, 134, 253, 26, 26, 26, 255, 203, 203, 203, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 187, 187, 187, 255, 10, 10, 10, 255, 73, 73, 73, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 113, 60, 60, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 251, 20, 20, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 130, 110, 110, 252, 222, 21, 21, 254, 255, 0, 0, 255, 252, 1, 1, 255, 172, 25, 25, 255, 61, 58, 58, 255, 59, 59, 59, 255, 59, 59, 59, 255, 125, 125, 130, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 156, 94, 94, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 252, 29, 29, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 131, 131, 253, 206, 15, 15, 255, 201, 16, 16, 255, 110, 44, 44, 255, 59, 59, 59, 255, 59, 59, 59, 255, 61, 61, 61, 255, 175, 175, 186, 253, 213, 213, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 27, 27, 27, 254, 40, 49, 122, 255, 65, 84, 237, 255, 65, 84, 237, 255, 57, 78, 238, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 236, 255, 17, 22, 66, 255, 1, 1, 1, 255, 87, 87, 87, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 74, 74, 74, 254, 22, 30, 94, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 21, 29, 93, 255, 0, 0, 0, 255, 128, 128, 128, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 112, 61, 61, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 252, 19, 19, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 202, 45, 45, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 165, 27, 27, 255, 59, 59, 59, 255, 59, 59, 59, 255, 114, 114, 114, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 155, 96, 96, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 253, 27, 27, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 225, 159, 159, 253, 254, 1, 1, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 128, 38, 38, 255, 59, 59, 59, 255, 59, 59, 59, 255, 182, 182, 182, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 105, 105, 105, 252, 7, 7, 12, 254, 0, 22, 195, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 25, 220, 255, 0, 6, 57, 255, 33, 33, 33, 254, 44, 44, 44, 254, 55, 55, 55, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 207, 207, 252, 31, 31, 31, 254, 0, 19, 165, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 26, 232, 255, 0, 10, 79, 255, 43, 43, 43, 254, 97, 97, 97, 253, 69, 69, 69, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 110, 62, 62, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 254, 17, 17, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 120, 118, 118, 252, 247, 6, 6, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 253, 1, 1, 255, 86, 51, 51, 255, 61, 61, 61, 255, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 155, 98, 98, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 253, 25, 25, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 243, 62, 62, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 248, 2, 2, 255, 78, 53, 53, 255, 59, 59, 59, 255, 187, 187, 187, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 84, 84, 84, 253, 0, 4, 33, 255, 0, 26, 232, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 20, 175, 255, 1, 3, 20, 255, 64, 64, 64, 253, 119, 119, 119, 252, 117, 117, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 174, 174, 174, 252, 4, 5, 19, 255, 0, 24, 214, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 22, 196, 255, 0, 4, 33, 255, 90, 90, 90, 253, 212, 212, 212, 252, 213, 213, 214, 252, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 103, 68, 68, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 128, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 132, 105, 105, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 156, 30, 30, 255, 73, 73, 73, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 153, 110, 110, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 216, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 246, 12, 12, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 157, 29, 29, 255, 64, 64, 64, 255, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 50, 50, 50, 253, 0, 9, 82, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 242, 255, 0, 13, 115, 255, 13, 13, 14, 254, 92, 92, 92, 253, 119, 119, 119, 252, 119, 119, 119, 252, 63, 79, 187, 253, 116, 117, 122, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 127, 127, 127, 253, 0, 6, 52, 254, 0, 27, 241, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 16, 142, 255, 11, 12, 16, 255, 149, 149, 149, 253, 215, 215, 215, 252, 215, 215, 215, 252, 127, 141, 232, 253, 194, 197, 219, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 88, 79, 79, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 147, 97, 97, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 145, 86, 86, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 198, 17, 17, 255, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 148, 132, 132, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 222, 181, 181, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 204, 204, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 213, 13, 13, 255, 106, 106, 106, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 24, 24, 24, 254, 0, 16, 145, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 25, 219, 255, 0, 6, 55, 255, 34, 34, 34, 254, 112, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 114, 127, 252, 13, 45, 250, 255, 83, 94, 162, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 67, 67, 67, 254, 0, 12, 111, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 26, 231, 255, 0, 9, 78, 255, 45, 45, 45, 254, 188, 188, 188, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 215, 252, 35, 63, 250, 254, 119, 134, 233, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 238, 29, 29, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 179, 73, 73, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 155, 74, 74, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 206, 28, 28, 254, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 145, 145, 253, 251, 34, 34, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 231, 133, 133, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 167, 167, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 232, 7, 7, 255, 182, 182, 182, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 5, 6, 13, 255, 0, 23, 201, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 20, 173, 255, 1, 3, 19, 255, 66, 66, 66, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 77, 89, 170, 253, 9, 42, 255, 255, 42, 65, 213, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 204, 252, 27, 27, 28, 254, 0, 20, 173, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 22, 195, 255, 0, 4, 32, 255, 93, 93, 93, 253, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 166, 174, 225, 252, 9, 42, 255, 255, 42, 70, 248, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 205, 55, 55, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 230, 35, 35, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 164, 68, 68, 253, 255, 0, 0, 255, 255, 0, 0, 255, 250, 2, 2, 255, 223, 19, 19, 254, 213, 32, 32, 254, 204, 44, 44, 254, 142, 98, 98, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 242, 83, 83, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 246, 59, 59, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 201, 145, 145, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 254, 1, 1, 255, 232, 92, 92, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 80, 80, 80, 253, 0, 4, 37, 255, 0, 27, 235, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 242, 255, 0, 13, 113, 255, 14, 14, 14, 254, 93, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 39, 63, 217, 254, 9, 42, 255, 255, 11, 43, 253, 255, 109, 112, 130, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 170, 170, 170, 253, 2, 4, 21, 255, 0, 25, 219, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 16, 139, 255, 12, 13, 17, 255, 151, 151, 151, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 95, 114, 238, 253, 9, 42, 255, 255, 9, 42, 255, 255, 172, 179, 224, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 163, 86, 86, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 170, 80, 80, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 175, 64, 64, 253, 255, 0, 0, 255, 214, 27, 27, 254, 128, 103, 103, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 229, 143, 143, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 228, 147, 147, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 134, 134, 253, 255, 0, 0, 255, 252, 1, 1, 255, 223, 84, 84, 253, 211, 156, 156, 253, 221, 185, 185, 252, 218, 201, 201, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 47, 47, 47, 254, 0, 10, 89, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 25, 217, 255, 0, 6, 54, 255, 35, 35, 35, 254, 112, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 15, 46, 247, 255, 9, 42, 255, 255, 9, 42, 255, 255, 87, 97, 158, 253, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 119, 119, 120, 253, 0, 6, 57, 255, 0, 28, 242, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 26, 230, 255, 0, 9, 76, 255, 47, 47, 47, 254, 189, 189, 189, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 50, 76, 247, 254, 9, 42, 255, 255, 9, 42, 255, 255, 126, 141, 232, 253, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 121, 118, 118, 252, 236, 30, 30, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 249, 21, 21, 255, 152, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 185, 59, 59, 253, 217, 24, 24, 254, 122, 114, 114, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 216, 211, 211, 252, 251, 38, 38, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 253, 29, 29, 255, 224, 171, 171, 253, 215, 215, 215, 252, 215, 215, 215, 252, 210, 124, 124, 253, 251, 1, 1, 255, 213, 131, 131, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 22, 22, 22, 254, 0, 17, 153, 255, 0, 28, 246, 255, 0, 19, 171, 255, 1, 3, 19, 255, 67, 67, 67, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 12, 44, 251, 255, 9, 42, 255, 255, 9, 42, 255, 255, 85, 95, 161, 253, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 62, 62, 62, 254, 0, 13, 118, 255, 0, 28, 246, 255, 0, 22, 193, 255, 0, 4, 31, 255, 95, 95, 95, 253, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 43, 70, 248, 254, 9, 42, 255, 255, 9, 42, 255, 255, 123, 137, 233, 253, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 167, 82, 82, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 251, 20, 20, 255, 175, 76, 76, 253, 120, 118, 118, 252, 119, 119, 119, 252, 180, 54, 54, 253, 130, 103, 103, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 231, 137, 137, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 254, 24, 24, 255, 230, 137, 137, 253, 215, 214, 214, 252, 217, 117, 117, 253, 215, 98, 98, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 4, 5, 14, 255, 0, 11, 96, 255, 15, 15, 15, 254, 94, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 57, 75, 195, 253, 11, 44, 252, 255, 31, 57, 227, 254, 113, 115, 126, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 200, 200, 200, 252, 22, 22, 24, 254, 0, 11, 100, 255, 13, 14, 18, 254, 154, 154, 154, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 126, 140, 232, 253, 16, 48, 253, 255, 36, 64, 250, 254, 189, 193, 220, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 204, 54, 54, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 229, 36, 36, 254, 144, 100, 100, 253, 128, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 241, 83, 83, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 247, 58, 58, 254, 217, 106, 106, 253, 214, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 116, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 87, 87, 87, 253, 49, 49, 49, 253, 113, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 121, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 169, 169, 169, 253, 86, 86, 86, 253, 190, 190, 190, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 213, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 185, 185, 185, 252, 1, 1, 1, 253, 0, 0, 0, 190, 72, 72, 72, 253, 119, 119, 119, 252, 119, 119, 119, 252, 125, 115, 115, 252, 216, 45, 45, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 240, 28, 28, 255, 130, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 7, 7, 7, 253, 1, 1, 1, 210, 127, 127, 127, 253, 215, 215, 215, 252, 215, 215, 215, 252, 217, 205, 205, 252, 244, 67, 67, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 250, 41, 41, 254, 218, 202, 202, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 214, 252, 15, 15, 15, 254, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 1, 1, 247, 102, 102, 102, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 86, 86, 86, 253, 0, 0, 0, 222, 1, 1, 1, 246, 179, 179, 179, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 159, 159, 159, 253, 1, 1, 1, 226, 0, 0, 0, 141, 45, 45, 45, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 117, 117, 252, 201, 57, 57, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 152, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 97, 97, 97, 252, 0, 0, 0, 246, 0, 0, 0, 140, 78, 78, 78, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 210, 210, 252, 240, 89, 89, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 223, 173, 173, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 180, 180, 180, 252, 1, 1, 1, 248, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 71, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 55, 55, 55, 253, 0, 0, 0, 170, 1, 1, 1, 198, 124, 124, 124, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 103, 103, 103, 253, 0, 0, 0, 176, 0, 0, 0, 47, 2, 2, 2, 248, 94, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 158, 89, 89, 253, 235, 32, 32, 254, 255, 17, 17, 255, 255, 17, 17, 255, 242, 26, 26, 255, 130, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 30, 30, 30, 253, 0, 0, 0, 153, 0, 0, 0, 44, 3, 3, 3, 247, 168, 168, 168, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 227, 152, 152, 253, 249, 43, 43, 254, 255, 17, 17, 255, 255, 17, 17, 255, 251, 38, 38, 255, 217, 203, 203, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 214, 252, 59, 59, 59, 254, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 9, 9, 9, 253, 105, 105, 105, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 95, 95, 95, 253, 3, 3, 3, 250, 0, 0, 0, 55, 0, 0, 0, 80, 14, 14, 14, 254, 187, 187, 187, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 174, 174, 174, 253, 7, 7, 7, 251, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 119, 7, 7, 7, 253, 72, 72, 72, 253, 111, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 122, 117, 117, 252, 163, 85, 85, 253, 181, 72, 72, 253, 132, 109, 109, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 95, 95, 95, 252, 30, 30, 30, 253, 0, 0, 0, 216, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 115, 13, 13, 13, 254, 128, 128, 128, 253, 200, 200, 200, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 209, 209, 252, 228, 149, 149, 253, 233, 124, 124, 253, 218, 199, 199, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 213, 213, 213, 252, 173, 173, 173, 252, 57, 57, 57, 254, 1, 1, 1, 219, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 8, 8, 8, 253, 67, 67, 67, 253, 97, 97, 97, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 94, 94, 94, 252, 60, 60, 60, 253, 4, 4, 4, 251, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 14, 14, 14, 254, 120, 120, 120, 253, 174, 174, 174, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 170, 170, 170, 252, 111, 111, 111, 253, 9, 9, 9, 252, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 222, 1, 1, 1, 253, 11, 11, 11, 253, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 5, 5, 5, 253, 0, 0, 0, 245, 0, 0, 0, 153, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 1, 1, 1, 220, 1, 1, 1, 253, 21, 21, 21, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 10, 10, 10, 254, 1, 1, 1, 245, 0, 0, 0, 156, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 195, 0, 0, 0, 244, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 240, 0, 0, 0, 186, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 1, 1, 1, 195, 1, 1, 1, 243, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 241, 0, 0, 0, 188, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0 ),
+"format": "RGBA8",
+"height": 256,
+"mipmaps": false,
+"width": 256
+}
+
+[sub_resource type="ImageTexture" id=3]
+image = SubResource( 2 )
+size = Vector2( 256, 256 )
+
+[sub_resource type="GDScript" id=1]
+script/source = "tool
+extends ProxyTexture
+
+func _init():
+ if Directory.new().file_exists(\"res://addons/mat_maker_gd/icons/icons.svg\"):
+ var t : ImageTexture = ImageTexture.new()
+ t.load(\"res://addons/mat_maker_gd/icons/icons.svg\")
+ base = t
+"
+
+[resource]
+flags = 7
+base = SubResource( 3 )
+script = SubResource( 1 )
diff --git a/game/addons/mat_maker_gd/icons/link.tres b/game/addons/mat_maker_gd/icons/link.tres
new file mode 100644
index 0000000..0e95109
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/link.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 16, 0, 16, 15 )
diff --git a/game/addons/mat_maker_gd/icons/minimize.tres b/game/addons/mat_maker_gd/icons/minimize.tres
new file mode 100644
index 0000000..7d367b4
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/minimize.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 48, 96, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/output_preview.tres b/game/addons/mat_maker_gd/icons/output_preview.tres
new file mode 100644
index 0000000..c84be54
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/output_preview.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 0, 80, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/port_group_0.tres b/game/addons/mat_maker_gd/icons/port_group_0.tres
new file mode 100644
index 0000000..ae29b24
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/port_group_0.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 32, 64, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/port_group_1.tres b/game/addons/mat_maker_gd/icons/port_group_1.tres
new file mode 100644
index 0000000..56412cc
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/port_group_1.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 32, 80, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/port_group_2.tres b/game/addons/mat_maker_gd/icons/port_group_2.tres
new file mode 100644
index 0000000..dd08018
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/port_group_2.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 4
+atlas = ExtResource( 1 )
+region = Rect2( 32, 96, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/port_group_3.tres b/game/addons/mat_maker_gd/icons/port_group_3.tres
new file mode 100644
index 0000000..2943001
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/port_group_3.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 32, 112, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/randomness_locked.tres b/game/addons/mat_maker_gd/icons/randomness_locked.tres
new file mode 100644
index 0000000..48fcc12
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/randomness_locked.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 4
+atlas = ExtResource( 1 )
+region = Rect2( 80, 32, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/randomness_unlocked.tres b/game/addons/mat_maker_gd/icons/randomness_unlocked.tres
new file mode 100644
index 0000000..9ec871f
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/randomness_unlocked.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 64, 32, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/remove.tres b/game/addons/mat_maker_gd/icons/remove.tres
new file mode 100644
index 0000000..b1f1c2f
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/remove.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 7
+atlas = ExtResource( 1 )
+region = Rect2( 32, 0, 16, 16 )
diff --git a/game/addons/mat_maker_gd/icons/up.tres b/game/addons/mat_maker_gd/icons/up.tres
new file mode 100644
index 0000000..ab48648
--- /dev/null
+++ b/game/addons/mat_maker_gd/icons/up.tres
@@ -0,0 +1,8 @@
+[gd_resource type="AtlasTexture" load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1]
+
+[resource]
+flags = 4
+atlas = ExtResource( 1 )
+region = Rect2( 16, 48, 16, 16 )
diff --git a/game/addons/mat_maker_gd/new_resource.tres b/game/addons/mat_maker_gd/new_resource.tres
new file mode 100644
index 0000000..9e96b42
--- /dev/null
+++ b/game/addons/mat_maker_gd/new_resource.tres
@@ -0,0 +1,652 @@
+[gd_resource type="Resource" load_steps=89 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/adjust_hsv.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/invert.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/combine.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/scale.gd" type="Script" id=7]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/repeat.gd" type="Script" id=8]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/shear.gd" type="Script" id=9]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/mirror.gd" type="Script" id=10]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/transform.gd" type="Script" id=11]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/circle_map.gd" type="Script" id=12]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/rotate.gd" type="Script" id=13]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/tonality.gd" type="Script" id=14]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_to_position.gd" type="Script" id=15]
+[ext_resource path="res://addons/mat_maker_gd/nodes/simple/shape.gd" type="Script" id=16]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_to_uv.gd" type="Script" id=17]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd" type="Script" id=18]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/math.gd" type="Script" id=19]
+[ext_resource path="res://addons/mat_maker_gd/nodes/transform/color_tiler.gd" type="Script" id=20]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 2 )
+graph_position = Vector2( 140, 0 )
+image = SubResource( 1 )
+input = SubResource( 3 )
+hue = 0.0
+saturation = 1.0
+value = 1.0
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 3 )
+graph_position = Vector2( -160, 40 )
+out_nodes = SubResource( 7 )
+out_borders = SubResource( 5 )
+out_random_color = SubResource( 2 )
+out_fill = SubResource( 6 )
+scale = Vector2( 13.6, 18.9 )
+stretch = Vector2( 2.13, 2.13 )
+intensity = 1.07
+randomness = 0.89
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 4 )
+graph_position = Vector2( 380, 80 )
+image = SubResource( 9 )
+input = SubResource( 10 )
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 7 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 2 )
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 5 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 6 )
+graph_position = Vector2( 380, 380 )
+image = SubResource( 12 )
+input_r = SubResource( 16 )
+input_g = SubResource( 15 )
+input_b = SubResource( 14 )
+input_a = SubResource( 13 )
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 12 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 7 )
+graph_position = Vector2( 1080, 180 )
+image = SubResource( 18 )
+input = SubResource( 19 )
+center = Vector2( 1, 1 )
+scale = Vector2( 1.3, 1.3 )
+
+[sub_resource type="Resource" id=21]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 12 )
+
+[sub_resource type="Resource" id=22]
+script = ExtResource( 8 )
+graph_position = Vector2( 560, 300 )
+input = SubResource( 21 )
+
+[sub_resource type="Resource" id=23]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=24]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 21 )
+
+[sub_resource type="Resource" id=25]
+script = ExtResource( 9 )
+graph_position = Vector2( 860, 200 )
+image = SubResource( 23 )
+input = SubResource( 24 )
+direction = 0
+amount = 1.06
+center = 0.0
+
+[sub_resource type="Resource" id=26]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=27]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 21 )
+
+[sub_resource type="Resource" id=28]
+script = ExtResource( 10 )
+graph_position = Vector2( 620, 460 )
+image = SubResource( 26 )
+input = SubResource( 27 )
+direction = 0
+offset = 0.32
+
+[sub_resource type="Resource" id=32]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=33]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 21 )
+
+[sub_resource type="Resource" id=34]
+script = ExtResource( 12 )
+graph_position = Vector2( 820, 580 )
+image = SubResource( 32 )
+input = SubResource( 33 )
+radius = 1.0
+repeat = 4
+
+[sub_resource type="Resource" id=35]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=36]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=37]
+script = ExtResource( 13 )
+graph_position = Vector2( 1040, 560 )
+image = SubResource( 35 )
+input = SubResource( 36 )
+center = Vector2( 0.13, 0 )
+rotate = 150.0
+
+[sub_resource type="Resource" id=38]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=39]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 21 )
+
+[sub_resource type="Resource" id=40]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 14.5
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 32 )
+
+[sub_resource type="Resource" id=41]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 1.6
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=42]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 1.1
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=43]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 4.1
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=44]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 2.2
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=45]
+script = ExtResource( 11 )
+graph_position = Vector2( 1280, 560 )
+image = SubResource( 38 )
+input = SubResource( 39 )
+translate_x = SubResource( 43 )
+translate_y = SubResource( 44 )
+rotate = SubResource( 40 )
+scale_x = SubResource( 41 )
+scale_y = SubResource( 42 )
+mode = 1
+
+[sub_resource type="Resource" id=46]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=47]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 23 )
+
+[sub_resource type="Resource" id=48]
+script = ExtResource( 14 )
+graph_position = Vector2( 620, 0 )
+points = [ 0.0, 0.0, 0.0, 1.0, 0.284455, 0.780757, 0.0, 0.0, 0.735577, 0.159306, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0 ]
+image = SubResource( 46 )
+input = SubResource( 47 )
+
+[sub_resource type="Resource" id=49]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=50]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=51]
+script = ExtResource( 15 )
+graph_position = Vector2( 120, 440 )
+image = SubResource( 49 )
+input = SubResource( 50 )
+axis = 2
+
+[sub_resource type="Resource" id=52]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.1
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=53]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=54]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 1.3
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 2 )
+
+[sub_resource type="Resource" id=55]
+script = ExtResource( 16 )
+graph_position = Vector2( -440, 200 )
+image = SubResource( 53 )
+shape_type = 3
+sides = 7
+radius = SubResource( 54 )
+edge = SubResource( 52 )
+
+[sub_resource type="Resource" id=56]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=59]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=57]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 59 )
+
+[sub_resource type="Resource" id=58]
+script = ExtResource( 17 )
+graph_position = Vector2( 580, 800 )
+image = SubResource( 56 )
+input = SubResource( 57 )
+mode = 0
+
+[sub_resource type="Resource" id=60]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 12 )
+
+[sub_resource type="Resource" id=61]
+script = ExtResource( 18 )
+graph_position = Vector2( 320, 700 )
+image = SubResource( 59 )
+input = SubResource( 60 )
+edge_color = 0.9
+
+[sub_resource type="Resource" id=63]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 5 )
+
+[sub_resource type="Resource" id=64]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 53 )
+
+[sub_resource type="Resource" id=65]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=62]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=66]
+script = ExtResource( 19 )
+graph_position = Vector2( -720, 280 )
+image = SubResource( 65 )
+a = SubResource( 63 )
+b = SubResource( 64 )
+output = SubResource( 62 )
+operation = 3
+clamp_result = true
+
+[sub_resource type="Resource" id=67]
+script = ExtResource( 5 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=68]
+script = ExtResource( 5 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=69]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=70]
+script = ExtResource( 5 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=71]
+script = ExtResource( 20 )
+graph_position = Vector2( -1060, 280 )
+input = SubResource( 68 )
+in_mask = SubResource( 67 )
+output = SubResource( 70 )
+instance_map = SubResource( 69 )
+tile = Vector2( 4, 4 )
+overlap = 1.0
+select_inputs = 0
+scale = Vector2( 0.5, 0.5 )
+fixed_offset = 0.0
+rnd_offset = 0.28
+rnd_rotate = 100.0
+rnd_scale = 0.2
+rnd_opacity = 0.0
+variations = false
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 128, 128 )
+nodes = [ SubResource( 4 ), SubResource( 8 ), SubResource( 11 ), SubResource( 17 ), SubResource( 20 ), SubResource( 22 ), SubResource( 25 ), SubResource( 28 ), SubResource( 34 ), SubResource( 37 ), SubResource( 45 ), SubResource( 48 ), SubResource( 51 ), SubResource( 55 ), SubResource( 58 ), SubResource( 61 ), SubResource( 66 ), SubResource( 71 ) ]
diff --git a/game/addons/mat_maker_gd/nodes/bases/curve_base.gd b/game/addons/mat_maker_gd/nodes/bases/curve_base.gd
new file mode 100644
index 0000000..76daea5
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/bases/curve_base.gd
@@ -0,0 +1,118 @@
+tool
+extends MMNode
+
+class Point:
+ var p : Vector2
+ var ls : float
+ var rs : float
+ func _init(x : float, y : float, nls : float, nrs : float) -> void:
+ p = Vector2(x, y)
+ ls = nls
+ rs = nrs
+
+export(PoolRealArray) var points
+
+func init_points_01():
+ if points.size() == 0:
+ points = [ 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 ]
+
+func init_points_11():
+ if points.size() == 0:
+ points = [ 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0 ]
+
+func to_string() -> String:
+ var rv = PoolStringArray()
+ for p in points:
+ rv.append("("+str(p.x)+","+str(p.y)+","+str(p.ls)+","+str(p.rs)+")")
+
+ return rv.join(",")
+
+func clear() -> void:
+ points.clear()
+ curve_changed()
+
+func add_point(x : float, y : float, ls : float = INF, rs : float = INF) -> void:
+ var indx : int = points.size() / 4
+
+ for i in indx:
+ var ii : int = i * 4
+ if x < points[ii]:
+ if ls == INF:
+ ls == 0
+ if rs == INF:
+ rs == 0
+
+ points.insert(ii, x)
+ points.insert(ii + 1, y)
+ points.insert(ii + 2, ls)
+ points.insert(ii + 3, rs)
+
+ curve_changed()
+ return
+
+ points.append(x)
+ points.append(y)
+ points.append(ls)
+ points.append(rs)
+
+ curve_changed()
+
+func remove_point(i : int) -> bool:
+ var index : int = i * 4
+
+ if index <= 0 or index >= points.size() - 1:
+ return false
+ else:
+ points.remove(index)
+ points.remove(index)
+ points.remove(index)
+ points.remove(index)
+
+ curve_changed()
+ return true
+
+func get_point_count() -> int:
+ return points.size() / 4
+
+func set_point(i : int, v : Point) -> void:
+ var indx : int = i * 4
+
+ points[indx + 0] = v.p.x
+ points[indx + 1] = v.p.y
+ points[indx + 2] = v.ls
+ points[indx + 3] = v.rs
+
+ curve_changed()
+
+func get_point(i : int) -> Point:
+ var indx : int = i * 4
+
+ return Point.new(points[indx + 0], points[indx + 1], points[indx + 2], points[indx + 3])
+
+func get_points() -> Array:
+ var arr : Array = Array()
+
+ var c : int = get_point_count()
+
+ for i in range(c):
+ arr.append(get_point(i))
+
+ return arr
+
+func set_points(arr : Array, notify : bool = true) -> void:
+ points.resize(0)
+
+ for p in arr:
+ points.append(p.p.x)
+ points.append(p.p.y)
+ points.append(p.ls)
+ points.append(p.rs)
+
+ if notify:
+ curve_changed()
+
+func curve_changed() -> void:
+ _curve_changed()
+
+func _curve_changed() -> void:
+ emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/bases/gradient_base.gd b/game/addons/mat_maker_gd/nodes/bases/gradient_base.gd
new file mode 100644
index 0000000..369614f
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/bases/gradient_base.gd
@@ -0,0 +1,64 @@
+tool
+extends MMNode
+
+#var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd")
+
+export(int) var interpolation_type : int = 1 setget set_interpolation_type, get_interpolation_type
+export(PoolRealArray) var points : PoolRealArray = PoolRealArray()
+
+func get_gradient_color(x : float) -> Color:
+# if interpolation_type == 0:
+# return Gradients.gradient_type_1(x, points)
+# elif interpolation_type == 1:
+# return Gradients.gradient_type_2(x, points)
+# elif interpolation_type == 2:
+# return Gradients.gradient_type_3(x, points)
+# elif interpolation_type == 3:
+# return Gradients.gradient_type_4(x, points)
+
+ return Color(1, 1, 1, 1)
+
+func get_interpolation_type() -> int:
+ return interpolation_type
+
+func set_interpolation_type(val : int) -> void:
+ interpolation_type = val
+
+ set_dirty(true)
+
+func get_points() -> PoolRealArray:
+ return points
+
+func set_points(val : PoolRealArray) -> void:
+ points = val
+
+ set_dirty(true)
+
+func get_point_value(index : int) -> float:
+ return points[index * 5]
+
+func get_point_color(index : int) -> Color:
+ var indx : int = index * 5
+
+ return Color(points[indx + 1], points[indx + 2], points[indx + 3], points[indx + 4])
+
+func add_point(val : float, color : Color) -> void:
+ var s : int = points.size()
+ points.resize(s + 5)
+
+ points[s] = val
+
+ points[s + 1] = color.r
+ points[s + 2] = color.g
+ points[s + 3] = color.b
+ points[s + 4] = color.a
+
+ set_dirty(true)
+
+func get_point_count() -> int:
+ return points.size() / 5
+
+func clear() -> void:
+ points.resize(0)
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/bases/polygon_base.gd b/game/addons/mat_maker_gd/nodes/bases/polygon_base.gd
new file mode 100644
index 0000000..a740455
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/bases/polygon_base.gd
@@ -0,0 +1,73 @@
+tool
+extends MMNode
+
+export(PoolVector2Array) var points : PoolVector2Array = [Vector2(0.2, 0.2), Vector2(0.7, 0.4), Vector2(0.4, 0.7)]
+
+func clear() -> void:
+ points.resize(0)
+
+ _polygon_changed()
+
+func add_point(x : float, y : float, closed : bool = true) -> void:
+ var p : Vector2 = Vector2(x, y)
+ var points_count = points.size()
+
+ if points_count < 3:
+ points.append(p)
+ _polygon_changed()
+ return
+
+ var min_length : float = (p-Geometry.get_closest_point_to_segment_2d(p, points[0], points[points_count-1])).length()
+ var insert_point = 0
+
+ for i in points_count-1:
+ var length = (p - Geometry.get_closest_point_to_segment_2d(p, points[i], points[i+1])).length()
+ if length < min_length:
+ min_length = length
+ insert_point = i+1
+
+ if !closed and insert_point == 0 and (points[0]-p).length() > (points[points_count-1]-p).length():
+ insert_point = points_count
+
+ points.insert(insert_point, p)
+
+ _polygon_changed()
+
+func remove_point(index : int) -> bool:
+ var s = points.size()
+ if s < 4 or index < 0 or index >= s:
+ return false
+ else:
+ points.remove(index)
+ _polygon_changed()
+
+ return true
+
+func get_point_count() -> int:
+ return points.size()
+
+func get_point(i : int) -> Vector2:
+ return points[i]
+
+func set_point(i : int, v : Vector2) -> void:
+ points[i] = v
+
+ _polygon_changed()
+
+func set_points(v : PoolVector2Array) -> void:
+ points = v
+
+ _polygon_changed()
+
+func polygon_changed() -> void:
+ _polygon_changed()
+
+func _polygon_changed() -> void:
+ emit_changed()
+
+func to_string() -> String:
+ var rv = PoolStringArray()
+ for p in points:
+ rv.append("("+str(p.x)+","+str(p.y)+")")
+
+ return rv.join(",")
diff --git a/game/addons/mat_maker_gd/nodes/common/blur.gd b/game/addons/mat_maker_gd/nodes/common/blur.gd
new file mode 100644
index 0000000..2aa637e
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/blur.gd
@@ -0,0 +1,1172 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#directional_blur.mmg
+
+#{
+# "connections": [
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "edge_detect_3_3_2",
+# "to_port": 0
+# },
+# {
+# "from": "edge_detect_3_3_2",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "edge_detect_3_3_2",
+# "to_port": 1
+# }
+# ],
+# "label": "Directional Blur",
+# "longdesc": "Applies a directional gaussian blur to its input",
+# "name": "directional_blur",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": -381.25,
+# "y": -270.75
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -436.666626,
+# "y": -413.666656
+# },
+# "parameters": {
+# "param0": 9,
+# "param1": 50,
+# "param2": 45
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Grid size:",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "edge_detect_3_3_2",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the input",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "Sigma",
+# "linked_widgets": [
+# {
+# "node": "edge_detect_3_3_2",
+# "widget": "sigma"
+# }
+# ],
+# "longdesc": "The strength of the blur filter",
+# "name": "param1",
+# "shortdesc": "Sigma",
+# "type": "linked_control"
+# },
+# {
+# "label": "Angle",
+# "linked_widgets": [
+# {
+# "node": "edge_detect_3_3_2",
+# "widget": "angle"
+# }
+# ],
+# "longdesc": "The angle of the directional blur effect",
+# "name": "param2",
+# "shortdesc": "Angle",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -779.666626,
+# "y": -247.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "A map that controls the strength of the blur filter",
+# "name": "amount",
+# "shortdesc": "Strength map",
+# "type": "f"
+# }
+# ],
+# "seed_value": 91624,
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": -45.452393,
+# "y": -195.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the generated blurred image",
+# "name": "port0",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "edge_detect_3_3_2",
+# "node_position": {
+# "x": -376.725464,
+# "y": -184.178955
+# },
+# "parameters": {
+# "angle": 45,
+# "sigma": 50,
+# "size": 9
+# },
+# "seed_value": -47470,
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "Label",
+# "name": "amount",
+# "type": "f"
+# }
+# ],
+# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(cos($angle*0.01745329251), -sin($angle*0.01745329251))/$size;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = $sigma*$amount(uv);\n\tfor (float i = -50.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+i*e)*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}",
+# "name": "Directional Blur",
+# "outputs": [
+# {
+# "rgba": "$(name)_fct($uv)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Sigma",
+# "max": 50,
+# "min": 0,
+# "name": "sigma",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Angle",
+# "max": 180,
+# "min": -180,
+# "name": "angle",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# }
+# ],
+# "parameters": {
+# "param0": 9,
+# "param1": 50,
+# "param2": 45
+# },
+# "shortdesc": "Directional blur",
+# "type": "graph"
+#}
+
+#----------------------
+#fast_blur.mmg
+
+#{
+# "connections": [
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "fast_blur_shader",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "fast_blur_shader",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# }
+# ],
+# "label": "Fast Blur",
+# "longdesc": "",
+# "name": "fast_blur",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "fast_blur_shader",
+# "node_position": {
+# "x": -168,
+# "y": 120
+# },
+# "parameters": {
+# "quality": 1,
+# "sigma": 100
+# },
+# "type": "fast_blur_shader"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -187,
+# "y": 61.5
+# },
+# "parameters": {
+# "size": 11
+# },
+# "type": "buffer",
+# "version": 1
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -602,
+# "y": 91.75
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input image",
+# "name": "input",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 88,
+# "y": 61.75
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The generated blurred image",
+# "name": "output",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -254.5,
+# "y": -122.5
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 100,
+# "param2": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Resolution",
+# "linked_widgets": [
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution used to sample the input image",
+# "name": "param0",
+# "shortdesc": "Resolution",
+# "type": "linked_control"
+# },
+# {
+# "label": "Sigma",
+# "linked_widgets": [
+# {
+# "node": "fast_blur_shader",
+# "widget": "sigma"
+# }
+# ],
+# "longdesc": "The standard deviation of the gaussian distribution",
+# "name": "param1",
+# "shortdesc": "Sigma",
+# "type": "linked_control"
+# },
+# {
+# "label": "Quality",
+# "linked_widgets": [
+# {
+# "node": "fast_blur_shader",
+# "widget": "quality"
+# }
+# ],
+# "longdesc": "The quality of the effect (increasing quality increases compute time)",
+# "name": "param2",
+# "shortdesc": "Quality",
+# "type": "linked_control"
+# }
+# ]
+# }
+# ],
+# "parameters": {
+# "param0": 11,
+# "param1": 100,
+# "param2": 1
+# },
+# "shortdesc": "",
+# "type": "graph"
+#}
+
+#----------------------
+#fast_blur_shader.mmg
+
+#{
+# "name": "fast_blur_shader",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "quality": 1,
+# "sigma": 100
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# }
+# ],
+# "instance": "vec4 $(name)_blur(vec2 uv, vec2 scale, float sigma, int quality) {\n vec4 O = vec4(0.0);\n\tfloat samples = sigma * 4.0; \n\tint LOD = max(0, int(log2(float(samples)))-quality-2);\n\tint sLOD = 1 << LOD;\n int s = max(1, int(samples/float(sLOD)));\n\tfloat sum = 0.0;\n for (int i = 0; i < s*s; i++) {\n vec2 d = vec2(float(i%s), float(i/s))*float(sLOD) - 0.5*float(samples);\n\t\tvec2 dd = d / sigma;\n\t\tfloat g = exp(-.5*dot(dd,dd))/(6.28*sigma*sigma);\n O += g * textureLod($in.texture, uv + scale * d, float(LOD));\n\t\tsum += g;\n }\n \n return O / sum;\n}\n",
+# "name": "Fast Blur",
+# "outputs": [
+# {
+# "rgba": "$(name)_blur($uv, vec2(1.0)/$in.size, max(1.0, floor($sigma*$in.size/2048.0)), int($quality))",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 1,
+# "label": "",
+# "max": 256,
+# "min": 1,
+# "name": "sigma",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "",
+# "max": 3,
+# "min": 0,
+# "name": "quality",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+#}
+
+#----------------------
+#gaussian_blur.mmg
+
+#{
+# "connections": [
+# {
+# "from": "switch",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "switch",
+# "from_port": 0,
+# "to": "switch_2",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "switch",
+# "to_port": 1
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "gaussian_blur_x",
+# "to_port": 0
+# },
+# {
+# "from": "gaussian_blur_x",
+# "from_port": 0,
+# "to": "switch",
+# "to_port": 0
+# },
+# {
+# "from": "gaussian_blur_y",
+# "from_port": 0,
+# "to": "switch_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "gaussian_blur_y",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "gaussian_blur_x",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "gaussian_blur_y",
+# "to_port": 1
+# },
+# {
+# "from": "buffer_3",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "switch_2",
+# "from_port": 0,
+# "to": "buffer_3",
+# "to_port": 0
+# }
+# ],
+# "label": "Gaussian Blur",
+# "longdesc": "Applys a gaussian blur on its input",
+# "name": "gaussian_blur",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -399.875,
+# "y": -43.625
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "switch",
+# "node_position": {
+# "x": -496.452393,
+# "y": -130.166656
+# },
+# "parameters": {
+# "choices": 2,
+# "outputs": 1,
+# "source": 0
+# },
+# "type": "switch"
+# },
+# {
+# "name": "switch_2",
+# "node_position": {
+# "x": -240.452393,
+# "y": -133.666656
+# },
+# "parameters": {
+# "choices": 2,
+# "outputs": 1,
+# "source": 0
+# },
+# "type": "switch"
+# },
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": -402.25,
+# "y": -315.75
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -439.666626,
+# "y": -456.666656
+# },
+# "parameters": {
+# "param0": 9,
+# "param1": 50,
+# "param2": 0
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Grid size:",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# },
+# {
+# "node": "gaussian_blur_x",
+# "widget": "size"
+# },
+# {
+# "node": "gaussian_blur_y",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_3",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the input image",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "Sigma:",
+# "linked_widgets": [
+# {
+# "node": "gaussian_blur_x",
+# "widget": "sigma"
+# },
+# {
+# "node": "gaussian_blur_y",
+# "widget": "sigma"
+# }
+# ],
+# "longdesc": "The strength of the blur filter",
+# "name": "param1",
+# "shortdesc": "Sigma",
+# "type": "linked_control"
+# },
+# {
+# "configurations": {
+# "Both": [
+# {
+# "node": "switch",
+# "value": 0,
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "value": 0,
+# "widget": "source"
+# }
+# ],
+# "X": [
+# {
+# "node": "switch",
+# "value": 0,
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "value": 1,
+# "widget": "source"
+# }
+# ],
+# "Y": [
+# {
+# "node": "switch",
+# "value": 1,
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "value": 0,
+# "widget": "source"
+# }
+# ]
+# },
+# "label": "Direction:",
+# "linked_widgets": [
+# {
+# "node": "switch",
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "widget": "source"
+# }
+# ],
+# "longdesc": "Apply the blur filter horizontally, vertically of in both directions",
+# "name": "param2",
+# "shortdesc": "Direction",
+# "type": "config_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -928.666626,
+# "y": -188.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input image",
+# "name": "input",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "A map that controls the strength of the blur filter",
+# "name": "amount",
+# "shortdesc": "Strength map",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 193.547607,
+# "y": -135.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the generated blurred image",
+# "name": "port0",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "seed_value": 77778,
+# "type": "ios"
+# },
+# {
+# "name": "gaussian_blur_x",
+# "node_position": {
+# "x": -412.993408,
+# "y": -221.281738
+# },
+# "parameters": {
+# "sigma": 50,
+# "size": 9
+# },
+# "type": "gaussian_blur_x"
+# },
+# {
+# "name": "gaussian_blur_y",
+# "node_position": {
+# "x": -405.993408,
+# "y": 38.718262
+# },
+# "parameters": {
+# "sigma": 50,
+# "size": 9
+# },
+# "seed_value": 12279,
+# "type": "gaussian_blur_y"
+# },
+# {
+# "name": "buffer_3",
+# "node_position": {
+# "x": -50.246796,
+# "y": -133.96936
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# }
+# ],
+# "parameters": {
+# "param0": 9,
+# "param1": 50,
+# "param2": 0
+# },
+# "shortdesc": "Gaussian blur",
+# "type": "graph"
+#}
+
+#----------------------
+#gaussian_blur_x.mmg
+
+#{
+# "name": "gaussian_blur_x",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "sigma": 35.700001,
+# "size": 9
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "name": "amount",
+# "type": "f"
+# }
+# ],
+# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tfloat e = 1.0/$size;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = max(0.000001, $sigma*$amount(uv));\n\tfor (float i = -50.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+vec2(i*e, 0.0))*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}",
+# "name": "Gaussian blur X",
+# "outputs": [
+# {
+# "rgba": "$(name)_fct($uv)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Sigma",
+# "max": 50,
+# "min": 0,
+# "name": "sigma",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+#}
+
+#----------------------
+#gaussian_blur_y.mmg
+
+#{
+# "name": "gaussian_blur_y",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "sigma": 35.700001,
+# "size": 9
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "name": "amount",
+# "type": "f"
+# }
+# ],
+# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tfloat e = 1.0/$size;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = max(0.000001, $sigma*$amount(uv));\n\tfor (float i = -50.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+vec2(0.0, i*e))*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}",
+# "name": "Gaussian blur Y",
+# "outputs": [
+# {
+# "rgba": "$(name)_fct($uv)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Sigma",
+# "max": 50,
+# "min": 0,
+# "name": "sigma",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+#}
+
+
+#----------------------
+#slope_blur.mmg
+
+#{
+# "connections": [
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "edge_detect_3_3_2",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "edge_detect_3_3_2",
+# "to_port": 1
+# },
+# {
+# "from": "edge_detect_3_3_2",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# }
+# ],
+# "label": "Slope Blur",
+# "longdesc": "Applys a blur effect on its input, following slopes of an input height map",
+# "name": "slope_blur",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": -395.25,
+# "y": -274.75
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 10
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -462.666626,
+# "y": -397.666656
+# },
+# "parameters": {
+# "param0": 10,
+# "param1": 30
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Grid size:",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "edge_detect_3_3_2",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the input image",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "Sigma",
+# "linked_widgets": [
+# {
+# "node": "edge_detect_3_3_2",
+# "widget": "sigma"
+# }
+# ],
+# "longdesc": "The strength of the blur filter",
+# "name": "param1",
+# "shortdesc": "Sigma",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -872.666626,
+# "y": -243.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "A height map whose slopes control the strength and direction of the blur filter",
+# "name": "heightmap",
+# "shortdesc": "Height map",
+# "type": "f"
+# }
+# ],
+# "seed_value": 91624,
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": -45.452393,
+# "y": -195.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the generated blurred image",
+# "name": "port0",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "edge_detect_3_3_2",
+# "node_position": {
+# "x": -401.725464,
+# "y": -199.178955
+# },
+# "parameters": {
+# "sigma": 30,
+# "size": 10
+# },
+# "seed_value": -47470,
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "name": "heightmap",
+# "type": "f"
+# }
+# ],
+# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tfloat dx = 1.0/$size;\n float v = $heightmap(uv);\n\tvec2 slope = vec2($heightmap(uv+vec2(dx, 0.0))-v, $heightmap(uv+vec2(0.0, dx))-v);\n\tfloat slope_strength = length(slope)*$size;\n vec2 norm_slope = (slope_strength == 0.0) ? vec2(0.0, 1.0) : normalize(slope);\n vec2 e = dx*norm_slope;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = max($sigma*slope_strength, 0.0001);\n\tfor (float i = 0.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+i*e)*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}",
+# "name": "Slope Blur",
+# "outputs": [
+# {
+# "rgba": "$(name)_fct($uv)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Sigma",
+# "max": 50,
+# "min": 0,
+# "name": "sigma",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -392.952209,
+# "y": -115.576294
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 10
+# },
+# "type": "buffer"
+# }
+# ],
+# "parameters": {
+# "param0": 10,
+# "param1": 30
+# },
+# "shortdesc": "Slope blur",
+# "type": "graph"
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/commons.gd b/game/addons/mat_maker_gd/nodes/common/commons.gd
new file mode 100644
index 0000000..d6f6cf1
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/commons.gd
@@ -0,0 +1,393 @@
+tool
+extends Reference
+
+#pattern.mmg
+
+#----------------------
+#hlsl_defs.tmpl
+
+##define hlsl_atan(x,y) atan2(x, y)
+##define mod(x,y) ((x)-(y)*floor((x)/(y)))
+#inline float4 textureLod(sampler2D tex, float2 uv, float lod) {
+# return tex2D(tex, uv);
+#}
+#inline float2 tofloat2(float x) {
+# return float2(x, x);
+#}
+#inline float2 tofloat2(float x, float y) {
+# return float2(x, y);
+#}
+#inline float3 tofloat3(float x) {
+# return float3(x, x, x);
+#}
+#inline float3 tofloat3(float x, float y, float z) {
+# return float3(x, y, z);
+#}
+#inline float3 tofloat3(float2 xy, float z) {
+# return float3(xy.x, xy.y, z);
+#}
+#inline float3 tofloat3(float x, float2 yz) {
+# return float3(x, yz.x, yz.y);
+#}
+#inline float4 tofloat4(float x, float y, float z, float w) {
+# return float4(x, y, z, w);
+#}
+#inline float4 tofloat4(float x) {
+# return float4(x, x, x, x);
+#}
+#inline float4 tofloat4(float x, float3 yzw) {
+# return float4(x, yzw.x, yzw.y, yzw.z);
+#}
+#inline float4 tofloat4(float2 xy, float2 zw) {
+# return float4(xy.x, xy.y, zw.x, zw.y);
+#}
+#inline float4 tofloat4(float3 xyz, float w) {
+# return float4(xyz.x, xyz.y, xyz.z, w);
+#}
+#inline float2x2 tofloat2x2(float2 v1, float2 v2) {
+# return float2x2(v1.x, v1.y, v2.x, v2.y);
+#}
+
+#----------------------
+#glsl_defs.tmpl
+
+#float rand(vec2 x) {
+# return fract(cos(mod(dot(x, vec2(13.9898, 8.141)), 3.14)) * 43758.5453);
+#}
+
+#vec2 rand2(vec2 x) {
+# return fract(cos(mod(vec2(dot(x, vec2(13.9898, 8.141)),
+# dot(x, vec2(3.4562, 17.398))), vec2(3.14))) * 43758.5453);
+#}
+
+#vec3 rand3(vec2 x) {
+# return fract(cos(mod(vec3(dot(x, vec2(13.9898, 8.141)),
+# dot(x, vec2(3.4562, 17.398)),
+# dot(x, vec2(13.254, 5.867))), vec3(3.14))) * 43758.5453);
+#}
+
+#float param_rnd(float minimum, float maximum, float seed) {
+# return minimum+(maximum-minimum)*rand(vec2(seed));
+#}
+
+#vec3 rgb2hsv(vec3 c) {
+# vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
+# vec4 p = c.g < c.b ? vec4(c.bg, K.wz) : vec4(c.gb, K.xy);
+# vec4 q = c.r < p.x ? vec4(p.xyw, c.r) : vec4(c.r, p.yzx);
+#
+# float d = q.x - min(q.w, q.y);
+# float e = 1.0e-10;
+# return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
+#}
+
+#vec3 hsv2rgb(vec3 c) {
+# vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+# vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
+# return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
+#}
+
+#----------------------
+
+static func clampv3(v : Vector3, mi : Vector3, ma : Vector3) -> Vector3:
+ v.x = clamp(v.x, mi.x, ma.x)
+ v.y = clamp(v.y, mi.y, ma.y)
+ v.z = clamp(v.z, mi.z, ma.z)
+
+ return v
+
+static func floorc(a : Color) -> Color:
+ var v : Color = Color()
+
+ v.r = floor(a.r)
+ v.g = floor(a.g)
+ v.b = floor(a.b)
+ v.a = floor(a.a)
+
+ return v
+
+static func floorv2(a : Vector2) -> Vector2:
+ var v : Vector2 = Vector2()
+
+ v.x = floor(a.x)
+ v.y = floor(a.y)
+
+ return v
+
+static func floorv3(a : Vector3) -> Vector3:
+ var v : Vector3 = Vector3()
+
+ v.x = floor(a.x)
+ v.y = floor(a.y)
+ v.z = floor(a.z)
+
+ return v
+
+static func smoothstepv2(a : float, b : float, c : Vector2) -> Vector2:
+ var v : Vector2 = Vector2()
+
+ v.x = smoothstep(a, b, c.x)
+ v.y = smoothstep(a, b, c.y)
+
+ return v
+
+static func maxv2(a : Vector2, b : Vector2) -> Vector2:
+ var v : Vector2 = Vector2()
+
+ v.x = max(a.x, b.x)
+ v.y = max(a.y, b.y)
+
+ return v
+
+static func maxv3(a : Vector3, b : Vector3) -> Vector3:
+ var v : Vector3 = Vector3()
+
+ v.x = max(a.x, b.x)
+ v.y = max(a.y, b.y)
+ v.z = max(a.z, b.z)
+
+ return v
+
+static func absv2(v : Vector2) -> Vector2:
+ v.x = abs(v.x)
+ v.y = abs(v.y)
+
+ return v
+
+static func absv3(v : Vector3) -> Vector3:
+ v.x = abs(v.x)
+ v.y = abs(v.y)
+ v.z = abs(v.z)
+
+ return v
+
+static func cosv2(v : Vector2) -> Vector2:
+ v.x = cos(v.x)
+ v.y = cos(v.y)
+
+ return v
+
+static func cosv3(v : Vector3) -> Vector3:
+ v.x = cos(v.x)
+ v.y = cos(v.y)
+ v.z = cos(v.z)
+
+ return v
+
+static func powv2(x : Vector2, y : Vector2) -> Vector2:
+ x.x = pow(x.x, y.x)
+ x.y = pow(x.y, y.y)
+
+ return x
+
+static func modv3(a : Vector3, b : Vector3) -> Vector3:
+ var v : Vector3 = Vector3()
+
+ v.x = modf(a.x, b.x)
+ v.y = modf(a.y, b.y)
+ v.z = modf(a.z, b.z)
+
+ return v
+
+
+static func modv2(a : Vector2, b : Vector2) -> Vector2:
+ var v : Vector2 = Vector2()
+
+ v.x = modf(a.x, b.x)
+ v.y = modf(a.y, b.y)
+
+ return v
+
+static func modf(x : float, y : float) -> float:
+ return x - y * floor(x / y)
+
+static func fractv2(v : Vector2) -> Vector2:
+ v.x = v.x - floor(v.x)
+ v.y = v.y - floor(v.y)
+
+ return v
+
+static func fractv3(v : Vector3) -> Vector3:
+ v.x = v.x - floor(v.x)
+ v.y = v.y - floor(v.y)
+ v.z = v.z - floor(v.z)
+
+ return v
+
+static func fract(f : float) -> float:
+ return f - floor(f)
+
+static func clampv2(v : Vector2, pmin : Vector2, pmax : Vector2) -> Vector2:
+ v.x = clamp(v.x, pmin.x, pmax.x)
+ v.y = clamp(v.y, pmin.y, pmax.y)
+
+ return v
+
+static func minv2(v1 : Vector2, v2 : Vector2) -> Vector2:
+ v1.x = min(v1.x, v2.x)
+ v1.y = min(v1.y, v2.y)
+
+ return v1
+
+static func minv3(v1 : Vector3, v2 : Vector3) -> Vector3:
+ v1.x = min(v1.x, v2.x)
+ v1.y = min(v1.y, v2.y)
+ v1.z = min(v1.z, v2.z)
+
+ return v1
+
+static func rand(x : Vector2) -> float:
+ return fract(cos(x.dot(Vector2(13.9898, 8.141))) * 43758.5453);
+
+static func rand2(x : Vector2) -> Vector2:
+ return fractv2(cosv2(Vector2(x.dot(Vector2(13.9898, 8.141)),
+ x.dot(Vector2(3.4562, 17.398)))) * 43758.5453);
+
+static func rand3(x : Vector2) -> Vector3:
+ return fractv3(cosv3(Vector3(x.dot(Vector2(13.9898, 8.141)),
+ x.dot(Vector2(3.4562, 17.398)),
+ x.dot(Vector2(13.254, 5.867)))) * 43758.5453);
+
+static func step(edge : float, x : float) -> float:
+ if x < edge:
+ return 0.0
+ else:
+ return 1.0
+
+static func stepv2(edge : Vector2, x : Vector2) -> Vector2:
+ edge.x = step(edge.x, x.x)
+ edge.y = step(edge.y, x.y)
+
+ return edge
+
+static func signv2(x : Vector2) -> Vector2:
+ x.x = sign(x.x)
+ x.y = sign(x.y)
+
+ return x
+
+static func transform(uv : Vector2, translate : Vector2, rotate : float, scale : Vector2, repeat : bool) -> Vector2:
+ var rv : Vector2 = Vector2();
+ uv -= translate;
+ uv -= Vector2(0.5, 0.5);
+ rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;
+ rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;
+ rv /= scale;
+ rv += Vector2(0.5, 0.5);
+
+ if (repeat):
+ return fractv2(rv);
+ else:
+ return clampv2(rv, Vector2(0, 0), Vector2(1, 1));
+
+static func fractf(x : float) -> float:
+ return x - floor(x)
+
+#float mix_mul(float x, float y) {
+# return x*y;
+#}
+
+static func mix_mul(x : float, y : float) -> float:
+ return x*y;
+
+#float mix_add(float x, float y) {
+# return min(x+y, 1.0);
+#}
+
+static func mix_add(x : float, y : float) -> float:
+ return min(x+y, 1.0);
+
+#float mix_max(float x, float y) {
+# return max(x, y);
+#}
+
+static func mix_max(x : float, y : float) -> float:
+ return max(x, y);
+
+#float mix_min(float x, float y) {
+# return min(x, y);
+#}
+
+static func mix_min(x : float, y : float) -> float:
+ return min(x, y);
+
+#float mix_xor(float x, float y) {
+# return min(x+y, 2.0-x-y);
+#}
+
+static func mix_xor(x : float, y : float) -> float:
+ return min(x+y, 2.0-x-y);
+
+#float mix_pow(float x, float y) {
+# return pow(x, y);
+#}
+
+static func mix_pow(x : float, y : float) -> float:
+ return pow(x, y);
+
+
+#float wave_constant(float x) {
+# return 1.0;
+#}
+
+static func wave_constant(x : float) -> float:
+ return 1.0;
+
+#float wave_sine(float x) {
+# return 0.5-0.5*cos(3.14159265359*2.0*x);
+#}
+
+static func wave_sine(x : float) -> float:
+ return 0.5-0.5*cos(3.14159265359*2.0*x);
+
+#float wave_triangle(float x) {
+# x = fract(x);
+# return min(2.0*x, 2.0-2.0*x);
+#}
+
+static func wave_triangle(x : float) -> float:
+ x = fractf(x);
+ return min(2.0*x, 2.0-2.0*x);
+
+#float wave_sawtooth(float x) {
+# return fract(x);
+#}
+
+static func wave_sawtooth(x : float) -> float:
+ return fractf(x);
+
+#float wave_square(float x) {
+# return (fract(x) < 0.5) ? 0.0 : 1.0;
+#}
+
+static func wave_square(x : float) -> float:
+ if (fractf(x) < 0.5):
+ return 0.0
+ else:
+ return 1.0
+
+#float wave_bounce(float x) {
+# x = 2.0*(fract(x)-0.5);
+# return sqrt(1.0-x*x);
+#}
+
+static func wave_bounce(x : float) -> float:
+ x = 2.0*(fractf(x)-0.5);
+ return sqrt(1.0-x*x);
+
+static func sinewave(uv : Vector2, amplitude : float, frequency : float, phase : float) -> Color:
+ var f : float = 1.0- abs(2.0 * (uv.y-0.5) - amplitude * sin((frequency* uv.x + phase) * 6.28318530718));
+
+ return Color(f, f, f, 1)
+
+#from runes.mmg (old)
+
+static func ThickLine(uv : Vector2, posA : Vector2, posB : Vector2, radiusInv : float) -> float:
+ var dir : Vector2 = posA - posB;
+ var dirLen : float = dir.length()
+ var dirN : Vector2 = dir.normalized()
+ var dotTemp : float = clamp((uv - posB).dot(dirN), 0.0, dirLen);
+ var proj : Vector2 = dotTemp * dirN + posB;
+ var d1 : float = (uv - proj).length()
+ var finalGray : float = clamp(1.0 - d1 * radiusInv, 0.0, 1.0);
+
+ return finalGray;
diff --git a/game/addons/mat_maker_gd/nodes/common/curves.gd b/game/addons/mat_maker_gd/nodes/common/curves.gd
new file mode 100644
index 0000000..71fdfca
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/curves.gd
@@ -0,0 +1,85 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#Based on MaterialMaker's curve.gd
+
+#Curve PoolRealArray: p.x, p.y, ls, rs, p.x, p.y ....
+
+#class Point:
+# var p : Vector2
+# var ls : float
+# var rs : float
+
+#func get_shader(name) -> String:
+# var shader
+# shader = "float "+name+"_curve_fct(float x) {\n"
+# for i in range(points.size()-1):
+# if i < points.size()-2:
+# shader += "if (x <= p_"+name+"_"+str(i+1)+"_x) "
+#
+# shader += "{\n"
+# shader += "float dx = x - p_"+name+"_"+str(i)+"_x;\n"
+# shader += "float d = p_"+name+"_"+str(i+1)+"_x - p_"+name+"_"+str(i)+"_x;\n"
+# shader += "float t = dx/d;\n"
+# shader += "float omt = (1.0 - t);\n"
+# shader += "float omt2 = omt * omt;\n"
+# shader += "float omt3 = omt2 * omt;\n"
+# shader += "float t2 = t * t;\n"
+# shader += "float t3 = t2 * t;\n"
+# shader += "d /= 3.0;\n"
+# shader += "float y1 = p_"+name+"_"+str(i)+"_y;\n"
+# shader += "float yac = p_"+name+"_"+str(i)+"_y + d*p_"+name+"_"+str(i)+"_rs;\n"
+# shader += "float ybc = p_"+name+"_"+str(i+1)+"_y - d*p_"+name+"_"+str(i+1)+"_ls;\n"
+# shader += "float y2 = p_"+name+"_"+str(i+1)+"_y;\n"
+# shader += "return y1*omt3 + yac*omt2*t*3.0 + ybc*omt*t2*3.0 + y2*t3;\n"
+# shader += "}\n"
+#
+# shader += "}\n"
+# return shader
+
+static func curve(x : float, points : PoolRealArray) -> float:
+ if points.size() % 4 != 0 || points.size() < 8:
+ return 0.0
+
+ var ps : int = points.size() / 4
+
+ for i in range(ps - 1):
+ var pi : int = i * 4
+ var pip1 : int = (i + 1) * 4
+
+ if i < ps - 2:
+ # if (x <= p_"+name+"_"+str(i+1)+"_x)
+ if x > points[pip1]:
+ continue
+
+ #float dx = x - p_"+name+"_"+str(i)+"_x;
+ var dx : float = x - points[pi];
+
+ #var d : float = p_"+name+"_"+str(i+1)+"_x - p_"+name+"_"+str(i)+"_x;
+ var d : float = points[pip1] - points[pi];
+
+ var t : float = dx / d
+ var omt : float = (1.0 - t)
+ var omt2 : float = omt * omt
+ var omt3 : float = omt2 * omt
+ var t2 : float = t * t
+ var t3 : float = t2 * t
+ d /= 3.0
+
+# var y1 : float = p_"+name+"_"+str(i)+"_y
+ var y1 : float = points[pi + 1]
+
+# var yac : float = p_"+name+"_"+str(i)+"_y + d*p_"+name+"_"+str(i)+"_rs
+ var yac : float = points[pi + 1] + d * points[pi + 3]
+
+# var ybc : float = p_"+name+"_"+str(i+1)+"_y - d*p_"+name+"_"+str(i+1)+"_ls
+ var ybc : float = points[pip1 + 1] - d * points[pip1 + 2]
+
+# var y2 : float = p_"+name+"_"+str(i+1)+"_y
+ var y2 : float = points[pip1 + 1]
+
+ return y1 * omt3 + yac * omt2 * t * 3.0 + ybc * omt * t2 * 3.0 + y2 * t3;
+
+ return 0.0
diff --git a/game/addons/mat_maker_gd/nodes/common/dilate.gd b/game/addons/mat_maker_gd/nodes/common/dilate.gd
new file mode 100644
index 0000000..9bbe8e8
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/dilate.gd
@@ -0,0 +1,521 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#dilate.mmg
+
+#{
+# "connections": [
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "dilate_pass_1",
+# "to_port": 0
+# },
+# {
+# "from": "dilate_pass_1",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "dilate_pass_4",
+# "to_port": 0
+# },
+# {
+# "from": "dilate_pass_3",
+# "from_port": 0,
+# "to": "buffer_2_3",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2_3",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2_2",
+# "from_port": 0,
+# "to": "dilate_pass_3",
+# "to_port": 1
+# },
+# {
+# "from": "dilate_pass_4",
+# "from_port": 0,
+# "to": "dilate_pass_3",
+# "to_port": 0
+# },
+# {
+# "from": "default_color",
+# "from_port": 0,
+# "to": "buffer_2_2",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "default_color",
+# "to_port": 0
+# }
+# ],
+# "label": "Dilate",
+# "longdesc": "Dilates the white areas of a mask, using the colors of an optional input",
+# "name": "dilate",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": -473.691315,
+# "y": -200.988342
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -255.691315,
+# "y": -123.988342
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -140.306458,
+# "y": -377.953613
+# },
+# "parameters": {
+# "param0": 9,
+# "param1": 0.1,
+# "param2": 0,
+# "param3": 0
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2_2",
+# "widget": "size"
+# },
+# {
+# "node": "dilate_pass_1",
+# "widget": "s"
+# },
+# {
+# "node": "dilate_pass_4",
+# "widget": "s"
+# },
+# {
+# "node": "buffer_2_3",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the input images",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "dilate_pass_1",
+# "widget": "d"
+# },
+# {
+# "node": "dilate_pass_4",
+# "widget": "d"
+# }
+# ],
+# "longdesc": "The length of the dilate effect",
+# "name": "param1",
+# "shortdesc": "Length",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "dilate_pass_3",
+# "widget": "amount"
+# }
+# ],
+# "longdesc": "0 to generate a gradient to black while dilating, 1 to fill with input color",
+# "name": "param2",
+# "shortdesc": "Fill",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "dilate_pass_4",
+# "widget": "distance"
+# }
+# ],
+# "name": "param3",
+# "shortdesc": "Distance function",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -872.306458,
+# "y": -171.4814
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input mask whose white areas will be dilated",
+# "name": "mask",
+# "shortdesc": "Mask",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "The optional source for colors",
+# "name": "source",
+# "shortdesc": "Source",
+# "type": "rgb"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 254.21106,
+# "y": -64.4814
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the dilated image",
+# "name": "out",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "seed_value": -14401,
+# "type": "ios"
+# },
+# {
+# "name": "buffer_2_2",
+# "node_position": {
+# "x": -255.323547,
+# "y": -44.695679
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "dilate_pass_1",
+# "node_position": {
+# "x": -252.698792,
+# "y": -201.368988
+# },
+# "parameters": {
+# "d": 0.1,
+# "s": 9
+# },
+# "seed_value": 71939,
+# "type": "dilate_pass_1"
+# },
+# {
+# "name": "dilate_pass_3",
+# "node_position": {
+# "x": -31.698792,
+# "y": -72.368988
+# },
+# "parameters": {
+# "amount": 0
+# },
+# "type": "dilate_pass_3"
+# },
+# {
+# "name": "dilate_pass_4",
+# "node_position": {
+# "x": -31.689392,
+# "y": -186.577301
+# },
+# "parameters": {
+# "d": 0.1,
+# "distance": 0,
+# "s": 9
+# },
+# "type": "dilate_pass_2"
+# },
+# {
+# "name": "buffer_2_3",
+# "node_position": {
+# "x": -46.966125,
+# "y": -0.711548
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "default_color",
+# "node_position": {
+# "x": -469.868713,
+# "y": -98.02066
+# },
+# "parameters": {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1,
+# "type": "Color"
+# }
+# },
+# "type": "default_color"
+# }
+# ],
+# "parameters": {
+# "param0": 9,
+# "param1": 0.1,
+# "param2": 0,
+# "param3": 0
+# },
+# "shortdesc": "Dilate",
+# "type": "graph"
+#}
+
+#----------------------
+#dilate_pass_1.mmg
+
+#{
+# "name": "distance_pass_1",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "d": 0.1,
+# "s": 9
+# },
+# "seed_value": 8258,
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "vec3 $(name)_distance_h(vec2 uv) {\n\tvec2 e = vec2(1.0/$s, 0.0);\n\tint steps = int($s*$d);\n\tfloat rv = 0.0;\n\tvec2 source_uv;\n\tfor (int i = 0; i < steps; ++i) {\n\t\tsource_uv = uv+float(i)*e;\n\t\tif ($in(source_uv) > 0.5) {\n\t\t\trv = 1.0-float(i)*e.x/$d;\n\t\t\tbreak;\n\t\t}\n\t\tsource_uv = uv-float(i)*e;\n\t\tif ($in(source_uv) > 0.5) {\n\t\t\trv = 1.0-float(i)*e.x/$d;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn vec3(rv, source_uv);\n}\n",
+# "name": "Distance pass 1",
+# "outputs": [
+# {
+# "rgb": "$(name)_distance_h($uv)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "",
+# "last": 12,
+# "name": "s",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "",
+# "max": 1,
+# "min": 0,
+# "name": "d",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+#}
+
+#----------------------
+#dilate_pass_2.mmg
+
+#{
+# "name": "dilate_pass_2",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "d": 0.25,
+# "distance": 0,
+# "s": 9
+# },
+# "seed_value": 44978,
+# "shader_model": {
+# "code": "",
+# "global": "float dilate_distance_euclidian(float x, float y, float d) {\n\treturn 1.0-sqrt((1.0-x)*(1.0-x)+y*y/d/d);\n}\n\nfloat dilate_distance_manhattan(float x, float y, float d) {\n\treturn 1.0-(abs(1.0-x)+abs(y)/d);\n}\n\nfloat dilate_distance_chebyshev(float x, float y, float d) {\n\treturn 1.0-max(abs(1.0-x), abs(y)/d);\n}\n\n",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec3 $(name)_distance_v(vec2 uv) {\n\tvec2 e = vec2(0.0, 1.0/$s);\n\tint steps = int($s*$d);\n\tvec3 p = $in(uv);\n\tfor (int i = 0; i < steps; ++i) {\n\t\tvec2 dx = float(i)*e;\n\t\tvec3 p2 = $in(uv+dx);\n\t\tif (p2.x > p.x) {\n\t\t\tp2.x = dilate_distance_$distance(p2.x, dx.y, $d);\n\t\t\tp = mix(p, p2, step(p.x, p2.x));\n\t\t}\n\t\tp2 = $in(uv-dx);\n\t\tif (p2.x > p.x) {\n\t\t\tp2.x = dilate_distance_$distance(p2.x, dx.y, $d);\n\t\t\tp = mix(p, p2, step(p.x, p2.x));\n\t\t}\n\t}\n\treturn p;\n}\n",
+# "name": "Distance pass 2",
+# "outputs": [
+# {
+# "rgb": "$(name)_distance_v($uv)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "",
+# "last": 12,
+# "name": "s",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "",
+# "max": 1,
+# "min": 0,
+# "name": "d",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "default": 2,
+# "label": "",
+# "name": "distance",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Euclidian",
+# "value": "euclidian"
+# },
+# {
+# "name": "Manhattan",
+# "value": "manhattan"
+# },
+# {
+# "name": "Chebyshev",
+# "value": "chebyshev"
+# }
+# ]
+# }
+# ]
+# },
+# "type": "shader"
+#}
+
+#----------------------
+#dilate_pass_3.mmg
+
+#{
+# "name": "distance_pass_3",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "amount": 0
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "name": "distance",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(1.0)",
+# "label": "",
+# "name": "source",
+# "type": "rgb"
+# }
+# ],
+# "instance": "",
+# "name": "Distance pass 3",
+# "outputs": [
+# {
+# "rgb": "$source($distance($uv).yz)*mix($distance($uv).x, 1.0, $amount)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "max": 1,
+# "min": 0,
+# "name": "amount",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/edge_detect.gd b/game/addons/mat_maker_gd/nodes/common/edge_detect.gd
new file mode 100644
index 0000000..a4fc754
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/edge_detect.gd
@@ -0,0 +1,223 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#edge_detect.mmg
+#An edge detect filter that detects edges along all directions and draws them in white on a black background
+
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "instance": "float $(name)_fct(vec2 uv) {\n\tvec3 e_base = vec3(1.0/$size, -1.0/$size, 0);\n\tvec3 ref = $in(uv);\n\tvec3 e = vec3(0);\n\tfloat rv = 0.0;\n\tfor (int i = 0; i < int($width); ++i) {\n\t\te += e_base;\n\t\trv += length($in(uv+e.xy)-ref);\n\t\trv += length($in(uv-e.xy)-ref);\n\t\trv += length($in(uv+e.xx)-ref);\n\t\trv += length($in(uv-e.xx)-ref);\n\t\trv += length($in(uv+e.xz)-ref);\n\t\trv += length($in(uv-e.xz)-ref);\n\t\trv += length($in(uv+e.zx)-ref);\n\t\trv += length($in(uv-e.zx)-ref);\n\t\trv *= 2.0;\n\t}\n\treturn rv*pow(2.0, -$width);\n}",
+# "outputs": [
+# {
+# "f": "clamp(100.0*($(name)_fct($uv)-$threshold), 0.0, 1.0)",
+# "longdesc": "Shows the generated outlines",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "longdesc": "The resolution of the input image",
+# "name": "size",
+# "shortdesc": "Size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "max": 5,
+# "min": 1,
+# "name": "width",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Threshold",
+# "max": 1,
+# "min": 0,
+# "name": "threshold",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#edge_detect_1.mmg
+#An edge detect filter that detects edges along all directions and draws them in white on a black background
+
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "instance": "float $(name)_fct(vec2 uv) {\n\tvec3 e = vec3(1.0/$size, -1.0/$size, 0);\n\tvec3 rv = 8.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.xx);\n\trv -= $in(uv-e.xx);\n\trv -= $in(uv+e.xz);\n\trv -= $in(uv-e.xz);\n\trv -= $in(uv+e.zx);\n\trv -= $in(uv-e.zx);\n\trv = abs(rv);\n\treturn max(rv.x, max(rv.y ,rv.z))*$size;\n}",
+# "outputs": [
+# {
+# "f": "clamp($(name)_fct($uv), 0.0, 1.0)",
+# "longdesc": "Shows the generated outlines",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "longdesc": "The resolution of the input image",
+# "name": "size",
+# "shortdesc": "Size",
+# "type": "size"
+# }
+# ],
+
+#----------------------
+#edge_detect_2.mmg
+#An edge detect filter that detects edges horizontally and vertically and draws them in white on a black background
+
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "instance": "float $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/$size, 0.0);\n\tvec3 rv = 4.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.yx);\n\trv -= $in(uv-e.yx);\n\trv = abs(rv);\n\treturn max(rv.x, max(rv.y ,rv.z))*$size;\n}",
+# "outputs": [
+# {
+# "f": "clamp($(name)_fct($uv), 0.0, 1.0)",
+# "longdesc": "Shows the generated outlines",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "longdesc": "The resolution of the input image",
+# "name": "size",
+# "shortdesc": "Size",
+# "type": "size"
+# }
+# ],
+
+#----------------------
+#edge_detect_3.mmg
+#An edge detect filter that detects edges along diagonals and draws them in white on a black background
+
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "instance": "float $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/$size, -1.0/$size);\n\tvec3 rv = 4.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.xx);\n\trv -= $in(uv-e.xx);\n\trv = abs(rv);\n\treturn max(rv.x, max(rv.y ,rv.z))*$size;\n}",
+# "outputs": [
+# {
+# "f": "clamp($(name)_fct($uv), 0.0, 1.0)",
+# "longdesc": "Shows the generated outlines",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "longdesc": "The resolution of the input image",
+# "name": "size",
+# "shortdesc": "Size",
+# "type": "size"
+# }
+# ],
+
+#----------------------
+#mul_detect.mmg
+
+# "code": "float $(name_uv)_d = ($in($uv)-$v)/$t;",
+# "global": "",
+# "inputs": [
+# {
+# "default": "1.0",
+# "label": "",
+# "name": "mul",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "name": "MulDetect",
+# "outputs": [
+# {
+# "f": "$mul($uv)*clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Value",
+# "max": 1,
+# "min": 0,
+# "name": "v",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Tolerance",
+# "max": 1,
+# "min": 0.01,
+# "name": "t",
+# "step": 0.001,
+# "type": "float"
+# }
+# ]
+
diff --git a/game/addons/mat_maker_gd/nodes/common/fills.gd b/game/addons/mat_maker_gd/nodes/common/fills.gd
new file mode 100644
index 0000000..d636208
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/fills.gd
@@ -0,0 +1,559 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#fill.mmg
+#Fills areas defined by white outlines of its input
+
+#{
+# "connections": [
+# {
+# "from": "iterate_buffer",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 1,
+# "to": "fill_iterate",
+# "to_port": 0
+# },
+# {
+# "from": "fill_iterate",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "fill_preprocess",
+# "to_port": 0
+# },
+# {
+# "from": "fill_preprocess",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 0
+# }
+# ],
+# "nodes": [
+# {
+# "name": "iterate_buffer",
+# "node_position": {
+# "x": -129.307083,
+# "y": -370.480591
+# },
+# "parameters": {
+# "iterations": 10,
+# "size": 8
+# },
+# "seed_value": 29168,
+# "type": "iterate_buffer"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -542.307068,
+# "y": -370.662445
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input image whose white outlines must be filled",
+# "name": "port0",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 198.267258,
+# "y": -362.662445
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Generates fill data, to be connected to a fill companion node",
+# "name": "port0",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -171.110138,
+# "y": -541.509705
+# },
+# "parameters": {
+# "param0": 8,
+# "param1": 10
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "size"
+# },
+# {
+# "node": "fill_preprocess",
+# "widget": "s"
+# },
+# {
+# "node": "fill_iterate",
+# "widget": "s"
+# }
+# ],
+# "longdesc": "The resolution of the inptu image",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "iterations"
+# }
+# ],
+# "longdesc": "The number of iterations of the algorithm. The optimal value depends a lot on the input image.",
+# "name": "param1",
+# "shortdesc": "Iterations",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "fill_iterate",
+# "node_position": {
+# "x": -92.913391,
+# "y": -290.886963
+# },
+# "parameters": {
+# "s": 8
+# },
+# "type": "fill_iterate"
+# },
+# {
+# "name": "fill_preprocess",
+# "node_position": {
+# "x": -110.443481,
+# "y": -427.202026
+# },
+# "parameters": {
+# "s": 8
+# },
+# "type": "fill_preprocess"
+# }
+# ],
+# "parameters": {
+# "param0": 8,
+# "param1": 10
+# },
+# "shortdesc": "Fill",
+# "type": "graph"
+#}
+
+#----------------------
+#fill_iterate.mmg
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# }
+# ],
+# "instance": "vec4 $(name)_fill(vec2 uv) {\n\tfloat size = $s;\n\tint iterations = min(int(size), 256);\n\tvec4 color = $in(fract(uv));\n\tif (color.z+color.w < 1.0/size) {\n\t\treturn vec4(0.0);\n\t}\n\tvec2 offsets[8] = { vec2(1.0, 0.0), vec2(-1.0, 0.0), vec2(0.0, 1.0), vec2(0.0, -1.0), vec2(1.0, 1.0), vec2(-1.0, 1.0), vec2(-1.0, 1.0), vec2(-1.0, -1.0) };\n\tfor (int o = 0; o < 8; ++o) {\n\t\tvec2 uv2 = uv;\n\t\tvec2 offset = offsets[o]/size;\n\t\tfor (int i = 1; i < iterations; i += 1) {\n\t\t\tuv2 += offset;\n\t\t\tvec4 color2 = $in(fract(uv2));\n\t\t\tif (color2.z+color2.w == 0.0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvec2 p1 = color.xy+floor(uv-color.xy);\n\t\t\tvec2 p2 = color2.xy+floor(uv2-color2.xy);\n\t\t\tvec2 p = min(p1, p2);\n\t\t\tvec2 s = max(p1+color.zw, p2+color2.zw)-p;\n\t\t\tcolor = mix(vec4(0.0, 0.0, 1.0, 1.0), vec4(fract(p), s), step(s.xyxy, vec4(1.0)));\n\t\t}\n\t}\n\treturn floor(color*size)/size;\n}\n",
+# "outputs": [
+# {
+# "rgba": "$(name)_fill($uv)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "",
+# "last": 12,
+# "name": "s",
+# "type": "size"
+# }
+# ]
+
+#----------------------
+#fill_preprocess.mmg
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "rgba": "flood_fill_preprocess($uv, $in($uv), $s)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 10,
+# "first": 0,
+# "label": "",
+# "last": 12,
+# "name": "s",
+# "type": "size"
+# }
+# ]
+
+
+
+
+#----------------------
+#fill_to_color.mmg
+#A fill companion node that fills each area with a color taken from a color map image
+
+# "code": "vec4 $(name_uv)_bb = $in($uv);",
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The input fill data, to be connected to the output of a Fill node",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(1.0)",
+# "label": "",
+# "longdesc": "The image from which colors are taken",
+# "name": "map",
+# "shortdesc": "Color map",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated output image",
+# "rgba": "mix($edgecolor, $map(fract($(name_uv)_bb.xy+0.5*$(name_uv)_bb.zw)), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1
+# },
+# "label": "Edge Color",
+# "longdesc": "The color used to draw outlines",
+# "name": "edgecolor",
+# "shortdesc": "Outline color",
+# "type": "color"
+# }
+# ],
+
+#----------------------
+#fill_to_position.mmg
+#A fill companion node that fills each area with a greyscale value that depends on its position
+
+# "code": "vec2 $(name_uv)_c = fract($in($uv).xy+0.5*$in($uv).zw);",
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The input fill data, to be connected to the output of a Fill node",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$axis",
+# "longdesc": "The generated output image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 2,
+# "label": "",
+# "longdesc": "The position value to be used:\n- X for horizontal axis\n- Y for vertical axis\n- Radial for distance to center",
+# "name": "axis",
+# "shortdesc": "Position",
+# "type": "enum",
+# "values": [
+# {
+# "name": "X",
+# "value": "$(name_uv)_c.x"
+# },
+# {
+# "name": "Y",
+# "value": "$(name_uv)_c.y"
+# },
+# {
+# "name": "Radial",
+# "value": "length($(name_uv)_c-vec2(0.5))"
+# }
+# ]
+# }
+# ],
+
+#----------------------
+#fill_to_random_color.mmg
+#A fill companion node that fills each area with a random color
+
+# "code": "vec4 $(name_uv)_bb = $in($uv);",
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The input fill data, to be connected to the output of a Fill node",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated output image",
+# "rgb": "mix($edgecolor.rgb, rand3(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1
+# },
+# "label": "Edge Color",
+# "longdesc": "The color used for outlines",
+# "name": "edgecolor",
+# "shortdesc": "Outline color",
+# "type": "color"
+# }
+# ],
+
+#----------------------
+#fill_to_random_grey.mmg
+#A fill companion node that fills each area with a random greyscale value
+
+# "code": "vec4 $(name_uv)_bb = $in($uv);",
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The input fill data, to be connected to the output of a Fill node",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "mix($edgecolor, rand(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))",
+# "longdesc": "The generated output image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Edge color",
+# "longdesc": "The value used for the outlines",
+# "max": 1,
+# "min": 0,
+# "name": "edgecolor",
+# "shortdesc": "Outline color",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#fill_to_size.mmg
+#A fill companion node that fills each area with a greyscale value that depends on its size
+
+# "code": "vec4 $(name_uv)_bb = $in($uv);",
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The input fill data, to be connected to the output of a Fill node",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$formula",
+# "longdesc": "The generated output image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "The size value to be used (area, width, height or maximum between width and height)",
+# "name": "formula",
+# "shortdesc": "Size",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Area",
+# "value": "sqrt($(name_uv)_bb.z*$(name_uv)_bb.w)"
+# },
+# {
+# "name": "Width",
+# "value": "$(name_uv)_bb.z"
+# },
+# {
+# "name": "Height",
+# "value": "$(name_uv)_bb.w"
+# },
+# {
+# "name": "max(W, H)",
+# "value": "max($(name_uv)_bb.z, $(name_uv)_bb.w)"
+# }
+# ]
+# }
+# ],
+
+#----------------------
+#fill_to_uv.mmg
+#A fill companion node that generated an UV map that follows each filled area
+
+# "code": "vec4 $(name_uv)_bb = $in($uv);",
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The input fill data, to be connected to the output of a Fill node",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated output UV map, to be connected to a Custom UV node",
+# "rgb": "fill_to_uv_$mode($uv, $(name_uv)_bb, float($seed))",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "The mode decides how the UVs are layed out on each bounding box:\n- Stretch mode where the UV layout is stretched to the bounding box. \n- Square mode where the UV layout is even and centerered based on the longest axis of the bounding box.",
+# "name": "mode",
+# "shortdesc": "Mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Stretch",
+# "value": "stretch"
+# },
+# {
+# "name": "Square",
+# "value": "square"
+# }
+# ]
+# }
+# ],
+
+#vec4 flood_fill_preprocess(vec2 uv, float c, float s) {
+# if (c > 0.5) {
+# return vec4(0.0);
+# } else {
+# return vec4(floor(uv*s)/s, vec2(1.0/s));
+# }
+#}
+
+static func flood_fill_preprocess(uv : Vector2, c : float, s : float) -> Color:
+ if (c > 0.5):
+ return Color(0, 0, 0, 0)
+ else:
+ uv = Commons.floorv2(uv * s) / s
+ var f : float = 1.0 / s
+ return Color(uv.x, uv.y, f, f)
+
+#vec3 fill_to_uv_stretch(vec2 coord, vec4 bb, float seed) {
+# vec2 uv_islands = fract(coord-bb.xy)/bb.zw;
+# float random_value = rand(vec2(seed)+bb.xy+bb.zw);
+# return vec3(uv_islands, random_value);
+#}
+
+static func fill_to_uv_stretch(coord : Vector2, bb : Color, pseed : float) -> Vector3:
+ var uv_islands : Vector2 = Commons.fractv2(coord - Vector2(bb.r, bb.g)) / Vector2(bb.b, bb.a)
+ var random_value : float = Commons.rand(Vector2(pseed, pseed) + Vector2(bb.r, bb.g) + Vector2(bb.b, bb.a))
+ return Vector3(uv_islands.x, uv_islands.y, random_value)
+
+#vec3 fill_to_uv_square(vec2 coord, vec4 bb, float seed) {
+# vec2 uv_islands;
+#
+# if (bb.z > bb.w) {
+# vec2 adjusted_coord = coord + vec2(0.0, (bb.z - bb.w) / 2.0);
+# uv_islands = fract(adjusted_coord-bb.xy)/bb.zz;
+# } else {
+# vec2 adjusted_coord = coord + vec2((bb.w - bb.z) / 2.0, 0.0);
+# uv_islands = fract(adjusted_coord-bb.xy)/bb.ww;
+# }
+#
+# float random_value = rand(vec2(seed)+bb.xy+bb.zw);
+# return vec3(uv_islands, random_value);
+#}
+
+static func fill_to_uv_square(coord : Vector2, bb : Color, pseed : float) -> Vector3:
+ var uv_islands : Vector2 = Vector2()
+
+ if (bb.b > bb.a):
+ var adjusted_coord : Vector2 = coord + Vector2(0.0, (bb.b - bb.a) / 2.0);
+ uv_islands = Commons.fractv2(adjusted_coord - Vector2(bb.r, bb.g)) / Vector2(bb.b, bb.b)
+ else:
+ var adjusted_coord : Vector2 = coord + Vector2((bb.a - bb.b) / 2.0, 0.0);
+ uv_islands = Commons.fractv2(adjusted_coord - Vector2(bb.r, bb.g)) / Vector2(bb.a, bb.a)
+
+ var random_value : float = Commons.rand(Vector2(pseed, pseed) + Vector2(bb.r, bb.g) + Vector2(bb.b, bb.a))
+ return Vector3(uv_islands.x, uv_islands.y, random_value)
diff --git a/game/addons/mat_maker_gd/nodes/common/filter.gd b/game/addons/mat_maker_gd/nodes/common/filter.gd
new file mode 100644
index 0000000..59b8055
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/filter.gd
@@ -0,0 +1,4442 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#adjust_hsv.mmg
+#brightness_contrast.mmg
+#greyscale.mmg
+
+#main node methods: adjust_hsv, brightness_contrast
+
+#----------------------
+#colorize.mmg
+#Remaps a greyscale image to a custom gradient
+
+#Inputs:
+#input, float, $uv.x - The input greyscale image - (Image input)
+
+#Outputs:
+#output (rgba) $gradient($input($uv)) - Image output
+
+#Parameters:
+#gradient, Gradient
+
+#----------------------
+#default_color.mmg
+
+# "inputs": [
+# {
+# "default": "$default",
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "rgba": "$in($uv)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1
+# },
+# "label": "",
+# "name": "default",
+# "type": "color"
+# }
+# ]
+
+#----------------------
+#decompose.mmg
+#Decomposes an RGBA input into 4 greyscale images
+
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "label": "",
+# "longdesc": "The RGBA input image",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$i($uv).r",
+# "longdesc": "Shows the Red channel of the input",
+# "shortdesc": "Red",
+# "type": "f"
+# },
+# {
+# "f": "$i($uv).g",
+# "longdesc": "Shows the Green channel of the input",
+# "shortdesc": "Green",
+# "type": "f"
+# },
+# {
+# "f": "$i($uv).b",
+# "longdesc": "Shows the Blue channel of the input",
+# "shortdesc": "Blue",
+# "type": "f"
+# },
+# {
+# "f": "$i($uv).a",
+# "longdesc": "Shows the Alpha channel of the input",
+# "shortdesc": "Alpha",
+# "type": "f"
+# }
+# ],
+
+#----------------------
+#auto_tones.mmg
+
+#{
+# "connections": [
+# {
+# "from": "graph",
+# "from_port": 0,
+# "to": "tones_map",
+# "to_port": 1
+# },
+# {
+# "from": "graph",
+# "from_port": 1,
+# "to": "tones_map",
+# "to_port": 2
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "graph",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "tones_map",
+# "to_port": 0
+# },
+# {
+# "from": "tones_map",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# }
+# ],
+# "label": "Auto Tones",
+# "longdesc": "Finds the minimum and maximum values in the input texture and tone maps it to the full 0.0 - 1.0 range.",
+# "name": "auto_tones",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "connections": [
+# {
+# "from": "combine",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 0
+# },
+# {
+# "from": "decompose",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "decompose",
+# "from_port": 1,
+# "to": "gen_outputs",
+# "to_port": 1
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 0,
+# "to": "decompose",
+# "to_port": 0
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 1,
+# "to": "14423",
+# "to_port": 0
+# },
+# {
+# "from": "14423",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "combine",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "combine",
+# "to_port": 1
+# }
+# ],
+# "label": "Find Min Max",
+# "longdesc": "",
+# "name": "graph",
+# "node_position": {
+# "x": 1105.399902,
+# "y": -179.398849
+# },
+# "nodes": [
+# {
+# "name": "14423",
+# "node_position": {
+# "x": 344,
+# "y": 217
+# },
+# "parameters": {
+# "size": 10
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec3 $(name)_compare(vec2 uv, float size) {\n\tfloat iter = $in(uv).b;\n\tsize = size / pow(2.0, (iter * 100.0) );\n\titer += 0.01;\n\tfloat pixel_offset = 1.0 / size;\n\tvec2 half_res_uv = floor(uv * size / 2.0) / size * 2.0 + pixel_offset / 2.0;\n\tvec3 values[4];\n\tvalues[0] = $in(half_res_uv);\n\tvalues[1] = $in(half_res_uv + vec2(pixel_offset, 0.0));\n\tvalues[2] = $in(half_res_uv + vec2(0.0, pixel_offset));\n\tvalues[3] = $in(half_res_uv + vec2(pixel_offset, pixel_offset));\n\t\n\tfloat lowest = 1.0;\n\tfloat highest = 0.0;\n\t\n\tfor (int i = 0; i < 4; i++) {\n\t\tlowest = values[i].r < lowest ? values[i].r : lowest;\n\t\thighest = values[i].g > highest ? values[i].g : highest;\n\t}\n\t\n\treturn vec3( lowest, highest , iter);\n}",
+# "name": "Compare Neighbor",
+# "outputs": [
+# {
+# "rgb": "$(name)_compare($uv, $size)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 10,
+# "first": 1,
+# "label": "",
+# "last": 13,
+# "name": "size",
+# "type": "size"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "iterate_buffer",
+# "node_position": {
+# "x": 328,
+# "y": 63
+# },
+# "parameters": {
+# "filter": false,
+# "iterations": 13,
+# "mipmap": false,
+# "size": 10
+# },
+# "seed_value": 29168,
+# "type": "iterate_buffer"
+# },
+# {
+# "name": "combine",
+# "node_position": {
+# "x": 376,
+# "y": -75
+# },
+# "parameters": {
+#
+# },
+# "type": "combine"
+# },
+# {
+# "name": "decompose",
+# "node_position": {
+# "x": 605,
+# "y": 64
+# },
+# "parameters": {
+#
+# },
+# "type": "decompose"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -199,
+# "y": 23
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "in",
+# "shortdesc": "In",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 831,
+# "y": 42
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "min",
+# "shortdesc": "Min",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "max",
+# "shortdesc": "Max",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": 248.399994,
+# "y": -292
+# },
+# "parameters": {
+# "param0": 10
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Size",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "size"
+# },
+# {
+# "node": "14423",
+# "widget": "size"
+# }
+# ],
+# "name": "param0",
+# "type": "linked_control"
+# }
+# ]
+# }
+# ],
+# "parameters": {
+# "param0": 10
+# },
+# "shortdesc": "",
+# "type": "graph"
+# },
+# {
+# "name": "tones_map",
+# "node_position": {
+# "x": 1142.528442,
+# "y": -88.26989
+# },
+# "parameters": {
+#
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(0.5 ,0.5, 0.5, 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "label": "",
+# "name": "in_min",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "name": "in_max",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "longdesc": "Maps linearly an input tones interval to an output tones interval.",
+# "name": "Mapping",
+# "outputs": [
+# {
+# "f": "($in($uv)-$in_min($uv))/($in_max($uv)-$in_min($uv))",
+# "longdesc": "Shows the generated remapped image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+#
+# ],
+# "shortdesc": "Tones map"
+# },
+# "type": "shader"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": 665.528564,
+# "y": -136.535721
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 1425.400024,
+# "y": -135.535721
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the generated remapped image",
+# "name": "out",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": 1024.664307,
+# "y": -298.400757
+# },
+# "parameters": {
+# "param0": 10
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "graph",
+# "widget": "param0"
+# }
+# ],
+# "longdesc": "Buffers are used to find the mininum and maximum values for the input image. If the input has small details a higher resolution buffer might be needed to capture precise min and max values.\n\nNote: The output itself will not be buffered.",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# }
+# ]
+# }
+# ],
+# "parameters": {
+# "param0": 10
+# },
+# "shortdesc": "Auto Tones",
+# "type": "graph"
+#}
+
+#----------------------
+#blend.mmg
+#Blends its input, using an optional mask
+
+#Outputs:
+
+#Output - (color)
+#vec4 $(name_uv)_s1 = $s1($uv);
+#vec4 $(name_uv)_s2 = $s2($uv);
+#float $(name_uv)_a = $amount*$a($uv);
+#vec4(blend_$blend_type($uv, $(name_uv)_s1.rgb, $(name_uv)_s2.rgb, $(name_uv)_a*$(name_uv)_s1.a), min(1.0, $(name_uv)_s2.a+$(name_uv)_a*$(name_uv)_s1.a))
+
+#Inputs:
+#in1, color, default vec4($uv.x, 1.0, 1.0, 1.0)
+#in2, color, default vec4($uv.x, 1.0, 1.0, 1.0)
+#blend_type, enum, default: 0, Normal,Dissolve,Multiply,Screen,Overlay,Hard Light,Soft Light,Burn,Dodge,Lighten,Darken,Difference
+#opactiy, float, min: 0, max: 1, default: 0.5, step: 0.01 (input float)
+
+#----------------------
+#combine.mmg
+#Combines 4 greyscale inputs into an RGBA image
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "R",
+# "longdesc": "The greyscale input for the red channel",
+# "name": "r",
+# "shortdesc": "Red",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "label": "G",
+# "longdesc": "The greyscale input for the green channel",
+# "name": "g",
+# "shortdesc": "Green",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "label": "B",
+# "longdesc": "The greyscale input for the blue channel",
+# "name": "b",
+# "shortdesc": "Blue",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "A",
+# "longdesc": "The greyscale input for the alpha channel",
+# "name": "a",
+# "shortdesc": "Alpha",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the combined RGBA image",
+# "rgba": "vec4($r($uv), $g($uv), $b($uv), $a($uv))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+
+#----------------------
+#emboss.mmg
+#Creates highlights and shadows from an input heightmap
+
+#float $(name)_fct(vec2 uv) {
+# float pixels = max(1.0, $width);
+# float e = 1.0/$size;
+# float rv = 0.0;
+#
+# for (float dx = -pixels; dx <= pixels; dx += 1.0) {
+# for (float dy = -pixels; dy <= pixels; dy += 1.0) {
+# if (abs(dx) > 0.5 || abs(dy) > 0.5) {
+# rv += $in(uv+e*vec2(dx, dy))*cos(atan(dy, dx)-$angle*3.14159265359/180.0)/length(vec2(dx, dy));
+# }
+# }
+# }
+#
+# return $amount*rv/pixels+0.5;
+#}
+
+#Outputs:
+
+#Output - (float)
+#$(name)_fct($uv)
+
+#Inputs:
+#input, float, default 0
+#size, int (image size)
+#angle, float, min: -180, max: 180, default: 0, step: 0.1
+#amount, float, min: 0, max: 10, default: 1, step: 0.1
+#width, float, min: 1, max: 5, default: 1, step: 1
+
+#----------------------
+#invert.mmg
+#A filter that inverts the R, G, and B channels of its input while keeping the A channel unchanged
+
+#Outputs:
+
+#Output - (rgba)
+#vec4(vec3(1.0)-$in($uv).rgb, $in($uv).a)
+
+#Inputs:
+#input, rgba, default vec4(1.0, 1.0, 1.0, 1.0)
+
+#----------------------
+#normal_map.mmg
+
+#{
+# "connections": [
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "switch",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "switch",
+# "to_port": 0
+# },
+# {
+# "from": "edge_detect_1",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "switch",
+# "from_port": 0,
+# "to": "edge_detect_1",
+# "to_port": 0
+# }
+# ],
+# "label": "Normal Map",
+# "longdesc": "Generates a normal map from a height map",
+# "name": "normal_map",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": -695.663818,
+# "y": 34.60614
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 10
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -731.910156,
+# "y": -131.916687
+# },
+# "parameters": {
+# "param0": 10,
+# "param1": 1,
+# "param2": 0,
+# "param4": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "edge_detect_1",
+# "widget": "format"
+# }
+# ],
+# "longdesc": "The format of the generated normal map\nIn most cases this should be set to default",
+# "name": "param2",
+# "shortdesc": "Format",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "edge_detect_1",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the generated normal map",
+# "name": "param0",
+# "shortdesc": "Resolution",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "edge_detect_1",
+# "widget": "amount"
+# }
+# ],
+# "longdesc": "The strength of the normal map filter",
+# "name": "param1",
+# "shortdesc": "Strength",
+# "type": "linked_control"
+# },
+# {
+# "configurations": {
+# "False": [
+# {
+# "node": "switch",
+# "value": 0,
+# "widget": "source"
+# }
+# ],
+# "True": [
+# {
+# "node": "switch",
+# "value": 1,
+# "widget": "source"
+# }
+# ]
+# },
+# "label": "Buffer",
+# "linked_widgets": [
+# {
+# "node": "switch",
+# "widget": "source"
+# }
+# ],
+# "longdesc": "When set, a buffer is used to sample the input before the normal map filter",
+# "name": "param4",
+# "shortdesc": "Buffer",
+# "type": "config_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": -445.663818,
+# "y": 75.047363
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the generated normal map",
+# "name": "Normal",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -1094.910156,
+# "y": 74.047363
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input height map",
+# "name": "Bump",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "seed_value": 12483,
+# "type": "ios"
+# },
+# {
+# "name": "switch",
+# "node_position": {
+# "x": -673.5,
+# "y": 113.297363
+# },
+# "parameters": {
+# "choices": 2,
+# "outputs": 1,
+# "source": 1
+# },
+# "type": "switch"
+# },
+# {
+# "name": "edge_detect_1",
+# "node_position": {
+# "x": -676.092529,
+# "y": 193.868774
+# },
+# "parameters": {
+# "amount": 1,
+# "format": 0,
+# "size": 10
+# },
+# "shader_model": {
+# "code": "",
+# "global": "vec3 process_normal_default(vec3 v, float multiplier) {\n\treturn 0.5*normalize(v.xyz*multiplier+vec3(0.0, 0.0, -1.0))+vec3(0.5);\n}\n\nvec3 process_normal_opengl(vec3 v, float multiplier) {\n\treturn 0.5*normalize(v.xyz*multiplier+vec3(0.0, 0.0, 1.0))+vec3(0.5);\n}\n\nvec3 process_normal_directx(vec3 v, float multiplier) {\n\treturn 0.5*normalize(v.xyz*vec3(1.0, -1.0, 1.0)*multiplier+vec3(0.0, 0.0, 1.0))+vec3(0.5);\n}\n",
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "vec3 $(name)_fct(vec2 uv) {\n\tvec3 e = vec3(1.0/$size, -1.0/$size, 0);\n\tvec2 rv = vec2(1.0, -1.0)*$in(uv+e.xy);\n\trv += vec2(-1.0, 1.0)*$in(uv-e.xy);\n\trv += vec2(1.0, 1.0)*$in(uv+e.xx);\n\trv += vec2(-1.0, -1.0)*$in(uv-e.xx);\n\trv += vec2(2.0, 0.0)*$in(uv+e.xz);\n\trv += vec2(-2.0, 0.0)*$in(uv-e.xz);\n\trv += vec2(0.0, 2.0)*$in(uv+e.zx);\n\trv += vec2(0.0, -2.0)*$in(uv-e.zx);\n\treturn vec3(rv, 0.0);\n}",
+# "name": "Normal map",
+# "outputs": [
+# {
+# "rgb": "process_normal_$format($(name)_fct($uv), $amount*$size/128.0)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "name": "format",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Default",
+# "value": "default"
+# },
+# {
+# "name": "OpenGL",
+# "value": "opengl"
+# },
+# {
+# "name": "DirectX",
+# "value": "directx"
+# }
+# ]
+# },
+# {
+# "default": 9,
+# "first": 4,
+# "label": "",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "",
+# "max": 2,
+# "min": 0,
+# "name": "amount",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# }
+# ],
+# "parameters": {
+# "param0": 10,
+# "param1": 1,
+# "param2": 0,
+# "param4": 1
+# },
+# "shortdesc": "Normal map",
+# "type": "graph"
+#}
+
+#----------------------
+#sharpen.mmg
+#Sharpens it input image
+
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec3 $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/$size, 0.0);\n\tvec3 rv = 5.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.yx);\n\trv -= $in(uv-e.yx);\n\treturn rv;\n}",
+# "outputs": [
+# {
+# "longdesc": "Shows the generated sharpened image",
+# "rgb": "$(name)_fct($uv)",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "longdesc": "The resolution of the input image",
+# "name": "size",
+# "shortdesc": "Size",
+# "type": "size"
+# }
+# ],
+
+#----------------------
+#tones.mmg
+
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "label": "",
+# "name": "input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "rgba": "adjust_levels($input($uv), $in_min, $in_mid, $in_max, $out_min, $out_max)",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "a": 0,
+# "b": 0,
+# "g": 0,
+# "r": 0
+# },
+# "label": "",
+# "name": "in_min",
+# "type": "color"
+# },
+# {
+# "default": {
+# "a": 0.498039,
+# "b": 0.498039,
+# "g": 0.498039,
+# "r": 0.498039
+# },
+# "label": "",
+# "name": "in_mid",
+# "type": "color"
+# },
+# {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1
+# },
+# "label": "",
+# "name": "in_max",
+# "type": "color"
+# },
+# {
+# "default": {
+# "a": 1,
+# "b": 0,
+# "g": 0,
+# "r": 0
+# },
+# "label": "",
+# "name": "out_min",
+# "type": "color"
+# },
+# {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1
+# },
+# "label": "",
+# "name": "out_max",
+# "type": "color"
+# }
+# ]
+# },
+
+#----------------------
+#tones_map.mmg
+#Maps linearly an input tones interval to an output tones interval.
+
+# "inputs": [
+# {
+# "default": "vec4(0.5 ,0.5, 0.5, 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the generated remapped image",
+# "rgba": "vec4(vec3($out_min)+($in($uv).rgb-vec3($in_min))*vec3(($out_max-$out_min)/($in_max-$in_min)), $in($uv).a)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Input min",
+# "longdesc": "The minimum value of the input interval",
+# "max": 1,
+# "min": 0,
+# "name": "in_min",
+# "shortdesc": "InputMin",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Input max",
+# "longdesc": "The maximum value of the input interval",
+# "max": 1,
+# "min": 0,
+# "name": "in_max",
+# "shortdesc": "InputMax",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Output min",
+# "longdesc": "The minimum value of the output interval",
+# "max": 1,
+# "min": 0,
+# "name": "out_min",
+# "shortdesc": "OutputMin",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Output max",
+# "longdesc": "The maximum value of the output interval",
+# "max": 1,
+# "min": 0,
+# "name": "out_max",
+# "shortdesc": "OutputMax",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#make_tileable.mmg
+#Creates a tileable version of its input image by moving different parts around to hide seams.
+
+#vec4 make_tileable_$(name)(vec2 uv, float w) {
+# vec4 a = $in(uv);
+# vec4 b = $in(fract(uv+vec2(0.5)));
+# float coef_ab = sin(1.57079632679*clamp((length(uv-vec2(0.5))-0.5+w)/w, 0.0, 1.0));
+# vec4 c = $in(fract(uv+vec2(0.25)));
+# float coef_abc = sin(1.57079632679*clamp((min(min(length(uv-vec2(0.0, 0.5)), length(uv-vec2(0.5, 0.0))), min(length(uv-vec2(1.0, 0.5)), length(uv-vec2(0.5, 1.0))))-w)/w, 0.0, 1.0));
+# return mix(c, mix(a, b, coef_ab), coef_abc);
+#}
+
+#Inputs:
+#input, rgba, default: vec4(1.0)
+#width, float, min:0, max: 1: default: 0.1, step: 0.01
+
+#Outputs:
+#output (rgba)
+#make_tileable_$(name)($uv, 0.5*$w)
+
+#----------------------
+#occlusion.mmg
+
+#{
+# "connections": [
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "blend",
+# "from_port": 0,
+# "to": "colorize",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "blend",
+# "to_port": 0
+# },
+# {
+# "from": "colorize",
+# "from_port": 0,
+# "to": "_2",
+# "to_port": 0
+# },
+# {
+# "from": "_2",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "gaussian_blur_x",
+# "to_port": 0
+# },
+# {
+# "from": "gaussian_blur_x",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "gaussian_blur_y",
+# "to_port": 0
+# },
+# {
+# "from": "gaussian_blur_y",
+# "from_port": 0,
+# "to": "blend",
+# "to_port": 1
+# }
+# ],
+# "label": "Occlusion",
+# "longdesc": "Generates an ambient occlusion map from a height map",
+# "name": "occlusion",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -409.875,
+# "y": -112.625
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 8
+# },
+# "seed_value": 61344,
+# "type": "buffer"
+# },
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": -408.25,
+# "y": -265.75
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 8
+# },
+# "seed_value": 53030,
+# "type": "buffer"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -463.666626,
+# "y": -384.666656
+# },
+# "parameters": {
+# "param0": 8,
+# "param2": 1.5
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Grid size:",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# },
+# {
+# "node": "gaussian_blur_x",
+# "widget": "size"
+# },
+# {
+# "node": "gaussian_blur_y",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the input height map",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "Strength",
+# "linked_widgets": [
+# {
+# "node": "_2",
+# "widget": "g"
+# }
+# ],
+# "longdesc": "The strength of the occlusion map effect",
+# "name": "param2",
+# "shortdesc": "Strength",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -824.666626,
+# "y": -116.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input heightmap",
+# "name": "port0",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 33.547607,
+# "y": -132.392853
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The generated occlusion map",
+# "name": "port0",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "blend",
+# "node_position": {
+# "x": -422.79895,
+# "y": 63.16272
+# },
+# "parameters": {
+# "amount": 1,
+# "blend_type": 11
+# },
+# "type": "blend"
+# },
+# {
+# "name": "colorize",
+# "node_position": {
+# "x": -167.79895,
+# "y": -178.83728
+# },
+# "parameters": {
+# "gradient": {
+# "interpolation": 1,
+# "points": [
+# {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "pos": 0,
+# "r": 1
+# },
+# {
+# "a": 1,
+# "b": 0,
+# "g": 0,
+# "pos": 1,
+# "r": 0
+# }
+# ],
+# "type": "Gradient"
+# }
+# },
+# "seed_value": 33856,
+# "type": "colorize"
+# },
+# {
+# "name": "_2",
+# "node_position": {
+# "x": -145.403687,
+# "y": -112.29187
+# },
+# "parameters": {
+# "g": 1.5
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "name": "",
+# "outputs": [
+# {
+# "f": "pow($in($uv), $g)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 1,
+# "label": "",
+# "max": 2,
+# "min": 0,
+# "name": "g",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "gaussian_blur_x",
+# "node_position": {
+# "x": -413.053711,
+# "y": -189.016876
+# },
+# "parameters": {
+# "sigma": 50,
+# "size": 8
+# },
+# "type": "gaussian_blur_x"
+# },
+# {
+# "name": "gaussian_blur_y",
+# "node_position": {
+# "x": -405.053711,
+# "y": -21.016876
+# },
+# "parameters": {
+# "sigma": 50,
+# "size": 8
+# },
+# "type": "gaussian_blur_y"
+# }
+# ],
+# "parameters": {
+# "param0": 8,
+# "param2": 1.5
+# },
+# "shortdesc": "Occlusion",
+# "type": "graph"
+#}
+
+#----------------------
+#occlusion2.mmg
+
+#{
+# "connections": [
+# {
+# "from": "colorize",
+# "from_port": 0,
+# "to": "_2",
+# "to_port": 0
+# },
+# {
+# "from": "_2",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "fast_blur",
+# "to_port": 0
+# },
+# {
+# "from": "fast_blur",
+# "from_port": 0,
+# "to": "blend",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "blend",
+# "to_port": 0
+# },
+# {
+# "from": "blend",
+# "from_port": 0,
+# "to": "colorize",
+# "to_port": 0
+# }
+# ],
+# "label": "Occlusion",
+# "longdesc": "Generates an ambient occlusion map from a height map",
+# "name": "occlusion2",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -522.866638,
+# "y": -383.867035
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 20,
+# "param2": 1.5,
+# "param3": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Resolution",
+# "linked_widgets": [
+# {
+# "node": "fast_blur",
+# "widget": "param0"
+# }
+# ],
+# "longdesc": "The resolution of the input height map",
+# "name": "param0",
+# "shortdesc": "Resolution",
+# "type": "linked_control"
+# },
+# {
+# "label": "Strength",
+# "linked_widgets": [
+# {
+# "node": "_2",
+# "widget": "g"
+# }
+# ],
+# "longdesc": "The strength of the occlusion map effect",
+# "name": "param2",
+# "shortdesc": "Strength",
+# "type": "linked_control"
+# },
+# {
+# "label": "Radius",
+# "linked_widgets": [
+# {
+# "node": "fast_blur",
+# "widget": "param1"
+# }
+# ],
+# "longdesc": "The radius of the blur used for the occlusion effect",
+# "name": "param1",
+# "shortdesc": "Radius",
+# "type": "linked_control"
+# },
+# {
+# "label": "Quality",
+# "linked_widgets": [
+# {
+# "node": "fast_blur",
+# "widget": "param2"
+# }
+# ],
+# "longdesc": "The quality of the blur operation used for the occlusion effect",
+# "name": "param3",
+# "shortdesc": "Quality",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -842.266602,
+# "y": -108.396729
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input heightmap",
+# "name": "port0",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 77.5476,
+# "y": -86.015305
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The generated occlusion map",
+# "name": "port0",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "blend",
+# "node_position": {
+# "x": -422.79895,
+# "y": 11.18788
+# },
+# "parameters": {
+# "amount": 1,
+# "blend_type": 11
+# },
+# "type": "blend"
+# },
+# {
+# "name": "colorize",
+# "node_position": {
+# "x": -124.598953,
+# "y": -131.660126
+# },
+# "parameters": {
+# "gradient": {
+# "interpolation": 1,
+# "points": [
+# {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "pos": 0,
+# "r": 1
+# },
+# {
+# "a": 1,
+# "b": 0,
+# "g": 0,
+# "pos": 1,
+# "r": 0
+# }
+# ],
+# "type": "Gradient"
+# }
+# },
+# "seed_value": 33856,
+# "type": "colorize"
+# },
+# {
+# "name": "_2",
+# "node_position": {
+# "x": -104.603699,
+# "y": -57.918201
+# },
+# "parameters": {
+# "g": 1.5
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "name": "",
+# "outputs": [
+# {
+# "f": "pow($in(fract($uv)), $g)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 1,
+# "label": "",
+# "max": 2,
+# "min": 0,
+# "name": "g",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "connections": [
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "fast_blur_shader",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "fast_blur_shader",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# }
+# ],
+# "label": "Fast Blur",
+# "longdesc": "",
+# "name": "fast_blur",
+# "node_position": {
+# "x": -435.552002,
+# "y": -135.436234
+# },
+# "nodes": [
+# {
+# "name": "fast_blur_shader",
+# "node_position": {
+# "x": -161.600006,
+# "y": 143.188766
+# },
+# "parameters": {
+# "quality": 1,
+# "sigma": 20
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgba"
+# }
+# ],
+# "instance": "vec4 $(name)_blur(vec2 uv, vec2 scale, float sigma, int quality) {\n vec4 O = vec4(0.0);\n\tfloat samples = sigma * 4.0; \n\tint LOD = max(0, int(log2(float(samples)))-quality-2);\n\tint sLOD = 1 << LOD;\n int s = max(1, int(samples/float(sLOD)));\n\tfloat sum = 0.0;\n for (int i = 0; i < s*s; i++) {\n vec2 d = vec2(float(i%s), float(i/s))*float(sLOD) - 0.5*float(samples);\n\t\tvec2 dd = d / sigma;\n\t\tfloat g = exp(-.5*dot(dd,dd))/(6.28*sigma*sigma);\n O += g * textureLod($in.texture, uv + scale * d, float(LOD));\n\t\tsum += g;\n }\n \n return O / sum;\n}\n",
+# "name": "Fast Blur",
+# "outputs": [
+# {
+# "rgba": "$(name)_blur($uv, vec2(1.0)/$in.size, max(1.0, floor($sigma*$in.size/2048.0)), int($quality))",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 1,
+# "label": "",
+# "max": 256,
+# "min": 1,
+# "name": "sigma",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "",
+# "max": 3,
+# "min": 0,
+# "name": "quality",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -187,
+# "y": 61.5
+# },
+# "parameters": {
+# "size": 11
+# },
+# "type": "buffer",
+# "version": 1
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -602,
+# "y": 91.75
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "name": "port0",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 88,
+# "y": 61.75
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "name": "port0",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -254.5,
+# "y": -122.5
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 20,
+# "param2": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Resolution",
+# "linked_widgets": [
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# }
+# ],
+# "name": "param0",
+# "type": "linked_control"
+# },
+# {
+# "label": "Sigma",
+# "linked_widgets": [
+# {
+# "node": "fast_blur_shader",
+# "widget": "sigma"
+# }
+# ],
+# "name": "param1",
+# "type": "linked_control"
+# },
+# {
+# "label": "Quality",
+# "linked_widgets": [
+# {
+# "node": "fast_blur_shader",
+# "widget": "quality"
+# }
+# ],
+# "name": "param2",
+# "type": "linked_control"
+# }
+# ]
+# }
+# ],
+# "parameters": {
+# "param0": 11,
+# "param1": 20,
+# "param2": 1
+# },
+# "shortdesc": "",
+# "type": "graph"
+# }
+# ],
+# "parameters": {
+# "param0": 11,
+# "param1": 20,
+# "param2": 1.5,
+# "param3": 1
+# },
+# "shortdesc": "Occlusion",
+# "type": "graph"
+#}
+
+#----------------------
+#pixelize.mmg
+#Creates a pixelated image from its input, and also quantifies the colors with optional dithering.
+
+# "code": "vec2 $(name_uv)_uv = floor(($uv*vec2($x, $y)))+vec2(0.5);\nvec3 $(name_uv)_dither = fract(vec3(dot(vec2(171.0, 231.0), $(name_uv)_uv))/vec3(103.0, 71.0, 97.0));\n",
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "label": "",
+# "longdesc": "The image to be pixelated",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "A pixelated version of the input image",
+# "rgb": "floor($i($(name_uv)_uv/vec2($x, $y))*$c+$d*($(name_uv)_dither-vec3(0.5)))/$c",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Columns:",
+# "longdesc": "Number of pixel columns of the output",
+# "max": 256,
+# "min": 1,
+# "name": "x",
+# "shortdesc": "Columns",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Rows:",
+# "longdesc": "Number of pixel rows of the output",
+# "max": 256,
+# "min": 1,
+# "name": "y",
+# "shortdesc": "Rows",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Levels:",
+# "longdesc": "Number of color levels for each channel",
+# "max": 32,
+# "min": 2,
+# "name": "c",
+# "shortdesc": "Levels",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Dither:",
+# "longdesc": "Amount of dithering in the output image",
+# "max": 1,
+# "min": 0,
+# "name": "d",
+# "shortdesc": "Dithering",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+
+#----------------------
+#quantize.mmg
+#Quantizes the red, green and blue channels of its input
+
+# "inputs": [
+# {
+# "default": "vec4(2.0*vec3(length($uv-vec2(0.5))), 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The quantized image",
+# "rgba": "vec4(floor($in($uv).rgb*$steps)/$steps, $in($uv).a)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 4,
+# "label": "",
+# "longdesc": "The number of quantization steps",
+# "max": 32,
+# "min": 2,
+# "name": "steps",
+# "shortdesc": "Steps",
+# "step": 1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#skew.mmg
+
+# "global": "vec2 uvskew_h(vec2 uv, float amount) {\n\treturn vec2(uv.x+amount*(uv.y-0.5), uv.y);\n}\nvec2 uvskew_v(vec2 uv, float amount) {\n\treturn vec2(uv.x, uv.y+amount*(uv.x-0.5));\n}",
+# "inputs": [
+# {
+# "default": "vec4($uv, 0, 1)",
+# "label": "",
+# "name": "i",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "rgba": "$i(uvskew_$direction($uv, $amount))",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "name": "direction",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Horizontal",
+# "value": "h"
+# },
+# {
+# "name": "Vertical",
+# "value": "v"
+# }
+# ]
+# },
+# {
+# "default": 0,
+# "label": "",
+# "max": 3,
+# "min": -3,
+# "name": "amount",
+# "step": 0.005,
+# "type": "float",
+# "widget": "spinbox"
+# }
+# ]
+
+#----------------------
+#tonality.mmg
+#Remaps a greyscale image tonality using a curve
+
+# "inputs": [
+# {
+# "default": "$uv.x",
+# "label": "",
+# "longdesc": "The input greyscale image",
+# "name": "input",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$curve($input($uv))",
+# "longdesc": "The remapped greyscale image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "points": [
+# {
+# "ls": 0,
+# "rs": 1,
+# "x": 0,
+# "y": 0
+# },
+# {
+# "ls": 1,
+# "rs": 0,
+# "x": 1,
+# "y": 1
+# }
+# ],
+# "type": "Curve"
+# },
+# "label": "",
+# "longdesc": "The tonality curve to which the input is remapped",
+# "name": "curve",
+# "shortdesc": "Curve",
+# "type": "curve"
+# }
+# ],
+
+#----------------------
+#tones_range.mmg
+#Outputs the tone range around a specified value
+
+# "code": "float $(name_uv)_step = clamp(($in($uv) - ($value))/max(0.0001, $width)+0.5, 0.0, 1.0);\nfloat $(name_uv)_false = clamp((min($(name_uv)_step, 1.0-$(name_uv)_step) * 2.0) / (1.0 - $contrast), 0.0, 1.0);\nfloat $(name_uv)_true = 1.0-$(name_uv)_false;",
+# "inputs": [
+# {
+# "default": "($uv.x + $uv.y) / 2.0",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$(name_uv)_$invert",
+# "longdesc": "Shows the generated high contrast image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Value",
+# "longdesc": "The center value of the selection",
+# "max": 1,
+# "min": 0,
+# "name": "value",
+# "shortdesc": "Value",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.25,
+# "label": "Width",
+# "longdesc": "The width (in tones space) of the selection area",
+# "max": 1,
+# "min": 0,
+# "name": "width",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Contrast",
+# "longdesc": "Adjusts the falloff of the output",
+# "max": 1,
+# "min": 0,
+# "name": "contrast",
+# "shortdesc": "Contrast",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "default": false,
+# "label": "Invert",
+# "longdesc": "Invert the generated image if set",
+# "name": "invert",
+# "shortdesc": "Invert",
+# "type": "boolean"
+# }
+# ],
+
+#----------------------
+#tones_step.mmg
+#Emphasizes dark and light tones around a specified value
+
+# "code": "vec3 $(name_uv)_false = clamp(($in($uv).rgb-vec3($value))/max(0.0001, $width)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 $(name_uv)_true = vec3(1.0)-$(name_uv)_false;",
+# "inputs": [
+# {
+# "default": "vec4(0.5 ,0.5, 0.5, 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the generated high contrast image",
+# "rgba": "vec4($(name_uv)_$invert, $in($uv).a)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Value",
+# "longdesc": "The value of the input that separate dark and light zones of the result",
+# "max": 1,
+# "min": 0,
+# "name": "value",
+# "shortdesc": "Value",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "longdesc": "The width (in tones space) of the transition area",
+# "max": 1,
+# "min": 0,
+# "name": "width",
+# "shortdesc": "width",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "default": false,
+# "label": "Invert",
+# "longdesc": "Invert the generated image if set",
+# "name": "invert",
+# "shortdesc": "Invert",
+# "type": "boolean"
+# }
+# ],
+
+#----------------------
+#math.mmg
+#Performs a math operation using its inputs or parameter values
+
+# "code": "float $(name_uv)_clamp_false = $op;\nfloat $(name_uv)_clamp_true = clamp($(name_uv)_clamp_false, 0.0, 1.0);\n",
+# "inputs": [
+# {
+# "default": "$default_in1",
+# "label": "2:A",
+# "longdesc": "The A operand",
+# "name": "in1",
+# "shortdesc": "A",
+# "type": "f"
+# },
+# {
+# "default": "$default_in2",
+# "label": "B",
+# "longdesc": "The B operand",
+# "name": "in2",
+# "shortdesc": "B",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$(name_uv)_clamp_$clamp",
+# "longdesc": "Shows a greyscale image of the result",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 19,
+# "label": "",
+# "longdesc": "The operation to be performed",
+# "name": "op",
+# "shortdesc": "Operation",
+# "type": "enum",
+# "values": [
+# {
+# "name": "A+B",
+# "value": "$in1($uv)+$in2($uv)"
+# },
+# {
+# "name": "A-B",
+# "value": "$in1($uv)-$in2($uv)"
+# },
+# {
+# "name": "A*B",
+# "value": "$in1($uv)*$in2($uv)"
+# },
+# {
+# "name": "A/B",
+# "value": "$in1($uv)/$in2($uv)"
+# },
+# {
+# "name": "log(A)",
+# "value": "log($in1($uv))"
+# },
+# {
+# "name": "log2(A)",
+# "value": "log2($in1($uv))"
+# },
+# {
+# "name": "pow(A, B)",
+# "value": "pow($in1($uv),$in2($uv))"
+# },
+# {
+# "name": "abs(A)",
+# "value": "abs($in1($uv))"
+# },
+# {
+# "name": "round(A)",
+# "value": "round($in1($uv))"
+# },
+# {
+# "name": "floor(A)",
+# "value": "floor($in1($uv))"
+# },
+# {
+# "name": "ceil(A)",
+# "value": "ceil($in1($uv))"
+# },
+# {
+# "name": "trunc(A)",
+# "value": "trunc($in1($uv))"
+# },
+# {
+# "name": "fract(A)",
+# "value": "fract($in1($uv))"
+# },
+# {
+# "name": "min(A, B)",
+# "value": "min($in1($uv),$in2($uv))"
+# },
+# {
+# "name": "max(A, B)",
+# "value": "max($in1($uv),$in2($uv))"
+# },
+# {
+# "name": "A 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}",
+# "name": "Curvature",
+# "outputs": [
+# {
+# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Amount",
+# "max": 10,
+# "min": 0,
+# "name": "amount",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "max": 5,
+# "min": 1,
+# "name": "width",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "598_2",
+# "node_position": {
+# "x": -100.207932,
+# "y": 638.757874
+# },
+# "parameters": {
+# "amount": 1,
+# "size": 11,
+# "width": 2
+# },
+# "shader_model": {
+# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}",
+# "name": "Curvature",
+# "outputs": [
+# {
+# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Amount",
+# "max": 10,
+# "min": 0,
+# "name": "amount",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "max": 5,
+# "min": 1,
+# "name": "width",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "598_4",
+# "node_position": {
+# "x": -97.532082,
+# "y": 755.803345
+# },
+# "parameters": {
+# "amount": 1,
+# "size": 11,
+# "width": 4
+# },
+# "shader_model": {
+# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}",
+# "name": "Curvature",
+# "outputs": [
+# {
+# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Amount",
+# "max": 10,
+# "min": 0,
+# "name": "amount",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "max": 5,
+# "min": 1,
+# "name": "width",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "598_5",
+# "node_position": {
+# "x": -95.713867,
+# "y": 877.621521
+# },
+# "parameters": {
+# "amount": 1,
+# "size": 11,
+# "width": 8
+# },
+# "shader_model": {
+# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}",
+# "name": "Curvature",
+# "outputs": [
+# {
+# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Amount",
+# "max": 10,
+# "min": 0,
+# "name": "amount",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "max": 5,
+# "min": 1,
+# "name": "width",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "598_6",
+# "node_position": {
+# "x": -92.077492,
+# "y": 992.848633
+# },
+# "parameters": {
+# "amount": 1,
+# "size": 11,
+# "width": 16
+# },
+# "shader_model": {
+# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}",
+# "name": "Curvature",
+# "outputs": [
+# {
+# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 9,
+# "first": 6,
+# "label": "Size",
+# "last": 12,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Amount",
+# "max": 10,
+# "min": 0,
+# "name": "amount",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "max": 5,
+# "min": 1,
+# "name": "width",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "connections": [
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "fast_blur_shader",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "fast_blur_shader",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# }
+# ],
+# "label": "Fast Blur",
+# "longdesc": "",
+# "name": "fast_blur",
+# "node_position": {
+# "x": 167.483093,
+# "y": 509.757843
+# },
+# "nodes": [
+# {
+# "name": "fast_blur_shader",
+# "node_position": {
+# "x": -168,
+# "y": 120
+# },
+# "parameters": {
+# "quality": 1,
+# "sigma": 2
+# },
+# "type": "fast_blur_shader"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -187,
+# "y": 61.5
+# },
+# "parameters": {
+# "size": 11
+# },
+# "type": "buffer",
+# "version": 1
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -602,
+# "y": 91.75
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "name": "port0",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 88,
+# "y": 61.75
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "name": "port0",
+# "type": "rgba"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -254.5,
+# "y": -122.5
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 2,
+# "param2": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Resolution",
+# "linked_widgets": [
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# }
+# ],
+# "name": "param0",
+# "type": "linked_control"
+# },
+# {
+# "label": "Sigma",
+# "linked_widgets": [
+# {
+# "node": "fast_blur_shader",
+# "widget": "sigma"
+# }
+# ],
+# "name": "param1",
+# "type": "linked_control"
+# },
+# {
+# "label": "Quality",
+# "linked_widgets": [
+# {
+# "node": "fast_blur_shader",
+# "widget": "quality"
+# }
+# ],
+# "name": "param2",
+# "type": "linked_control"
+# }
+# ]
+# }
+# ],
+# "parameters": {
+# "param0": 11,
+# "param1": 2,
+# "param2": 1
+# },
+# "shortdesc": "",
+# "type": "graph"
+# },
+# {
+# "name": "fast_blur_2",
+# "node_position": {
+# "x": 167.156082,
+# "y": 638.560974
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 5,
+# "param2": 1
+# },
+# "type": "fast_blur"
+# },
+# {
+# "name": "fast_blur_3",
+# "node_position": {
+# "x": 171.701691,
+# "y": 756.742798
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 8,
+# "param2": 1
+# },
+# "type": "fast_blur"
+# },
+# {
+# "name": "fast_blur_4",
+# "node_position": {
+# "x": 167.377045,
+# "y": 877.651917
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 16,
+# "param2": 1
+# },
+# "type": "fast_blur"
+# },
+# {
+# "name": "fast_blur_5",
+# "node_position": {
+# "x": 170.104279,
+# "y": 992.197327
+# },
+# "parameters": {
+# "param0": 11,
+# "param1": 34,
+# "param2": 1
+# },
+# "type": "fast_blur"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -426.44928,
+# "y": 678.75
+# },
+# "parameters": {
+# "filter": false,
+# "mipmap": false,
+# "size": 11
+# },
+# "type": "buffer",
+# "version": 2
+# }
+# ],
+# "parameters": {
+# "param0": 11,
+# "param2": 1
+# },
+# "shortdesc": "Smooth Curvature",
+# "type": "graph"
+#}
+
+#----------------------
+#smooth_curvature2.mmg
+
+#{
+# "connections": [
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer",
+# "to_port": 0
+# },
+# {
+# "from": "buffer",
+# "from_port": 0,
+# "to": "switch",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "switch",
+# "to_port": 0
+# },
+# {
+# "from": "598",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "switch_2",
+# "to_port": 1
+# },
+# {
+# "from": "598",
+# "from_port": 0,
+# "to": "switch_2",
+# "to_port": 0
+# },
+# {
+# "from": "switch_2",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "switch",
+# "from_port": 0,
+# "to": "598",
+# "to_port": 0
+# }
+# ],
+# "label": "Smooth Curvature 2",
+# "longdesc": "",
+# "name": "smooth_curvature2",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer",
+# "node_position": {
+# "x": 300.603302,
+# "y": -549.522034
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 10
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "598",
+# "node_position": {
+# "x": 286.999847,
+# "y": -359.903259
+# },
+# "parameters": {
+# "quality": 4,
+# "radius": 1,
+# "strength": 1
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "0.5",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "float $(name)_curve( vec2 p, vec2 o ){\n\tfloat a = $in(p+o);\n\tfloat b = $in(p-o);\n\tfloat c = $in(p+o*vec2(1.0,-1.0));\n\tfloat d = $in(p-o*vec2(1.0,-1.0));\n\treturn -a - b - c - d;\n}\n\nfloat $(name)_curvature_map(vec2 p, float r, float q){\n\tfloat s = r/q;\n\tfloat H = $in(p)*4.0;\n\tfloat v = 0.0;\n\tvec2 o;\n\tfor( o.x = 0.0; o.x < q; o.x++ ){\n\t\tfor( o.y = 0.0; o.y < q; o.y++ ){\n\t\t\tfloat c = $(name)_curve(p, o*s);\n\t\t\tv += (H + c) * ((r-length(o*s)) / r);\n\t\t}\n\t}\n\treturn v/(q*q);\n}\n\nfloat $(name)_curvature(vec2 uv, float quality, float strength, float radius) {\n\tfloat c = $(name)_curvature_map(uv, 0.050 * radius, quality)*strength / radius;\n\treturn 0.5 + c;\n}",
+# "name": "Smooth Curvature",
+# "outputs": [
+# {
+# "f": "$(name)_curvature($uv, $quality, $strength, $radius)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Quality",
+# "longdesc": "How many times the input is sampled to generate the curvature map",
+# "max": 16,
+# "min": 2,
+# "name": "quality",
+# "shortdesc": "Quality",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Strength",
+# "longdesc": "The intensity of the curvature map",
+# "max": 2,
+# "min": 0,
+# "name": "strength",
+# "shortdesc": "Strength",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Radius",
+# "longdesc": "The radius of the smoothing of the curvature effect",
+# "max": 2,
+# "min": 0,
+# "name": "radius",
+# "shortdesc": "Radius",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+# "shortdesc": "Smooth Curvature"
+# },
+# "type": "shader"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": 242.146149,
+# "y": -788.088806
+# },
+# "parameters": {
+# "param0": 10,
+# "param1": 4,
+# "param2": 1,
+# "param3": 1,
+# "param4": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Size",
+# "linked_widgets": [
+# {
+# "node": "buffer",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the curvature map if buffer is used",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "Quality",
+# "linked_widgets": [
+# {
+# "node": "598",
+# "widget": "quality"
+# }
+# ],
+# "longdesc": "How many times the input is sampled to generate the curvature map",
+# "name": "param1",
+# "shortdesc": "Quality",
+# "type": "linked_control"
+# },
+# {
+# "label": "Strength",
+# "linked_widgets": [
+# {
+# "node": "598",
+# "widget": "strength"
+# }
+# ],
+# "longdesc": "The intensity of the curvature map",
+# "name": "param2",
+# "shortdesc": "Strength",
+# "type": "linked_control"
+# },
+# {
+# "label": "Radius",
+# "linked_widgets": [
+# {
+# "node": "598",
+# "widget": "radius"
+# }
+# ],
+# "longdesc": "The radius of the smoothing of the curvature effect",
+# "name": "param3",
+# "shortdesc": "Radius",
+# "type": "linked_control"
+# },
+# {
+# "configurations": {
+# "False": [
+# {
+# "node": "switch",
+# "value": 0,
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "value": 0,
+# "widget": "source"
+# }
+# ],
+# "True": [
+# {
+# "node": "switch",
+# "value": 1,
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "value": 1,
+# "widget": "source"
+# }
+# ]
+# },
+# "label": "Buffer",
+# "linked_widgets": [
+# {
+# "node": "switch",
+# "widget": "source"
+# },
+# {
+# "node": "switch_2",
+# "widget": "source"
+# }
+# ],
+# "longdesc": "When set, a buffer is used to sample the input before the normal map filter",
+# "name": "param4",
+# "shortdesc": "Buffer",
+# "type": "config_control"
+# }
+# ]
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -135.453888,
+# "y": -518.927429
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The input height map",
+# "name": "Heightmap",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 586.203247,
+# "y": -534.919678
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the generated curvature map",
+# "name": "Curvature",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "switch",
+# "node_position": {
+# "x": 310.739746,
+# "y": -451.658417
+# },
+# "parameters": {
+# "choices": 2,
+# "outputs": 1,
+# "source": 1
+# },
+# "type": "switch"
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": 293.839874,
+# "y": -225.201691
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 10
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "switch_2",
+# "node_position": {
+# "x": 312.239838,
+# "y": -129.465912
+# },
+# "parameters": {
+# "choices": 2,
+# "outputs": 1,
+# "source": 1
+# },
+# "type": "switch"
+# },
+# {
+# "name": "blend",
+# "node_position": {
+# "x": 802.064697,
+# "y": -277.727295
+# },
+# "parameters": {
+# "amount": 0.5,
+# "blend_type": 0
+# },
+# "shader_model": {
+# "code": "vec4 $(name_uv)_s1 = $s1($uv);\nvec4 $(name_uv)_s2 = $s2($uv);\nfloat $(name_uv)_a = $amount*$a($uv);\n",
+# "global": "vec3 blend_normal(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*c1 + (1.0-opacity)*c2;\n}\n\nvec3 blend_dissolve(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tif (rand(uv) < opacity) {\n\t\treturn c1;\n\t} else {\n\t\treturn c2;\n\t}\n}\n\nvec3 blend_multiply(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*c1*c2 + (1.0-opacity)*c2;\n}\n\nvec3 blend_screen(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n}\n\nfloat blend_overlay_f(float c1, float c2) {\n\treturn (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n}\n\nvec3 blend_overlay(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_hard_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*0.5*(c1*c2+blend_overlay(uv, c1, c2, 1.0)) + (1.0-opacity)*c2;\n}\n\nfloat blend_soft_light_f(float c1, float c2) {\n\treturn (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n}\n\nvec3 blend_soft_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_burn_f(float c1, float c2) {\n\treturn (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n}\n\nvec3 blend_burn(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_dodge_f(float c1, float c2) {\n\treturn (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n}\n\nvec3 blend_dodge(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_lighten(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*max(c1, c2) + (1.0-opacity)*c2;\n}\n\nvec3 blend_darken(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*min(c1, c2) + (1.0-opacity)*c2;\n}\n\nvec3 blend_difference(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n}\n",
+# "inputs": [
+# {
+# "default": "vec4(round($uv.x) , 1.0, 1.0, 1.0)",
+# "label": "Source1",
+# "longdesc": "The foreground input",
+# "name": "s1",
+# "shortdesc": "Foreground",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(1.0, $uv.y, 1.0, 1.0)",
+# "label": "Source2",
+# "longdesc": "The background input",
+# "name": "s2",
+# "shortdesc": "Background",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "label": "Opacity",
+# "longdesc": "The optional opacity mask",
+# "name": "a",
+# "shortdesc": "Mask",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "longdesc": "Blends its input, using an optional mask",
+# "name": "Blend",
+# "outputs": [
+# {
+# "longdesc": "Shows the result of the blend operation",
+# "rgba": "vec4(blend_$blend_type($uv, $(name_uv)_s1.rgb, $(name_uv)_s2.rgb, $(name_uv)_a*$(name_uv)_s1.a), min(1.0, $(name_uv)_s2.a+$(name_uv)_a*$(name_uv)_s1.a))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "The algorithm used to blend the inputs",
+# "name": "blend_type",
+# "shortdesc": "Blend mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Normal",
+# "value": "normal"
+# },
+# {
+# "name": "Dissolve",
+# "value": "dissolve"
+# },
+# {
+# "name": "Multiply",
+# "value": "multiply"
+# },
+# {
+# "name": "Screen",
+# "value": "screen"
+# },
+# {
+# "name": "Overlay",
+# "value": "overlay"
+# },
+# {
+# "name": "Hard Light",
+# "value": "hard_light"
+# },
+# {
+# "name": "Soft Light",
+# "value": "soft_light"
+# },
+# {
+# "name": "Burn",
+# "value": "burn"
+# },
+# {
+# "name": "Dodge",
+# "value": "dodge"
+# },
+# {
+# "name": "Lighten",
+# "value": "lighten"
+# },
+# {
+# "name": "Darken",
+# "value": "darken"
+# },
+# {
+# "name": "Difference",
+# "value": "difference"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "3:",
+# "longdesc": "The opacity of the blend operation",
+# "max": 1,
+# "min": 0,
+# "name": "amount",
+# "shortdesc": "Opacity",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+# "shortdesc": "Blend"
+# },
+# "type": "shader"
+# }
+# ],
+# "parameters": {
+# "param0": 10,
+# "param1": 4,
+# "param2": 1,
+# "param3": 1,
+# "param4": 1
+# },
+# "shortdesc": "Smooth Curvature",
+# "type": "graph"
+#}
+
+#----------------------
+#supersample.mmg
+#A filter that samples sub-pixel details to make them visible
+
+# "inputs": [
+# {
+# "default": "vec4(1.0, 1.0, 1.0, 1.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "instance": "vec4 supersample_$(name)(vec2 uv, float size, int count, float width) {\n\tvec4 rv = vec4(0.0);\n\tvec2 step_size = vec2(width)/size/float(count);\n\tuv -= vec2(0.5)/size;\n\tfor (int x = 0; x < count; ++x) {\n\t\tfor (int y = 0; y < count; ++y) {\n\t\t\trv += $in(uv+(vec2(float(x), float(y))+vec2(0.5))*step_size);\n\t\t}\n\t}\n\treturn rv/float(count*count);\n}",
+# "outputs": [
+# {
+# "longdesc": "Shows the supersampled image. Due to the performance cost of this node, it is recommended to connect a buffer directly to this output.",
+# "rgba": "supersample_$(name)($uv, $size, int($count), $width)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 10,
+# "first": 4,
+# "label": "Size",
+# "last": 12,
+# "longdesc": "The resolution of the output",
+# "name": "size",
+# "shortdesc": "Size",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 2,
+# "label": "Count",
+# "longdesc": "The number of samples on each axis. High values will badly impact performances.",
+# "max": 5,
+# "min": 2,
+# "name": "count",
+# "shortdesc": "Count",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Width",
+# "longdesc": "The width of the sampled area. Setting this value higher than 1 will sample neighbouring pixels and antialias the result.",
+# "max": 2,
+# "min": 1,
+# "name": "width",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#swap_channels.mmg
+#Swaps the channels of its RGBA input
+
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "label": "",
+# "longdesc": "The input RGBA image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The output RGBA image",
+# "rgba": "vec4($out_r,$out_g,$out_b,$out_a)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 2,
+# "label": "R",
+# "longdesc": "The input channel to be assigned to the Red channel",
+# "name": "out_r",
+# "shortdesc": "Red",
+# "type": "enum",
+# "values": [
+# {
+# "name": "0",
+# "value": "0.0"
+# },
+# {
+# "name": "1",
+# "value": "1.0"
+# },
+# {
+# "name": "R",
+# "value": "$in($uv).r"
+# },
+# {
+# "name": "-R",
+# "value": "1.0-$in($uv).r"
+# },
+# {
+# "name": "G",
+# "value": "$in($uv).g"
+# },
+# {
+# "name": "-G",
+# "value": "1.0-$in($uv).g"
+# },
+# {
+# "name": "B",
+# "value": "$in($uv).b"
+# },
+# {
+# "name": "-B",
+# "value": "1.0-$in($uv).b"
+# },
+# {
+# "name": "A",
+# "value": "$in($uv).a"
+# },
+# {
+# "name": "-A",
+# "value": "1.0-$in($uv).a"
+# }
+# ]
+# },
+# {
+# "default": 4,
+# "label": "G",
+# "longdesc": "The input channel to be assigned to the Green channel",
+# "name": "out_g",
+# "shortdesc": "Green",
+# "type": "enum",
+# "values": [
+# {
+# "name": "0",
+# "value": "0.0"
+# },
+# {
+# "name": "1",
+# "value": "1.0"
+# },
+# {
+# "name": "R",
+# "value": "$in($uv).r"
+# },
+# {
+# "name": "-R",
+# "value": "1.0-$in($uv).r"
+# },
+# {
+# "name": "G",
+# "value": "$in($uv).g"
+# },
+# {
+# "name": "-G",
+# "value": "1.0-$in($uv).g"
+# },
+# {
+# "name": "B",
+# "value": "$in($uv).b"
+# },
+# {
+# "name": "-B",
+# "value": "1.0-$in($uv).b"
+# },
+# {
+# "name": "A",
+# "value": "$in($uv).a"
+# },
+# {
+# "name": "-A",
+# "value": "1.0-$in($uv).a"
+# }
+# ]
+# },
+# {
+# "default": 6,
+# "label": "B",
+# "longdesc": "The input channel to be assigned to the Blue channel",
+# "name": "out_b",
+# "shortdesc": "Blue",
+# "type": "enum",
+# "values": [
+# {
+# "name": "0",
+# "value": "0.0"
+# },
+# {
+# "name": "1",
+# "value": "1.0"
+# },
+# {
+# "name": "R",
+# "value": "$in($uv).r"
+# },
+# {
+# "name": "-R",
+# "value": "1.0-$in($uv).r"
+# },
+# {
+# "name": "G",
+# "value": "$in($uv).g"
+# },
+# {
+# "name": "-G",
+# "value": "1.0-$in($uv).g"
+# },
+# {
+# "name": "B",
+# "value": "$in($uv).b"
+# },
+# {
+# "name": "-B",
+# "value": "1.0-$in($uv).b"
+# },
+# {
+# "name": "A",
+# "value": "$in($uv).a"
+# },
+# {
+# "name": "-A",
+# "value": "1.0-$in($uv).a"
+# }
+# ]
+# },
+# {
+# "default": 8,
+# "label": "A",
+# "longdesc": "The input channel to be assigned to the Alpha channel",
+# "name": "out_a",
+# "shortdesc": "Alpha",
+# "type": "enum",
+# "values": [
+# {
+# "name": "0",
+# "value": "0.0"
+# },
+# {
+# "name": "1",
+# "value": "1.0"
+# },
+# {
+# "name": "R",
+# "value": "$in($uv).r"
+# },
+# {
+# "name": "-R",
+# "value": "1.0-$in($uv).r"
+# },
+# {
+# "name": "G",
+# "value": "$in($uv).g"
+# },
+# {
+# "name": "-G",
+# "value": "1.0-$in($uv).g"
+# },
+# {
+# "name": "B",
+# "value": "$in($uv).b"
+# },
+# {
+# "name": "-B",
+# "value": "1.0-$in($uv).b"
+# },
+# {
+# "name": "A",
+# "value": "$in($uv).a"
+# },
+# {
+# "name": "-A",
+# "value": "1.0-$in($uv).a"
+# }
+# ]
+# }
+# ],
+
+#----------------------
+#math_v3.mmg
+#Performs a math operation using its inputs or parameter values
+
+# "code": "vec3 $(name_uv)_clamp_false = $op;\nvec3 $(name_uv)_clamp_true = clamp($(name_uv)_clamp_false, vec3(0.0), vec3(1.0));\n",
+# "inputs": [
+# {
+# "default": "vec3($d_in1_x, $d_in1_y, $d_in1_z)",
+# "label": "2:A",
+# "longdesc": "The A operand",
+# "name": "in1",
+# "shortdesc": "A",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3($d_in2_x, $d_in2_y, $d_in2_z)",
+# "label": "B",
+# "longdesc": "The B operand",
+# "name": "in2",
+# "shortdesc": "B",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows a greyscale image of the result",
+# "rgb": "$(name_uv)_clamp_$clamp",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 19,
+# "label": "",
+# "longdesc": "The operation to be performed",
+# "name": "op",
+# "shortdesc": "Operation",
+# "type": "enum",
+# "values": [
+# {
+# "name": "A+B",
+# "value": "$in1($uv)+$in2($uv)"
+# },
+# {
+# "name": "A-B",
+# "value": "$in1($uv)-$in2($uv)"
+# },
+# {
+# "name": "A*B",
+# "value": "$in1($uv)*$in2($uv)"
+# },
+# {
+# "name": "A/B",
+# "value": "$in1($uv)/$in2($uv)"
+# },
+# {
+# "name": "log(A)",
+# "value": "log($in1($uv))"
+# },
+# {
+# "name": "log2(A)",
+# "value": "log2($in1($uv))"
+# },
+# {
+# "name": "pow(A, B)",
+# "value": "pow($in1($uv),$in2($uv))"
+# },
+# {
+# "name": "abs(A)",
+# "value": "abs($in1($uv))"
+# },
+# {
+# "name": "round(A)",
+# "value": "round($in1($uv))"
+# },
+# {
+# "name": "floor(A)",
+# "value": "floor($in1($uv))"
+# },
+# {
+# "name": "ceil(A)",
+# "value": "ceil($in1($uv))"
+# },
+# {
+# "name": "trunc(A)",
+# "value": "trunc($in1($uv))"
+# },
+# {
+# "name": "fract(A)",
+# "value": "fract($in1($uv))"
+# },
+# {
+# "name": "min(A, B)",
+# "value": "min($in1($uv),$in2($uv))"
+# },
+# {
+# "name": "max(A, B)",
+# "value": "max($in1($uv),$in2($uv))"
+# },
+# {
+# "name": "A Vector3:
+ var K : Color = Color(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
+
+ var p : Color
+
+ if c.y < c.z:
+ p = Color(c.z, c.y, K.a, K.b)
+ else:
+ p = Color(c.y, c.z, K.r, K.g);
+
+ var q : Color
+
+ if c.x < p.r:
+ q = Color(p.r, p.g, p.a, c.x)
+ else:
+ q = Color(c.x, p.g, p.b, p.r);
+
+ var d : float = q.r - min(q.a, q.g);
+ var e : float = 1.0e-10;
+
+ return Vector3(abs(q.b + (q.a - q.g) / (6.0 * d + e)), d / (q.r + e), q.r);
+
+#vec3 hsv_to_rgb(vec3 c) {
+# vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+# vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
+# return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
+#}
+
+static func hsv_to_rgb(c : Vector3) -> Vector3:
+ var K : Color = Color(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+
+ var p : Vector3 = Commons.absv3(Commons.fractv3(Vector3(c.x, c.x, c.x) + Vector3(K.r, K.g, K.b)) * 6.0 - Vector3(K.a, K.a, K.a));
+
+ return c.z * lerp(Vector3(K.r, K.r, K.r), Commons.clampv3(p - Vector3(K.r, K.r, K.r), Vector3(), Vector3(1, 1, 1)), c.y);
+
+#adjust_hsv.mmg
+
+#vec4 $(name_uv)_rbga = $in($(uv));
+#vec3 $(name_uv)_hsv = rgb_to_hsv($(name_uv)_rbga.rgb);
+#$(name_uv)_hsv.x += $(hue);
+#$(name_uv)_hsv.y = clamp($(name_uv)_hsv.y*$(saturation), 0.0, 1.0);
+#$(name_uv)_hsv.z = clamp($(name_uv)_hsv.z*$(value), 0.0, 1.0);
+
+#hue, min: -0.5, max: 0.5, step: 0, default: 0
+#saturation, min: 0, max: 2, step: 0, default: 1
+#value, min: 0, max: 2, step: 0, default: 1
+
+#output: vec4(hsv_to_rgb($(name_uv)_hsv), $(name_uv)_rbga.a)
+
+static func adjust_hsv(color : Color, hue : float, saturation : float, value : float) -> Color:
+ var hsv : Vector3 = rgb_to_hsv(Vector3(color.r, color.g, color.b));
+
+ hsv.x += hue
+ hsv.y = clamp(hsv.y * saturation, 0.0, 1.0)
+ hsv.z = clamp(hsv.z * value, 0.0, 1.0)
+
+ var h : Vector3 = hsv_to_rgb(hsv)
+
+ return Color(h.x, h.y, h.z, color.a);
+
+#brightness, min: -1, max: 1, step: 0.01, default: 0
+#contrast, min: -1, max: 1, step: 0.01, default: 1
+
+#input: default: vec4(0.5 ,0.5, 0.5, 1.0) -> img
+
+#output: vec4(clamp($in($uv).rgb*$contrast+vec3($brightness)+0.5-$contrast*0.5, vec3(0.0), vec3(1.0)), $in($uv).a)
+
+static func brightness_contrast(color : Color, brightness : float, contrast : float) -> Color:
+ #output: vec4(clamp( $in($uv).rgb*$contrast + vec3($brightness) + 0.5 - $contrast*0.5, vec3(0.0), vec3(1.0)), $in($uv).a)
+
+ var cvv : Vector3 = Vector3(color.r, color.g, color.b) * contrast
+
+ var cv : Vector3 = cvv + Vector3(brightness, brightness, brightness) + Vector3(0.5, 0.5, 0.5) - Vector3(contrast, contrast, contrast) * 0.5
+
+ var v : Vector3 = Commons.clampv3(cv, Vector3(), Vector3(1, 1, 1))
+
+ return Color(v.x, v.y, v.z, color.a);
+
+#greyscale
+
+#input: default: vec3(0.0). (Image)
+#output: gs_$mode($in($uv))
+#mode: enum: Lightness, Average, Luminosity, Min, Max. default: 4
+
+#float gs_min(vec3 c) {
+# return min(c.r, min(c.g, c.b));
+#}
+
+static func grayscale_min(c : Vector3) -> float:
+ return min(c.x, min(c.y, c.z));
+
+#float gs_max(vec3 c) {
+# return max(c.r, max(c.g, c.b));
+#}
+
+static func grayscale_max(c : Vector3) -> float:
+ return max(c.x, max(c.y, c.z));
+
+#float gs_lightness(vec3 c) {
+# return 0.5*(max(c.r, max(c.g, c.b)) + min(c.r, min(c.g, c.b)));
+#}
+
+static func grayscale_lightness(c : Vector3) -> float:
+ return 0.5*(max(c.x, max(c.y, c.z)) + min(c.x, min(c.y, c.z)));
+
+#float gs_average(vec3 c) {
+# return 0.333333333333*(c.r + c.g + c.b);
+#}
+
+static func grayscale_average(c : Vector3) -> float:
+ return 0.333333333333*(c.x + c.y + c.z);
+
+#float gs_luminosity(vec3 c) {
+# return 0.21 * c.r + 0.72 * c.g + 0.07 * c.b;
+#}
+
+static func grayscale_luminosity(c : Vector3) -> float:
+ return 0.21 * c.x + 0.72 * c.y + 0.07 * c.z;
+
+static func invert(color : Color) -> Color:
+ return Color(1.0 - color.r, 1.0 - color.g, 1.0 - color.b, color.a);
+
+#vec3 blend_normal(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*c1 + (1.0-opacity)*c2;\n
+#}
+
+static func blend_normal(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * c1 + (1.0 - opacity) * c2
+
+#vec3 blend_dissolve(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# if (rand(uv) < opacity) {\n\t\t
+# return c1;\n\t
+# } else {\n\t\t
+# return c2;\n\t
+# }\n
+#}
+
+static func blend_dissolve(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ if (Commons.rand2(uv) < Vector2(opacity, opacity)):
+ return c1
+ else:
+ return c2
+
+#vec3 blend_multiply(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*c1*c2 + (1.0-opacity)*c2;\n
+#}
+
+static func blend_multiply(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * c1 * c2 + (1.0 - opacity) * c2
+
+#vec3 blend_screen(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_screen(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * (Vector3(1, 1, 1) - (Vector3(1, 1, 1) - c1) * (Vector3(1, 1, 1) - c2)) + (1.0 - opacity) * c2
+
+#float blend_overlay_f(float c1, float c2) {\n\t
+# return (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n
+#}
+
+static func blend_overlay_f(c1 : float, c2 : float) -> float:
+ if (c1 < 0.5):
+ return (2.0 * c1 * c2)
+ else:
+ return (1.0 - 2.0 * (1.0 - c1) * (1.0 - c2))
+
+#vec3 blend_overlay(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_overlay(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Vector3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0 - opacity) * c2
+
+#vec3 blend_hard_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*0.5*(c1*c2+blend_overlay(uv, c1, c2, 1.0)) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_hard_light(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * 0.5 * (c1 * c2 + blend_overlay(uv, c1, c2, 1.0)) + (1.0 - opacity) * c2
+
+#float blend_soft_light_f(float c1, float c2) {\n\t
+# return (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n
+#}
+
+static func blend_soft_light_f(c1 : float, c2 : float) -> float:
+ if (c2 < 0.5):
+ return (2.0 * c1 * c2 + c1 * c1 * (1.0 - 2.0 * c2))
+ else:
+ return 2.0 * c1 * (1.0 - c2) + sqrt(c1) * (2.0 * c2 - 1.0)
+
+#vec3 blend_soft_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_soft_light(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Vector3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0 - opacity) * c2
+
+#float blend_burn_f(float c1, float c2) {\n\t
+# return (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n
+#}
+
+static func blend_burn_f(c1 : float, c2 : float) -> float:
+ if (c1 == 0.0):
+ return c1
+ else:
+ return max((1.0 - ((1.0 - c2) / c1)), 0.0)
+
+#vec3 blend_burn(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2;
+#}
+
+static func blend_burn(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Vector3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0 - opacity) * c2
+
+#float blend_dodge_f(float c1, float c2) {\n\t
+# return (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n
+#}
+
+static func blend_dodge_f(c1 : float, c2 : float) -> float:
+ if (c1==1.0):
+ return c1
+ else:
+ return min(c2 / (1.0 - c1), 1.0)
+
+#vec3 blend_dodge(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_dodge(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Vector3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0 - opacity) * c2
+
+#vec3 blend_lighten(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*max(c1, c2) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_lighten(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Commons.maxv3(c1, c2) + (1.0 - opacity) * c2
+
+#vec3 blend_darken(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*min(c1, c2) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_darken(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Commons.minv3(c1, c2) + (1.0 - opacity) * c2
+
+#vec3 blend_difference(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n
+#}
+
+static func blend_difference(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3:
+ return opacity * Commons.clampv3(c2 - c1, Vector3(), Vector3(1, 1, 1)) + (1.0 - opacity) * c2
+
+#vec4 adjust_levels(vec4 input, vec4 in_min, vec4 in_mid, vec4 in_max, vec4 out_min, vec4 out_max) {\n\t
+# input = clamp((input-in_min)/(in_max-in_min), 0.0, 1.0);\n\t
+# in_mid = (in_mid-in_min)/(in_max-in_min);\n\t
+# vec4 dark = step(in_mid, input);\n\t
+#
+# input = 0.5*mix(input/(in_mid), 1.0+(input-in_mid)/(1.0-in_mid), dark);\n\t
+# return out_min+input*(out_max-out_min);\n
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/gradients.gd b/game/addons/mat_maker_gd/nodes/common/gradients.gd
new file mode 100644
index 0000000..9c40cc6
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/gradients.gd
@@ -0,0 +1,225 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#note: data : PoolRealArray -> pos, r, g, b, a, pos, r, g, b, a ....
+
+#gradient.mmg
+
+#float $(name_uv)_r = 0.5+(cos($rotate*0.01745329251)*($uv.x-0.5)+sin($rotate*0.01745329251)*($uv.y-0.5))/(cos(abs(mod($rotate, 90.0)-45.0)*0.01745329251)*1.41421356237);"
+
+#output: $gradient(fract($(name_uv)_r*$repeat))
+
+#repeat: default: 1, min: 1, max : 32, step: 1
+#rotate: default: 0, min: -180, max: 180, step: 0.1
+
+#default: "interpolation": 1,
+# "points": [{"a": 1,"b": 0,"g": 0,"pos": 0,"r": 0},{"a": 1,"b": 1,"g": 1,"pos": 1,"r": 1} ],
+
+#radial_gradient.mmg
+
+#output: $gradient(fract($repeat*1.41421356237*length(fract($uv)-vec2(0.5, 0.5))))
+
+#repeat: default: 1, min: 1, max : 32, step: 1
+
+#circular_gradient.mmg
+
+#output: gradient(fract($repeat*0.15915494309*atan($uv.y-0.5, $uv.x-0.5)))
+
+#repeat: default: 1, min: 1, max : 32, step: 1
+
+#gradient.gd
+
+static func radial_gradient_type_1(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_1(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data)
+
+static func radial_gradient_type_2(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_2(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data)
+
+static func radial_gradient_type_3(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_3(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data)
+
+static func radial_gradient_type_4(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_4(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data)
+
+
+
+static func normal_gradient_type_1(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color:
+ var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237);
+ return gradient_type_1(Commons.fractf(rr * repeat), data)
+
+static func normal_gradient_type_2(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color:
+ var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237);
+ return gradient_type_2(Commons.fractf(rr * repeat), data)
+
+static func normal_gradient_type_3(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color:
+ var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237);
+ return gradient_type_3(Commons.fractf(rr * repeat), data)
+
+static func normal_gradient_type_4(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color:
+ var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237);
+ return gradient_type_4(Commons.fractf(rr * repeat), data)
+
+
+
+static func circular_gradient_type_1(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_1(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data)
+
+static func circular_gradient_type_2(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_2(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data)
+
+static func circular_gradient_type_3(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_3(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data)
+
+static func circular_gradient_type_4(uv : Vector2, repeat : float, data : PoolRealArray) -> Color:
+ return gradient_type_4(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data)
+
+
+static func gradient_type_1(x : float, data : PoolRealArray) -> Color:
+ if data.size() % 5 != 0 || data.size() == 0:
+ return Color()
+
+ for i in range(0, data.size() - 5, 5):
+ if x < 0.5 * (data[i] + data[i + 5]):
+ return Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4])
+
+ var ds = data.size() - 5
+ return Color(data[ds + 1], data[ds + 2], data[ds + 3], data[ds + 4])
+
+static func gradient_type_2(x : float, data : PoolRealArray) -> Color:
+ if data.size() % 5 != 0 || data.size() == 0:
+ return Color()
+
+ for i in range(0, data.size(), 5):
+ if x < data[i]:
+ if i == 0:
+ return Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4])
+
+ var cprev : Color = Color(data[i - 4], data[i - 3], data[i - 2], data[i - 1])
+ var ccurr : Color = Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4])
+ return lerp(cprev, ccurr, (x - data[i - 5]) / (data[i] - data[i - 5]));
+
+ var ds = data.size() - 5
+ return Color(data[ds + 1], data[ds + 2], data[ds + 3], data[ds + 4])
+
+static func gradient_type_3(x : float, data : PoolRealArray) -> Color:
+ if data.size() % 5 != 0 || data.size() == 0:
+ return Color()
+
+ for i in range(0, data.size(), 5):
+ if x < data[i]:
+ if i == 0:
+ return Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4])
+
+ var cprev : Color = Color(data[i - 4], data[i - 3], data[i - 2], data[i - 1])
+ var ccurr : Color = Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4])
+ return lerp(cprev, ccurr, 0.5 - 0.5 * cos(3.14159265359 * ((x - data[i - 5]) / (data[i] - data[i - 5]))))
+
+ var ds = data.size() - 5
+ return Color(data[ds + 1], data[ds + 2], data[ds + 3], data[ds + 4])
+
+static func get_data_color(index : int, data : PoolRealArray) -> Color:
+ var i : int = index * 5
+
+ return Color(data[i + 1], data[i + 2],data[i + 3], data[i + 4])
+
+static func get_data_pos(index : int, data : PoolRealArray) -> float:
+ return data[index * 5]
+
+static func gradient_type_4(x : float, data : PoolRealArray) -> Color:
+ if data.size() % 5 != 0 || data.size() == 0:
+ return Color()
+
+ var ds : int = data.size() / 5
+ var s : int = ds - 1
+
+ for i in range(0, s):
+ if x < get_data_pos(i, data):
+ if i == 0:
+ return get_data_color(i, data)
+
+# var dx : String = "(x-%s)/(%s-%s)" % [ pv(name, i), pv(name, i+1), pv(name, i) ]
+ var dx : float = (x - get_data_pos(i, data))/(get_data_pos(i + 1, data) - get_data_pos(i, data))
+# var b : String = "mix(%s, %s, %s)" % [ pc(name, i), pc(name, i+1), dx ]
+ var b : Color = lerp(get_data_color(i - 1, data), get_data_color(i - 1, data), dx)
+
+ if i == 1:
+# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ]
+ var c : Color = lerp(get_data_color(i + 1, data), get_data_color(i + 2, data), (x - get_data_pos(i + 1, data))/(get_data_pos(i + 2, data) - get_data_pos(i + 1, data)))
+# shader += " return mix("+c+", "+b+", 1.0-0.5*"+dx+");\n"
+ return lerp(c, b, 1.0 - 0.5 * dx)
+
+# var a : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i-1), pc(name, i), pv(name, i-1), pv(name, i), pv(name, i-1) ]
+ var a : Color = lerp(get_data_color(i - 1, data), get_data_color(i, data), (x - get_data_pos(i - 1, data)) / (get_data_pos(i, data) - get_data_pos(i - 1, data)))
+
+# if i < s-1:
+ if i < s - 1:
+# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ]
+ var c : Color = lerp(get_data_color(i + 1, data), get_data_color(i + 2, data), (x - get_data_pos(i + 1, data)) / (get_data_pos(i + 2, data) - get_data_pos(i + 1, data)))
+# var ac : String = "mix("+a+", "+c+", 0.5-0.5*cos(3.14159265359*"+dx+"))"
+ var ac : Color = lerp(a, c, 0.5-0.5*cos(3.14159265359 * dx))
+# shader += " return 0.5*("+b+" + "+ac+");\n"
+ var dt : Color = b + ac
+
+ dt.r *= 0.5
+ dt.g *= 0.5
+ dt.b *= 0.5
+ dt.a = clamp(0, 1, dt.a)
+
+ return dt
+# else
+ else:
+# shader += " return mix("+a+", "+b+", 0.5+0.5*"+dx+");\n"
+ return lerp(a, b, 0.5 + 0.5 * dx)
+
+ return get_data_color(ds - 1, data)
+
+#todo make it selectable
+static func gradient_type_5(x : float, data : PoolRealArray) -> Color:
+ if data.size() % 5 != 0 || data.size() == 0:
+ return Color()
+
+ var ds : int = data.size() / 5
+ var s : int = ds - 1
+
+ for i in range(0, s):
+ if x < get_data_pos(i, data):
+ if i == 0:
+ return get_data_color(i, data)
+
+# var dx : String = "(x-%s)/(%s-%s)" % [ pv(name, i), pv(name, i+1), pv(name, i) ]
+ var dx : float = (x - get_data_pos(i, data))/(get_data_pos(i + 1, data) - get_data_pos(i, data))
+# var b : String = "mix(%s, %s, %s)" % [ pc(name, i), pc(name, i+1), dx ]
+ var b : Color = lerp(get_data_color(i - 1, data), get_data_color(i - 1, data), dx)
+
+ if i == 1:
+# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ]
+ var c : Color = lerp(get_data_color(i + 1, data), get_data_color(i + 2, data), (x - get_data_pos(i + 1, data))/(get_data_pos(i + 2, data) - get_data_pos(i + 1, data)))
+# shader += " return mix("+c+", "+b+", 1.0-0.5*"+dx+");\n"
+ return lerp(c, b, 1.0 - 0.5 * dx)
+
+# var a : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i-1), pc(name, i), pv(name, i-1), pv(name, i), pv(name, i-1) ]
+ var a : Color = lerp(get_data_color(i - 1, data), get_data_color(i, data), (x - get_data_pos(i - 1, data)) / (get_data_pos(i, data) - get_data_pos(i - 1, data)))
+
+# if i < s-1:
+ if i < s - 1:
+# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ]
+ var c : Color = lerp(get_data_color(i+1, data), get_data_color(i+2, data), (x - get_data_pos(i + 1, data)) / (get_data_pos(i + 2, data) - get_data_pos(i + 1, data)))
+# var ac : String = "mix("+a+", "+c+", 0.5-0.5*cos(3.14159265359*"+dx+"))"
+ var ac : Color = lerp(a, c, 0.5-0.5*cos(3.14159265359 * dx))
+# shader += " return 0.5*("+b+" + "+ac+");\n"
+ var dt : Color = b + ac
+
+ dt.r *= 0.5
+ dt.g *= 0.5
+ dt.b *= 0.5
+ dt.a = clamp(0, 1, dt.a)
+
+ return dt
+# else
+ else:
+# shader += " return mix("+a+", "+b+", 0.5+0.5*"+dx+");\n"
+ return lerp(a, b, 0.5 + 0.5 * dx)
+
+ return get_data_color(ds - 1, data)
diff --git a/game/addons/mat_maker_gd/nodes/common/mwf.gd b/game/addons/mat_maker_gd/nodes/common/mwf.gd
new file mode 100644
index 0000000..7226ea6
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/mwf.gd
@@ -0,0 +1,705 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#mwf_create_map.mmg
+#Creates a workflow map using a heightmap and an optional seed map. The workflow map contains height information as well as orientation and a seed for random offset for the material it will be applied to.
+
+# "inputs": [
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "The input height map",
+# "name": "h",
+# "shortdesc": "Height",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The input offset seed map",
+# "name": "o",
+# "shortdesc": "Offset",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated workflow map, to be connected to a MixMap or an ApplyMap node",
+# "rgb": "vec3($height*$h($uv), $angle*0.00277777777+0.5, rand(vec2(float($seed)+$o($uv))))",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Height",
+# "longdesc": "The maximum height of the workflow map, used as multiplier for the input height map",
+# "max": 1,
+# "min": 0,
+# "name": "height",
+# "shortdesc": "Height",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Angle",
+# "longdesc": "The angle stored in the workflow map",
+# "max": 180,
+# "min": -180,
+# "name": "angle",
+# "shortdesc": "Angle",
+# "step": 0.1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#mwf_mix_maps.mmg
+#Mixes up to 4 workflow maps, to be used with the same base material
+
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "longdesc": "The first workflow map",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "longdesc": "The second workflow map",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "longdesc": "The third input map",
+# "name": "in3",
+# "shortdesc": "Input3",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "longdesc": "The fourth input map",
+# "name": "in4",
+# "shortdesc": "Input4",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Generates a merged workflow map",
+# "rgb": "matmap_mix(matmap_mix($in1($uv), $in2($uv)), matmap_mix($in3($uv), $in4($uv)))",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+
+#----------------------
+#mwf_map.mmg
+#"Applies a workflow map to a base material, and generates height information as well as PBR channels for the result.\nThe height input must be connected to a Create Map or Mix Maps node. The other inputs must be connected to a base material.\nThe outputs must be connected to the Mix or the Output node, or a workflow filter node.
+
+# "code": "float $(name_uv)_angle = 6.28318530718*($map($uv).y-0.5);\nvec2 $(name_uv)_uv = matmap_uv($uv, $(name_uv)_angle, $map($uv).z);\n",
+# "inputs": [
+# {
+# "default": "vec3(1.0, 0.5, 0.0)",
+# "label": "Map",
+# "longdesc": "The input workflow map",
+# "name": "map",
+# "shortdesc": "Map",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "group_size": 4,
+# "label": "Albedo",
+# "longdesc": "The Albedo channel of the input base material",
+# "name": "mat1",
+# "shortdesc": "Albedo",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "ORM",
+# "longdesc": "The ambient occlusion, roughness and metallic channels of the input material",
+# "name": "mat2",
+# "shortdesc": "ORM",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "Emission",
+# "longdesc": "The emission channel of the input material",
+# "name": "mat3",
+# "shortdesc": "Emission",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.5, 0.5, 1.0)",
+# "label": "Normal",
+# "longdesc": "The normal map of the input material",
+# "name": "mat4",
+# "shortdesc": "Normal",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$map($uv).x",
+# "group_size": 5,
+# "longdesc": "The height map of the result",
+# "shortdesc": "Height",
+# "type": "f"
+# },
+# {
+# "longdesc": "The albedo channel of the result",
+# "rgb": "$mat1($(name_uv)_uv)",
+# "shortdesc": "Albedo",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "The ambient occlusion, roughness and metallic channels of the result",
+# "rgb": "$mat2($(name_uv)_uv)",
+# "shortdesc": "ORM",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "The emission channel of the result",
+# "rgb": "$mat3($(name_uv)_uv)",
+# "shortdesc": "Emission",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "The normal map of the result",
+# "rgb": "matmap_rotate_nm($mat4($(name_uv)_uv), -$(name_uv)_angle)",
+# "shortdesc": "Normal",
+# "type": "rgb"
+# }
+# ],
+
+#----------------------
+#mwf_mix.mmg
+#Combines the outputs of 2 mapped base materials (keeping the \"highest\" material).
+
+# "code": "float $(name_uv)_a1 = step($h1($uv), $h2($uv));",
+# "inputs": [
+# {
+# "default": "0.0",
+# "group_size": 5,
+# "label": "Height 1",
+# "longdesc": "The height map of the first input",
+# "name": "h1",
+# "shortdesc": "Height1",
+# "type": "f"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "Albedo 1",
+# "longdesc": "The albedo channel of the first input",
+# "name": "c1",
+# "shortdesc": "Albedo1",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "ORM 1",
+# "longdesc": "The ambient occlusion, roughness and metallic channels of the first input",
+# "name": "orm1",
+# "shortdesc": "ORM1",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "Emission 1",
+# "longdesc": "The emission channel of the first input",
+# "name": "em1",
+# "shortdesc": "Emission1",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.5, 0.5, 1.0)",
+# "label": "Normal 1",
+# "longdesc": "The normal map of the first input",
+# "name": "nm1",
+# "shortdesc": "Normal1",
+# "type": "rgb"
+# },
+# {
+# "default": "0.0",
+# "group_size": 5,
+# "label": "Height 2",
+# "longdesc": "The height map of the second input",
+# "name": "h2",
+# "shortdesc": "Height2",
+# "type": "f"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "Albedo 2",
+# "longdesc": "The albedo channel of the second input",
+# "name": "c2",
+# "shortdesc": "Albedo2",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "ORM 2",
+# "longdesc": "The ambient occlusion, roughness and metallic channels of the second input",
+# "name": "orm2",
+# "shortdesc": "ORM2",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "Emission 2",
+# "longdesc": "The emission channel of the second input",
+# "name": "em2",
+# "shortdesc": "Emission2",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(0.5, 0.5, 1.0)",
+# "label": "Normal 2",
+# "longdesc": "The normal map of the second input",
+# "name": "nm2",
+# "shortdesc": "Normal2",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "max($h1($uv), $h2($uv))",
+# "group_size": 5,
+# "longdesc": "Generates the height of the result",
+# "shortdesc": "Height",
+# "type": "f"
+# },
+# {
+# "longdesc": "Shows the output albedo channel",
+# "rgb": "mix($c1($uv), $c2($uv), $(name_uv)_a1)",
+# "shortdesc": "Albedo",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "Shows the output ambient occlusion, roughness and metallic channels",
+# "rgb": "mix($orm1($uv), $orm2($uv), $(name_uv)_a1)",
+# "shortdesc": "ORM",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "Shows the output emission channel",
+# "rgb": "mix($em1($uv), $em2($uv), $(name_uv)_a1)",
+# "shortdesc": "Emission",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "Shows the output normal map",
+# "rgb": "mix($nm1($uv), $nm2($uv), $(name_uv)_a1)",
+# "shortdesc": "Normal",
+# "type": "rgb"
+# }
+# ],
+
+
+#----------------------
+#mwf_output.mmg
+
+#{
+# "connections": [
+# {
+# "from": "colorize_3",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 6
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "colorize_3",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "occlusion",
+# "to_port": 0
+# },
+# {
+# "from": "occlusion",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 5
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 2,
+# "to": "decompose",
+# "to_port": 0
+# },
+# {
+# "from": "decompose",
+# "from_port": 1,
+# "to": "gen_outputs",
+# "to_port": 2
+# },
+# {
+# "from": "decompose",
+# "from_port": 2,
+# "to": "gen_outputs",
+# "to_port": 1
+# },
+# {
+# "from": "blend_2",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 4
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 3,
+# "to": "gen_outputs",
+# "to_port": 3
+# },
+# {
+# "from": "brightness_contrast",
+# "from_port": 0,
+# "to": "blend_2",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 4,
+# "to": "brightness_contrast",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "normal_map_2",
+# "to_port": 0
+# },
+# {
+# "from": "normal_map_2",
+# "from_port": 0,
+# "to": "blend_2",
+# "to_port": 1
+# }
+# ],
+# "label": "Output",
+# "longdesc": "Converts a workflow mapped material (from an Apply Map or a Mix node) for a Material node",
+# "name": "mwf_output",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "colorize_3",
+# "node_position": {
+# "x": -939.637451,
+# "y": 871.842407
+# },
+# "parameters": {
+# "gradient": {
+# "interpolation": 1,
+# "points": [
+# {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "pos": 0,
+# "r": 1
+# },
+# {
+# "a": 1,
+# "b": 0,
+# "g": 0,
+# "pos": 1,
+# "r": 0
+# }
+# ],
+# "type": "Gradient"
+# }
+# },
+# "type": "colorize"
+# },
+# {
+# "name": "occlusion",
+# "node_position": {
+# "x": -994.845825,
+# "y": 786.968262
+# },
+# "parameters": {
+# "param0": 10,
+# "param2": 1
+# },
+# "type": "occlusion"
+# },
+# {
+# "name": "decompose",
+# "node_position": {
+# "x": -924.371338,
+# "y": 570.25
+# },
+# "parameters": {
+#
+# },
+# "type": "decompose"
+# },
+# {
+# "name": "blend_2",
+# "node_position": {
+# "x": -931.305542,
+# "y": 677.328491
+# },
+# "parameters": {
+# "amount": 1,
+# "blend_type": 4
+# },
+# "type": "blend"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -1626.805542,
+# "y": 608.758606
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 5,
+# "name": "Height",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "name": "Albedo",
+# "type": "rgb"
+# },
+# {
+# "group_size": 0,
+# "name": "ORM",
+# "type": "rgb"
+# },
+# {
+# "group_size": 0,
+# "name": "Emission",
+# "type": "rgb"
+# },
+# {
+# "group_size": 0,
+# "name": "Normal",
+# "type": "rgb"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": -635.305542,
+# "y": 597.758606
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 7,
+# "longdesc": "",
+# "name": "Albedo",
+# "shortdesc": "Albedo",
+# "type": "rgb"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "Metallic",
+# "shortdesc": "Metallic",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "Roughness",
+# "shortdesc": "Roughness",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "Emission",
+# "shortdesc": "Emission",
+# "type": "rgb"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "Normal",
+# "shortdesc": "Normal",
+# "type": "rgb"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "Occlusion",
+# "shortdesc": "Occlusion",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "Depth",
+# "shortdesc": "Depth",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -1104.881836,
+# "y": 425.25
+# },
+# "parameters": {
+# "param0": 1,
+# "param2": 1
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Occlusion",
+# "linked_widgets": [
+# {
+# "node": "occlusion",
+# "widget": "param2"
+# }
+# ],
+# "longdesc": "The strength of the calculated occlusion effect",
+# "name": "param2",
+# "shortdesc": "Occlusion",
+# "type": "linked_control"
+# },
+# {
+# "label": "Mat Normal",
+# "linked_widgets": [
+# {
+# "node": "blend_2",
+# "widget": "amount"
+# }
+# ],
+# "longdesc": "The strength of normals from the base materials (compared to the normal generated from height information))",
+# "name": "param0",
+# "shortdesc": "MatNormal",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "brightness_contrast",
+# "node_position": {
+# "x": -1177.223877,
+# "y": 677.062317
+# },
+# "parameters": {
+# "brightness": 0,
+# "contrast": 1
+# },
+# "type": "brightness_contrast"
+# },
+# {
+# "name": "normal_map_2",
+# "node_position": {
+# "x": -1152.5,
+# "y": 544.75
+# },
+# "parameters": {
+# "param0": 10,
+# "param1": 1.02,
+# "param2": 0,
+# "param4": 1
+# },
+# "type": "normal_map"
+# }
+# ],
+# "parameters": {
+# "param0": 1,
+# "param2": 1
+# },
+# "shortdesc": "Output",
+# "type": "graph"
+#}
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+#----------------------
+#edge_detect.mmg
+
+
+#vec3 matmap_mix(vec3 in1, vec3 in2) {\n\t
+# float is_in1 = step(in2.x, in1.x);\n\t
+# //return vec3(max(in1.x, in2.x), in1.yz*is_in1+in2.yz*(1.0-is_in1));\n\t
+# return vec3(max(in1.x, in2.x), mix(in2.yz, in1.yz, is_in1));\n
+#}
+
+#vec2 matmap_uv(vec2 uv, float angle, float seed) {\n\t
+# uv -= vec2(0.5);\n\tvec2 rv;\n\t
+# rv.x = uv.x*cos(angle)+uv.y*sin(angle);\n\t
+# rv.y = -uv.x*sin(angle)+uv.y*cos(angle);\n\t
+# return fract(rv + rand2(vec2(seed)));\n
+#}
+
+#vec3 matmap_rotate_nm(vec3 input, float angle) {\n\t
+# vec2 uv = input.xy - vec2(0.5);\n\t
+# vec2 rv;\n\t
+# rv.x = uv.x*cos(angle)+uv.y*sin(angle);\n\t
+# rv.y = -uv.x*sin(angle)+uv.y*cos(angle);\n\t
+# return vec3(rv + vec2(0.5), input.z);\n
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/noise_fbm.gd b/game/addons/mat_maker_gd/nodes/common/noise_fbm.gd
new file mode 100644
index 0000000..8fb6f25
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/noise_fbm.gd
@@ -0,0 +1,691 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#fbm2.mmg (and fbm.mmg)
+
+#Output:
+#$(name)_fbm($(uv), vec2($(scale_x), $(scale_y)), int($(folds)), int($(iterations)), $(persistence), float($(seed)))
+
+#Instance:
+#float $(name)_fbm(vec2 coord, vec2 size, int folds, int octaves, float persistence, float seed) {
+# float normalize_factor = 0.0;
+# float value = 0.0;
+# float scale = 1.0;
+#
+# for (int i = 0; i < octaves; i++) {
+# float noise = fbm_$noise(coord*size, size, seed);
+#
+# for (int f = 0; f < folds; ++f) {
+# noise = abs(2.0*noise-1.0);
+# }
+#
+# value += noise * scale;
+# normalize_factor += scale;
+# size *= 2.0;
+# scale *= persistence;
+# }
+#
+# return value / normalize_factor;
+#}
+
+#Inputs:
+#noise, enum, default: 2, values: Value, Perlin, Simplex, Cellular, Cellular2, Cellular3, Cellular4, Cellular5, Cellular6
+#scale, vector2, default: 4, min: 1, max: 32, step: 1
+#folds, float, default: 0, min: 0, max: 5, step: 1
+#iterations (octaves), float, default: 3, min: 1, max: 10, step: 1
+#persistence, float, default: 0.5, min: 0, max: 1, step: 0.01
+
+static func fbmval(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = fbmf(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func perlin(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = perlinf(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func perlinabs(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = perlinf(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func simplex(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = fbm_simplexf(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func cellular(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = cellularf(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func cellular2(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = cellular2f(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func cellular3(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = cellular3f(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func cellular4(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = cellular4f(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func cellular5(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = cellular5f(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+static func cellular6(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color:
+ var f : float = cellular6f(uv, size, folds, octaves, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+
+static func fbmf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_value(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func perlinf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_perlin(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func perlinabsf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_perlinabs(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func fbm_simplexf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_simplex(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func cellularf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_cellular(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func cellular2f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_cellular2(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func cellular3f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_cellular3(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func cellular4f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_cellular4(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func cellular5f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_cellular5(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+static func cellular6f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float:
+ var normalize_factor : float = 0.0;
+ var value : float = 0.0;
+ var scale : float = 1.0;
+
+ for i in range(octaves):# (int i = 0; i < octaves; i++) {
+ var noise : float = fbm_cellular6(coord*size, size, pseed)
+
+ for j in range(folds):# (int f = 0; f < folds; ++f) {
+ noise = abs(2.0*noise-1.0);
+
+ value += noise * scale
+ normalize_factor += scale;
+ size *= 2.0;
+ scale *= persistence;
+
+ return value / normalize_factor;
+
+
+#float fbm_value(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+#
+# float p00 = rand(mod(o, size));
+# float p01 = rand(mod(o + vec2(0.0, 1.0), size));
+# float p10 = rand(mod(o + vec2(1.0, 0.0), size));
+# float p11 = rand(mod(o + vec2(1.0, 1.0), size));
+#
+# vec2 t = f * f * (3.0 - 2.0 * f);
+#
+# return mix(mix(p00, p10, t.x), mix(p01, p11, t.x), t.y);
+#}
+
+static func fbm_value(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+ var p00 : float = Commons.rand(Commons.modv2(o, size));
+ var p01 : float = Commons.rand(Commons.modv2(o + Vector2(0.0, 1.0), size));
+ var p10 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 0.0), size));
+ var p11 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 1.0), size));
+
+ var t : Vector2 = f * f * (Vector2(3, 3) - 2.0 * f);
+ return lerp(lerp(p00, p10, t.x), lerp(p01, p11, t.x), t.y);
+
+
+#float fbm_perlin(vec2 coord, vec2 size, float seed) {
+# tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+#
+# float a00 = rand(mod(o, size)) * 6.28318530718;
+# float a01 = rand(mod(o + vec2(0.0, 1.0), size)) * 6.28318530718;
+# float a10 = rand(mod(o + vec2(1.0, 0.0), size)) * 6.28318530718;
+# float a11 = rand(mod(o + vec2(1.0, 1.0), size)) * 6.28318530718;
+#
+# vec2 v00 = vec2(cos(a00), sin(a00));
+# vec2 v01 = vec2(cos(a01), sin(a01));
+# vec2 v10 = vec2(cos(a10), sin(a10));
+# vec2 v11 = vec2(cos(a11), sin(a11));
+#
+# float p00 = dot(v00, f);
+# float p01 = dot(v01, f - vec2(0.0, 1.0));
+# float p10 = dot(v10, f - vec2(1.0, 0.0));
+# float p11 = dot(v11, f - vec2(1.0, 1.0));
+#
+# vec2 t = f * f * (3.0 - 2.0 * f);
+#
+# return 0.5 + mix(mix(p00, p10, t.x), mix(p01, p11, t.x), t.y);
+#}
+
+static func fbm_perlin(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+ var a00 : float = Commons.rand(Commons.modv2(o, size)) * 6.28318530718;
+ var a01 : float = Commons.rand(Commons.modv2(o + Vector2(0.0, 1.0), size)) * 6.28318530718;
+ var a10 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 0.0), size)) * 6.28318530718;
+ var a11 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 1.0), size)) * 6.28318530718;
+ var v00 : Vector2 = Vector2(cos(a00), sin(a00));
+ var v01 : Vector2 = Vector2(cos(a01), sin(a01));
+ var v10 : Vector2 = Vector2(cos(a10), sin(a10));
+ var v11 : Vector2 = Vector2(cos(a11), sin(a11));
+ var p00 : float = v00.dot(f);
+ var p01 : float = v01.dot(f - Vector2(0.0, 1.0));
+ var p10 : float = v10.dot(f - Vector2(1.0, 0.0));
+ var p11 : float = v11.dot(f - Vector2(1.0, 1.0));
+
+ var t : Vector2 = f * f * (Vector2(3, 3) - 2.0 * f);
+
+ return 0.5 + lerp(lerp(p00, p10, t.x), lerp(p01, p11, t.x), t.y);
+
+#float fbm_perlinabs(vec2 coord, vec2 size, float seed) {
+# return abs(2.0*fbm_perlin(coord, size, seed)-1.0);
+#}
+
+static func fbm_perlinabs(coord : Vector2, size : Vector2, pseed : float) -> float:
+ return abs(2.0*fbm_perlin(coord, size, pseed)-1.0)
+
+#vec2 rgrad2(vec2 p, float rot, float seed) {
+# float u = rand(p + vec2(seed, 1.0-seed));
+# u = fract(u) * 6.28318530718; // 2*pi
+# return vec2(cos(u), sin(u));
+#}
+
+static func rgrad2(p : Vector2, rot : float, pseed : float) -> Vector2:
+ var u : float = Commons.rand(p + Vector2(pseed, 1.0-pseed));
+ u = Commons.fract(u) * 6.28318530718; # 2*pi
+ return Vector2(cos(u), sin(u))
+
+#float fbm_simplex(vec2 coord, vec2 size, float seed) {
+# coord *= 2.0; // needed for it to tile
+# coord += rand2(vec2(seed, 1.0-seed)) + size;
+# size *= 2.0; // needed for it to tile
+# coord.y += 0.001;
+#
+# vec2 uv = vec2(coord.x + coord.y*0.5, coord.y);
+# vec2 i0 = floor(uv); vec2 f0 = fract(uv);
+# vec2 i1 = (f0.x > f0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
+# vec2 p0 = vec2(i0.x - i0.y * 0.5, i0.y);
+# vec2 p1 = vec2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y);
+# vec2 p2 = vec2(p0.x + 0.5, p0.y + 1.0);
+#
+# i1 = i0 + i1;
+#
+# vec2 i2 = i0 + vec2(1.0, 1.0);
+# vec2 d0 = coord - p0;
+# vec2 d1 = coord - p1;
+# vec2 d2 = coord - p2;
+#
+# vec3 xw = mod(vec3(p0.x, p1.x, p2.x), size.x);
+# vec3 yw = mod(vec3(p0.y, p1.y, p2.y), size.y);
+#
+# vec3 iuw = xw + 0.5 * yw;
+# vec3 ivw = yw;
+#
+# vec2 g0 = rgrad2(vec2(iuw.x, ivw.x), 0.0, seed);
+# vec2 g1 = rgrad2(vec2(iuw.y, ivw.y), 0.0, seed);
+# vec2 g2 = rgrad2(vec2(iuw.z, ivw.z), 0.0, seed);
+#
+# vec3 w = vec3(dot(g0, d0), dot(g1, d1), dot(g2, d2));
+# vec3 t = 0.8 - vec3(dot(d0, d0), dot(d1, d1), dot(d2, d2));
+#
+# t = max(t, vec3(0.0));
+# vec3 t2 = t * t;
+# vec3 t4 = t2 * t2;
+# float n = dot(t4, w);
+#
+# return 0.5 + 5.5 * n;
+#}
+
+static func fbm_simplex(coord : Vector2, size : Vector2, pseed : float) -> float:
+ coord *= 2.0; # needed for it to tile
+ coord += Commons.rand2(Vector2(pseed, 1.0-pseed)) + size;
+ size *= 2.0; # needed for it to tile
+ coord.y += 0.001;
+
+ var uv : Vector2 = Vector2(coord.x + coord.y*0.5, coord.y);
+ var i0 : Vector2 = Commons.floorv2(uv);
+ var f0 : Vector2 = Commons.fractv2(uv);
+ var i1 : Vector2
+
+ if (f0.x > f0.y):
+ i1 = Vector2(1.0, 0.0)
+ else:
+ i1 = Vector2(0.0, 1.0);
+
+ var p0 : Vector2 = Vector2(i0.x - i0.y * 0.5, i0.y);
+ var p1 : Vector2 = Vector2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y);
+ var p2 : Vector2 = Vector2(p0.x + 0.5, p0.y + 1.0);
+
+ i1 = i0 + i1;
+
+ var i2 : Vector2 = i0 + Vector2(1.0, 1.0);
+ var d0 : Vector2 = coord - p0;
+ var d1 : Vector2 = coord - p1;
+ var d2 : Vector2 = coord - p2;
+
+ var xw : Vector3 = Commons.modv3(Vector3(p0.x, p1.x, p2.x), Vector3(size.x, size.x, size.x));
+ var yw : Vector3 = Commons.modv3(Vector3(p0.y, p1.y, p2.y), Vector3(size.y, size.y, size.y));
+
+ var iuw : Vector3 = xw + 0.5 * yw;
+ var ivw : Vector3 = yw;
+
+ var g0 : Vector2 = rgrad2(Vector2(iuw.x, ivw.x), 0.0, pseed);
+ var g1 : Vector2 = rgrad2(Vector2(iuw.y, ivw.y), 0.0, pseed);
+ var g2 : Vector2 = rgrad2(Vector2(iuw.z, ivw.z), 0.0, pseed);
+
+ var w : Vector3 = Vector3(g0.dot(d0), g1.dot(d1), g2.dot(d2));
+ var t : Vector3 = Vector3(0.8, 0.8, 0.8) - Vector3(d0.dot(d0), d1.dot(d1), d2.dot(d2));
+
+ t = Commons.maxv3(t, Vector3());
+ var t2 : Vector3 = t * t;
+ var t4 : Vector3 = t2 * t2;
+ var n : float = t4.dot(w);
+
+ return 0.5 + 5.5 * n;
+
+#float fbm_cellular(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+# float min_dist = 2.0;
+#
+# for(float x = -1.0; x <= 1.0; x++) {
+# for(float y = -1.0; y <= 1.0; y++) {
+# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);
+# float dist = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y);
+# min_dist = min(min_dist, dist);
+# }
+# }
+#
+# return min_dist;
+#}
+
+static func fbm_cellular(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+ var min_dist : float = 2.0;
+
+ for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) {
+ var x : float = xx
+
+ for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) {
+ var y : float = yy
+
+ var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y);
+ var dist : float = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y);
+ min_dist = min(min_dist, dist);
+
+ return min_dist;
+
+#float fbm_cellular2(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+# float min_dist1 = 2.0;
+# float min_dist2 = 2.0;
+#
+# for(float x = -1.0; x <= 1.0; x++) {
+# for(float y = -1.0; y <= 1.0; y++) {
+# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);
+# float dist = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y);
+# if (min_dist1 > dist) {
+# min_dist2 = min_dist1;
+# min_dist1 = dist;
+# } else if (min_dist2 > dist) {
+# min_dist2 = dist;
+# }
+# }
+# }
+#
+# return min_dist2-min_dist1;
+#}
+
+static func fbm_cellular2(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+
+ var min_dist1 : float = 2.0;
+ var min_dist2 : float = 2.0;
+
+ for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) {
+ var x : float = xx
+
+ for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) {
+ var y : float = yy
+
+ var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y);
+
+ var dist : float = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y);
+
+ if (min_dist1 > dist):
+ min_dist2 = min_dist1;
+ min_dist1 = dist;
+ elif (min_dist2 > dist):
+ min_dist2 = dist;
+
+ return min_dist2-min_dist1;
+
+#float fbm_cellular3(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+# float min_dist = 2.0;
+#
+# for(float x = -1.0; x <= 1.0; x++) {
+# for(float y = -1.0; y <= 1.0; y++) {
+# vec2 node = rand2(mod(o + vec2(x, y), size))*0.5 + vec2(x, y);
+# float dist = abs((f - node).x) + abs((f - node).y);
+# min_dist = min(min_dist, dist);
+# }
+# }
+#
+# return min_dist;
+#}
+
+static func fbm_cellular3(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+
+ var min_dist : float = 2.0;
+
+ for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) {
+ var x : float = xx
+
+ for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) {
+ var y : float = yy
+
+ var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size))*0.5 + Vector2(x, y);
+
+ var dist : float = abs((f - node).x) + abs((f - node).y);
+
+ min_dist = min(min_dist, dist);
+
+ return min_dist;
+
+#float fbm_cellular4(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+# float min_dist1 = 2.0;
+# float min_dist2 = 2.0;
+#
+# for(float x = -1.0; x <= 1.0; x++) {
+# for(float y = -1.0; y <= 1.0; y++) {
+# vec2 node = rand2(mod(o + vec2(x, y), size))*0.5 + vec2(x, y);
+# float dist = abs((f - node).x) + abs((f - node).y);
+#
+# if (min_dist1 > dist) {
+# min_dist2 = min_dist1;
+# min_dist1 = dist;
+# } else if (min_dist2 > dist) {
+# min_dist2 = dist;
+# }
+# }
+# }
+#
+# return min_dist2-min_dist1;
+#}
+
+static func fbm_cellular4(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+
+ var min_dist1 : float = 2.0;
+ var min_dist2 : float = 2.0;
+
+ for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) {
+ var x : float = xx
+
+ for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) {
+ var y : float = yy
+
+ var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size))*0.5 + Vector2(x, y);
+
+ var dist : float = abs((f - node).x) + abs((f - node).y);
+
+ if (min_dist1 > dist):
+ min_dist2 = min_dist1;
+ min_dist1 = dist;
+ elif (min_dist2 > dist):
+ min_dist2 = dist;
+
+ return min_dist2 - min_dist1;
+
+#float fbm_cellular5(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+# float min_dist = 2.0;
+#
+# for(float x = -1.0; x <= 1.0; x++) {
+# for(float y = -1.0; y <= 1.0; y++) {
+# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);
+# float dist = max(abs((f - node).x), abs((f - node).y));
+# min_dist = min(min_dist, dist);
+# }
+# }
+#
+# return min_dist;
+#}
+
+static func fbm_cellular5(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+
+ var min_dist : float = 2.0;
+
+ for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) {
+ var x : float = xx
+
+ for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) {
+ var y : float = yy
+
+ var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y);
+ var dist : float = max(abs((f - node).x), abs((f - node).y));
+ min_dist = min(min_dist, dist);
+
+ return min_dist;
+
+#float fbm_cellular6(vec2 coord, vec2 size, float seed) {
+# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size;
+# vec2 f = fract(coord);
+# float min_dist1 = 2.0;
+# float min_dist2 = 2.0;
+#
+# for(float x = -1.0; x <= 1.0; x++) {
+# for(float y = -1.0; y <= 1.0; y++) {
+# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y);
+# float dist = max(abs((f - node).x), abs((f - node).y));
+#
+# if (min_dist1 > dist) {
+# min_dist2 = min_dist1;
+# min_dist1 = dist;
+# } else if (min_dist2 > dist) {
+# min_dist2 = dist;
+# }
+# }
+# }
+#
+# return min_dist2-min_dist1;
+#}
+
+static func fbm_cellular6(coord : Vector2, size : Vector2, pseed : float) -> float:
+ var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size;
+ var f : Vector2 = Commons.fractv2(coord);
+
+ var min_dist1 : float = 2.0;
+ var min_dist2 : float = 2.0;
+
+ for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) {
+ var x : float = xx
+
+ for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) {
+ var y : float = yy
+
+ var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y);
+ var dist : float = max(abs((f - node).x), abs((f - node).y));
+
+ if (min_dist1 > dist):
+ min_dist2 = min_dist1;
+ min_dist1 = dist;
+ elif (min_dist2 > dist):
+ min_dist2 = dist;
+
+ return min_dist2 - min_dist1;
diff --git a/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd b/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd
new file mode 100644
index 0000000..aece6c1
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd
@@ -0,0 +1,157 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#perlin.mmg
+
+#Outputs:
+
+#Output - (float) - Shows a greyscale value noise
+#perlin($(uv), vec2($(scale_x), $(scale_y)), int($(iterations)), $(persistence), $(seed))
+
+#Inputs:
+#scale, vector2, default: 4, min: 1, max: 32, step: 1
+#iterations, float, min: 0, max: 10, default: 3, step:1
+#persistence, float, min: 0, max: 1, default: 0.5, step:0.05
+
+#----------------------
+#perlin_color.mmg
+
+#Outputs:
+
+#Output - (rgb) - Shows a color value noise
+#perlin_color($(uv), vec2($(scale_x), $(scale_y)), int($(iterations)), $(persistence), $(seed))
+
+#Inputs:
+#scale, vector2, default: 4, min: 1, max: 32, step: 1
+#iterations, float, min: 0, max: 10, default: 3, step:1
+#persistence, float, min: 0, max: 1, default: 0.5, step:0.05
+
+static func perlinc(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Color:
+ var f : float = perlin(uv, size, iterations, persistence, pseed)
+
+ return Color(f, f, f, 1)
+
+
+#float perlin(vec2 uv, vec2 size, int iterations, float persistence, float seed) {
+# vec2 seed2 = rand2(vec2(seed, 1.0-seed));
+# float rv = 0.0;
+# float coef = 1.0;
+# float acc = 0.0;
+#
+# for (int i = 0; i < iterations; ++i) {
+# vec2 step = vec2(1.0)/size;
+# vec2 xy = floor(uv*size);
+#
+# float f0 = rand(seed2+mod(xy, size));
+# float f1 = rand(seed2+mod(xy+vec2(1.0, 0.0), size));
+# float f2 = rand(seed2+mod(xy+vec2(0.0, 1.0), size));
+# float f3 = rand(seed2+mod(xy+vec2(1.0, 1.0), size));
+#
+# vec2 mixval = smoothstep(0.0, 1.0, fract(uv*size));
+# rv += coef * mix(mix(f0, f1, mixval.x), mix(f2, f3, mixval.x), mixval.y);
+# acc += coef;
+# size *= 2.0;
+# coef *= persistence;
+# }
+#
+# return rv / acc;
+#}
+
+static func perlin(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> float:
+ var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed)));
+ var rv : float = 0.0;
+ var coef : float = 1.0;
+ var acc : float = 0.0;
+
+ for i in range(iterations):
+ var step : Vector2 = Vector2(1, 1) / size;
+ var xy : Vector2 = Commons.floorv2(uv * size);
+ var f0 : float = Commons.rand(seed2 + Commons.modv2(xy, size));
+ var f1 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(1.0, 0.0), size));
+ var f2 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(0.0, 1.0), size));
+ var f3 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(1.0, 1.0), size));
+
+ var mixval : Vector2 = Commons.smoothstepv2(0.0, 1.0, Commons.fractv2(uv * size));
+
+ rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y);
+ acc += coef;
+ size *= 2.0;
+ coef *= persistence;
+
+ return rv / acc;
+
+#vec3 perlin_color(vec2 uv, vec2 size, int iterations, float persistence, float seed) {
+# vec2 seed2 = rand2(vec2(seed, 1.0-seed));
+# vec3 rv = vec3(0.0);
+# float coef = 1.0;
+# float acc = 0.0;
+#
+# for (int i = 0; i < iterations; ++i) {
+# vec2 step = vec2(1.0)/size;
+# vec2 xy = floor(uv*size);
+# vec3 f0 = rand3(seed2+mod(xy, size));
+# vec3 f1 = rand3(seed2+mod(xy+vec2(1.0, 0.0), size));
+# vec3 f2 = rand3(seed2+mod(xy+vec2(0.0, 1.0), size));
+# vec3 f3 = rand3(seed2+mod(xy+vec2(1.0, 1.0), size));
+# vec2 mixval = smoothstep(0.0, 1.0, fract(uv*size));
+#
+# rv += coef * mix(mix(f0, f1, mixval.x), mix(f2, f3, mixval.x), mixval.y);
+# acc += coef;
+# size *= 2.0;
+# coef *= persistence;
+# }
+#
+# return rv / acc;
+#}
+
+static func perlin_color(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Vector3:
+ var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed)));
+ var rv : Vector3 = Vector3();
+ var coef : float = 1.0;
+ var acc : float = 0.0;
+
+ for i in range(iterations):
+ var step : Vector2 = Vector2(1, 1) / size;
+ var xy : Vector2 = Commons.floorv2(uv * size);
+ var f0 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy, size));
+ var f1 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy + Vector2(1.0, 0.0), size));
+ var f2 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy + Vector2(0.0, 1.0), size));
+ var f3 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy + Vector2(1.0, 1.0), size));
+
+ var mixval : Vector2 = Commons.smoothstepv2(0.0, 1.0, Commons.fractv2(uv * size));
+
+ rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y)
+ acc += coef;
+ size *= 2.0;
+ coef *= persistence;
+
+ return rv / acc;
+
+static func perlin_colorc(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Color:
+ var f : Vector3 = perlin_color(uv, size, iterations, persistence, pseed)
+
+ return Color(f.x, f.y, f.z, 1)
+
+static func perlin_warp_1(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int, translate : Vector2, rotate : float, size2 : Vector2) -> Color:
+ var f : float = perlin(uv, size2, iterations, persistence, pseed)
+ var vt : Vector2 = Commons.transform(uv, Vector2(translate.x*(2.0*f-1.0), translate.y*(2.0*f-1.0)), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true)
+ var ff : float = perlin(vt, size2, iterations, persistence, pseed)
+
+ return Color(ff, ff, ff, 1)
+
+static func perlin_warp_2(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int, translate : Vector2, rotate : float, size2 : Vector2) -> Color:
+ var f = perlin(uv, size2, iterations, persistence, pseed)
+ var vt : Vector2 = Commons.transform(uv, Vector2(translate.x*(2.0*f-1.0), translate.y*(2.0*f-1.0)), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true)
+ var ff : float = perlin(vt, size2, iterations, persistence, pseed)
+
+ var rgba : Vector3 = Vector3(ff, ff, ff)
+
+ var tf : Vector2 = Commons.transform(uv, Vector2(translate.x * (2.0 * (rgba.dot(Vector3(1, 1, 1) / 3.0) - 1.0)), translate.y*(2.0*(rgba.dot(Vector3(1, 1, 1) /3.0)-1.0))), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true)
+
+ var fff : float = perlin(tf, size2, iterations, persistence, pseed);
+
+ return Color(fff, fff, fff, 1)
+
diff --git a/game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd b/game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd
new file mode 100644
index 0000000..9952e0a
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd
@@ -0,0 +1,141 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#voronoi.mmg
+
+#voronoi_1, 2, 3, 4 -> different outputs
+
+#Outputs:
+
+#vec4 $(name_uv)_xyzw = voronoi($uv, vec2($scale_x, $scale_y), vec2($stretch_y, $stretch_x), $intensity, $randomness, $seed);
+
+#Nodes - float - A greyscale pattern based on the distance to cell centers
+#$(name_uv)_xyzw.z
+
+#Borders - float - A greyscale pattern based on the distance to borders
+#$(name_uv)_xyzw.w
+
+#Random color - rgb - A color pattern that assigns a random color to each cell
+#rand3(fract(floor($(name_uv)_xyzw.xy)/vec2($scale_x, $scale_y)))
+
+#Fill - rgba - An output that should be plugged into a Fill companion node
+#vec4(fract(($(name_uv)_xyzw.xy-1.0)/vec2($scale_x, $scale_y)), vec2(2.0)/vec2($scale_x, $scale_y))
+
+#Inputs:
+
+#scale, min: 1, max: 32, step: 1, default: 4
+#stretch, min: 0.01, max: 1, step: 0.01, default: 1
+#intensity, min: 0, max: 1, step: 0.01, default: 0.75
+#randomness, min: 0, max: 1, step: 0.01, default: 1
+
+#vec4 $(name_uv)_xyzw = voronoi($uv, vec2($scale_x, $scale_y), vec2($stretch_y, $stretch_x), $intensity, $randomness, $seed);
+
+#note this is newer than what I have TODO
+
+#// Based on https://www.shadertoy.com/view/ldl3W8
+#// The MIT License
+#// Copyright © 2013 Inigo Quilez
+#vec3 iq_voronoi(vec2 x, vec2 size, vec2 stretch, float randomness, vec2 seed) {
+# vec2 n = floor(x);
+# vec2 f = fract(x);
+# vec2 mg, mr, mc;
+# float md = 8.0;
+#
+# for (int j=-1; j<=1; j++)
+# for (int i=-1; i<=1; i++) {
+# vec2 g = vec2(float(i),float(j));
+# vec2 o = randomness*rand2(seed + mod(n + g + size, size));
+# vec2 c = g + o;
+# vec2 r = c - f;
+# vec2 rr = r*stretch;
+# float d = dot(rr,rr);
+# if (d0.00001)
+# md = min(md, dot(0.5*(mr+r)*stretch, normalize((r-mr)*stretch)));
+# }
+#
+# return vec3(md, mc+n);
+#}
+#
+#vec4 voronoi(vec2 uv, vec2 size, vec2 stretch, float intensity, float randomness, float seed) {
+# uv *= size;
+# vec3 v = iq_voronoi(uv, size, stretch, randomness, rand2(vec2(seed, 1.0-seed)));
+# return vec4(v.yz, intensity*length((uv-v.yz)*stretch), v.x);
+#}
+
+static func voronoi(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color:
+ var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed)));
+ uv *= size;
+ var best_distance0 : float = 1.0;
+ var best_distance1 : float = 1.0;
+ var point0 : Vector2;
+ var point1 : Vector2;
+ var p0 : Vector2 = Commons.floorv2(uv);
+
+ for dx in range(-1, 2):# (int dx = -1; dx < 2; ++dx) {
+ for dy in range(-1, 2):# (int dy = -1; dy < 2; ++dy) {
+ var d : Vector2 = Vector2(float(dx), float(dy));
+ var p : Vector2 = p0+d;
+
+ p += randomness * Commons.rand2(seed2 + Commons.modv2(p, size));
+ var distance : float = (stretch * (uv - p) / size).length();
+
+ if (best_distance0 > distance):
+ best_distance1 = best_distance0;
+ best_distance0 = distance;
+ point1 = point0;
+ point0 = p;
+ elif (best_distance1 > distance):
+ best_distance1 = distance;
+ point1 = p;
+
+ var edge_distance : float = (uv - 0.5*(point0+point1)).dot((point0-point1).normalized());
+
+ return Color(point0.x, point0.y, best_distance0 * (size).length() * intensity, edge_distance);
+
+#$(name_uv)_xyzw.z
+
+static func voronoi_1(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color:
+ var c : Color = voronoi(uv, size, stretch, intensity, randomness, pseed);
+
+ return Color(c.b, c.b, c.b, 1)
+
+#$(name_uv)_xyzw.w
+
+static func voronoi_2(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color:
+ var c : Color = voronoi(uv, size, stretch, intensity, randomness, pseed);
+
+ return Color(c.a, c.a, c.a, 1)
+
+#rand3(fract(floor($(name_uv)_xyzw.xy)/vec2($scale_x, $scale_y)))
+
+static func voronoi_3(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color:
+ var c : Color = voronoi(uv, size, stretch, intensity, randomness, pseed);
+
+ var vv : Vector2 = Vector2(c.r, c.g)
+
+ var v : Vector3 = Commons.rand3(Commons.fractv2(vv));
+
+ return Color(v.x, v.y, v.z, 1)
+
+#vec4(fract(($(name_uv)_xyzw.xy-1.0)/vec2($scale_x, $scale_y)), vec2(2.0)/vec2($scale_x, $scale_y))
+
+#voronoi_4 todo
diff --git a/game/addons/mat_maker_gd/nodes/common/noises.gd b/game/addons/mat_maker_gd/nodes/common/noises.gd
new file mode 100644
index 0000000..7e2c854
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/noises.gd
@@ -0,0 +1,122 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#color_noise.mmg
+
+#Outputs:
+
+#Output - (rgb) - Shows the noise pattern
+#color_dots($(uv), 1.0/$(size), $(seed))
+
+#Inputs:
+#size, float, default: 8, min: 2, max: 12, step: 1
+
+#----------------------
+#noise.mmg
+
+#Outputs:
+
+#float $(name)_f(vec2 uv) {
+# return dots(uv, 1.0/$(size), $(density), $(seed));
+#}
+
+#Output - (float) - Shows the noise pattern
+#$(name)_f($(uv))
+
+#Inputs:
+#grid_size, float, default: 4, min: 2, max: 12, step: 1
+#density, float, default: 0.5, min: 0, max: 1, step: 0.01
+
+#----------------------
+#noise_anisotropic.mmg
+#Generates x-axis interpolated value noise
+
+#Output:
+#Output (float) - Shows a greyscale value noise
+#anisotropic($(uv), vec2($(scale_x), $(scale_y)), $(seed), $(smoothness), $(interpolation))
+
+#Input:
+#scale, Vector2, min: 1, 1, max: 32, 1024, step: 1, 1, default 4, 256
+#smoothness, float, min: 0, max: 1, step: 0,01, default: 1
+#Interpolation, float, min: 0, max: 1, step: 0,01, default: 1
+
+#float dots(vec2 uv, float size, float density, float seed) {
+# vec2 seed2 = rand2(vec2(seed, 1.0-seed));
+# uv /= size;
+# vec2 point_pos = floor(uv)+vec2(0.5);
+# float color = step(rand(seed2+point_pos), density);
+# return color;
+#}
+
+static func dots(uv : Vector2, size : float, density : float, pseed : float) -> float:
+ var seed2 : Vector2 = Commons.rand2(Vector2(pseed, 1.0 - pseed))
+ uv /= size
+ var point_pos : Vector2 = Commons.floorv2(uv) + Vector2(0.5, 0.5)
+ var color : float = Commons.step(Commons.rand2(seed2 + point_pos).x, density);
+ return color
+
+static func anisotropicc(uv : Vector2, size : Vector2, pseed : float, smoothness : float, interpolation : float) -> Color:
+ var v : float = anisotropic(uv, size, pseed, smoothness, interpolation)
+
+ return Color(v, v, v, 1)
+
+#float anisotropic(vec2 uv, vec2 size, float seed, float smoothness, float interpolation) {
+# vec2 seed2 = rand2(vec2(seed, 1.0-seed));
+# vec2 xy = floor(uv*size);
+# vec2 offset = vec2(rand(seed2 + xy.y), 0.0);
+# vec2 xy_offset = floor(uv * size + offset );
+#
+# float f0 = rand(seed2+mod(xy_offset, size));
+# float f1 = rand(seed2+mod(xy_offset+vec2(1.0, 0.0), size));
+# float mixer = clamp( (fract(uv.x*size.x+offset.x) -.5) / smoothness + 0.5, 0.0, 1.0 );
+# float smooth_mix = smoothstep(0.0, 1.0, mixer);
+# float linear = mix(f0, f1, mixer);
+# float smoothed = mix(f0, f1, smooth_mix);
+#
+# return mix(linear, smoothed, interpolation);
+#}
+
+static func anisotropic(uv : Vector2, size : Vector2, pseed : float, smoothness : float, interpolation : float) -> float:
+ var seed2 : Vector2 = Commons.rand2(Vector2(pseed, 1.0 - pseed))
+
+ var xy : Vector2 = Commons.floorv2(uv * size)
+ var s2xy : Vector2 = seed2
+ s2xy.x += xy.y
+ s2xy.y += xy.y
+
+ var offset : Vector2 = Vector2(Commons.rand(s2xy), 0.0)
+ var xy_offset : Vector2 = Commons.floorv2(uv * size + offset)
+
+ var f0 : float = Commons.rand(seed2 + Commons.modv2(xy_offset, size));
+ var f1 : float = Commons.rand(seed2 + Commons.modv2(xy_offset + Vector2(1.0, 0.0), size))
+ var mixer : float = clamp((Commons.fract(uv.x * size.x + offset.x) - 0.5) / smoothness + 0.5, 0.0, 1.0)
+ var smooth_mix : float = smoothstep(0.0, 1.0, mixer)
+ var linear : float = lerp(f0, f1, mixer)
+ var smoothed : float = lerp(f0, f1, smooth_mix)
+
+ return lerp(linear, smoothed, interpolation)
+
+#vec3 color_dots(vec2 uv, float size, float seed) {
+# vec2 seed2 = rand2(vec2(seed, 1.0-seed));
+# uv /= size;
+# vec2 point_pos = floor(uv)+vec2(0.5);
+# return rand3(seed2+point_pos);
+#}
+
+static func color_dots(uv : Vector2, size : float, pseed : float) -> Vector3:
+ var seed2 : Vector2 = Commons.rand2(Vector2(pseed, 1.0 - pseed))
+
+ uv /= size
+
+ var point_pos : Vector2 = Commons.floorv2(uv) + Vector2(0.5, 0.5)
+
+ return Commons.rand3(seed2 + point_pos)
+
+static func noise_color(uv : Vector2, size : float, pseed : float) -> Color:
+ var v : Vector3 = color_dots(uv, 1.0 / size, pseed)
+
+ return Color(v.x, v.y, v.z, 1)
+
diff --git a/game/addons/mat_maker_gd/nodes/common/patterns.gd b/game/addons/mat_maker_gd/nodes/common/patterns.gd
new file mode 100644
index 0000000..cbbd80e
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/patterns.gd
@@ -0,0 +1,1170 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#beehive.mmg
+#Outputs: (beehive_1c, beehive_2c, beehive_3c TODO make common code parameters)
+#Common
+#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757);
+#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv);
+
+#Output (float) - Shows the greyscale pattern
+#1.0-2.0*beehive_dist($(name_uv)_center.xy)
+
+#Random color (rgb) - Shows a random color for each hexagonal tile
+#rand3(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed)))
+
+#UV map (rgb) - Shows an UV map to be connected to the UV map port of the Custom UV node
+#vec3(vec2(0.5)+$(name_uv)_center.xy, rand(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed))))
+
+#Inputs:
+#size, vector2, default: 2, min: 1, max: 64, step: 1
+
+#----------------------
+#pattern.mmg
+#Outputs: $(name)_fct($(uv))
+
+#Combiner, enum, default: 0, values (CombinerType): Multiply, Add, Max, Min, Xor, Pow
+#Pattern_x_type, enum, default: 5, values (CombinerAxisType): Sine, Triangle, Square, Sawtooth, Constant, Bounce
+#Pattern_y_type, enum, default: 5, values (CombinerAxisType): Sine, Triangle, Square, Sawtooth, Constant, Bounce
+#Pattern_Repeat, vector2, min: 0, max: 32, default:4, step: 1
+
+#----------------------
+#bricks.mmg
+
+#Outputs:
+
+#Common
+#vec4 $(name_uv)_rect = bricks_$pattern($uv, vec2($columns, $rows), $repeat, $row_offset);
+#vec4 $(name_uv) = brick($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $round*$round_map($uv), max(0.001, $bevel*$bevel_map($uv)));
+
+#Bricks pattern (float) - A greyscale image that shows the bricks pattern
+#$(name_uv).x
+
+#Random color (rgb) - A random color for each brick
+#brick_random_color($(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed))
+
+#Position.x (float) - The position of each brick along the X axis",
+#$(name_uv).y
+
+#Position.y (float) - The position of each brick along the Y axis
+#$(name_uv).z
+
+#Brick UV (rgb) - An UV map output for each brick, to be connected to the Map input of a CustomUV node
+#brick_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed))
+
+#Corner UV (rgb) - An UV map output for each brick corner, to be connected to the Map input of a CustomUV node
+#brick_corner_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $corner, float($seed))
+
+#Direction (float) - The direction of each brick (white: horizontal, black: vertical)
+#0.5*(sign($(name_uv)_rect.z-$(name_uv)_rect.x-$(name_uv)_rect.w+$(name_uv)_rect.y)+1.0)
+
+#Inputs:
+#type / Pattern, enum, default: 0, values: Running Bond,Running Bond (2),HerringBone,Basket Weave,Spanish Bond
+#repeat, int, min: 1, max: 8, default: 1, step:1
+#rows, int, min: 1, max: 64, default: 6, step:1
+#columns, int, min: 1, max: 64, default: 6, step:1
+#offset, float, min: 0, max: 1, default: 0.5, step:0.01
+#mortar, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input)
+#bevel, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input)
+#round, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input)
+#corner, float, min: 0, max: 0.5, default: 0.1, step:0.01
+
+#----------------------
+#bricks_uneven.mmg
+
+#Outputs:
+
+#Common
+#vec4 $(name_uv)_rect = bricks_uneven($uv, int($iterations), $min_size, $randomness, float($seed));
+#vec4 $(name_uv) = brick2($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $round*$round_map($uv), max(0.00001, $bevel*$bevel_map($uv)));
+
+#Bricks pattern (float) - A greyscale image that shows the bricks pattern
+#$(name_uv).x
+
+#Random color (rgb) - A random color for each brick
+#rand3(fract($(name_uv)_rect.xy)+rand2(vec2(float($seed))))
+
+#Position.x (float) - The position of each brick along the X axis",
+#$(name_uv).y
+
+#Position.y (float) - The position of each brick along the Y axis
+#$(name_uv).z
+
+#Brick UV (rgb) - An UV map output for each brick, to be connected to the Map input of a CustomUV node
+#brick_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed))
+
+#Corner UV (rgb) - An UV map output for each brick corner, to be connected to the Map input of a CustomUV node
+#brick_corner_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $corner, float($seed))
+
+#Direction (float) - The direction of each brick (white: horizontal, black: vertical)
+#0.5*(sign($(name_uv)_rect.z-$(name_uv)_rect.x-$(name_uv)_rect.w+$(name_uv)_rect.y)+1.0)
+
+#Inputs:
+#iterations, int, min: 1, max: 16, default:8, step:1
+#min_size, float, min: 0, max: 0.5, default: 0.3, step:0.01
+#randomness, float, min: 0, max: 1, default: 0.5, step:0.01
+#mortar, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input)
+#bevel, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input)
+#round, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input)
+#corner, float, min: 0, max: 0.5, default: 0.1, step:0.01
+
+#----------------------
+#runes.mmg (includes sdline.mmg)
+#Generates a grid filled with random runes
+
+#Outputs:
+
+#Output (float) - A greyscale image showing random runes.
+#Rune(vec2($columns, $rows)*$uv, float($seed))
+
+#Inputs:
+#size, vector2, default: 4, min: 2, max: 32, step: 1
+
+#----------------------
+#scratches.mmg
+#Draws white scratches on a black background
+
+#Outputs:
+
+#Output (float) - Shows white scratches on a black background
+#scratches($uv, int($layers), vec2($length, $width), $waviness, $angle, $randomness, vec2(float($seed), 0.0))
+
+#Inputs:
+
+#scratch_size (l, w), vector2, min: 0.1, max: 1, default: (0.25, 0.5), step:0.01
+#layers, float, min: 1, max: 10, default: 4, step:1
+#waviness, float, min: 0, max: 1, default: 0.5, step:0.01
+#angle, float, min: -180, max: 180, default: 0, step:1
+#randomness, float, min: 0, max: 1, default: 0.5, step:0.01
+
+#----------------------
+#iching.mmg
+#This node generates a grid of random I Ching hexagrams.
+
+#Outputs:
+
+#Output (float) - A greyscale image showing random I Ching hexagrams.
+#IChing(vec2($columns, $rows)*$uv, float($seed))
+
+#Inputs:
+#size, vector2, default: 2, min: 2, max: 32, step: 1
+
+#----------------------
+#weave.mmg
+
+#Outputs:
+
+#Output (float) - Shows the generated greyscale weave pattern.
+#weave($uv, vec2($columns, $rows), $width*$width_map($uv))
+
+#Inputs:
+#size, vector2, default: 4, min: 2, max: 32, step: 1
+#width, float, min: 0, max: 1, default: 0.8, step:0.05 (universal input)
+
+#----------------------
+#weave2.mmg
+
+#code
+#vec3 $(name_uv) = weave2($uv, vec2($columns, $rows), $stitch, $width_x*$width_map($uv), $width_y*$width_map($uv));
+
+#Outputs:
+
+#Output (float) - Shows the generated greyscale weave pattern.
+#$(name_uv).x
+
+#Horizontal mask (float) - Horizontal mask
+#$(name_uv).y
+
+#Vertical mask (float) - Mask for vertical stripes
+#$(name_uv).z
+
+#Inputs:
+#size, vector2, default: 4, min: 2, max: 32, step: 1
+#width, vector2, default: 0.8, min: 0, max: 1, step: 0.05
+#stitch, float, min: 0, max: 10, default: 1, step:1
+#width_map, float, default: 1, (does not need input val (label)) (universal input)
+
+#----------------------
+#truchet.mmg
+
+#Outputs:
+
+#line: $shape = 1
+#circle: $shape = 2
+
+#Output (float) - Shows a greyscale image of the truchet pattern.
+#truchet$shape($uv*$size, vec2(float($seed)))
+
+#Inputs:
+#shape, enum, default: 0, values: line, circle
+#size, float, default: 4, min: 2, max: 64, step: 1
+
+#----------------------
+#truchet_generic.mmg
+
+#Outputs:
+
+#Output (color)
+#$in(truchet_generic_uv($uv*$size, vec2(float($seed))))
+
+#Inputs:
+#in, color, default: color(1.0)
+#size, float, default: 4, min: 2, max: 64, step: 1
+
+#----------------------
+#arc_pavement.mmg
+#Draws a white shape on a black background
+
+# "code": "vec2 $(name_uv)_uv = fract($uv)*vec2($repeat, -1.0);\nvec2 $(name_uv)_seed;\nvec4 $(name_uv)_ap = arc_pavement($(name_uv)_uv, $rows, $bricks, $(name_uv)_seed);\n",
+# "outputs": [
+# {
+# "f": "pavement($(name_uv)_ap.zw, $bevel, 2.0*$mortar)",
+# "longdesc": "A greyscale image that shows the bricks pattern",
+# "shortdesc": "Bricks pattern",
+# "type": "f"
+# },
+# {
+# "longdesc": "A random color for each brick",
+# "rgb": "rand3($(name_uv)_seed)",
+# "shortdesc": "Random color",
+# "type": "rgb"
+# },
+# {
+# "longdesc": "An UV map output for each brick, to be connected to the Map input of a CustomUV node",
+# "rgb": "vec3($(name_uv)_ap.zw, 0.0)",
+# "shortdesc": "Brick UV",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 2,
+# "label": "Repeat:",
+# "longdesc": "The number of repetitions of the whole pattern",
+# "max": 4,
+# "min": 1,
+# "name": "repeat",
+# "shortdesc": "Repeat",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 8,
+# "label": "Rows:",
+# "longdesc": "The number of rows",
+# "max": 16,
+# "min": 4,
+# "name": "rows",
+# "shortdesc": "Rows",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 8,
+# "label": "Bricks:",
+# "longdesc": "The number of bricks per row",
+# "max": 16,
+# "min": 4,
+# "name": "bricks",
+# "shortdesc": "Bricks",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Mortar:",
+# "longdesc": "The width of the space between bricks",
+# "max": 0.5,
+# "min": 0,
+# "name": "mortar",
+# "shortdesc": "Mortar",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Bevel:",
+# "longdesc": "The width of the edge of each brick",
+# "max": 0.5,
+# "min": 0,
+# "name": "bevel",
+# "shortdesc": "Bevel",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+
+#----------------------
+#sine_wave.mmg
+#Draws a greyscale sine wave pattern
+
+#Outputs:
+#Output, float, Shows a greyscale image of a sine wave
+#1.0-abs(2.0*($uv.y-0.5)-$amplitude*sin(($frequency*$uv.x+$phase)*6.28318530718))
+
+#Inputs:
+#amplitude, float, min: 0, max: 1, step: 0.01, default: 0.5
+#frequency, float, min: 0, max: 16, default: 1
+#phase, float, min: 0, max: 1, step: 0.01, default: 0.5
+
+enum CombinerAxisType {
+ SINE,
+ TRIANGLE,
+ SQUARE,
+ SAWTOOTH,
+ CONSTANT,
+ BOUNCE
+}
+
+enum CombinerType {
+ MULTIPLY,
+ ADD,
+ MAX,
+ MIN,
+ XOR,
+ POW
+}
+
+#"Sine,Triangle,Square,Sawtooth,Constant,Bounce"
+#"Multiply,Add,Max,Min,Xor,Pow"
+
+#float $(name)_fct(vec2 uv) {
+# return mix_$(mix)(wave_$(x_wave)($(x_scale)*uv.x), wave_$(y_wave)($(y_scale)*uv.y));
+#}
+
+static func pattern(uv : Vector2, x_scale : float, y_scale : float, ct : int, catx : int, caty : int) -> float:
+ var x : float = 0
+ var y : float = 0
+
+ if catx == CombinerAxisType.SINE:
+ x = Commons.wave_sine(x_scale * uv.x)
+ elif catx == CombinerAxisType.TRIANGLE:
+ x = Commons.wave_triangle(x_scale * uv.x)
+ elif catx == CombinerAxisType.SQUARE:
+ x = Commons.wave_square(x_scale * uv.x)
+ elif catx == CombinerAxisType.SAWTOOTH:
+ x = Commons.wave_sawtooth(x_scale * uv.x)
+ elif catx == CombinerAxisType.CONSTANT:
+ x = Commons.wave_constant(x_scale * uv.x)
+ elif catx == CombinerAxisType.BOUNCE:
+ x = Commons.wave_bounce(x_scale * uv.x)
+
+ if caty == CombinerAxisType.SINE:
+ y = Commons.wave_sine(y_scale * uv.y)
+ elif caty == CombinerAxisType.TRIANGLE:
+ y = Commons.wave_triangle(y_scale * uv.y)
+ elif caty == CombinerAxisType.SQUARE:
+ y = Commons.wave_square(y_scale * uv.y)
+ elif caty == CombinerAxisType.SAWTOOTH:
+ y = Commons.wave_sawtooth(y_scale * uv.y)
+ elif caty == CombinerAxisType.CONSTANT:
+ y = Commons.wave_constant(y_scale * uv.y)
+ elif caty == CombinerAxisType.BOUNCE:
+ y = Commons.wave_bounce(y_scale * uv.y)
+
+ if ct == CombinerType.MULTIPLY:
+ return Commons.mix_mul(x, y)
+ elif ct == CombinerType.ADD:
+ return Commons.mix_add(x, y);
+ elif ct == CombinerType.MAX:
+ return Commons.mix_max(x, y);
+ elif ct == CombinerType.MIN:
+ return Commons.mix_min(x, y);
+ elif ct == CombinerType.XOR:
+ return Commons.mix_xor(x, y);
+ elif ct == CombinerType.POW:
+ return Commons.mix_pow(x, y);
+
+ return 0.0
+
+
+#"Line,Circle"
+
+static func truchet1c(uv : Vector2, size : float, pseed : float) -> Color:
+ var f : float = truchet1(uv * size, Vector2(pseed, pseed))
+ return Color(f, f, f, 1);
+
+#float truchet1(vec2 uv, vec2 seed) {
+# vec2 i = floor(uv);
+# vec2 f = fract(uv)-vec2(0.5);
+#
+# return 1.0-abs(abs((2.0*step(rand(i+seed), 0.5)-1.0)*f.x+f.y)-0.5);
+#}
+
+static func truchet1(uv : Vector2, pseed : Vector2) -> float:
+ var i : Vector2 = Commons.floorv2(uv);
+ var f : Vector2 = Commons.fractv2(uv) - Vector2(0.5, 0.5);
+
+ return 1.0 - abs(abs((2.0 * Commons.step(Commons.rand(i + pseed), 0.5) - 1.0) * f.x + f.y) - 0.5);
+
+static func truchet2c(uv : Vector2, size : float, pseed : float) -> Color:
+ var f : float = truchet2(uv * size, Vector2(pseed, pseed))
+ return Color(f, f, f, 1);
+
+#float truchet2(vec2 uv, vec2 seed) {
+# vec2 i = floor(uv);
+# vec2 f = fract(uv);
+# float random = step(rand(i+seed), 0.5);
+#
+# f.x *= 2.0*random-1.0;
+# f.x += 1.0-random;
+#
+# return 1.0-min(abs(length(f)-0.5), abs(length(1.0-f)-0.5));
+#}
+
+static func truchet2(uv : Vector2, pseed : Vector2) -> float:
+ var i : Vector2 = Commons.floorv2(uv);
+ var f : Vector2 = Commons.fractv2(uv);
+ var random : float = Commons.step(Commons.rand(i + pseed), 0.5);
+
+ f.x *= 2.0 * random - 1.0;
+ f.x += 1.0 - random;
+
+ return 1.0 - min(abs(f.length() - 0.5), abs((Vector2(1, 1) - f).length() - 0.5));
+
+static func weavec(uv : Vector2, count : Vector2, width : float) -> Color:
+ var f : float = weave(uv, count, width);
+
+ return Color(f, f, f, 1)
+
+#float weave(vec2 uv, vec2 count, float width) {
+# uv *= count;
+# float c = (sin(3.1415926*(uv.x+floor(uv.y)))*0.5+0.5)*step(abs(fract(uv.y)-0.5), width*0.5);
+# c = max(c, (sin(3.1415926*(1.0+uv.y+floor(uv.x)))*0.5+0.5)*step(abs(fract(uv.x)-0.5), width*0.5));
+# return c;
+#}
+
+static func weave(uv : Vector2, count : Vector2, width : float) -> float:
+ uv *= count;
+ var c : float = (sin(3.1415926* (uv.x + floor(uv.y)))*0.5+0.5)*Commons.step(abs(Commons.fract(uv.y)-0.5), width*0.5);
+ c = max(c, (sin(3.1415926*(1.0+uv.y+floor(uv.x)))*0.5+0.5)*Commons.step(abs(Commons.fract(uv.x)-0.5), width*0.5));
+ return c;
+
+#vec3 weave2(vec2 uv, vec2 count, float stitch, float width_x, float width_y) {
+# uv *= stitch;
+# uv *= count;
+# float c1 = (sin(3.1415926 / stitch * (uv.x + floor(uv.y) - (stitch - 1.0))) * 0.25 + 0.75 ) *step(abs(fract(uv.y)-0.5), width_x*0.5);
+# float c2 = (sin(3.1415926 / stitch * (1.0+uv.y+floor(uv.x) ))* 0.25 + 0.75 )*step(abs(fract(uv.x)-0.5), width_y*0.5);
+# return vec3(max(c1, c2), 1.0-step(c1, c2), 1.0-step(c2, c1));
+#}
+
+static func weave2(uv : Vector2, count : Vector2, stitch : float, width_x : float, width_y : float) -> Vector3:
+ uv.x *= stitch
+ uv.y *= stitch
+ uv *= count
+
+ var c1 : float = (sin(3.1415926 / stitch * (uv.x + floor(uv.y) - (stitch - 1.0))) * 0.25 + 0.75 ) * Commons.step(abs(Commons.fract(uv.y) - 0.5), width_x * 0.5);
+ var c2 : float = (sin(3.1415926 / stitch * (1.0 + uv.y + floor(uv.x) ))* 0.25 + 0.75 ) * Commons.step(abs(Commons.fract(uv.x)-0.5), width_y * 0.5);
+
+ return Vector3(max(c1, c2), 1.0 - Commons.step(c1, c2), 1.0 - Commons.step(c2, c1));
+
+static func sinewavec(uv : Vector2, amplitude : float, frequency : float, phase : float) -> Color:
+ var f : float = 1.0- abs(2.0 * (uv.y-0.5) - amplitude * sin((frequency* uv.x + phase) * 6.28318530718));
+
+ return Color(f, f, f, 1)
+
+static func sinewavef(uv : Vector2, amplitude : float, frequency : float, phase : float) -> float:
+ return 1.0- abs(2.0 * (uv.y-0.5) - amplitude * sin((frequency* uv.x + phase) * 6.28318530718));
+
+#float scratch(vec2 uv, vec2 size, float waviness, float angle, float randomness, vec2 seed) {
+# float subdivide = floor(1.0/size.x);
+# float cut = size.x*subdivide;
+#
+# uv *= subdivide;
+#
+# vec2 r1 = rand2(floor(uv)+seed);
+# vec2 r2 = rand2(r1);
+#
+# uv = fract(uv);
+# vec2 border = 10.0*min(fract(uv), 1.0-fract(uv));
+# uv = 2.0*uv-vec2(1.0);
+#
+# float a = 6.28318530718*(angle+(r1.x-0.5)*randomness);
+# float c = cos(a);
+# float s = sin(a);
+#
+# uv = vec2(c*uv.x+s*uv.y, s*uv.x-c*uv.y);
+# uv.y += 2.0*r1.y-1.0;
+# uv.y += 0.5*waviness*cos(2.0*uv.x+6.28318530718*r2.y);
+# uv.x /= cut;
+# uv.y /= subdivide*size.y;
+#
+# return min(border.x, border.y)*(1.0-uv.x*uv.x)*max(0.0, 1.0-1000.0*uv.y*uv.y);
+#}
+
+static func scratch(uv : Vector2, size : Vector2, waviness : float, angle : float, randomness : float, pseed : Vector2) -> float:
+ var subdivide : float = floor(1.0/size.x);
+ var cut : float = size.x*subdivide;
+ uv *= subdivide;
+ var r1 : Vector2 = Commons.rand2(Commons.floorv2(uv) + pseed);
+ var r2 : Vector2 = Commons.rand2(r1);
+ uv = Commons.fractv2(uv);
+ uv = 2.0 * uv - Vector2(1, 1);
+
+ var a : float = 6.28*(angle+(r1.x-0.5)*randomness);
+ var c : float = cos(a);
+ var s : float = sin(a);
+
+ uv = Vector2(c*uv.x+s*uv.y, s*uv.x-c*uv.y);
+ uv.y += 2.0*r1.y-1.0;
+ uv.y += 0.5*waviness*cos(2.0*uv.x+6.28*r2.y);
+ uv.x /= cut;
+ uv.y /= subdivide*size.y;
+
+ return (1.0-uv.x*uv.x)*max(0.0, 1.0-1000.0*uv.y*uv.y);
+
+#float scratches(vec2 uv, int layers, vec2 size, float waviness, float angle, float randomness, vec2 seed) {
+# float v = 0.0;
+#
+# for (int i = 0; i < layers; ++i) {
+# seed = rand2(seed);
+# v = max(v, scratch(fract(uv+seed), size, waviness, angle/360.0, randomness, seed));
+# }
+#
+# return v;
+#}
+
+static func scratches(uv : Vector2, layers : int, size : Vector2, waviness : float, angle : float, randomness : float, pseed : Vector2) -> float:
+ var v : float = 0.0;
+
+ for i in range(layers):# (int i = 0; i < layers; ++i) {
+ pseed = Commons.rand2(pseed);
+ v = max(v, scratch(Commons.fractv2(uv + pseed), size, waviness, angle/360.0, randomness, pseed));
+
+ return v;
+
+static func scratchesc(uv : Vector2, layers : int, size : Vector2, waviness : float, angle : float, randomness : float, pseed : Vector2) -> Color:
+ var f : float = scratches(uv, layers, size, waviness, angle, randomness, pseed)
+
+ return Color(f, f, f, 1)
+
+static func runesc(uv : Vector2, col_row : Vector2, pseed : float) -> Color:
+ var f : float = rune(col_row * uv, pseed);
+
+ return Color(f, f, f, 1)
+
+static func runesf(uv : Vector2, col_row : Vector2, pseed : float) -> float:
+ return rune(col_row * uv, pseed);
+
+#sdline.mmg
+#vec2 sdLine(vec2 p, vec2 a, vec2 b) {
+# vec2 pa = p-a, ba = b-a;
+# float h = clamp(dot(pa,ba)/dot(ba,ba), 0.0, 1.0);
+#
+# return vec2(length(pa-ba*h), h);
+#}
+
+#float ThickLine(vec2 uv, vec2 posA, vec2 posB, float radiusInv){
+# return clamp(1.1-20.0*sdLine(uv, posA, posB).x, 0.0, 1.0);
+#}
+
+#// makes a rune in the 0..1 uv space. Seed is which rune to draw.
+#// passes back gray in x and derivates for lighting in yz
+#float Rune(vec2 uv, float s) {
+# float finalLine = 0.0;
+# vec2 seed = floor(uv)-rand2(vec2(s));
+# uv = fract(uv);
+#
+# for (int i = 0; i < 4; i++) // number of strokes
+# {
+# vec2 posA = rand2(floor(seed+0.5));
+# vec2 posB = rand2(floor(seed+1.5));
+# seed += 2.0;
+# // expand the range and mod it to get a nicely distributed random number - hopefully. :)
+# posA = fract(posA * 128.0);
+# posB = fract(posB * 128.0);
+# // each rune touches the edge of its box on all 4 sides
+#
+# if (i == 0) posA.y = 0.0;
+# if (i == 1) posA.x = 0.999;
+# if (i == 2) posA.x = 0.0;
+# if (i == 3) posA.y = 0.999;
+#
+# // snap the random line endpoints to a grid 2x3
+# vec2 snaps = vec2(2.0, 3.0);
+# posA = (floor(posA * snaps) + 0.5) / snaps; // + 0.5 to center it in a grid cell
+# posB = (floor(posB * snaps) + 0.5) / snaps;
+#
+# //if (distance(posA, posB) < 0.0001) continue;
+# // eliminate dots.
+# // Dots (degenerate lines) are not cross-GPU safe without adding 0.001 - divide by 0 error.
+# finalLine = max(finalLine, ThickLine(uv, posA, posB + 0.001, 20.0));
+# }
+#
+# return finalLine;
+#}
+
+# makes a rune in the 0..1 uv space. Seed is which rune to draw.
+# passes back gray in x and derivates for lighting in yz
+static func rune(uv : Vector2, pseed : float) -> float:
+ var finalLine : float = 0.0;
+ var sseed : Vector2 = Commons.floorv2(uv) - Vector2(pseed, pseed);
+
+ uv = Commons.fractv2(uv);
+
+ for i in range(4):# (int i = 0; i < 4; i++): # // number of strokes
+ var posA : Vector2 = Commons.rand2(Commons.floorv2(sseed + Vector2(0.5, 0.5)));
+ var posB : Vector2 = Commons.rand2(Commons.floorv2(sseed + Vector2(1.5, 1.5)));
+ sseed.x += 2.0;
+ sseed.y += 2.0;
+
+ # expand the range and mod it to get a nicely distributed random number - hopefully. :)
+
+ posA = Commons.fractv2(posA * 128.0);
+ posB = Commons.fractv2(posB * 128.0);
+
+ # each rune touches the edge of its box on all 4 sides
+ if (i == 0):
+ posA.y = 0.0;
+
+ if (i == 1):
+ posA.x = 0.999;
+
+ if (i == 2):
+ posA.x = 0.0;
+
+ if (i == 3):
+ posA.y = 0.999;
+
+ # snap the random line endpoints to a grid 2x3
+
+ var snaps : Vector2 = Vector2(2.0, 3.0);
+
+ posA = (Commons.floorv2(posA * snaps) + Vector2(0.5, 0.5)) / snaps; # + 0.5 to center it in a grid cell
+ posB = (Commons.floorv2(posB * snaps) + Vector2(0.5, 0.5)) / snaps;
+
+ #if (distance(posA, posB) < 0.0001) continue; // eliminate dots.
+ # Dots (degenerate lines) are not cross-GPU safe without adding 0.001 - divide by 0 error.
+
+ finalLine = max(finalLine, Commons.ThickLine(uv, posA, posB + Vector2(0.001, 0.001), 20.0));
+
+ return finalLine;
+
+static func IChingc(uv : Vector2, row_col : Vector2, pseed : int) -> Color:
+ var f : float = IChing(row_col * uv, float(pseed));
+
+ return Color(f, f, f, 1)
+
+#float IChing(vec2 uv, float seed) {
+# int value = int(32.0*rand(floor(uv)+vec2(seed)));
+# float base = step(0.5, fract(fract(uv.y)*6.5))*step(0.04, fract(uv.y+0.02))*step(0.2, fract(uv.x+0.1));
+# int bit = int(fract(uv.y)*6.5);
+#
+# return base*step(0.1*step(float(bit & value), 0.5), fract(uv.x+0.55));
+#}
+
+static func IChing(uv : Vector2, pseed : float) -> float:
+ var value : int = int(32.0 * Commons.rand(Commons.floorv2(uv) + Vector2(pseed, pseed)));
+ var base : float = Commons.step(0.5, Commons.fract(Commons.fract(uv.y)*6.5))*Commons.step(0.04, Commons.fract(uv.y+0.02)) * Commons.step(0.2, Commons.fract(uv.x+0.1));
+ var bit : int = int(Commons.fract(uv.y)*6.5);
+
+ return base * Commons.step(0.1*Commons.step(float(bit & value), 0.5), Commons.fract(uv.x+0.55));
+
+#Beehive output 1
+#Shows the greyscale pattern
+#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757);
+#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv);
+#1.0-2.0*beehive_dist($(name_uv)_center.xy)
+
+static func beehive_1c(uv : Vector2, size : Vector2, pseed : int) -> Color:
+ var o80035_0_uv : Vector2 = uv * Vector2(size.x, size.y * 1.73205080757);
+ var center : Color = beehive_center(o80035_0_uv);
+
+ var f : float = 1.0 - 2.0 * beehive_dist(Vector2(center.r, center.g));
+
+ return Color(f, f, f, 1)
+
+#Beehive output 2
+#Shows a random color for each hexagonal tile
+#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757);
+#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv);
+#rand3(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed)))
+
+static func beehive_2c(uv : Vector2, size : Vector2, pseed : int) -> Color:
+ var o80035_0_uv : Vector2 = uv * Vector2(size.x, size.y * 1.73205080757);
+ var center : Color = beehive_center(o80035_0_uv);
+
+ var f : float = 1.0 - 2.0 * beehive_dist(Vector2(center.r, center.g));
+
+ var v : Vector3 = Commons.rand3(Commons.fractv2(Vector2(center.b, center.a) / Vector2(size.x, size.y)) + Vector2(float(pseed),float(pseed)));
+
+ return Color(v.x, v.y, v.z, 1)
+
+#Beehive output 3
+#Shows an UV map to be connected to the UV map port of the Custom UV node
+#vec3(vec2(0.5)+$(name_uv)_center.xy, rand(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed))))
+#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757);
+#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv);
+
+static func beehive_3c(uv : Vector2, size : Vector2, pseed : int) -> Color:
+ var o80035_0_uv : Vector2 = uv * Vector2(size.x, size.y * 1.73205080757);
+ var center : Color = beehive_center(o80035_0_uv);
+
+ #var f : float = 1.0 - 2.0 * beehive_dist(Vector2(center.r, center.g));
+
+ var v1 : Vector2 = Vector2(0.5, 0.5) + Vector2(center.r, center.g)
+ var ff : float = Commons.rand(Commons.fractv2(Vector2(center.b, center.a) / Vector2(size.x, size.y)) + Vector2(float(pseed), float(pseed)))
+
+ var c : Color = Color(v1.x, v1.y, ff, ff);
+
+ return c
+
+#float beehive_dist(vec2 p){
+# ec2 s = vec2(1.0, 1.73205080757);
+# p = abs(p);
+# return max(dot(p, s*.5), p.x);
+#}
+
+static func beehive_dist(p : Vector2) -> float:
+ var s : Vector2 = Vector2(1.0, 1.73205080757);
+
+ p = Commons.absv2(p);
+
+ return max(p.dot(s*.5), p.x);
+
+#vec4 beehive_center(vec2 p) {
+# vec2 s = vec2(1.0, 1.73205080757);
+# vec4 hC = floor(vec4(p, p - vec2(.5, 1)) / vec4(s,s)) + .5;
+# vec4 h = vec4(p - hC.xy*s, p - (hC.zw + .5)*s);
+# return dot(h.xy, h.xy) Color:
+ var s : Vector2 = Vector2(1.0, 1.73205080757);
+
+ var hC : Color = Color(p.x, p.y, p.x - 0.5, p.y - 1) / Color(s.x, s.y, s.x, s.y);
+
+ hC = Commons.floorc(Color(p.x, p.y, p.x - 0.5, p.y - 1) / Color(s.x, s.y, s.x, s.y)) + Color(0.5, 0.5, 0.5, 0.5);
+
+ var v1 : Vector2 = Vector2(p.x - hC.r * s.x, p.y - hC.g * s.y)
+ var v2 : Vector2 = Vector2(p.x - (hC.b + 0.5) * s.x, p.y - (hC.a + 0.5) * s.y)
+
+ var h : Color = Color(v1.x, v1.y, v2.x, v2.y);
+
+ if Vector2(h.r, h.g).dot(Vector2(h.r, h.g)) < Vector2(h.b, h.a).dot(Vector2(h.b, h.a)):
+ return Color(h.r, h.g, hC.r, hC.g)
+ else:
+ return Color(h.b, h.a, hC.b + 9.73, hC.a + 9.73)
+
+ #return dot(h.xy, h.xy) < dot(h.zw, h.zw) ? Color(h.xy, hC.xy) : Color(h.zw, hC.zw + 9.73);
+
+#vec3 brick_corner_uv(vec2 uv, vec2 bmin, vec2 bmax, float mortar, float corner, float seed) {
+# vec2 center = 0.5*(bmin + bmax);
+# vec2 size = bmax - bmin;
+#
+# float max_size = max(size.x, size.y);
+# float min_size = min(size.x, size.y);
+#
+# mortar *= min_size;
+# corner *= min_size;
+#
+# return vec3(clamp((0.5*size-vec2(mortar)-abs(uv-center))/corner, vec2(0.0), vec2(1.0)), rand(fract(center)+vec2(seed)+ceil(vec2(uv-center))));
+#}
+
+static func brick_corner_uv(uv : Vector2, bmin : Vector2, bmax : Vector2, mortar : float, corner : float, pseed : float) -> Vector3:
+ var center : Vector2 = 0.5 * (bmin + bmax)
+ var size : Vector2 = bmax - bmin
+ var max_size : float = max(size.x, size.y)
+ var min_size : float = min(size.x, size.y)
+ mortar *= min_size
+ corner *= min_size
+
+ var r : Vector3 = Vector3()
+
+ r.x = clamp(((0.5 * size.x - mortar) - abs(uv.x - center.x)) / corner, 0, 1)
+ r.y = clamp(((0.5 * size.y - mortar) - abs(uv.y - center.y)) / corner, 0, 1)
+ r.z = Commons.rand(Commons.fractv2(center) + Vector2(pseed, pseed))
+
+ return r
+
+# return vec3(clamp((0.5*size-vec2(mortar)-abs(uv-center))/corner, vec2(0.0), vec2(1.0)), rand(fract(center)+vec2(seed)));
+
+#vec4 brick(vec2 uv, vec2 bmin, vec2 bmax, float mortar, float round, float bevel) {
+# float color;
+# vec2 size = bmax - bmin;
+# float min_size = min(size.x, size.y);
+#
+# mortar *= min_size;
+# bevel *= min_size;
+# round *= min_size;
+# vec2 center = 0.5*(bmin+bmax);
+# vec2 d = abs(uv-center)-0.5*(size)+vec2(round+mortar);
+#
+# color = length(max(d,vec2(0))) + min(max(d.x,d.y),0.0)-round;
+# color = clamp(-color/bevel, 0.0, 1.0);
+# vec2 tiled_brick_pos = mod(bmin, vec2(1.0, 1.0));
+#
+# return vec4(color, center, tiled_brick_pos.x+7.0*tiled_brick_pos.y);
+#}
+
+static func brick(uv : Vector2, bmin : Vector2, bmax : Vector2, mortar : float, pround : float, bevel : float) -> Color:
+ var color : float
+ var size : Vector2 = bmax - bmin
+
+ var min_size : float = min(size.x, size.y)
+ mortar *= min_size
+ bevel *= min_size
+ pround *= min_size
+
+ var center : Vector2 = 0.5 * (bmin + bmax)
+ var d : Vector2 = Vector2()
+
+ d.x = abs(uv.x - center.x) - 0.5 * (size.x) + (pround + mortar)
+ d.y = abs(uv.y - center.y) - 0.5 * (size.y) + (pround + mortar)
+
+ color = Vector2(max(d.x, 0), max(d.y, 0)).length() + min(max(d.x, d.y), 0.0) - pround
+
+ color = clamp(-color / bevel, 0.0, 1.0)
+
+# var tiled_brick_pos : Vector2 = Vector2(bmin.x - 1.0 * floor(bmin.x / 1.0), bmin.y - 1.0 * floor(bmin.y / 1.0))
+
+ var tiled_brick_pos_x : float = bmin.x - 1.0 * floor(bmin.x / 1.0)
+ var tiled_brick_pos_y : float = bmin.y - 1.0 * floor(bmin.y / 1.0)
+
+ #vec2 tiled_brick_pos = mod(bmin, vec2(1.0, 1.0));
+
+ return Color(color, center.x, center.y, tiled_brick_pos_x + 7.0 * tiled_brick_pos_y)
+
+#vec3 brick_random_color(vec2 bmin, vec2 bmax, float seed) {
+# vec2 center = 0.5*(bmin + bmax);
+# return rand3(fract(center + vec2(seed)));
+#}
+
+static func brick_random_color(bmin : Vector2, bmax : Vector2, pseed : float) -> Vector3:
+ var center : Vector2 = (bmin + bmax)
+ center.x *= 0.5
+ center.y *= 0.5
+
+ return Commons.rand3(Commons.fractv2(center + Vector2(pseed, pseed)));
+
+#vec3 brick_uv(vec2 uv, vec2 bmin, vec2 bmax, float seed) {
+# vec2 center = 0.5*(bmin + bmax);
+# vec2 size = bmax - bmin;
+#
+# float max_size = max(size.x, size.y);
+#
+# return vec3(0.5+(uv-center)/max_size, rand(fract(center)+vec2(seed)));
+#}
+
+static func brick_uv(uv : Vector2, bmin : Vector2, bmax : Vector2, pseed : float) -> Vector3:
+ var center : Vector2 = 0.5 * (bmin + bmax)
+ var size : Vector2 = bmax - bmin
+ var max_size : float = max(size.x, size.y)
+
+ var x : float = 0.5+ (uv.x - center.x) / max_size
+ var y : float = 0.5+ (uv.y - center.y) /max_size
+
+ return Vector3(x, y, Commons.rand(Commons.fractv2(center) + Vector2(pseed, pseed)))
+
+#vec4 bricks_rb(vec2 uv, vec2 count, float repeat, float offset) {
+# count *= repeat;float x_offset = offset*step(0.5, fract(uv.y*count.y*0.5));
+#
+# vec2 bmin = floor(vec2(uv.x*count.x-x_offset, uv.y*count.y));
+#
+# bmin.x += x_offset;
+# bmin /= count;
+#
+# return vec4(bmin, bmin+vec2(1.0)/count);
+#}
+
+static func bricks_rb(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color:
+ count *= repeat
+
+ var x_offset : float = offset * Commons.step(0.5, Commons.fractf(uv.y * count.y * 0.5))
+
+ var bmin : Vector2
+ bmin.x = floor(uv.x * count.x - x_offset)
+ bmin.y = floor(uv.y * count.y)
+
+ bmin.x += x_offset;
+ bmin /= count
+ var bmc : Vector2 = bmin + Vector2(1.0, 1.0) / count
+
+ return Color(bmin.x, bmin.y, bmc.x, bmc.y)
+
+#vec4 bricks_rb2(vec2 uv, vec2 count, float repeat, float offset) {
+# count *= repeat;
+#
+# float x_offset = offset*step(0.5, fract(uv.y*count.y*0.5));
+# count.x = count.x*(1.0+step(0.5, fract(uv.y*count.y*0.5)));
+#
+# vec2 bmin = floor(vec2(uv.x*count.x-x_offset, uv.y*count.y));
+#
+# bmin.x += x_offset;
+# bmin /= count;
+#
+# return vec4(bmin, bmin+vec2(1.0)/count);
+#}
+
+static func bricks_rb2(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color:
+ count *= repeat
+
+ var x_offset : float = offset * Commons.step(0.5, Commons.fractf(uv.y * count.y * 0.5))
+ count.x = count.x * (1.0+Commons.step(0.5, Commons.fractf(uv.y * count.y * 0.5)))
+ var bmin : Vector2 = Vector2()
+
+ bmin.x = floor(uv.x * count.x - x_offset)
+ bmin.y = floor(uv.y * count.y)
+
+ bmin.x += x_offset
+ bmin /= count
+
+ var b : Vector2 = bmin + Vector2(1, 1) / count
+
+ return Color(bmin.x, bmin.y, b.x, b.y)
+
+#vec4 bricks_hb(vec2 uv, vec2 count, float repeat, float offset) {
+# float pc = count.x+count.y;
+# float c = pc*repeat;
+# vec2 corner = floor(uv*c);
+# float cdiff = mod(corner.x-corner.y, pc);
+#
+# if (cdiff < count.x) {
+# return vec4((corner-vec2(cdiff, 0.0))/c, (corner-vec2(cdiff, 0.0)+vec2(count.x, 1.0))/c);
+# } else {
+# return vec4((corner-vec2(0.0, pc-cdiff-1.0))/c, (corner-vec2(0.0, pc-cdiff-1.0)+vec2(1.0, count.y))/c);
+# }
+#}
+
+static func bricks_hb(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color:
+ var pc : float = count.x + count.y
+ var c : float = pc * repeat
+
+ var corner : Vector2 = Vector2(floor(uv.x * c), floor(uv.y * c))
+ var cdiff : float = Commons.modf(corner.x - corner.y, pc)
+
+ if (cdiff < count.x):
+ var col : Color = Color()
+
+ col.r = (corner.x - cdiff) / c
+ col.g = corner.y / c
+
+ col.b = (corner.x - cdiff + count.x) / c
+ col.a = (corner.y + 1.0) / c
+
+ return col
+ else:
+ var col : Color = Color()
+
+ col.r = corner.x / c
+ col.g = (corner.y - (pc - cdiff - 1.0)) / c
+
+ col.b = (corner.x + 1.0) / c
+ col.a = (corner.y - (pc - cdiff - 1.0) + count.y) / c
+
+ return col
+
+#vec4 bricks_bw(vec2 uv, vec2 count, float repeat, float offset) {
+# vec2 c = 2.0*count*repeat;
+# float mc = max(c.x, c.y);
+# vec2 corner1 = floor(uv*c);
+# vec2 corner2 = count*floor(repeat*2.0*uv);
+# float cdiff = mod(dot(floor(repeat*2.0*uv), vec2(1.0)), 2.0);
+# vec2 corner;
+# vec2 size;
+#
+# if (cdiff == 0.0) {
+# orner = vec2(corner1.x, corner2.y);
+# size = vec2(1.0, count.y);
+# } else {
+# corner = vec2(corner2.x, corner1.y);
+# size = vec2(count.x, 1.0);
+# }
+#
+# return vec4(corner/c, (corner+size)/c);
+#}
+
+static func bricks_bw(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color:
+ var c : Vector2 = 2.0 * count * repeat
+ var mc : float = max(c.x, c.y)
+ var corner1 : Vector2 = Vector2(floor(uv.x * c.x), floor(uv.y * c.y))
+ var corner2 : Vector2 = Vector2(count.x * floor(repeat* 2.0 * uv.x), count.y * floor(repeat * 2.0 * uv.y))
+
+ var tmp : Vector2 = Vector2(floor(repeat * 2.0 * uv.x), floor(repeat * 2.0 * uv.y))
+ var cdiff : float = Commons.modf(tmp.dot(Vector2(1, 1)), 2.0)
+
+ var corner : Vector2
+ var size : Vector2
+
+ if cdiff == 0:
+ corner = Vector2(corner1.x, corner2.y)
+ size = Vector2(1.0, count.y)
+ else:
+ corner = Vector2(corner2.x, corner1.y)
+ size = Vector2(count.x, 1.0)
+
+ return Color(corner.x / c.x, corner.y / c.y, (corner.x + size.x) / c.x, (corner.y + size.y) / c.y)
+
+#vec4 bricks_sb(vec2 uv, vec2 count, float repeat, float offset) {
+# vec2 c = (count+vec2(1.0))*repeat;
+# float mc = max(c.x, c.y);
+# vec2 corner1 = floor(uv*c);
+# vec2 corner2 = (count+vec2(1.0))*floor(repeat*uv);
+# vec2 rcorner = corner1 - corner2;
+# vec2 corner;
+# vec2 size;
+#
+# if (rcorner.x == 0.0 && rcorner.y < count.y) {
+# corner = corner2;
+# size = vec2(1.0, count.y);
+# } else if (rcorner.y == 0.0) {
+# corner = corner2+vec2(1.0, 0.0);
+# size = vec2(count.x, 1.0);
+# } else if (rcorner.x == count.x) {
+# corner = corner2+vec2(count.x, 1.0);
+# size = vec2(1.0, count.y);
+# } else if (rcorner.y == count.y) {
+# corner = corner2+vec2(0.0, count.y);
+# size = vec2(count.x, 1.0);
+# } else {
+# corner = corner2+vec2(1.0);
+# size = vec2(count.x-1.0, count.y-1.0);
+# }
+#
+# return vec4(corner/c, (corner+size)/c);
+#}
+
+static func bricks_sb(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color:
+ var c : Vector2 = (count + Vector2(1, 1)) * repeat
+ var mc : float = max(c.x, c.y)
+ var corner1 : Vector2 = Vector2(floor(uv.x * c.x), floor(uv.y * c.y))
+ var corner2 : Vector2 = (count + Vector2(1, 1)) * Vector2(floor(repeat * uv.x), floor(repeat * uv.y))
+ var rcorner : Vector2 = corner1 - corner2
+
+ var corner : Vector2
+ var size : Vector2
+
+ if (rcorner.x == 0.0 && rcorner.y < count.y):
+ corner = corner2
+ size = Vector2(1.0, count.y)
+ elif (rcorner.y == 0.0):
+ corner = corner2 + Vector2(1.0, 0.0)
+ size = Vector2(count.x, 1.0)
+ elif (rcorner.x == count.x):
+ corner = corner2 + Vector2(count.x, 1.0)
+ size = Vector2(1.0, count.y)
+ elif (rcorner.y == count.y):
+ corner = corner2 + Vector2(0.0, count.y)
+ size = Vector2(count.x, 1.0)
+ else:
+ corner = corner2 + Vector2(1, 1)
+ size = Vector2(count.x-1.0, count.y-1.0)
+
+ return Color(corner.x / c.x, corner.y / c.y, (corner.x + size.x) / c.x, (corner.y + size.y) / c.y)
+
+#vec4 brick2(vec2 uv, vec2 bmin, vec2 bmax, float mortar, float round, float bevel) {
+# float color;
+# vec2 size = bmax - bmin;
+# vec2 center = 0.5*(bmin+bmax);
+# vec2 d = abs(uv-center)-0.5*(size)+vec2(round+mortar);
+#
+# color = length(max(d,vec2(0))) + min(max(d.x,d.y),0.0)-round;
+# color = clamp(-color/bevel, 0.0, 1.0);
+#
+# vec2 tiled_brick_pos = mod(bmin, vec2(1.0, 1.0));
+#
+# return vec4(color, center, tiled_brick_pos.x+7.0*tiled_brick_pos.y);
+#}
+
+static func brick2(uv : Vector2, bmin : Vector2, bmax : Vector2, mortar : float, pround : float, bevel : float) -> Color:
+ return Color()
+
+#vec4 bricks_uneven(vec2 uv, int iterations, float min_size, float randomness, float seed) {
+# vec2 a = vec2(0.0);
+# vec2 b = vec2(1.0);
+# for (int i = 0; i < iterations; ++i) {
+# vec2 size = b-a;
+# if (max(size.x, size.y) < min_size) {
+# break;
+# }
+#
+# float x = rand(rand2(vec2(rand(a+b), seed)))*randomness+(1.0-randomness)*0.5;
+#
+# if (size.x > size.y) {
+# x *= size.x;
+#
+# if (uv.x > a.x+x) {
+# a.x += x;
+# } else {
+# b.x = a.x + x;
+# }
+# } else {
+# x *= size.y;
+#
+# if (uv.y > a.y+x) {
+# a.y += x;
+# } else {
+# b.y = a.y + x;
+# }
+# }
+# }
+#
+# return vec4(a, b);
+#}
+
+static func bricks_uneven(uv : Vector2, iterations : int, min_size : float, randomness : float, pseed : float) -> Color:
+ return Color()
+
+
+#vec2 truchet_generic_uv(vec2 uv, vec2 seed) {
+# vec2 i = floor(uv);
+# vec2 f = fract(uv);
+# vec2 invert = step(rand2(seed+i), vec2(0.5));
+#
+# return f*(vec2(1.0)-invert)+(vec2(1.0)-f)*invert;
+#}
+
+static func truchet_generic_uv(uv : Vector2, pseed : float) -> Vector2:
+ return Vector2()
+
+
+#float pavement(vec2 uv, float bevel, float mortar) {\n\t
+# uv = abs(uv-vec2(0.5));\n\t
+#
+# return clamp((0.5*(1.0-mortar)-max(uv.x, uv.y))/max(0.0001, bevel), 0.0, 1.0);
+#}
+
+#vec4 arc_pavement(vec2 uv, float acount, float lcount, out vec2 seed) {\n\t
+# float PI = 3.141592654;\n\t
+# float radius = (0.5/sqrt(2.0));\n
+# float uvx = uv.x;\n
+# uv.x = 0.5*fract(uv.x+0.5)+0.25;\n
+# float center = (uv.x-0.5)/radius;\n
+# center *= center;\n
+# center = floor(acount*(uv.y-radius*sqrt(1.0-center))+0.5)/acount;\n
+#
+# vec2 v = uv-vec2(0.5, center);\n
+# float cornerangle = 0.85/acount+0.25*PI;\n
+# float acountangle = (PI-2.0*cornerangle)/(lcount+floor(mod(center*acount, 2.0)));\n
+# float angle = mod(atan(v.y, v.x), 2.0*PI);\n\t
+#
+# float base_angle;\n\t
+# float local_uvy = 0.5+acount*(length(v)-radius)*(1.54-0.71*cos(1.44*(angle-PI*0.5)));\n\t
+# vec2 local_uv;\n
+#
+# if (angle < cornerangle) {\n
+# base_angle = 0.25*PI;\n\t\t
+# local_uv = vec2((angle-0.25*PI)/cornerangle*0.38*acount+0.5, 1.0-local_uvy);\n\t\t
+# seed = vec2(fract(center), 0.0);\n
+# } else if (angle > PI-cornerangle) {\n
+# base_angle = 0.75*PI;\n\t\t
+# local_uv = vec2(local_uvy, 0.5-(0.75*PI-angle)/cornerangle*0.38*acount);\n\t\t
+# seed = vec2(fract(center), 0.0);\n
+# } else {\n
+# base_angle = cornerangle+(floor((angle-cornerangle)/acountangle)+0.5)*acountangle;\n\t\t
+# local_uv = vec2((angle-base_angle)/acountangle+0.5, 1.0-local_uvy);\n\t\t
+# seed = vec2(fract(center), base_angle);\n
+# }\n
+#
+# vec2 brick_center = vec2(0.5, center)+radius*vec2(cos(base_angle), sin(base_angle));\n
+#
+# return vec4(brick_center.x+uvx-uv.x, brick_center.y, local_uv);\n
+#}
diff --git a/game/addons/mat_maker_gd/nodes/common/sdf2d.gd b/game/addons/mat_maker_gd/nodes/common/sdf2d.gd
new file mode 100644
index 0000000..cf6dd2f
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/sdf2d.gd
@@ -0,0 +1,2451 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#sdarc.mmg
+#An arc as a signed distance function
+
+#"outputs": [
+#{
+# "longdesc": "The arc as a signed distance function",
+# "sdf2d": "sdArc($uv-vec2(0.5), mod($a1, 360.0)*0.01745329251, mod($a2, 360.0)*0.01745329251, $r1, $r2)",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+#}
+#],
+#"parameters": [
+#{
+# "control": "Angle1.a",
+# "default": 0,
+# "label": "Angle 1",
+# "longdesc": "The first angle of the arc",
+# "max": 180,
+# "min": -180,
+# "name": "a1",
+# "shortdesc": "Angle1",
+# "step": 1,
+# "type": "float"
+#},
+#{
+# "control": "Angle2.a",
+# "default": 0,
+# "label": "Angle 2",
+# "longdesc": "The second angle of the arc",
+# "max": 180,
+# "min": -180,
+# "name": "a2",
+# "shortdesc": "Angle2",
+# "step": 1,
+# "type": "float"
+#},
+#{
+# "control": "Radius1.r",
+# "default": 0.5,
+# "label": "Radius",
+# "longdesc": "The radius of the arc",
+# "max": 1,
+# "min": 0,
+# "name": "r1",
+# "shortdesc": "Radius",
+# "step": 0.01,
+# "type": "float"
+#},
+#{
+# "control": "Radius11.r",
+# "default": 0.1,
+# "label": "Width",
+# "longdesc": "The width of the shape around the arc",
+# "max": 1,
+# "min": 0,
+# "name": "r2",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+#}
+#]
+
+#----------------------
+#sdboolean.mmg
+#Performs a boolean operation (union, intersection or difference) between two shapes
+
+#"inputs": [
+#{
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The first shape, defined as a signed distance function",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "sdf2d"
+#},
+#{
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The second shape, defined as a signed distance function",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "sdf2d"
+#}
+#],
+#"outputs": [
+#{
+# "longdesc": "The shape generated by the boolean operation",
+# "sdf2d": "$op $in1($uv), $in2($uv))",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+#}
+#],
+#"parameters": [
+#{
+# "default": 2,
+# "label": "",
+# "longdesc": "The operation performed by this node",
+# "name": "op",
+# "shortdesc": "Operation",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Union",
+# "value": "min("
+# },
+# {
+# "name": "Subtraction",
+# "value": "max(-"
+# },
+# {
+# "name": "Intersection",
+# "value": "max("
+# }
+# ]
+#}
+#],
+
+#----------------------
+#sdbox.mmg
+#A rectangle described as a signed distance function
+
+# "code": "vec2 $(name_uv)_d = abs($uv-vec2($cx+0.5, $cy+0.5))-vec2($w, $h);",
+# "outputs": [
+# {
+# "longdesc": "The generated signed distance function",
+# "sdf2d": "length(max($(name_uv)_d,vec2(0)))+min(max($(name_uv)_d.x,$(name_uv)_d.y),0.0)",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "Rect1.x",
+# "default": 0.5,
+# "label": "Width",
+# "longdesc": "The width of the box",
+# "max": 1,
+# "min": 0,
+# "name": "w",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "Rect1.y",
+# "default": 1,
+# "label": "Height",
+# "longdesc": "The height of the box",
+# "max": 1,
+# "min": 0,
+# "name": "h",
+# "shortdesc": "Height",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Center X",
+# "longdesc": "The position of the center of the box on the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Center Y",
+# "longdesc": "The position of the center of the box on the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdcircle.mmg
+#A circle described as a signed distance function
+
+# "outputs": [
+# {
+# "longdesc": "The generated signed distance function",
+# "sdf2d": "length($uv-vec2($cx+0.5, $cy+0.5))-$r",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "Radius1.r",
+# "default": 0.5,
+# "label": "Radius",
+# "longdesc": "The radius of the circle",
+# "max": 1,
+# "min": 0,
+# "name": "r",
+# "shortdesc": "Radius",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Center X",
+# "longdesc": "The position of the center on the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Center Y",
+# "longdesc": "The position of the center on the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdcirclerepeat.mmg
+#Repeats its input shape around a circle
+
+#Output:
+#Out, sdf2d (float) (property)
+#$in(circle_repeat_transform_2d($uv-vec2(0.5), $c)+vec2(0.5))
+
+#Input:
+#in, float (sdf2d), default : 0
+#count, int, min: 1, max: 32, default: 6
+
+#----------------------
+#sdelongation.mmg
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "name": "in",
+# "type": "sdf2d"
+# }
+# ],
+# "outputs": [
+# {
+# "sdf2d": "$in($uv-clamp($uv-vec2(0.5), -vec2($x, $y), vec2($x, $y)))",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "Rect1.x",
+# "default": 0,
+# "label": "X",
+# "max": 1,
+# "min": 0,
+# "name": "x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "Rect1.y",
+# "default": 0,
+# "label": "Y",
+# "max": 1,
+# "min": 0,
+# "name": "y",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+
+#----------------------
+#sdline.mmg
+#A line or a capsule shape described as a signed distance function
+
+#vec2 $(name_uv)_sdl = sdLine($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5));
+
+#Outputs
+#output, sdf2d (float), (output property)
+#$(name_uv)_sdl.x-$r*$profile($(name_uv)_sdl.y)
+
+#Inputs
+#A, Vector2, min: -1, max: 1, step: 0.01, default: (-0.3, -0.3)
+#B, Vector2, min: -1, max: 1, step: 0.01, default: (0.3, 0.3)
+#width, float, min: 0, max: 1, step: 0.01, default: 0.1
+#points (curve), default: 0, 0, 0, 1, 0, 0, 1, 1
+
+#----------------------
+#sdmorph.mmg
+#Morphs between 2 input shapes
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The first shape, defined as a signed distance function",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "sdf2d"
+# },
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The second shape, defined as a signed distance function",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "sdf2d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated hybrid shape",
+# "sdf2d": "mix($in1($uv), $in2($uv), $amount)",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "",
+# "longdesc": "The amount of the second input in the result",
+# "max": 1,
+# "min": 0,
+# "name": "amount",
+# "shortdesc": "Amount",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdngon.mmg (inc sdrotate.mmg, sdcirclerepeat.mmg)
+#An n-gon described as a signed distance function
+
+# "outputs": [
+# {
+# "longdesc": "The n-gon as a signed distance function",
+# "sdf2d": "sdNgon(sdf2d_rotate($uv-vec2($cx, $cy), $rot*0.01745329251-1.57079632679)-vec2(0.5), $r, $n)",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 3,
+# "label": "N",
+# "longdesc": "The number of sides of the n-gon",
+# "max": 12,
+# "min": 3,
+# "name": "n",
+# "shortdesc": "N",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "Radius1.r",
+# "default": 0.5,
+# "label": "Radius",
+# "longdesc": "The radius of the n-gon",
+# "max": 1,
+# "min": 0,
+# "name": "r",
+# "shortdesc": "Radius",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "Radius1.a",
+# "default": 0,
+# "label": "Rotation",
+# "longdesc": "The rotation of the n-gon",
+# "max": 180,
+# "min": -180,
+# "name": "rot",
+# "shortdesc": "Rotation",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Center X",
+# "longdesc": "The position of the center on the X axis",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Center Y",
+# "longdesc": "The position of the center on the Y axis",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdpolygon.mmg
+#A polygon as a signed distance function
+
+#Output:
+#Out, sdf2d (float) (property)
+#sdPolygon_$(name)($uv)
+
+#Input:
+#polygon points, default: 0.2, 0.2, 0.4, 0.7, 0.7, 0.4
+
+#----------------------
+#sdrepeat.mmg
+#Repeats its input shape on a grid.This node does not support overlapping between instances.
+
+#Output:
+#Out, sdf2d (float) (property)
+#$in(repeat_2d($uv, vec2(1.0/$rx, 1.0/$ry), float($seed), $r))
+
+#Input:
+#in, float (sdf2d), default : 0
+#x, int, min: 1, max: 32, default: 4
+#y, int, min: 1, max: 32, default: 4
+#random_rotation, min: 0, max: 1, step:0.01, default: 0.5
+
+#----------------------
+#sdrhombus.mmg
+#A rhombus described as a signed distance function
+
+# "outputs": [
+# {
+# "longdesc": "The rhombus as a signed distance function",
+# "sdf2d": "sdRhombus($uv-vec2($cx+0.5, $cy+0.5), vec2($w, $h))",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "Rect1.x",
+# "default": 0.5,
+# "label": "Width",
+# "longdesc": "The width of the rhombus",
+# "max": 1,
+# "min": 0,
+# "name": "w",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "Rect1.y",
+# "default": 1,
+# "label": "Height",
+# "longdesc": "The height of the rhombus",
+# "max": 1,
+# "min": 0,
+# "name": "h",
+# "shortdesc": "Height",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Center X",
+# "longdesc": "The position of the center on the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Center Y",
+# "longdesc": "The position of the center on the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdrotate.mmg
+#Rotates its input shape described as a signed distance function
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The input shape, defined as a signed distance function",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "sdf2d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The rotated shape",
+# "sdf2d": "$in(sdf2d_rotate($uv, $a*0.01745329251))",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "Radius1.a",
+# "default": 0,
+# "label": "",
+# "longdesc": "The rotation angle",
+# "max": 180,
+# "min": -180,
+# "name": "a",
+# "shortdesc": "Angle",
+# "step": 1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdroundedshape.mmg
+#Dilates an input shape into a rounded shape
+
+#Output:
+#Out, sdf2d (float) (property)
+#$in($uv)-$r
+
+#Input:
+#in, float (sdf2d), default : 0
+#radius, min: 0, max: 1, step:0.01, default: 0
+
+#----------------------
+#sdscale.mmg
+#Scales its input shape described as a signed distance function
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The input shape, defined as a signed distance function",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "sdf2d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated scaled shape",
+# "sdf2d": "$in(($uv-vec2(0.5))/$s+vec2(0.5))*$s",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "Scale1.x",
+# "default": 1,
+# "label": "",
+# "longdesc": "The scale of the transform",
+# "max": 5,
+# "min": 0,
+# "name": "s",
+# "shortdesc": "Scale",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdshow.mmg
+#Creates a greyscale image from a shape described as a 2D Signed Distance Function
+
+#Output
+
+#Output float (color) - Shows the shape as a greyscale image
+#clamp($base-$in($uv)/max($bevel, 0.00001), 0.0, 1.0)
+
+#Input:
+#Input (sdf - shape), default: 0 - sdf2d - universal input
+#bevel, float, min 0, max 1, step 0.01, default 0
+#base, float, min 0, max 1, step 0.01, default 0
+
+#----------------------
+#sdsmoothboolean.mmg
+#Performs a smooth boolean operation (union, intersection or difference) between two shapes
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The first shape, defined as a signed distance function",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "sdf2d"
+# },
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The second shape, defined as a signed distance function",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "sdf2d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The shape generated by the boolean operation",
+# "sdf2d": "sdSmooth$op($in1($uv), $in2($uv), $k)",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "The operation performed by this node",
+# "name": "op",
+# "shortdesc": "Operation",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Union",
+# "value": "Union"
+# },
+# {
+# "name": "Subtraction",
+# "value": "Subtraction"
+# },
+# {
+# "name": "Intersection",
+# "value": "Intersection"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The smoothness of the boolean operation",
+# "max": 1,
+# "min": 0,
+# "name": "k",
+# "shortdesc": "Smoothness",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#sdtranslate.mmg
+#Translates its input shape described as signed distance function
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The input shape, defined as a signed distance function",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "sdf2d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The translated shape",
+# "sdf2d": "$in($uv-vec2($x, $y))",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "X",
+# "longdesc": "The translation along the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "x",
+# "shortdesc": "Translate.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Y",
+# "longdesc": "The translation along the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "y",
+# "shortdesc": "Translate.y",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#curve.mmg
+
+# "code": "vec2 $(name_uv)_bezier = sdBezier($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5), vec2($cx+0.5, $cy+0.5));\nvec2 $(name_uv)_uv = vec2($(name_uv)_bezier.x, $(name_uv)_bezier.y/$width+0.5);\nvec2 $(name_uv)_uvtest = step(vec2(0.5), abs($(name_uv)_uv-vec2(0.5)));\n$(name_uv)_uv = mix(vec2(fract($repeat*$(name_uv)_uv.x), $(name_uv)_uv.y), vec2(0.0), max($(name_uv)_uvtest.x, $(name_uv)_uvtest.y));\n",
+# "inputs": [
+# {
+# "default": "vec4(vec3(step(abs($uv.y-0.5), 0.4999)), 1.0)",
+# "label": "",
+# "longdesc": "Input pattern to be drawn along the curve",
+# "name": "in",
+# "shortdesc": "Pattern",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "An image showing the specified curve",
+# "rgba": "$in($(name_uv)_uv)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": -0.3,
+# "label": "AX",
+# "longdesc": "Position on X axis of the first control point",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "ax",
+# "shortdesc": "A.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": -0.1,
+# "label": "AY",
+# "longdesc": "Position on Y axis of the first control point",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "ay",
+# "shortdesc": "A.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P3.x",
+# "default": -0,
+# "label": "BX",
+# "longdesc": "Position on X axis of the second control point",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "bx",
+# "shortdesc": "B.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P3.y",
+# "default": 0.2,
+# "label": "BY",
+# "longdesc": "Position on Y axis of the second control point",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "by",
+# "shortdesc": "B.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P2.x",
+# "default": 0.3,
+# "label": "CX",
+# "longdesc": "Position on X axis of the third control point",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "cx",
+# "shortdesc": "C.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "P2.y",
+# "default": -0.1,
+# "label": "CY",
+# "longdesc": "Position on Y axis of the third control point",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "cy",
+# "shortdesc": "C.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Width",
+# "longdesc": "Width of the curve pattern",
+# "max": 0.5,
+# "min": 0,
+# "name": "width",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Repeat",
+# "longdesc": "Number of repetitions of the input pattern",
+# "max": 16,
+# "min": 1,
+# "name": "repeat",
+# "shortdesc": "Repeat",
+# "step": 1,
+# "type": "float"
+# }
+# ]
+
+#----------------------
+#sdannularshape.mmg
+#Creates an annular shape from a shape described as a signed distance function
+
+#Output
+
+#Output float (color) - Shows the shape as a greyscale image
+#sdRipples($in($uv), $r, int($ripples))
+
+#Input:
+#Input (sdf - shape), default: 0 - sdf2d - universal input
+#width, float, min 0, max 1, step 0.01, default 0
+#rippples, int, min 1, max 16, default 1
+
+#----------------------
+#sd_mask_to_sdf.mmg
+
+#{
+# "connections": [
+# {
+# "from": "6520",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "edge_detect",
+# "from_port": 0,
+# "to": "1823",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "6520",
+# "to_port": 1
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "tones_step",
+# "to_port": 0
+# },
+# {
+# "from": "tones_step",
+# "from_port": 0,
+# "to": "edge_detect",
+# "to_port": 0
+# },
+# {
+# "from": "1823",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 0
+# },
+# {
+# "from": "2434_8",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 1
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 0,
+# "to": "6520",
+# "to_port": 0
+# },
+# {
+# "from": "24282_2",
+# "from_port": 0,
+# "to": "2434_8",
+# "to_port": 0
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 1,
+# "to": "24282_2",
+# "to_port": 0
+# }
+# ],
+# "label": "Mask to SDF",
+# "longdesc": "",
+# "name": "sd_mask_to_sdf",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "iterate_buffer",
+# "node_position": {
+# "x": 76.700005,
+# "y": -249.817047
+# },
+# "parameters": {
+# "filter": false,
+# "iterations": 30,
+# "mipmap": false,
+# "size": 10
+# },
+# "seed_value": 29168,
+# "type": "iterate_buffer"
+# },
+# {
+# "name": "2434_8",
+# "node_position": {
+# "x": 91.099991,
+# "y": -9.031479
+# },
+# "parameters": {
+# "distance": 0,
+# "size": 10
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(-1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec3 $(name)_jump_flood(vec2 uv, float size) {\n\tivec2 int_uv = ivec2(uv * size);\n\tfloat best_distance = 9999.9;\n\tvec2 best_coord;\n\tfloat iter = $in(uv).b;\n\titer += 0.01;\n\tfloat step_width = size / 4.0 / (iter * 100.0);\n\t\n\tfor (int x = -1; x <= 1; x++) {\n\t\tfor (int y = -1; y <= 1; y++) {\n\t\t\tivec2 offsetUV = int_uv + ivec2(x, y) * int(step_width);\n\t\t\tvec2 float_uv = vec2(offsetUV) / size;\n\t\t\tvec2 offset_pos = $in(float_uv).rg;\n\t\t\t\n\t\t\tif (offset_pos.x != 0.0 && offset_pos.y != 0.0) {\n\t\t\t\tvec2 diff = offset_pos - uv;\n\t\t\t\t//float dist = dot(diff, diff);\n\t\t\t\t$distance\n\t\t\t\tif (dist < best_distance) {\n\t\t\t\t\tbest_distance = dist;\n\t\t\t\t\tbest_coord = offset_pos;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn vec3(best_coord, iter);\n}",
+# "name": "Jump Flood",
+# "outputs": [
+# {
+# "rgb": "$(name)_jump_flood($uv, $size)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 10,
+# "first": 0,
+# "label": "",
+# "last": 13,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "default": 0,
+# "label": "",
+# "name": "distance",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Euclidean",
+# "value": "float dist = dot(diff, diff);"
+# },
+# {
+# "name": "Manhattan",
+# "value": "float dist = abs(diff.x) + abs(diff.y);"
+# },
+# {
+# "name": "Chebyshev",
+# "value": "float dist = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);"
+# }
+# ]
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "1823",
+# "node_position": {
+# "x": -269.899872,
+# "y": -18.741766
+# },
+# "parameters": {
+#
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "1.0",
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "name": "Mask to UV Mask",
+# "outputs": [
+# {
+# "rgb": "$in($uv) < .5 ? vec3(0.0) : vec3($uv, 0.0)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+#
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "edge_detect",
+# "node_position": {
+# "x": -286.951447,
+# "y": -137.078964
+# },
+# "parameters": {
+# "size": 10,
+# "threshold": 0.4,
+# "width": 1
+# },
+# "type": "edge_detect"
+# },
+# {
+# "name": "6520",
+# "node_position": {
+# "x": 364.156525,
+# "y": -261.873169
+# },
+# "parameters": {
+# "distance": 0,
+# "tiled": false
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# },
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "name": "mask",
+# "type": "f"
+# }
+# ],
+# "instance": "float $(name)_distance(vec2 uv, bool tiled) {\n\tif (tiled) {\n\t\tuv = fract(uv);\n\t}\n\tvec2 custom_uv = $in(uv).xy;\n\tvec2 diff = custom_uv != vec2(0.0) ? custom_uv - uv : vec2(1.0);\n\t$distance\n\tif (!tiled) {\n\t\tuv = clamp(uv, 0.0, 1.0);\n\t}\n\treturn $mask(uv) < 0.5 ? distance : -distance;\n}",
+# "name": "Calculate Distance",
+# "outputs": [
+# {
+# "sdf2d": "$(name)_distance($uv, $tiled)",
+# "type": "sdf2d"
+# }
+# ],
+# "parameters": [
+# {
+# "default": false,
+# "label": "Tiled",
+# "name": "tiled",
+# "type": "boolean"
+# },
+# {
+# "default": 0,
+# "label": "",
+# "name": "distance",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Euclidean",
+# "value": "float distance = length(diff);"
+# },
+# {
+# "name": "Manhattan",
+# "value": "float distance = abs(diff.x) + abs(diff.y);"
+# },
+# {
+# "name": "Chebyshev",
+# "value": "float distance = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);"
+# }
+# ]
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -735.85144,
+# "y": -352.006775
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The greyscale mask to be converted",
+# "name": "mask",
+# "shortdesc": "Mask",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 646.256348,
+# "y": -263.285461
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The genrated distance field",
+# "name": "sdf",
+# "shortdesc": "Output",
+# "type": "sdf2d"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -47.67952,
+# "y": -541.979187
+# },
+# "parameters": {
+# "param0": 10,
+# "param1": 30,
+# "param2": false,
+# "param3": 0
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Size",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "size"
+# },
+# {
+# "node": "2434_8",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# },
+# {
+# "node": "edge_detect",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution used for the operation",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "Iterations",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "iterations"
+# }
+# ],
+# "longdesc": "The number of iterations the jump flood algorithm performs to calculate the distances",
+# "name": "param1",
+# "shortdesc": "Iterations",
+# "type": "linked_control"
+# },
+# {
+# "label": "Tiled",
+# "linked_widgets": [
+# {
+# "node": "24282_2",
+# "widget": "tiled"
+# },
+# {
+# "node": "6520",
+# "widget": "tiled"
+# }
+# ],
+# "longdesc": "Controls whether the resulting ditance field will be tiled. Useful for patterns that extend over the texture bounds",
+# "name": "param2",
+# "shortdesc": "Tiled",
+# "type": "linked_control"
+# },
+# {
+# "label": "Distance",
+# "linked_widgets": [
+# {
+# "node": "2434_8",
+# "widget": "distance"
+# },
+# {
+# "node": "6520",
+# "widget": "distance"
+# }
+# ],
+# "name": "param3",
+# "shortdesc": "Distance function",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -297.702789,
+# "y": -348.41391
+# },
+# "parameters": {
+# "size": 10
+# },
+# "type": "buffer",
+# "version": 1
+# },
+# {
+# "name": "tones_step",
+# "node_position": {
+# "x": -294.947968,
+# "y": -258.84549
+# },
+# "parameters": {
+# "invert": false,
+# "value": 0.5,
+# "width": 0
+# },
+# "type": "tones_step"
+# },
+# {
+# "name": "24282_2",
+# "node_position": {
+# "x": 114.391708,
+# "y": -90.765732
+# },
+# "parameters": {
+# "tiled": false
+# },
+# "shader_model": {
+# "code": "vec3 $(name_uv)_in = $in(fract($uv));\nvec3 $(name_uv)_tiled = $(name_uv)_in.xy != vec2(0.0) ? $(name_uv)_in + vec3(floor($uv), 0.0) : $(name_uv)_in;",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "",
+# "name": "Tiling",
+# "outputs": [
+# {
+# "rgb": "$tiled ? $(name_uv)_tiled : $(name_uv)_in",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": false,
+# "label": "Tiled",
+# "name": "tiled",
+# "type": "boolean"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "connections": [
+# {
+# "from": "edge_detect",
+# "from_port": 0,
+# "to": "1823",
+# "to_port": 0
+# },
+# {
+# "from": "tones_step",
+# "from_port": 0,
+# "to": "edge_detect",
+# "to_port": 0
+# },
+# {
+# "from": "1823",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 0
+# },
+# {
+# "from": "2434_8",
+# "from_port": 0,
+# "to": "iterate_buffer",
+# "to_port": 1
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 0,
+# "to": "6520",
+# "to_port": 0
+# },
+# {
+# "from": "24282_2",
+# "from_port": 0,
+# "to": "2434_8",
+# "to_port": 0
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 1,
+# "to": "24282_2",
+# "to_port": 0
+# },
+# {
+# "from": "iterate_buffer",
+# "from_port": 0,
+# "to": "2153",
+# "to_port": 1
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "tones_step",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "2153",
+# "to_port": 0
+# },
+# {
+# "from": "2153",
+# "from_port": 0,
+# "to": "11582",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "11582",
+# "to_port": 2
+# },
+# {
+# "from": "11582",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "8064",
+# "from_port": 0,
+# "to": "2153",
+# "to_port": 2
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "8064",
+# "to_port": 0
+# },
+# {
+# "from": "8064",
+# "from_port": 0,
+# "to": "buffer_2",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_2",
+# "from_port": 0,
+# "to": "6520",
+# "to_port": 1
+# },
+# {
+# "from": "6520",
+# "from_port": 0,
+# "to": "11582",
+# "to_port": 0
+# }
+# ],
+# "label": "Dilate 2",
+# "longdesc": "",
+# "name": "graph_3",
+# "node_position": {
+# "x": 515.555786,
+# "y": -545.049744
+# },
+# "nodes": [
+# {
+# "name": "iterate_buffer",
+# "node_position": {
+# "x": 64.900002,
+# "y": -259.215881
+# },
+# "parameters": {
+# "filter": false,
+# "iterations": 30,
+# "mipmap": false,
+# "size": 9
+# },
+# "seed_value": 29168,
+# "type": "iterate_buffer"
+# },
+# {
+# "name": "2434_8",
+# "node_position": {
+# "x": 102.099998,
+# "y": 15.367363
+# },
+# "parameters": {
+# "distance": 0,
+# "size": 9
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(-1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "vec3 $(name)_jump_flood(vec2 uv, float size) {\n\tivec2 int_uv = ivec2(uv * size);\n\tfloat best_distance = 9999.9;\n\tvec2 best_coord;\n\tfloat iter = $in(uv).b;\n\titer += 0.01;\n\tfloat step_width = size / 4.0 / (iter * 100.0);\n\t\n\tfor (int x = -1; x <= 1; x++) {\n\t\tfor (int y = -1; y <= 1; y++) {\n\t\t\tivec2 offsetUV = int_uv + ivec2(x, y) * int(step_width);\n\t\t\tvec2 float_uv = vec2(offsetUV) / size;\n\t\t\tvec2 offset_pos = $in(float_uv).rg;\n\t\t\t\n\t\t\tif (offset_pos.x != 0.0 && offset_pos.y != 0.0) {\n\t\t\t\tvec2 diff = offset_pos - uv;\n\t\t\t\t//float dist = dot(diff, diff);\n\t\t\t\t//float dist = abs(diff.x) + abs(diff.y);\n\t\t\t\t//float dist = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);\n\t\t\t\t$distance\n\t\t\t\tif (dist < best_distance) {\n\t\t\t\t\tbest_distance = dist;\n\t\t\t\t\tbest_coord = offset_pos;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn vec3(best_coord, iter);\n}",
+# "name": "Jump Flood",
+# "outputs": [
+# {
+# "rgb": "$(name)_jump_flood($uv, $size)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 10,
+# "first": 0,
+# "label": "",
+# "last": 13,
+# "name": "size",
+# "type": "size"
+# },
+# {
+# "default": 2,
+# "label": "",
+# "name": "distance",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Euclidean",
+# "value": "float dist = dot(diff, diff);"
+# },
+# {
+# "name": "Manhattan",
+# "value": "float dist = abs(diff.x) + abs(diff.y);"
+# },
+# {
+# "name": "Chebyshev",
+# "value": "float dist = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);"
+# }
+# ]
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "1823",
+# "node_position": {
+# "x": -269.899872,
+# "y": -17.741766
+# },
+# "parameters": {
+#
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "1.0",
+# "label": "",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "name": "Mask to UV Mask",
+# "outputs": [
+# {
+# "rgb": "$in($uv) < .5 ? vec3(0.0) : vec3($uv, 0.0)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+#
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "edge_detect",
+# "node_position": {
+# "x": -286.951447,
+# "y": -137.078964
+# },
+# "parameters": {
+# "size": 9,
+# "threshold": 0.4,
+# "width": 1
+# },
+# "type": "edge_detect"
+# },
+# {
+# "name": "6520",
+# "node_position": {
+# "x": 347.356567,
+# "y": -346.449127
+# },
+# "parameters": {
+# "distance": 0,
+# "length": 0.1
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# },
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "name": "mask",
+# "type": "f"
+# }
+# ],
+# "instance": "float $(name)_distance(vec2 uv, float length) {\n\tvec2 custom_uv = $in(fract(uv)).xy;\n\tvec2 diff = custom_uv != vec2(0.0) ? custom_uv - fract(uv) : vec2(1.0);\n\t//float distance = length(diff);\n\t//float distance = abs(diff.x) + abs(diff.y);\n\t//float distance = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);\n\t$distance\n\tif (length >= 0.0) {\n\t\treturn $mask(uv) < 0.5 ? clamp(1.0 - (distance / length), 0.0, 1.0) : 1.0;\n\t} else {\n\t\treturn $mask(uv) > 0.5 ? clamp((distance / -length), 0.0, 1.0) : 0.0;\n\t}\n}",
+# "name": "Calculate Distance",
+# "outputs": [
+# {
+# "f": "$(name)_distance($uv, $length)",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Length",
+# "max": 1,
+# "min": -1,
+# "name": "length",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "default": 2,
+# "label": "",
+# "name": "distance",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Euclidean",
+# "value": "float distance = length(diff);"
+# },
+# {
+# "name": "Manhattan",
+# "value": "float distance = abs(diff.x) + abs(diff.y);"
+# },
+# {
+# "name": "Chebyshev",
+# "value": "float distance = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);"
+# }
+# ]
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -793.451477,
+# "y": -236.812195
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "The greyscale mask to be converted",
+# "name": "mask",
+# "shortdesc": "Mask",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "longdesc": "",
+# "name": "source",
+# "shortdesc": "Source",
+# "type": "rgb"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": 885.056335,
+# "y": -247.896317
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "longdesc": "Shows the dilated image",
+# "name": "out",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": 61.520477,
+# "y": -639.339172
+# },
+# "parameters": {
+# "param0": 9,
+# "param1": 0.1,
+# "param2": 0,
+# "param3": 0,
+# "param4": 30
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "size"
+# },
+# {
+# "node": "2434_8",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_2",
+# "widget": "size"
+# },
+# {
+# "node": "edge_detect",
+# "widget": "size"
+# }
+# ],
+# "longdesc": "The resolution of the input images",
+# "name": "param0",
+# "shortdesc": "Size",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "6520",
+# "widget": "length"
+# }
+# ],
+# "longdesc": "The length of the dilate effect",
+# "name": "param1",
+# "shortdesc": "Length",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "11582",
+# "widget": "fill"
+# }
+# ],
+# "longdesc": "0 to generate a gradient to black while dilating, 1 to fill with input color",
+# "name": "param2",
+# "shortdesc": "Fill",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "2434_8",
+# "widget": "distance"
+# },
+# {
+# "node": "6520",
+# "widget": "distance"
+# }
+# ],
+# "name": "param3",
+# "shortdesc": "Distance Function",
+# "type": "linked_control"
+# },
+# {
+# "label": "",
+# "linked_widgets": [
+# {
+# "node": "iterate_buffer",
+# "widget": "iterations"
+# }
+# ],
+# "longdesc": "The number of iterations the jump flood algorithm performs to calculate the distances",
+# "name": "param4",
+# "shortdesc": "Iterations",
+# "type": "linked_control"
+# }
+# ]
+# },
+# {
+# "name": "buffer_2",
+# "node_position": {
+# "x": -294.502808,
+# "y": -340.816589
+# },
+# "parameters": {
+# "size": 9
+# },
+# "type": "buffer",
+# "version": 1
+# },
+# {
+# "name": "tones_step",
+# "node_position": {
+# "x": -285.347992,
+# "y": -253.248215
+# },
+# "parameters": {
+# "invert": false,
+# "value": 0.5,
+# "width": 0
+# },
+# "type": "tones_step"
+# },
+# {
+# "name": "24282_2",
+# "node_position": {
+# "x": 109.591705,
+# "y": -88.567284
+# },
+# "parameters": {
+# "tiled": true
+# },
+# "shader_model": {
+# "code": "vec3 $(name_uv)_in = $in(fract($uv));\nvec3 $(name_uv)_tiled = $(name_uv)_in.xy != vec2(0.0) ? $(name_uv)_in + vec3(floor($uv), 0.0) : $(name_uv)_in;",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "function": true,
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "",
+# "name": "Tiling",
+# "outputs": [
+# {
+# "rgb": "$tiled ? $(name_uv)_tiled : $(name_uv)_in",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "default": false,
+# "label": "Tiled",
+# "name": "tiled",
+# "type": "boolean"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "2153",
+# "node_position": {
+# "x": 368.85202,
+# "y": -157.100906
+# },
+# "parameters": {
+#
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "label": "Source",
+# "name": "source",
+# "type": "rgb"
+# },
+# {
+# "default": "$uv",
+# "label": "Custom UV",
+# "name": "custom_uv",
+# "type": "rgb"
+# },
+# {
+# "default": "0.0",
+# "label": "Mask",
+# "name": "mask",
+# "type": "f"
+# }
+# ],
+# "instance": "",
+# "name": "Dilate UV",
+# "outputs": [
+# {
+# "rgb": "$mask($uv) < 0.5 ? $source($custom_uv($uv).xy) : $source($uv)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+#
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "11582",
+# "node_position": {
+# "x": 609.343445,
+# "y": -239.746399
+# },
+# "parameters": {
+# "fill": 0
+# },
+# "shader_model": {
+# "code": "float $(name_uv)_dist = $distance($uv);\nvec3 $(name_uv)_color = mix($source(fract($uv)), $fill_raw(fract($uv)), float( $(name_uv)_dist != 0.0 ) );\nvec3 $(name_uv)_mix = mix($(name_uv)_color * $(name_uv)_dist, $(name_uv)_color, $fill);",
+# "global": "",
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "Distance",
+# "name": "distance",
+# "type": "f"
+# },
+# {
+# "default": "vec3(1.0)",
+# "function": true,
+# "label": "Fill Raw",
+# "name": "fill_raw",
+# "type": "rgb"
+# },
+# {
+# "default": "vec3(1.0)",
+# "function": true,
+# "label": "Source",
+# "name": "source",
+# "type": "rgb"
+# }
+# ],
+# "instance": "",
+# "name": "Dilate Combine",
+# "outputs": [
+# {
+# "rgb": "$(name_uv)_mix",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Fill",
+# "max": 1,
+# "min": 0,
+# "name": "fill",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+# },
+# "type": "shader"
+# },
+# {
+# "name": "8064",
+# "node_position": {
+# "x": -282.533325,
+# "y": -433.011169
+# },
+# "parameters": {
+#
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "name": "in",
+# "type": "rgb"
+# }
+# ],
+# "instance": "",
+# "name": "Default Value",
+# "outputs": [
+# {
+# "rgb": "$in($uv)",
+# "type": "rgb"
+# }
+# ],
+# "parameters": [
+#
+# ]
+# },
+# "type": "shader"
+# }
+# ],
+# "parameters": {
+# "param0": 9,
+# "param1": 0.1,
+# "param2": 0,
+# "param3": 0,
+# "param4": 30
+# },
+# "shortdesc": "",
+# "type": "graph"
+# }
+# ],
+# "parameters": {
+# "param0": 10,
+# "param1": 30,
+# "param2": false,
+# "param3": 0
+# },
+# "shortdesc": "",
+# "type": "graph"
+#}
+
+static func sdf_show(val : float, bevel : float) -> Color:
+ var f : float = clamp(-val / max(bevel, 0.00001), 0.0, 1.0);
+
+ return Color(f, f, f, 1)
+
+static func sdf_circle(uv : Vector2, c : Vector2, r : float) -> float:
+ c.x += 0.5
+ c.y += 0.5
+
+ return (uv - c).length() - r;
+
+static func sdf_box(uv : Vector2, c : Vector2, wh : Vector2) -> float:
+ c.x += 0.5
+ c.y += 0.5
+
+ var d : Vector2 = Commons.absv2(uv - c) - wh
+
+ return Commons.maxv2(d, Vector2(0, 0)).length() + min(max(d.x, d.y), 0.0)
+
+#vec2 $(name_uv)_sdl = sdLine($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5));
+
+static func sdf_line(uv : Vector2, a : Vector2, b : Vector2, r : float) -> Vector2:
+ a.x += 0.5
+ a.y += 0.5
+
+ b.x += 0.5
+ b.y += 0.5
+
+ return sdLine(uv, a, b)
+
+
+static func sdf_rhombus(uv : Vector2, c : Vector2, wh : Vector2) -> float:
+ c.x += 0.5
+ c.y += 0.5
+
+ return sdRhombus(uv - c, wh);
+
+
+static func sdf_arc(uv : Vector2, a : Vector2, r : Vector2) -> float:
+ return sdArc(uv - Vector2(0.5, 0.5), Commons.modf(a.x, 360.0) * 0.01745329251, Commons.modf(a.y, 360.0)*0.01745329251, r.x, r.y)
+
+#float sdr_ndot(vec2 a, vec2 b) {
+# return a.x*b.x - a.y*b.y;
+#}
+
+static func sdr_ndot(a : Vector2, b : Vector2) -> float:
+ return a.x * b.x - a.y * b.y;
+
+#float sdRhombus(in vec2 p, in vec2 b) {
+# vec2 q = abs(p);
+# float h = clamp((-2.0*sdr_ndot(q,b)+sdr_ndot(b,b))/dot(b,b),-1.0,1.0);
+# float d = length( q - 0.5*b*vec2(1.0-h,1.0+h) );
+# return d * sign( q.x*b.y + q.y*b.x - b.x*b.y );
+#}
+
+static func sdRhombus(p : Vector2, b : Vector2) -> float:
+ var q : Vector2 = Commons.absv2(p);
+ var h : float = clamp((-2.0 * sdr_ndot(q,b) + sdr_ndot(b,b)) / b.dot(b), -1.0, 1.0);
+ var d : float = ( q - 0.5*b * Vector2(1.0-h, 1.0+h)).length()
+ return d * sign(q.x*b.y + q.y*b.x - b.x*b.y)
+
+#float sdArc(vec2 p, float a1, float a2, float ra, float rb) {
+# float amid = 0.5*(a1+a2)+1.6+3.14*step(a1, a2);
+# float alength = 0.5*(a1-a2)-1.6+3.14*step(a1, a2);
+#
+# vec2 sca = vec2(cos(amid), sin(amid));
+# vec2 scb = vec2(cos(alength), sin(alength));
+# p *= mat2(vec2(sca.x,sca.y),vec2(-sca.y,sca.x));
+# p.x = abs(p.x);
+#
+# float k = (scb.y*p.x>scb.x*p.y) ? dot(p.xy,scb) : length(p.xy);
+# return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;
+#}
+
+static func sdArc(p : Vector2, a1 : float, a2 : float, ra : float, rb : float) -> float:
+ var amid : float = 0.5*(a1+a2)+1.6+3.14 * Commons.step(a1, a2);
+ var alength : float = 0.5*(a1-a2)-1.6+3.14 * Commons.step(a1, a2);
+ var sca : Vector2 = Vector2(cos(amid), sin(amid));
+ var scb : Vector2 = Vector2(cos(alength), sin(alength));
+
+ #p *= Matrix(Vector2(sca.x , sca.y), Vector2(-sca.y, sca.x));
+
+ var pt : Vector2 = p
+
+ p.x = pt.x * sca.x + pt.y * sca.y
+ p.y = pt.x * -sca.y + pt.y * sca.x
+
+ p.x = abs(p.x);
+
+ var k : float
+
+ if (scb.y * p.x > scb.x * p.y):
+ k = p.dot(scb)
+ else:
+ k = p.length();
+
+ return sqrt( p.dot(p) + ra * ra - 2.0 * ra * k ) - rb;
+
+
+static func sdf_boolean_union(a : float, b : float) -> float:
+ return min(a, b)
+
+static func sdf_boolean_substraction(a : float, b : float) -> float:
+ return max(-a, b)
+
+static func sdf_boolean_intersection(a : float, b : float) -> float:
+ return max(a, b)
+
+static func sdf_smooth_boolean_union(d1 : float, d2 : float, k : float) -> float:
+ var h : float = clamp( 0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0)
+ return lerp(d2, d1, h) - k * h * (1.0 - h)
+
+static func sdf_smooth_boolean_substraction(d1 : float, d2 : float, k : float) -> float:
+ var h : float = clamp( 0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0)
+ return lerp(d2, -d1, h) + k * h * (1.0 - h)
+
+static func sdf_smooth_boolean_intersection(d1 : float, d2 : float, k : float) -> float:
+ var h : float = clamp( 0.5 - 0.5 * (d2 - d1) / k, 0.0, 1.0)
+ return lerp(d2, d1, h) + k * h * (1.0 - h)
+
+static func sdf_rounded_shape(a : float, r : float) -> float:
+ return a - r
+
+static func sdf_annular_shape(a : float, r : float) -> float:
+ return abs(a) - r
+
+static func sdf_morph(a : float, b : float, amount : float) -> float:
+ return lerp(a, b, amount)
+
+#vec2 sdLine(vec2 p, vec2 a, vec2 b) {
+# vec2 pa = p-a, ba = b-a;
+# float h = clamp(dot(pa,ba)/dot(ba,ba), 0.0, 1.0);
+# return vec2(length(pa-ba*h), h);
+#}
+
+static func sdLine(p : Vector2, a : Vector2, b : Vector2) -> Vector2:
+ var pa : Vector2 = p - a
+ var ba : Vector2 = b - a
+
+ var h : float = clamp(pa.dot(ba) / ba.dot(ba), 0.0, 1.0);
+
+ return Vector2((pa - (ba * h)).length(), h)
+
+
+#Needs thought
+#func sdf_translate(a : float, x : float, y : float) -> float:
+# return lerp(a, b, amount)
+
+#vec2 sdf2d_rotate(vec2 uv, float a) {
+# vec2 rv;
+# float c = cos(a);
+# float s = sin(a);
+# uv -= vec2(0.5);
+# rv.x = uv.x*c+uv.y*s;
+# rv.y = -uv.x*s+uv.y*c;
+# return rv+vec2(0.5);
+#}
+
+static func sdf2d_rotate(uv : Vector2, a : float) -> Vector2:
+ var rv : Vector2;
+ var c : float = cos(a);
+ var s : float = sin(a);
+ uv -= Vector2(0.5, 0.5);
+ rv.x = uv.x*c+uv.y*s;
+ rv.y = -uv.x*s+uv.y*c;
+ return rv+Vector2(0.5, 0.5);
+
+#float cross2( in vec2 a, in vec2 b ) {
+# return a.x*b.y - a.y*b.x;
+#}
+
+#// signed distance to a quadratic bezier\n
+#vec2 sdBezier( in vec2 pos, in vec2 A, in vec2 B, in vec2 C ) { \n
+# vec2 a = B - A;\n
+# vec2 b = A - 2.0*B + C;\n
+# vec2 c = a * 2.0;\n
+# vec2 d = A - pos;\n\n
+# float kk = 1.0/dot(b,b);\n
+# float kx = kk * dot(a,b);\n
+# float ky = kk * (2.0*dot(a,a)+dot(d,b))/3.0;\n
+# float kz = kk * dot(d,a); \n\n
+# float res = 0.0;\n
+# float sgn = 0.0;\n\n
+# float p = ky - kx*kx;\n
+# float p3 = p*p*p;\n
+# float q = kx*(2.0*kx*kx - 3.0*ky) + kz;\n
+# float h = q*q + 4.0*p3;\n\t
+# float rvx;\n\n
+#
+# if( h>=0.0 ) {
+# // 1 root\n
+# h = sqrt(h);\n
+# vec2 x = (vec2(h,-h)-q)/2.0;\n
+# vec2 uv = sign(x)*pow(abs(x), vec2(1.0/3.0));
+# rvx = uv.x+uv.y-kx;\n
+# float t = clamp(rvx, 0.0, 1.0);\n
+# vec2 q2 = d+(c+b*t)*t;\n
+# res = dot(q2, q2);\n \t
+# sgn = cross2(c+2.0*b*t, q2);\n
+# } else {
+# // 3 roots\n
+# float z = sqrt(-p);\n
+# float v = acos(q/(p*z*2.0))/3.0;\n
+# float m = cos(v);\n
+# float n = sin(v)*1.732050808;\n
+# vec3 t = clamp(vec3(m+m,-n-m,n-m)*z-kx, 0.0, 1.0);\n
+# vec2 qx=d+(c+b*t.x)*t.x;
+# float dx=dot(qx, qx), sx = cross2(c+2.0*b*t.x,qx);\n
+# vec2 qy=d+(c+b*t.y)*t.y;
+# float dy=dot(qy, qy), sy = cross2(c+2.0*b*t.y,qy);\n
+#
+# if( dx Vector2:
+ var a : Vector2 = B - A;
+ var b : Vector2 = A - 2.0 * B + C;
+ var c : Vector2 = a * 2.0;
+ var d : Vector2 = A - pos;
+
+ var kk : float = 1.0 / b.dot(b);
+ var kx : float = kk * a.dot(b);
+ var ky : float = kk * (2.0* a.dot(a) + d.dot(b)) / 3.0;
+ var kz : float = kk * d.dot(a);
+
+ var res : float = 0.0;
+ var sgn : float = 0.0;
+
+ var p : float = ky - kx * kx;
+ var p3 : float = p * p * p;
+ var q : float = kx * (2.0 * kx * kx - 3.0 * ky) + kz;
+ var h : float = q * q + 4.0 * p3;
+ var rvx : float = 0
+
+ if(h >= 0.0):
+ # // 1 root
+ h = sqrt(h);
+
+ var x : Vector2 = (Vector2(h,-h) - Vector2(q, q)) / 2.0
+
+ var uv : Vector2 = Commons.signv2(x) * Commons.powv2(Commons.absv2(x), Vector2(1.0/3.0, 1.0/3.0));
+
+ rvx = uv.x + uv.y - kx;
+ var t : float = clamp(rvx, 0.0, 1.0);
+ var q2 : Vector2 = d + (c + b * t) * t;
+ res = q2.dot(q2);
+
+ sgn = (c + Vector2(2, 2) * b * t).cross(q2)
+
+ else: # // 3 roots
+ var z : float = sqrt(-p);
+ var v : float = acos(q / (p * z * 2.0)) / 3.0;
+ var m : float = cos(v);
+ var n : float = sin(v) * 1.732050808;
+
+ var t : Vector3 = Commons.clampv3(Vector3(m+m, -n-m, n-m) * z - Vector3(kx, kx, kx), Vector3(), Vector3(1, 1, 1));
+
+ var qx : Vector2 = d + (c + b * t.x) * t.x;
+ var dx : float = qx.dot(qx)
+ var sx : float = (c + Vector2(2, 2) * b * t.x).cross(qx)
+ var qy : Vector2 = d + (c + b * t.y) * t.y
+ var dy : float = qy.dot(qy)
+ var sy : float = (c + Vector2(2, 2) * b * t.y).cross(qy)
+
+ if dx Vector2:
+ var r : float = 6.28 / count
+ var pa : float = atan2(p.x, p.y)
+ var a : float = Commons.modf(pa + 0.5 * r, r)-0.5*r
+
+ var rv : Vector2 = Vector2()
+
+ var c : float = cos(a - pa);
+ var s : float = sin(a - pa);
+
+ rv.x = p.x * c + p.y * s
+ rv.y = -p.x * s + p.y * c
+
+ return rv;
+
+#float sdNgon(vec2 p, float r, float n) {
+# float PI = 3.1415926535;
+# p = circle_repeat_transform_2d(p, n);
+# vec2 d = abs(p)-vec2(r*tan(3.14159265359/n), r);
+# return p.y < r ? p.y-r : length(max(d,vec2(0)))+min(max(d.x,d.y),0.0);
+#}
+
+static func sdNgon(pos : Vector2, r : float, n : float) -> Vector2:
+ return Vector2()
+
+
+#vec2 repeat_2d(vec2 p, vec2 r, float seed, float randomness) {
+# p -= vec2(0.5);
+# float a = (rand(floor(mod((p.xy+0.5*r.xy)/r.xy, 1.0/r.xy)+vec2(seed)))-0.5)*6.28*randomness;
+# p = mod(p+0.5*r,r)-0.5*r;
+# vec2 rv;
+# float c = cos(a);
+# float s = sin(a);
+# rv.x = p.x*c+p.y*s;
+# rv.y = -p.x*s+p.y*c;
+# return rv+vec2(0.5);
+#}
+
+static func repeat_2d(p : Vector2, r : Vector2, pseed : float, randomness : float) -> Vector2:
+ p -= Vector2(0.5, 0.5);
+ var v : Vector2 = Vector2(p.x, p.y) + Vector2(0.5, 0.5) + Vector2(r.x, r.y)
+ var a : float = ((Commons.rand2(Commons.floorv2(Commons.modv2(v / Vector2(r.x, r.y), Vector2(1.0, 1.0) / Vector2(r.x, r.y)) + Vector2(pseed, pseed))) - Vector2(0.5, 0.5)) * 6.28 * randomness).x
+ p = Commons.modv2(p + Vector2(0.5, 0.5) * r,r)- Vector2(0.5, 0.5) * r
+ var rv : Vector2 = Vector2()
+ var c : float = cos(a)
+ var s : float = sin(a)
+ rv.x = p.x * c + p.y * s
+ rv.y = -p.x * s + p.y * c
+ return rv + Vector2(0.5, 0.5);
+
+#float sdSmoothUnion( float d1, float d2, float k ) {
+# float h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );
+# return mix( d2, d1, h ) - k*h*(1.0-h);
+#}
+
+static func sdSmoothUnion(d1 : float, d2 : float, k : float) -> float:
+ return 0.0
+
+#float sdSmoothSubtraction( float d1, float d2, float k ) {
+# float h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );
+# return mix( d2, -d1, h ) + k*h*(1.0-h);
+#}
+
+static func sdSmoothSubtraction(d1 : float, d2 : float, k : float) -> float:
+ return 0.0
+
+#float sdSmoothIntersection( float d1, float d2, float k ) {
+# float h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );
+# return mix( d2, d1, h ) + k*h*(1.0-h);
+#}
+
+static func sdSmoothIntersection(d1 : float, d2 : float, k : float) -> float:
+ return 0.0
+
+
+#float sdRipples(float d, float w, int r) {\n
+# for (int i = 0; i < r; ++i) {
+# d = abs(d)-w;
+# }
+#
+# return d;
+#}
+
+static func sdRipples(d : float, w : float, r : int) -> float:
+ for i in range(r):
+ d = abs(d)-w;
+
+ return d
+
+#$polygon = { p1(vec2), p2(vec2), p3(vec2) ... }
+#float sdPolygon_$(name)(vec2 p) {
+# vec2 v[] = $polygon;
+# int l = v.length();
+# float d = dot(p-v[0],p-v[0]);
+# float s = 1.0;
+# int j = l-1;
+#
+# for(int i=0; i=v[i].y,p.ye.y*w.x);
+#
+# if(all(c) || all(not(c))) {
+# s *= -1.0;
+# }
+#
+# j = i;
+# }
+#
+# return s*sqrt(d);
+#}
+
+static func sdPolygon(p : Vector2, v : PoolVector2Array) -> float:
+ var l : int = v.size()
+ var pmv0 : Vector2 = p - v[0]
+ var d : float = pmv0.dot(pmv0)
+ var s : float = 1.0
+ var j : int = l - 1
+
+ for i in range(l): #for(int i=0; i= v[i].y
+ var b2 : bool = p.y < v[j].y
+ var b3 : bool = e.x * w.y > e.y * w.x
+
+ if((b1 && b2 && b3) || (!b1 && !b2 && !b3)):
+ s *= -1.0
+
+ j = i
+
+ return s * sqrt(d)
diff --git a/game/addons/mat_maker_gd/nodes/common/sdf3d.gd b/game/addons/mat_maker_gd/nodes/common/sdf3d.gd
new file mode 100644
index 0000000..932094d
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/sdf3d.gd
@@ -0,0 +1,789 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#sdf3d_box.mmg
+#Generates a rounded box as a signed distance function
+
+#Outputs:
+
+#Common
+#vec3 $(name_uv)_q = abs($uv) - vec3($sx, $sy, $sz);
+
+#Output - (sdf3d) - Shows the rounded box
+#length(max($(name_uv)_q,0.0))+min(max($(name_uv)_q.x,max($(name_uv)_q.y,$(name_uv)_q.z)),0.0)-$r
+
+#Inputs:
+#size, vector3, min: 0, max: 1, default:0.5, step:0.01
+#size, float, min: 0, max: 1, default:0.5, step:0.01
+
+#----------------------
+#sdf3d_sphere.mmg
+#Generates a sphere as a signed distance function
+
+#Outputs:
+
+#Output - (sdf3d) - Shows the sphere
+#length($uv)-$r
+
+#Inputs:
+#radius, vector3, min: 0, max: 1, default:0.5, step:0.01
+
+#----------------------
+#sdf3d_capsule.mmg
+#Generates a capsule as a signed distance function
+
+#Outputs:
+
+#Common
+#vec3 $(name_uv)_p = $uv;
+#$(name_uv)_p.$axis -= clamp($(name_uv)_p.$axis, -$l, $l);
+
+#Output - (sdf3d) - Shows the capsule
+#length($(name_uv)_p)-$r*$profile(clamp(0.5+0.5*($uv).$axis/$l, 0.0, 1.0))
+
+#Inputs:
+#axis, enum, default: 1, values: x, y, z
+#length, float, min: 0, max: 1, default:0.25, step:0.01
+#radius, float, min: 0, max: 1, default:0.2, step:0.01
+#profile, curve, default: (ls, rs, x, z) 0, 0, 0, 1, 0, 0, 1, 1
+
+#----------------------
+#sdf3d_cone.mmg
+
+#Outputs:
+
+#+X: $axis = length($uv.yz),-$uv.x
+#-X: $axis = length($uv.yz),$uv.x
+#+Y: $axis = length($uv.xz),$uv.y
+#-Y: $axis = length($uv.xz),-$uv.y
+#+Z: $axis = length($uv.xy),-$uv.z
+#-Z: $axis = length($uv.xy),$uv.z
+
+#Output - (sdf3d)
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+#Inputs:
+#axis, enum, default:5, values: +X, -X, +Y, -Y, +Z, -Z
+#angle, float, min: 0, max: 90, default:30, step:1
+
+#----------------------
+#sdf3d_repeat.mmg
+
+#Outputs:
+
+#Output (sdf3d)
+#Output - (sdf3dc) - The shape generated by the repeat operation
+#$in(repeat($uv, vec3(1.0/$rx, 1.0/$ry, 0.0), float($seed), $r))
+
+#Inputs:
+#in, vec2, default:vec2(100, 0.0), (sdf3d input)
+
+#X, int, min: 1, max: 32, default:4, step:1
+#Y, int, min: 1, max: 32, default:4, step:1
+#R, float, min: 0, max: 1, default:0.5, step:0.01
+
+#----------------------
+#sdf3d_rotate.mmg
+
+#Outputs:
+
+#Output - (sdf3dc) - The rotated object
+#$in(rotate3d($uv, -vec3($ax, $ay, $az)*0.01745329251))
+
+#Inputs:
+#in, vec2, default:vec2(100, 0.0), (sdf3d input)
+#rotation, vector3, min: -180, max: 180, default:0, step:1
+
+#----------------------
+#sdf3d_cylinder.mmg
+
+#Outputs:
+
+#Output - (sdf3dc) - Shows the cylinder
+#min(max($(name_uv)_d.x,$(name_uv)_d.y),0.0) + length(max($(name_uv)_d,0.0))
+
+#Inputs:
+#axis, enum, default: 1, values: X, Y, Z
+#length, float, min: 0, max: 1, default:0.5, step:0.01
+#radius, float, min: 0, max: 1, default:0.2, step:0.01
+
+#----------------------
+#sdf3d_plane.mmg
+#Generates a plane that can be used to cut other shapes
+
+#Outputs:
+
+#X: $axis = x
+#Y: $axis = y
+#Z: $axis = z
+
+#Output - (sdf3dc) - Shows the plane
+#$uv.$axis
+
+#Inputs:
+#axis, enum, default: 1, values: X, Y, Z
+
+#----------------------
+#sdf3d_torus.mmg
+#Generates a torus as a signed distance function
+
+#Outputs:
+
+#X: $axis = length($uv.yz)-$R,$uv.x
+#Y: $axis = length($uv.zx)-$R,$uv.y
+#Z: $axis = length($uv.xy)-$R,$uv.z
+#vec2 $(name_uv)_q = vec2($axis);
+
+#Output - (sdf3dc) - Shows the torus
+#length($(name_uv)_q)-$r
+
+#Inputs:
+#axis, enum, default: 1, values: X, Y, Z
+#R, float, min: 0, max: 1, default:0.5, step:0.01
+#r, float, min: 0, max: 1, default:0.1, step:0.01
+
+#----------------------
+#sdf3d_boolean.mmg
+
+#Outputs:
+
+#Union: $op = sdf3dc_union
+#Subtraction $op = sdf3dc_sub
+#Intersection $op = sdf3dc_inter
+
+#Output - (sdf3dc) - The shape generated by the boolean operation
+#$op($in1($uv), $in2($uv))
+
+#Inputs:
+#axis, enum, default: 2, values: Union, Subtraction, Intersection
+#in1, vec2, default:vec2(100, 0.0), (sdf3d input)
+#in2, vec2, default:vec2(100, 0.0), (sdf3d input)
+
+#----------------------
+#sdf3d_circle_repeat.mmg
+
+#Outputs:
+
+#Output (sdf3dc) - The shape generated by the boolean operation
+#$in(circle_repeat_transform($uv, $c))
+
+#Inputs:
+#count, float, min: 1, max: 32, default:5, step:1
+
+#----------------------
+#sdf3d_angle.mmg (includes sdf3d_rotate.mmg)
+
+#Outputs:
+
+#Shows the angleThe shape generated by the boolean operation
+#$(name_uv)_d
+
+#X: $axis = xyz
+#Y: $axis = yzx
+#Z: $axis = zxy
+
+#vec3 $(name_uv)_uv = $uv.$axis;
+#float $(name_uv)_rotated = rotate3d($(name_uv)_uv, vec3(($angle-180.0)*0.01745329251, 0.0, 0.0)).y;
+#float $(name_uv)_d1 = max($(name_uv)_uv.y, $(name_uv)_rotated);
+#float $(name_uv)_d2 = min($(name_uv)_uv.y, $(name_uv)_rotated);
+#float $(name_uv)_d = (mod($angle, 360.0) < 180.0) ? $(name_uv)_d1 : $(name_uv)_d2;
+
+#Inputs:
+#axis, enum, default: 0, values: X, Y, Z
+#angle, float, min: 0, max: 360, default:180, step:0.1
+
+#----------------------
+#sdf3d_color.mmg
+
+#Outputs:
+
+#Output - sdf3dc - The colored 3D object
+#vec2($in($uv), $c)
+
+#Inputs:
+#color_index, float, min: 0, max: 1, default:0, step:0.01
+#in, vec2, default:vec2(100, 0.0), (sdf3d input)
+
+#----------------------
+#sdf3d_translate.mmg
+
+#Outputs:
+
+#Output - sdf3dc
+#$in($uv-vec3($x, $y, $z))
+
+#Inputs:
+#translation, vector3, min: -1, max: 1, default:0, step:0.01
+#in, vec2, default:vec2(100, 0.0), (sdf3dc input)
+
+#----------------------
+#sdf3d_scale.mmg
+
+#Outputs:
+
+#vec2 $(name_uv)_in = $in(($uv)/$s);
+
+#Output - sdf3dc
+#vec2($(name_uv)_in.x*$s, $(name_uv)_in.y)
+
+#Inputs:
+#scale_factor, float, min: 0, max: 5, default:1, step:0.01
+#in, vec2, default:vec2(100, 0.0), (sdf3dc input)
+
+#----------------------
+#sdf3d_rounded.mmg
+
+#Outputs:
+
+#vec2 $(name_uv)_v = $in($uv);
+
+#Output - sdf3dc
+#vec2($(name_uv)_v.x-$r, $(name_uv)_v.y)
+
+#Inputs:
+#radius, float, min: 0, max: 1, default:0, step:0.01
+#in, vec2, default:vec2(100, 0.0), (sdf3dc input)
+
+#----------------------
+#sdf3d_revolution.mmg
+
+#Outputs:
+
+#vec2 $(name_uv)_q = vec2(length($uv.xy)-$d+0.5, $uv.z+0.5);
+
+#Output - sdf3dc
+#$in($(name_uv)_q)
+
+#Inputs:
+#d, float, min: 0, max: 1, default:0.25, step:0.01
+#input, float, default:10.0, (sdf2d input)
+
+#----------------------
+#sdf3d_smoothboolean.mmg
+#Performs a smooth boolean operation (union, intersection or difference) between two shapes
+
+#Outputs:
+
+#Union: $op = union
+#Subtraction: $op = subtraction
+#Intersection: $op = intersection
+
+#Output - sdf3dc
+#sdf3d_smooth_$op($in1($uv), $in2($uv), $k)
+
+#Inputs:
+#in1, vec2, default:vec2(100, 0.0), (sdf3d input)
+#in2, vec2, default:vec2(100, 0.0), (sdf3d input)
+#operation, enum, default: 1, values: Union, Subtraction, Intersection
+#smoothness, float, min: 0, max: 1, default:0, step:0.01
+
+#----------------------
+#sdf3d_elongation.mmg
+
+#Outputs:
+
+#Output - sdf3dc
+#$in($uv-clamp($uv, -abs(vec3($x, $y, $z)), abs(vec3($x, $y, $z))))
+
+#Inputs:
+#in, vec2, default:vec2(100, 0.0), (sdf3dc input)
+#elongation, vector3, min: 0, max: 1, default:0, step:0.01
+
+#----------------------
+#sdf3d_extrusion.mmg
+
+#Outputs:
+
+#vec2 $(name_uv)_w = vec2($in($uv.xz+vec2(0.5)),abs($uv.y)-$d);
+
+#Output - sdf3dc
+#min(max($(name_uv)_w.x,$(name_uv)_w.y),0.0)+length(max($(name_uv)_w,0.0))
+
+#Inputs:
+#in, sdf2d, default:100, (input)
+#length, float, min: 0, max: 1, default:0.25, step:0.01
+
+#----------------------
+#sdf3d_morph.mmg
+
+#Outputs:
+
+#Output - sdf3d
+#mix($in1($uv), $in2($uv), $amount)
+
+#Inputs:
+#in1, vec2, default:vec2(100, 0.0), (sdf3d input)
+#in2, vec2, default:vec2(100, 0.0), (sdf3d input)
+#amount, float, min: 0, max: 1, default:0.5, step:0.01
+
+#----------------------
+#raymarching.mmg (raymarching_preview.mmg)
+#Raymarches a 3D object (described as signed distance function with optional color index)
+#to render a heightmap, a normal map and a color index map.
+
+#raymarch_$name = sdf3d_raymarch
+#vec2 $(name_uv)_d = raymarch_$name($uv);
+
+#Outputs:
+
+#HeightMap - float - The generated height map
+#1.0-$(name_uv)_d.x
+
+#NormalMap - rgb - The generated normal map
+#vec3(0.5)+0.5*normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d.x))
+
+#ColorMap - float - The generated color index map
+#$(name_uv)_d.y
+
+#Inputs:
+#input, vec2, default:vec2(100, 0.0), (sdf3dc input)
+
+#----------------------
+#raymarching_preview.mmg
+
+#Outputs:
+
+#Output (rgb)
+#render_$name($uv-vec2(0.5))
+
+#Inputs:
+#input, vec2, default:vec2(100, 0.0), (sdf3dc input)
+
+static func raymarch(uv : Vector2) -> Color:
+ var d : Vector2 = sdf3d_raymarch(uv);
+
+ var f : float = 1.0 - d.x;
+
+ return Color(f, f, f, 1)
+
+static func raymarch2(uv : Vector2) -> Color:
+ var d : Vector2 = sdf3d_raymarch(uv);
+
+ var v : Vector3 = Vector3(0.5, 0.5, 0.5) + 0.5 * sdf3d_normal(Vector3(uv.x - 0.5, uv.y - 0.5, 1.0 - d.x));
+
+ return Color(v.x, v.y, v.z, 1)
+
+static func raymarch3(uv : Vector2) -> Color:
+ var v : Vector2 = sdf3d_raymarch(uv);
+
+ return Color(v.y, v.y, v.y, 1)
+
+#length($uv)-$r
+
+static func sdf3d_sphere(p : Vector3, r : float) -> Vector2:
+ var s : float = p.length() - r;
+
+ return Vector2(s, 0.0);
+
+#vec3 $(name_uv)_q = abs($uv) - vec3($sx, $sy, $sz);
+#length(max($(name_uv)_q,0.0))+min(max($(name_uv)_q.x,max($(name_uv)_q.y,$(name_uv)_q.z)),0.0)-$r
+
+static func sdf3d_box(p : Vector3, sx : float, sy : float, sz : float, r : float) -> Vector2:
+ var v : Vector3 = Commons.absv3((p)) - Vector3(sx, sy, sz);
+ var f : float = (Commons.maxv3(v,Vector3())).length() + min(max(v.x,max(v.y, v.z)),0.0) - r;
+
+ return Vector2(f, 0.0);
+
+#Y: $axis = length($uv.xz),$uv.y
+#vec2 $(name_uv)_d = abs(vec2($axis)) - vec2($r,$l);
+
+static func sdf3d_cylinder_y(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector2 = Commons.absv2(Vector2(Vector2(p.x, p.z).length(),(p).y)) - Vector2(r,l);
+ var f : float = min(max(v.x, v.y),0.0) + Commons.maxv2(v, Vector2()).length();
+
+ return Vector2(f, 0.0);
+
+#X: $axis = length($uv.yz),$uv.x
+#vec2 $(name_uv)_d = abs(vec2($axis)) - vec2($r,$l);
+
+static func sdf3d_cylinder_x(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector2 = Commons.absv2(Vector2(Vector2(p.y, p.z).length(),(p).x)) - Vector2(r, l);
+ var f : float = min(max(v.x, v.y),0.0) + Commons.maxv2(v, Vector2()).length();
+
+ return Vector2(f, 0.0);
+
+#Z: $axis = length($uv.xy),$uv.z
+#vec2 $(name_uv)_d = abs(vec2($axis)) - vec2($r,$l);
+
+static func sdf3d_cylinder_z(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector2 = Commons.absv2(Vector2(Vector2(p.x, p.y).length(),(p).z)) - Vector2(r, l);
+ var f : float = min(max(v.x, v.y),0.0) + Commons.maxv2(v, Vector2()).length();
+
+ return Vector2(f, 0.0);
+
+#vec3 $(name_uv)_p = $uv;
+#$(name_uv)_p.$axis -= clamp($(name_uv)_p.$axis, -$l, $l);
+#return length($(name_uv)_p)-$r*$profile(clamp(0.5+0.5*($uv).$axis/$l, 0.0, 1.0))
+
+static func sdf3d_capsule_y(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector3 = p;
+ v.y -= clamp(v.y, -l, l);
+ var f : float = v.length() - r;
+
+ return Vector2(f, 0.0);
+
+static func sdf3d_capsule_x(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector3 = p;
+ v.x -= clamp(v.x, -l, l);
+ var f : float = v.length() - r;
+
+ return Vector2(f, 0.0);
+
+static func sdf3d_capsule_z(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector3 = p;
+ v.z -= clamp(v.z, -l, l);
+ var f : float = v.length() - r;
+
+ return Vector2(f, 0.0);
+
+#+X: $axis = length($uv.yz),-$uv.x
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+static func sdf3d_cone_px(p : Vector3, a : float) -> Vector2:
+ var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.y, p.z).length(), - (p).x));
+
+ return Vector2(f, 0.0);
+
+#-X: $axis = length($uv.yz),$uv.x
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+static func sdf3d_cone_nx(p : Vector3, a : float) -> Vector2:
+ var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.y, p.z).length(),(p).x));
+
+ return Vector2(f, 0.0);
+
+#+Y: $axis = length($uv.xz),$uv.y
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+static func sdf3d_cone_py(p : Vector3, a : float) -> Vector2:
+ var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.z).length(),(p).y));
+
+ return Vector2(f, 0.0);
+
+#-Y: $axis = length($uv.xz),-$uv.y
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+static func sdf3d_cone_ny(p : Vector3, a : float) -> Vector2:
+ var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.z).length(),-(p).y));
+
+ return Vector2(f, 0.0);
+
+#+Z: $axis = length($uv.xy),-$uv.z
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+static func sdf3d_cone_pz(p : Vector3, a : float) -> Vector2:
+ var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.y).length(),-(p).z));
+
+ return Vector2(f, 0.0);
+
+
+#-Z: $axis = length($uv.xy),$uv.z
+#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis))
+
+static func sdf3d_cone_nz(p : Vector3, a : float) -> Vector2:
+ var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.y).length(),(p).z));
+
+ return Vector2(f, 0.0);
+
+static func sdf3d_torus_x(p : Vector3, R : float, r : float) -> Vector2:
+ var q : Vector2 = Vector2(Vector2(p.y, p.z).length() - R,(p).x);
+ var f : float = q.length() - r;
+
+ return Vector2(f, 0.0);
+
+static func sdf3d_torus_y(p : Vector3, R : float, r : float) -> Vector2:
+ var q : Vector2 = Vector2(Vector2(p.z, p.x).length() - R,(p).y);
+ var f : float = q.length() - r;
+
+ return Vector2(f, 0.0);
+
+static func sdf3d_torus_z(p : Vector3, R : float, r : float) -> Vector2:
+ var q : Vector2 = Vector2(Vector2(p.x, p.y).length() - R,(p).z);
+ var f : float = q.length() - r;
+
+ return Vector2(f, 0.0);
+
+
+#vec2 raymarch_$name(vec2 uv) {
+# vec3 ro = vec3(uv-vec2(0.5), 1.0);
+# vec3 rd = vec3(0.0, 0.0, -1.0);
+# float dO = 0.0;
+# float c = 0.0;
+#
+# for (int i=0; i < 100; i++) {
+# vec3 p = ro + rd*dO;
+# vec2 dS = $sdf(p);
+# dO += dS.x;
+#
+# if (dO >= 1.0) {
+# break;
+# } else if (dS.x < 0.0001) {
+# c = dS.y;
+# break;
+# }
+# }
+#
+# return vec2(dO, c);
+#}
+
+static func sdf3d_raymarch(uv : Vector2) -> Vector2:
+ var ro : Vector3 = Vector3(uv.x - 0.5, uv.y - 0.5, 1.0);
+ var rd : Vector3 = Vector3(0.0, 0.0, -1.0);
+ var dO : float = 0.0;
+ var c : float = 0.0;
+
+ for i in range(100):
+ var p : Vector3 = ro + rd * dO;
+ var dS : Vector2 = sdf3d_input(p);
+
+ dO += dS.x;
+
+ if (dO >= 1.0):
+ break;
+ elif (dS.x < 0.0001):
+ c = dS.y;
+ break;
+
+ return Vector2(dO, c);
+
+#vec3 normal_$name(vec3 p) {
+# if (p.z <= 0.0) {
+# return vec3(0.0, 0.0, 1.0);
+# }
+#
+# float d = $sdf(p).x;
+# float e = .001;
+# vec3 n = d - vec3(
+# $sdf(p-vec3(e, 0.0, 0.0)).x,
+# $sdf(p-vec3(0.0, e, 0.0)).x,
+# $sdf(p-vec3(0.0, 0.0, e)).x);
+#
+# return vec3(-1.0, -1.0, -1.0)*normalize(n);
+#}
+
+static func sdf3d_normal(p : Vector3) -> Vector3:
+ if (p.z <= 0.0):
+ return Vector3(0.0, 0.0, 1.0);
+
+ var d : float = sdf3d_input(p).x;
+ var e : float = .001;
+
+ var n : Vector3 = Vector3(
+ d - sdf3d_input(p - Vector3(e, 0.0, 0.0)).x,
+ d - sdf3d_input(p - Vector3(0.0, e, 0.0)).x,
+ d - sdf3d_input(p - Vector3(0.0, 0.0, e)).x);
+
+ return Vector3(-1.0, -1.0, -1.0) * n.normalized();
+
+#vec2 sdf3dc_union(vec2 a, vec2 b) {
+# return vec2(min(a.x, b.x), mix(b.y, a.y, step(a.x, b.x)));
+#}
+
+static func sdf3dc_union(a : Vector2, b : Vector2) -> Vector2:
+ return Vector2(min(a.x, b.x), lerp(b.y, a.y, Commons.step(a.x, b.x)));
+
+#vec2 sdf3dc_sub(vec2 a, vec2 b) {
+# return vec2(max(-a.x, b.x), a.y);
+#}
+
+static func sdf3dc_sub(a : Vector2, b : Vector2) -> Vector2:
+ return Vector2(max(-a.x, b.x), a.y);
+
+#vec2 sdf3dc_inter(vec2 a, vec2 b) {
+# return vec2(max(a.x, b.x), mix(a.y, b.y, step(a.x, b.x)));
+#}
+
+static func sdf3dc_inter(a : Vector2, b : Vector2) -> Vector2:
+ return Vector2(max(a.x, b.x), lerp(a.y, b.y, Commons.step(a.x, b.x)));
+
+#vec2 sdf3d_smooth_union(vec2 d1, vec2 d2, float k) {
+# float h = clamp(0.5+0.5*(d2.x-d1.x)/k, 0.0, 1.0);
+# return vec2(mix(d2.x, d1.x, h)-k*h*(1.0-h), mix(d2.y, d1.y, step(d1.x, d2.x)));
+#}
+
+static func sdf3d_smooth_union(d1 : Vector2, d2 : Vector2, k : float) -> Vector2:
+ var h : float = clamp(0.5 + 0.5 * (d2.x - d1.x) / k, 0.0, 1.0);
+ return Vector2(lerp(d2.x, d1.x, h)-k*h*(1.0 - h), lerp(d2.y, d1.y, Commons.step(d1.x, d2.x)));
+
+#vec2 sdf3d_smooth_subtraction(vec2 d1, vec2 d2, float k ) {
+# float h = clamp(0.5-0.5*(d2.x+d1.x)/k, 0.0, 1.0);
+# return vec2(mix(d2.x, -d1.x, h )+k*h*(1.0-h), d2.y);
+#}
+
+static func sdf3d_smooth_subtraction(d1 : Vector2, d2 : Vector2, k : float) -> Vector2:
+ var h : float = clamp(0.5 - 0.5 * (d2.x + d1.x) / k, 0.0, 1.0);
+ return Vector2(lerp(d2.x, -d1.x, h )+k*h*(1.0-h), d2.y);
+
+#vec2 sdf3d_smooth_intersection(vec2 d1, vec2 d2, float k ) {
+# float h = clamp(0.5-0.5*(d2.x-d1.x)/k, 0.0, 1.0);
+# return vec2(mix(d2.x, d1.x, h)+k*h*(1.0-h), mix(d1.y, d2.y, step(d1.x, d2.x)));
+#}
+
+static func sdf3d_smooth_intersection(d1 : Vector2, d2 : Vector2, k : float) -> Vector2:
+ var h : float = clamp(0.5 - 0.5 * (d2.x - d1.x) / k, 0.0, 1.0);
+ return Vector2(lerp(d2.x, d1.x, h)+k*h*(1.0-h), lerp(d1.y, d2.y, Commons.step(d1.x, d2.x)));
+
+static func sdf3d_rounded(v : Vector2, r : float) -> Vector2:
+ return Vector2(v.x - r, v.y);
+
+static func sdf3d_elongation(p : Vector3, v : Vector3) -> Vector3:
+ return ((p) - Commons.clampv3((p), - Commons.absv3(v), Commons.absv3(v)))
+
+static func sdf3d_repeat(p : Vector3, r : Vector2, randomness : float, pseed : int) -> Vector3:
+ #$in(repeat($uv, vec3(1.0/$rx, 1.0/$ry, 0.0), float($seed), $r))
+ return repeat(p, Vector3(1.0 / r.x, 1.0 / r.y, 0.00001), float(pseed), randomness)
+
+#vec3 repeat(vec3 p, vec3 r, float seed, float randomness) {
+# vec3 a = (rand3(floor(mod((p.xy+0.5*r.xy)/r.xy, 1.0/r.xy)+vec2(seed)))-0.5)*6.28*randomness;
+# p = mod(p+0.5*r,r)-0.5*r;
+#
+# vec3 rv;
+# float c;
+# float s;
+#
+# c = cos(a.x);
+# s = sin(a.x);
+#
+# rv.x = p.x;
+# rv.y = p.y*c+p.z*s;rv.z = -p.y*s+p.z*c;
+#
+# c = cos(a.y);
+# s = sin(a.y);
+#
+# p.x = rv.x*c+rv.z*s;
+# p.y = rv.y;
+# p.z = -rv.x*s+rv.z*c;
+#
+# c = cos(a.z);
+# s = sin(a.z);
+#
+# rv.x = p.x*c+p.y*s;
+# rv.y = -p.x*s+p.y*c;
+# rv.z = p.z;
+#
+# return rv;
+#}
+
+static func repeat(p : Vector3, r : Vector3, pseed : float, randomness : float) -> Vector3:
+ var a : Vector3 = (Commons.rand3(Commons.floorv2(Commons.modv2((Vector2(p.x, p.y) + Vector2(0.5, 0.5) * Vector2(r.x, r.y)) / Vector2(r.x, r.y), Vector2(1, 1) / Vector2(r.x, r.y)) + Vector2(pseed, pseed))) - Vector3(0.5, 0.5, 0.5)) * 6.28 * randomness
+ p = Commons.modv3(p + Vector3(0.5, 0.5, 0.5) * r, r) - Vector3(0.5, 0.5, 0.5) * r;
+
+ var rv : Vector3 = Vector3()
+ var c : float = 0
+ var s : float = 0
+
+ c = cos(a.x);
+ s = sin(a.x);
+
+ rv.x = p.x;
+ rv.y = p.y* c + p.z * s;
+ rv.z = -p.y * s + p.z * c;
+
+ c = cos(a.y);
+ s = sin(a.y);
+
+ p.x = rv.x*c+rv.z*s;
+ p.y = rv.y;
+ p.z = -rv.x*s+rv.z*c;
+
+ c = cos(a.z);
+ s = sin(a.z);
+
+ rv.x = p.x * c + p.y * s;
+ rv.y = -p.x * s + p.y * c;
+ rv.z = p.z;
+
+ return rv;
+
+#vec3 rotate3d(vec3 p, vec3 a) {
+# vec3 rv;
+# float c;
+# float s;
+# c = cos(a.x);
+# s = sin(a.x);
+# rv.x = p.x;
+# rv.y = p.y*c+p.z*s;
+# rv.z = -p.y*s+p.z*c;
+# c = cos(a.y);
+# s = sin(a.y);
+# p.x = rv.x*c+rv.z*s;
+# p.y = rv.y;
+# p.z = -rv.x*s+rv.z*c;
+# c = cos(a.z);
+# s = sin(a.z);
+# rv.x = p.x*c+p.y*s;
+# rv.y = -p.x*s+p.y*c;
+# rv.z = p.z;
+# return rv;
+#}
+
+static func rotate3d(p : Vector3, a : Vector3) -> Vector3:
+ var rv : Vector3 = Vector3()
+ var c : float = 0
+ var s : float = 0
+ c = cos(a.x)
+ s = sin(a.x)
+ rv.x = p.x
+ rv.y = p.y * c + p.z * s
+ rv.z = -p.y * s + p.z * c
+ c = cos(a.y)
+ s = sin(a.y)
+ p.x = rv.x * c + rv.z * s
+ p.y = rv.y
+ p.z = -rv.x * s + rv.z * c
+ c = cos(a.z)
+ s = sin(a.z)
+ rv.x = p.x * c + p.y * s
+ rv.y = -p.x * s + p.y * c
+ rv.z = p.z
+
+ return rv
+
+#vec3 circle_repeat_transform(vec3 p, float count) {
+# float r = 6.28/count;
+# float pa = atan(p.x, p.y);
+# float a = mod(pa+0.5*r, r)-0.5*r;
+# vec3 rv;
+# float c = cos(a-pa);
+# float s = sin(a-pa);
+# rv.x = p.x*c+p.y*s;
+# rv.y = -p.x*s+p.y*c;
+# rv.z = p.z;
+# return rv;
+#}
+
+static func circle_repeat_transform(p : Vector3, count : float) -> Vector3:
+ var r : float = 6.28 / count
+ var pa : float = atan2(p.x, p.y)
+ var a : float = Commons.modf(pa + 0.5 * r, r) - 0.5 * r
+ var rv : Vector3 = Vector3()
+ var c : float = cos(a-pa)
+ var s : float = sin(a-pa)
+ rv.x = p.x * c + p.y * s
+ rv.y = -p.x * s + p.y * c
+ rv.z = p.z
+ return rv
+
+#todo this needs to be solved
+static func sdf3d_input(p : Vector3) -> Vector2:
+ return sdf3d_sphere(p, 0.5)
+
+#raymarching_preview.mmg
+#vec3 render_$name(vec2 uv) {
+# vec3 p = vec3(uv, 2.0-raymarch_$name(vec3(uv, 2.0), vec3(0.0, 0.0, -1.0)));
+# vec3 n = normal_$name(p);
+# vec3 l = vec3(5.0, 5.0, 10.0);
+# vec3 ld = normalize(l-p);
+#
+# float o = step(p.z, 0.001);
+# float shadow = 1.0-0.75*step(raymarch_$name(l, -ld), length(l-p)-0.01);
+# float light = 0.3+0.7*dot(n, ld)*shadow;
+#
+# return vec3(0.8+0.2*o, 0.8+0.2*o, 1.0)*light;
+#}
+
+#static func sdf3d_render(p : Vector2) -> Vector3:
+# return Vector3()
diff --git a/game/addons/mat_maker_gd/nodes/common/shapes.gd b/game/addons/mat_maker_gd/nodes/common/shapes.gd
new file mode 100644
index 0000000..3a3501e
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/shapes.gd
@@ -0,0 +1,292 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#sphere.mmg
+
+#Outputs:
+
+#Output - (float) - A heightmap of the specified sphere
+#sphere($uv, vec2($cx, $cy), $r)
+
+#Inputs:
+#center, vector2, default: 0.5, min: 0, max: 1, step: 0.01
+#radius, float, min: 0, max: 1, default: 0.5, step:0.01
+
+#----------------------
+#shape.mmg
+
+#Outputs:
+
+#Output - (float) - Shows a white shape on a black background
+#shape_$(shape)($(uv), $(sides), $(radius)*$radius_map($uv), $(edge)*$edge_map($uv))
+
+#Inputs:
+#shape, enum, default: 0, values: circle, ploygon, star, curved_star, rays
+#sides, int, min: 2, max: 32, default: 3, step:1
+#radius, float, min: 0, max: 1, default: 1, step:0.01 (universal input)
+#edge, float, min: 0, max: 1, default: 0.2, step:0.01 (universal input)
+
+#----------------------
+#box.mmg
+#A heightmap of the specified box
+
+# "outputs": [
+# {
+# "f": "1.0-box($uv, vec3($cx, $cy, $cz), vec3($sx, $sy, $sz), 0.01745329251*vec3($rx, $ry, $rz))",
+# "longdesc": "A heightmap of the specified box",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Center X",
+# "longdesc": "X coordinate of the center of the box",
+# "max": 1,
+# "min": 0,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Center Y",
+# "longdesc": "Y coordinate of the center of the box",
+# "max": 1,
+# "min": 0,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Center Z",
+# "longdesc": "Z coordinate of the center of the box",
+# "max": 0.5,
+# "min": -0.5,
+# "name": "cz",
+# "shortdesc": "Center.z",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Size X",
+# "longdesc": "Size along X axis",
+# "max": 1,
+# "min": 0,
+# "name": "sx",
+# "shortdesc": "Size.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Size Y",
+# "longdesc": "Size along Y axis",
+# "max": 1,
+# "min": 0,
+# "name": "sy",
+# "shortdesc": "Size.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Size Z",
+# "longdesc": "Size along Z axis",
+# "max": 1,
+# "min": 0,
+# "name": "sz",
+# "shortdesc": "Size.z",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Rot X",
+# "longdesc": "Rotation angle around X axis",
+# "max": 180,
+# "min": -180,
+# "name": "rx",
+# "shortdesc": "Rot.x",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Rot Y",
+# "longdesc": "Rotation angle around Y axis",
+# "max": 180,
+# "min": -180,
+# "name": "ry",
+# "shortdesc": "Rot.y",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Rot Z",
+# "longdesc": "Rotation angle around Y axis",
+# "max": 180,
+# "min": -180,
+# "name": "rz",
+# "shortdesc": "Rot.z",
+# "step": 0.1,
+# "type": "float"
+# }
+# ]
+
+#float sphere(vec2 uv, vec2 c, float r) {
+# uv -= c;
+# uv /= r;
+# return 2.0*r*sqrt(max(0.0, 1.0-dot(uv, uv)));
+#}
+
+static func sphere(uv : Vector2, c : Vector2, r : float) -> float:
+ return 0.0
+
+#float shape_circle(vec2 uv, float sides, float size, float edge) {
+# uv = 2.0*uv-1.0;
+# edge = max(edge, 1.0e-8);
+# float distance = length(uv);
+# return clamp((1.0-distance/size)/edge, 0.0, 1.0);
+#}
+
+static func shape_circle(uv : Vector2, sides : float, size : float, edge : float) -> float:
+ uv.x = 2.0 * uv.x - 1.0
+ uv.y = 2.0 * uv.y - 1.0
+
+ edge = max(edge, 1.0e-8)
+
+ var distance : float = uv.length()
+
+ return clamp((1.0 - distance / size) / edge, 0.0, 1.0)
+
+#float shape_polygon(vec2 uv, float sides, float size, float edge) {
+# uv = 2.0*uv-1.0;
+# edge = max(edge, 1.0e-8);
+# float angle = atan(uv.x, uv.y)+3.14159265359;
+# float slice = 6.28318530718/sides;
+# return clamp((1.0-(cos(floor(0.5+angle/slice)*slice-angle)*length(uv))/size)/edge, 0.0, 1.0);
+#}
+
+static func shape_polygon(uv : Vector2, sides : float, size : float, edge : float) -> float:
+ uv.x = 2.0 * uv.x - 1.0
+ uv.y = 2.0 * uv.y - 1.0
+
+ edge = max(edge, 1.0e-8)
+
+ #simple no branch for division by zero
+ uv.x += 0.0000001
+
+ var angle : float = atan(uv.y / uv.x) + 3.14159265359
+ var slice : float = 6.28318530718 / sides
+
+ return clamp((size - cos(floor(0.5 + angle / slice) * slice - angle) * uv.length()) / (edge * size), 0.0, 1.0)
+
+#float shape_star(vec2 uv, float sides, float size, float edge) {
+# uv = 2.0*uv-1.0;
+# edge = max(edge, 1.0e-8);
+# float angle = atan(uv.x, uv.y);
+# float slice = 6.28318530718/sides;
+# return clamp((1.0-(cos(floor(angle*sides/6.28318530718-0.5+2.0*step(fract(angle*sides/6.28318530718), 0.5))*slice-angle)*length(uv))/size)/edge, 0.0, 1.0);
+#}
+
+static func shape_star(uv : Vector2, sides : float, size : float, edge : float) -> float:
+ uv.x = 2.0 * uv.x - 1.0
+ uv.y = 2.0 * uv.y - 1.0
+
+ edge = max(edge, 1.0e-8);
+
+ #simple no branch for division by zero
+ uv.x += 0.0000001
+
+ var angle : float = atan(uv.y / uv.x)
+ var slice : float = 6.28318530718 / sides
+
+ return clamp((size - cos(floor(1.5 + angle / slice - 2.0 * Commons.step(0.5 * slice, Commons.modf(angle, slice))) * slice - angle) * uv.length()) / (edge * size), 0.0, 1.0);
+
+#float shape_curved_star(vec2 uv, float sides, float size, float edge) {
+# uv = 2.0*uv-1.0;
+# edge = max(edge, 1.0e-8);
+# float angle = 2.0*(atan(uv.x, uv.y)+3.14159265359);
+# float slice = 6.28318530718/sides;
+# return clamp((1.0-cos(floor(0.5+0.5*angle/slice)*2.0*slice-angle)*length(uv)/size)/edge, 0.0, 1.0);
+#}
+
+static func shape_curved_star(uv : Vector2, sides : float, size : float, edge : float) -> float:
+ uv.x = 2.0 * uv.x - 1.0
+ uv.y = 2.0 * uv.y - 1.0
+
+ edge = max(edge, 1.0e-8);
+
+ #simple no branch for division by zero
+ uv.x += 0.0000001
+
+ var angle : float = 2.0*(atan(uv.y / uv.x) + 3.14159265359)
+ var slice : float = 6.28318530718 / sides
+
+ return clamp((size - cos(floor(0.5 + 0.5 * angle / slice) * 2.0 * slice - angle) * uv.length())/(edge * size), 0.0, 1.0);
+
+#float shape_rays(vec2 uv, float sides, float size, float edge) {
+# uv = 2.0*uv-1.0;
+# edge = 0.5*max(edge, 1.0e-8)*size;
+# float slice = 6.28318530718/sides;
+# float angle = mod(atan(uv.x, uv.y)+3.14159265359, slice)/slice;
+# return clamp(min((size-angle)/edge, angle/edge), 0.0, 1.0);
+#}
+
+static func shape_rays(uv : Vector2, sides : float, size : float, edge : float) -> float:
+
+ uv.x = 2.0 * uv.x - 1.0
+ uv.y = 2.0 * uv.y - 1.0
+
+ edge = 0.5 * max(edge, 1.0e-8) * size
+
+ #simple no branch for division by zero
+ uv.x += 0.0000001
+
+ var slice : float = 6.28318530718 / sides
+ var angle : float = Commons.modf(atan(uv.y / uv.x) + 3.14159265359, slice) / slice
+
+ return clamp(min((size - angle) / edge, angle / edge), 0.0, 1.0);
+
+#float box(vec2 uv, vec3 center, vec3 rad, vec3 rot) {\n\t
+# vec3 ro = vec3(uv, 1.0)-center;\n\t
+# vec3 rd = vec3(0.0000001, 0.0000001, -1.0);\n\t
+# mat3 r = mat3(vec3(1, 0, 0), vec3(0, cos(rot.x), -sin(rot.x)), vec3(0, sin(rot.x), cos(rot.x)));\n\t
+#
+# r *= mat3(vec3(cos(rot.y), 0, -sin(rot.y)), vec3(0, 1, 0), vec3(sin(rot.y), 0, cos(rot.y)));\n\t
+# r *= mat3(vec3(cos(rot.z), -sin(rot.z), 0), vec3(sin(rot.z), cos(rot.z), 0), vec3(0, 0, 1));\n\t
+# ro = r * ro;\n\t
+# rd = r * rd;\n
+# vec3 m = 1.0/rd;\n
+# vec3 n = m*ro;\n
+# vec3 k = abs(m)*rad;\n
+# vec3 t1 = -n - k;\n
+# vec3 t2 = -n + k;\n\n
+#
+# float tN = max(max(t1.x, t1.y), t1.z);\n
+# float tF = min(min(t2.x, t2.y), t2.z);\n
+#
+# if(tN>tF || tF<0.0) return 1.0;\n
+#
+# return tN;\n
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/simple.gd b/game/addons/mat_maker_gd/nodes/common/simple.gd
new file mode 100644
index 0000000..50bfa0c
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/simple.gd
@@ -0,0 +1,147 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#profile.mmg
+
+# "inputs": [
+# {
+# "default": "dot($gradient($uv.x).xyz, vec3(1.0/3.0))",
+# "label": "2:",
+# "name": "in",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "draw_profile_$style($uv, $in($uv), (dot($gradient($uv.x+0.001).xyz, vec3(1.0/3.0))-dot($gradient($uv.x-0.001).xyz, vec3(1.0/3.0)))/0.002, max(0.0001, $width))",
+# "longdesc": "An image showing the profile defined by the gradient",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "Style of the output image (fill or curve)",
+# "name": "style",
+# "shortdesc": "Style",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Curve",
+# "value": "curve"
+# },
+# {
+# "name": "Fill",
+# "value": "fill"
+# }
+# ]
+# },
+# {
+# "default": {
+# "interpolation": 1,
+# "points": [
+# {
+# "a": 1,
+# "b": 0,
+# "g": 0,
+# "pos": 0,
+# "r": 0
+# },
+# {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "pos": 1,
+# "r": 1
+# }
+# ],
+# "type": "Gradient"
+# },
+# "label": "",
+# "longdesc": "Gradient that defines the profile to be shown",
+# "name": "gradient",
+# "shortdesc": "Gradient",
+# "type": "gradient"
+# },
+# {
+# "control": "None",
+# "default": 0.05,
+# "label": "",
+# "longdesc": "Width of the curve",
+# "max": 1,
+# "min": 0,
+# "name": "width",
+# "shortdesc": "Width",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+
+#----------------------
+#uniform.mmg
+#Draws a uniform image
+
+# "outputs": [
+# {
+# "longdesc": "A uniform image of the selected color",
+# "rgba": "$(color)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "r": 1
+# },
+# "label": "",
+# "longdesc": "Color of the uniform image",
+# "name": "color",
+# "shortdesc": "Color",
+# "type": "color"
+# }
+# ]
+
+#----------------------
+#uniform_greyscale.mmg
+#Draws a uniform greyscale image
+
+# "outputs": [
+# {
+# "f": "$(color)",
+# "longdesc": "A uniform image of the selected value",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "",
+# "longdesc": "The value of the uniform greyscale image",
+# "max": 1,
+# "min": 0,
+# "name": "color",
+# "shortdesc": "Value",
+# "step": 0.01,
+# "type": "float"
+# }
+# ]
+
+#float draw_profile_fill(vec2 uv, float y, float dy, float w) {\n\t
+# return 1.0-clamp(sin(1.57079632679-atan(dy))*(1.0-uv.y-y)/w, 0.0, 1.0);\n
+#}
+
+#float draw_profile_curve(vec2 uv, float y, float dy, float w) {\n\t
+# return 1.0-clamp(sin(1.57079632679-atan(dy))*abs(1.0-uv.y-y)/w, 0.0, 1.0);\n
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/tex3d.gd b/game/addons/mat_maker_gd/nodes/common/tex3d.gd
new file mode 100644
index 0000000..1ef03b6
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/tex3d.gd
@@ -0,0 +1,979 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#tex3d_apply.mmg
+#Applies 3D textures to a rendered 3D signed distance function scene.
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "Height",
+# "longdesc": "The height map generated by the Render node",
+# "name": "z",
+# "shortdesc": "HeightMap",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "label": "Color",
+# "longdesc": "The color map generated by the Render node",
+# "name": "c",
+# "shortdesc": "ColorMap",
+# "type": "f"
+# },
+# {
+# "default": "vec3(1.0)",
+# "label": "Texture",
+# "longdesc": "The 3D texture",
+# "name": "t",
+# "shortdesc": "Tex3D",
+# "type": "tex3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The textured 3D scene",
+# "rgb": "$t(vec4($uv, $z($uv), $c($uv)))",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+
+#----------------------
+#tex3d_apply_invuvmap.mmg
+#This node applies a 3D texture to an object using its inverse UV map.
+
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "label": "Texture",
+# "longdesc": "The input 3D texture",
+# "name": "t",
+# "shortdesc": "Texture",
+# "type": "tex3d"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "Inv. UV Map",
+# "longdesc": "The inverse UV map of the object",
+# "name": "map",
+# "shortdesc": "InvUVMap",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated texture",
+# "rgb": "$t(vec4($map($uv), 0.0))",
+# "shortdesc": "Output",
+# "type": "rgb"
+# }
+# ],
+
+#----------------------
+#tex3d_blend.mmg
+#Blends its 3D texture inputs, using an optional mask
+
+# "inputs": [
+# {
+# "default": "vec3($uv.x, 1.0, 1.0)",
+# "label": "Source1",
+# "longdesc": "The foreground input",
+# "name": "s1",
+# "shortdesc": "Foreground",
+# "type": "tex3d"
+# },
+# {
+# "default": "vec3(1.0, $uv.y, 1.0)",
+# "label": "Source2",
+# "longdesc": "The background input",
+# "name": "s2",
+# "shortdesc": "Background",
+# "type": "tex3d"
+# },
+# {
+# "default": "vec3(1.0)",
+# "label": "Opacity",
+# "longdesc": "The optional opacity mask",
+# "name": "a",
+# "shortdesc": "Mask",
+# "type": "tex3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The 3D texture generated by the blend operation",
+# "shortdesc": "Output",
+# "tex3d": "blend3d_$blend_type($s1($uv).rgb, $s2($uv).rgb, $amount*dot($a($uv), vec3(1.0))/3.0)",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "The algorithm used to blend the inputs",
+# "name": "blend_type",
+# "shortdesc": "Blend mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Normal",
+# "value": "normal"
+# },
+# {
+# "name": "Multiply",
+# "value": "multiply"
+# },
+# {
+# "name": "Screen",
+# "value": "screen"
+# },
+# {
+# "name": "Overlay",
+# "value": "overlay"
+# },
+# {
+# "name": "Hard Light",
+# "value": "hard_light"
+# },
+# {
+# "name": "Soft Light",
+# "value": "soft_light"
+# },
+# {
+# "name": "Burn",
+# "value": "burn"
+# },
+# {
+# "name": "Dodge",
+# "value": "dodge"
+# },
+# {
+# "name": "Lighten",
+# "value": "lighten"
+# },
+# {
+# "name": "Darken",
+# "value": "darken"
+# },
+# {
+# "name": "Difference",
+# "value": "difference"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "3:",
+# "longdesc": "The opacity of the blend operation",
+# "max": 1,
+# "min": 0,
+# "name": "amount",
+# "shortdesc": "Opacity",
+# "step": 0,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_colorize.mmg
+#Remaps a greyscale 3D texture to a custom gradient
+
+# "inputs": [
+# {
+# "default": "vec3($uv.x+0.5)",
+# "label": "",
+# "longdesc": "The input greyscale 3D texture",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "tex3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The remapped color 3D texture ",
+# "shortdesc": "Output",
+# "tex3d": "$g(dot($in($uv), vec3(1.0))/3.0).rgb",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "default": {
+# "interpolation": 1,
+# "points": [
+# {
+# "a": 1,
+# "b": 0,
+# "g": 0,
+# "pos": 0,
+# "r": 0
+# },
+# {
+# "a": 1,
+# "b": 1,
+# "g": 1,
+# "pos": 1,
+# "r": 1
+# }
+# ],
+# "type": "Gradient"
+# },
+# "label": "",
+# "longdesc": "The gradient to which the input is remapped",
+# "name": "g",
+# "shortdesc": "Gradient",
+# "type": "gradient"
+# }
+# ],
+
+#----------------------
+#tex3d_distort.mmg
+#Distorts its input 3D texture using another 3D texture
+
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "label": "",
+# "longdesc": "The 3D texture to be distorted",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "tex3d"
+# },
+# {
+# "default": "vec3(0.0)",
+# "label": "",
+# "longdesc": "The 3D texture used to distort Input1",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "tex3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The distorted 3D texture",
+# "shortdesc": "Output",
+# "tex3d": "$in1(vec4($uv.xyz+($in2($uv)*$Distort*0.5-0.5), 0.0))",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Distort",
+# "longdesc": "The strength of the distort effect",
+# "max": 1,
+# "min": 0,
+# "name": "Distort",
+# "shortdesc": "Strength",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_fbm.mmg
+#Generates a 3D noise made of several octaves of a simple noise
+
+# "instance": "float $(name)_fbm(vec3 coord, vec3 size, int octaves, float persistence, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tvalue += tex3d_fbm_$noise(coord*size, size, seed) * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n",
+# "outputs": [
+# {
+# "longdesc": "Shows a greyscale 3D texture of the generated noise",
+# "shortdesc": "Output",
+# "tex3d": "vec3($(name)_fbm($(uv).xyz, vec3($(scale_x), $(scale_y), $(scale_z)), int($(iterations)), $(persistence), float($(seed))))",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 2,
+# "label": "Noise",
+# "longdesc": "The simple noise type",
+# "name": "noise",
+# "shortdesc": "Noise type",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Value",
+# "value": "value"
+# },
+# {
+# "name": "Perlin",
+# "value": "perlin"
+# },
+# {
+# "name": "Cellular",
+# "value": "cellular"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Scale X",
+# "longdesc": "The scale of the first octave along the X axis",
+# "max": 32,
+# "min": 1,
+# "name": "scale_x",
+# "shortdesc": "Scale.x",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Scale Y",
+# "longdesc": "The scale of the first octave along the Y axis",
+# "max": 32,
+# "min": 1,
+# "name": "scale_y",
+# "shortdesc": "Scale.y",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Scale Z",
+# "longdesc": "The scale of the first octave along the Z axis",
+# "max": 32,
+# "min": 1,
+# "name": "scale_z",
+# "shortdesc": "Scale.z",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 3,
+# "label": "Iterations",
+# "longdesc": "The number of noise octaves",
+# "max": 10,
+# "min": 1,
+# "name": "iterations",
+# "shortdesc": "Octaves",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Persistence",
+# "longdesc": "The persistence between two consecutive octaves",
+# "max": 1,
+# "min": 0,
+# "name": "persistence",
+# "shortdesc": "Persistence",
+# "step": 0.05,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_from2d.mmg
+#Creates a 3D texture from a 2D texture
+
+# "inputs": [
+# {
+# "default": "vec3(0.5)",
+# "label": "",
+# "longdesc": "The input 2D texture",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The generated 3D texture",
+# "shortdesc": "Output",
+# "tex3d": "$in($uv.xy+vec2(0.5))",
+# "type": "tex3d"
+# }
+# ],
+
+#----------------------
+#tex3d_pattern.mmg
+#A greyscale 3D texture that combines patterns along all 3 axes
+
+# "instance": "float $(name)_fct(vec3 uv) {\n\treturn mix3d_$(mix)(wave3d_$(x_wave)($(x_scale)*uv.x), wave3d_$(y_wave)($(y_scale)*uv.y), wave3d_$(z_wave)($(z_scale)*uv.z));\n}",
+# "outputs": [
+# {
+# "longdesc": "The generated 3D texture",
+# "shortdesc": "Output",
+# "tex3d": "vec3($(name)_fct($(uv).xyz))",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "Combiner",
+# "longdesc": "The operation used to combine the X, Y and Z patterns",
+# "name": "mix",
+# "shortdesc": "Combine",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Multiply",
+# "value": "mul"
+# },
+# {
+# "name": "Add",
+# "value": "add"
+# },
+# {
+# "name": "Max",
+# "value": "max"
+# },
+# {
+# "name": "Min",
+# "value": "min"
+# },
+# {
+# "name": "Xor",
+# "value": "xor"
+# },
+# {
+# "name": "Pow",
+# "value": "pow"
+# }
+# ]
+# },
+# {
+# "default": 0,
+# "label": "X",
+# "longdesc": "Pattern generated along the X axis",
+# "name": "x_wave",
+# "shortdesc": "Pattern.x",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Sine",
+# "value": "sine"
+# },
+# {
+# "name": "Triangle",
+# "value": "triangle"
+# },
+# {
+# "name": "Square",
+# "value": "square"
+# },
+# {
+# "name": "Sawtooth",
+# "value": "sawtooth"
+# },
+# {
+# "name": "Constant",
+# "value": "constant"
+# },
+# {
+# "name": "Bounce",
+# "value": "bounce"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "2:",
+# "longdesc": "Repetitions of the pattern along X axis",
+# "max": 32,
+# "min": 0,
+# "name": "x_scale",
+# "shortdesc": "Repeat.x",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "default": 0,
+# "label": "Y",
+# "longdesc": "Pattern generated along the Y axis",
+# "name": "y_wave",
+# "shortdesc": "Pattern.y",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Sine",
+# "value": "sine"
+# },
+# {
+# "name": "Triangle",
+# "value": "triangle"
+# },
+# {
+# "name": "Square",
+# "value": "square"
+# },
+# {
+# "name": "Sawtooth",
+# "value": "sawtooth"
+# },
+# {
+# "name": "Constant",
+# "value": "constant"
+# },
+# {
+# "name": "Bounce",
+# "value": "bounce"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "3:",
+# "longdesc": "Repetitions of the pattern along Y axis",
+# "max": 32,
+# "min": 0,
+# "name": "y_scale",
+# "shortdesc": "Repeat.y",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "default": 0,
+# "label": "Z",
+# "longdesc": "Pattern generated along the Z axis",
+# "name": "z_wave",
+# "shortdesc": "Pattern.z",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Sine",
+# "value": "sine"
+# },
+# {
+# "name": "Triangle",
+# "value": "triangle"
+# },
+# {
+# "name": "Square",
+# "value": "square"
+# },
+# {
+# "name": "Sawtooth",
+# "value": "sawtooth"
+# },
+# {
+# "name": "Constant",
+# "value": "constant"
+# },
+# {
+# "name": "Bounce",
+# "value": "bounce"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "4:",
+# "longdesc": "Repetitions of the pattern along Z axis",
+# "max": 32,
+# "min": 0,
+# "name": "z_scale",
+# "shortdesc": "Repeat.z",
+# "step": 1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_rotate.mmg
+#Rotates a 3D texture
+
+# "inputs": [
+# {
+# "default": "vec3(1.0)",
+# "label": "",
+# "longdesc": "The input 3D texture",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "tex3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The rotated 3D texture",
+# "shortdesc": "Output",
+# "tex3d": "$in(vec4(tex3d_rotate($uv.xyz, -vec3($ax, $ay, $az)*0.01745329251), $uv.w))",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0,
+# "label": "X",
+# "longdesc": "The rotation around the X axis",
+# "max": 180,
+# "min": -180,
+# "name": "ax",
+# "shortdesc": "Rotate.x",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Y",
+# "longdesc": "The rotation around the Y axis",
+# "max": 180,
+# "min": -180,
+# "name": "ay",
+# "shortdesc": "Rotate.y",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Z",
+# "longdesc": "The rotation around the Z axis",
+# "max": 180,
+# "min": -180,
+# "name": "az",
+# "shortdesc": "Rotate.z",
+# "step": 1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_select.mmg
+#Selects a 3D texture for a given color index. This can be used to map several textures into a single 3D scene.
+
+# "code": "float $(name_uv)_d = ($uv.w-$v)/$t;",
+# "inputs": [
+# {
+# "default": "vec3(0.5)",
+# "label": "",
+# "longdesc": "The 3D texture associated to the specified color index",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "tex3d"
+# },
+# {
+# "default": "vec3(0.5)",
+# "label": "",
+# "longdesc": "The 3D texture(s) associated to other color indices",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "tex3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The merged 3D texture",
+# "shortdesc": "Output",
+# "tex3d": "mix($in1($uv), $in2($uv), clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0))",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Value",
+# "longdesc": "The value of the selected color index",
+# "max": 1,
+# "min": 0,
+# "name": "v",
+# "shortdesc": "Value",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Tolerance",
+# "longdesc": "The tolerance used when comparing color indices",
+# "max": 1,
+# "min": 0.01,
+# "name": "t",
+# "shortdesc": "Tolerance",
+# "step": 0.001,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_select_shape.mmg
+#Selects a 3D texture inside, and another outside a shape. This can be used to map several textures into a single 3D scene.
+
+# "inputs": [
+# {
+# "default": "vec3(0.5)",
+# "label": "",
+# "longdesc": "The 3D texture associated to the specified color index",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "tex3d"
+# },
+# {
+# "default": "vec3(0.5)",
+# "label": "",
+# "longdesc": "The 3D texture(s) associated to other color indices",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "tex3d"
+# },
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The shape in which input1 is applied",
+# "name": "shape",
+# "shortdesc": "Shape",
+# "type": "sdf3d"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "The merged 3D texture",
+# "shortdesc": "Output",
+# "tex3d": "mix($in1($uv), $in2($uv), clamp($shape($uv.xyz)/max($d, 0.0001), 0.0, 1.0))",
+# "type": "tex3d"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Smoothness",
+# "longdesc": "The width of the transition area between both textures",
+# "max": 1,
+# "min": 0,
+# "name": "d",
+# "shortdesc": "Smoothness",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#tex3d_apply.mmg
+
+#----------------------
+#tex3d_apply.mmg
+
+#----------------------
+#tex3d_apply.mmg
+
+#----------------------
+#tex3d_apply.mmg
+
+#vec3 blend3d_normal(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*c1 + (1.0-opacity)*c2;\n
+#}
+
+#vec3 blend3d_multiply(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*c1*c2 + (1.0-opacity)*c2;\n
+#}
+
+#vec3 blend3d_screen(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n
+#}
+
+#float blend3d_overlay_f(float c1, float c2) {\n\t
+# return (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n
+#}
+
+#vec3 blend3d_overlay(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend3d_overlay_f(c1.x, c2.x), blend3d_overlay_f(c1.y, c2.y), blend3d_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+#vec3 blend3d_hard_light(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*0.5*(c1*c2+blend3d_overlay(c1, c2, 1.0)) + (1.0-opacity)*c2;\n
+#}
+
+#float blend3d_soft_light_f(float c1, float c2) {\n\t
+# return (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n
+#}
+
+#vec3 blend3d_soft_light(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend3d_soft_light_f(c1.x, c2.x), blend3d_soft_light_f(c1.y, c2.y), blend3d_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+#float blend3d_burn_f(float c1, float c2) {\n\t
+# return (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n
+#}
+
+#vec3 blend3d_burn(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend3d_burn_f(c1.x, c2.x), blend3d_burn_f(c1.y, c2.y), blend3d_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+#float blend3d_dodge_f(float c1, float c2) {\n\t
+# return (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n
+#}
+
+#vec3 blend3d_dodge(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*vec3(blend3d_dodge_f(c1.x, c2.x), blend3d_dodge_f(c1.y, c2.y), blend3d_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n
+#}
+
+#vec3 blend3d_lighten(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*max(c1, c2) + (1.0-opacity)*c2;\n
+#}
+
+#vec3 blend3d_darken(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*min(c1, c2) + (1.0-opacity)*c2;
+#}
+
+#vec3 blend3d_difference(vec3 c1, vec3 c2, float opacity) {\n\t
+# return opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n
+#}
+
+#float rand31(vec3 p) {\n\t
+# return fract(sin(dot(p,vec3(127.1,311.7, 74.7)))*43758.5453123);\n
+#}
+
+#vec3 rand33(vec3 p) {\n\t
+# p = vec3( dot(p,vec3(127.1,311.7, 74.7)),
+# dot(p,vec3(269.5,183.3,246.1)),\n\t\t\t
+# dot(p,vec3(113.5,271.9,124.6)));\n\n\t
+#
+# return -1.0 + 2.0*fract(sin(p)*43758.5453123);
+#}
+
+#float tex3d_fbm_value(vec3 coord, vec3 size, float seed) {\n\t
+# vec3 o = floor(coord)+rand3(vec2(seed, 1.0-seed))+size;\n\t
+# vec3 f = fract(coord);\n\t
+# float p000 = rand31(mod(o, size));\n\t
+# float p001 = rand31(mod(o + vec3(0.0, 0.0, 1.0), size));\n\t
+# float p010 = rand31(mod(o + vec3(0.0, 1.0, 0.0), size));\n\t
+# float p011 = rand31(mod(o + vec3(0.0, 1.0, 1.0), size));\n\t
+# float p100 = rand31(mod(o + vec3(1.0, 0.0, 0.0), size));\n\t
+# float p101 = rand31(mod(o + vec3(1.0, 0.0, 1.0), size));\n\t
+# float p110 = rand31(mod(o + vec3(1.0, 1.0, 0.0), size));\n\t
+# float p111 = rand31(mod(o + vec3(1.0, 1.0, 1.0), size));\n\t
+#
+# vec3 t = f * f * (3.0 - 2.0 * f);\n\t
+#
+# return mix(mix(mix(p000, p100, t.x), mix(p010, p110, t.x), t.y), mix(mix(p001, p101, t.x), mix(p011, p111, t.x), t.y), t.z);\n
+#}
+
+#float tex3d_fbm_perlin(vec3 coord, vec3 size, float seed) {\n\t
+# vec3 o = floor(coord)+rand3(vec2(seed, 1.0-seed))+size;\n\t
+# vec3 f = fract(coord);\n\t
+# vec3 v000 = normalize(rand33(mod(o, size))-vec3(0.5));\n\t
+# vec3 v001 = normalize(rand33(mod(o + vec3(0.0, 0.0, 1.0), size))-vec3(0.5));\n\t
+# vec3 v010 = normalize(rand33(mod(o + vec3(0.0, 1.0, 0.0), size))-vec3(0.5));\n\t
+# vec3 v011 = normalize(rand33(mod(o + vec3(0.0, 1.0, 1.0), size))-vec3(0.5));\n\t
+# vec3 v100 = normalize(rand33(mod(o + vec3(1.0, 0.0, 0.0), size))-vec3(0.5));\n\t
+# vec3 v101 = normalize(rand33(mod(o + vec3(1.0, 0.0, 1.0), size))-vec3(0.5));\n\t
+# vec3 v110 = normalize(rand33(mod(o + vec3(1.0, 1.0, 0.0), size))-vec3(0.5));\n\t
+# vec3 v111 = normalize(rand33(mod(o + vec3(1.0, 1.0, 1.0), size))-vec3(0.5));\n\t
+#
+# float p000 = dot(v000, f);\n\tfloat p001 = dot(v001, f - vec3(0.0, 0.0, 1.0));\n\t
+# float p010 = dot(v010, f - vec3(0.0, 1.0, 0.0));\n\t
+# float p011 = dot(v011, f - vec3(0.0, 1.0, 1.0));\n\t
+# float p100 = dot(v100, f - vec3(1.0, 0.0, 0.0));\n\t
+# float p101 = dot(v101, f - vec3(1.0, 0.0, 1.0));\n\t
+# float p110 = dot(v110, f - vec3(1.0, 1.0, 0.0));\n\t
+# float p111 = dot(v111, f - vec3(1.0, 1.0, 1.0));\n\t
+#
+# vec3 t = f * f * (3.0 - 2.0 * f);\n\t
+#
+# return 0.5 + mix(mix(mix(p000, p100, t.x), mix(p010, p110, t.x), t.y), mix(mix(p001, p101, t.x), mix(p011, p111, t.x), t.y), t.z);
+#}
+
+#float tex3d_fbm_cellular(vec3 coord, vec3 size, float seed) {\n\t
+# vec3 o = floor(coord)+rand3(vec2(seed, 1.0-seed))+size;\n\t
+# vec3 f = fract(coord);\n\tfloat min_dist = 3.0;\n\t
+#
+# for (float x = -1.0; x <= 1.0; x++) {\n\t\t
+# for (float y = -1.0; y <= 1.0; y++) {\n\t\t\t
+# for (float z = -1.0; z <= 1.0; z++) {\n\t\t\t\t
+# vec3 node = 0.4*rand33(mod(o + vec3(x, y, z), size)) + vec3(x, y, z);\n\t\t\t\t
+# float dist = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y + (f - node).z * (f - node).z);\n\t\t\t\t
+# min_dist = min(min_dist, dist);\n\t\t\t
+# }\n\t\t
+#
+# }\n\t
+#
+# }\n\t
+#
+# return min_dist;
+#}
+
+
+#float wave3d_constant(float x) {\n\t
+# return 1.0;\n
+#}
+
+#float wave3d_sine(float x) {\n\t
+# return 0.5-0.5*cos(3.14159265359*2.0*x);\n
+#}
+
+#float wave3d_triangle(float x) {\n\t
+# x = fract(x);\n\t
+# return min(2.0*x, 2.0-2.0*x);\n
+#}
+
+#float wave3d_sawtooth(float x) {\n\t
+# return fract(x);\n
+#}
+
+#float wave3d_square(float x) {\n\t
+# return (fract(x) < 0.5) ? 0.0 : 1.0;\n
+#}
+
+#float wave3d_bounce(float x) {\n\t
+# x = 2.0*(fract(x)-0.5);\n\t
+# return sqrt(1.0-x*x);\n
+#}
+
+#float mix3d_mul(float x, float y, float z) {\n\t
+# return x*y*z;\n
+#}
+
+#float mix3d_add(float x, float y, float z) {\n\t
+# return min(x+y+z, 1.0);\n
+#}
+
+#float mix3d_max(float x, float y, float z) {\n\t
+# return max(max(x, y), z);\n
+#}
+
+#float mix3d_min(float x, float y, float z) {\n\t
+# return min(min(x, y), z);\n
+#}
+
+#float mix3d_xor(float x, float y, float z) {\n\t
+# float xy = min(x+y, 2.0-x-y);\n\t
+# return min(xy+z, 2.0-xy-z);\n
+#}
+
+#float mix3d_pow(float x, float y, float z) {\n\t
+# return pow(pow(x, y), z);\n
+#}
+
+#vec3 tex3d_rotate(vec3 p, vec3 a) {\n\t
+# vec3 rv;\n\t
+# float c;\n\t
+# float s;\n\t
+# c = cos(a.x);\n\t
+# s = sin(a.x);\n\t
+# rv.x = p.x;\n\t
+# rv.y = p.y*c+p.z*s;\n\t
+# rv.z = -p.y*s+p.z*c;\n\t
+# c = cos(a.y);\n\t
+# s = sin(a.y);\n\t
+# p.x = rv.x*c+rv.z*s;\n\t
+# p.y = rv.y;\n\t
+# p.z = -rv.x*s+rv.z*c;\n\t
+# c = cos(a.z);\n\t
+# s = sin(a.z);\n\t
+# rv.x = p.x*c+p.y*s;\n\t
+# rv.y = -p.x*s+p.y*c;\n\t
+# rv.z = p.z;\n\t
+# return rv;\n
+#}
+
diff --git a/game/addons/mat_maker_gd/nodes/common/tile.gd b/game/addons/mat_maker_gd/nodes/common/tile.gd
new file mode 100644
index 0000000..25fb5e1
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/tile.gd
@@ -0,0 +1,707 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#tile2x2.mmg
+#Places 4 input images into a single output to create an atlas of 4 images.
+#Chaining Tile2x2 nodes can be useful to create 16 images atlases.
+#Atlases are used by remapping nodes such as CustomUV, Tiler and Splatter.
+
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The first input",
+# "name": "in1",
+# "shortdesc": "Input1",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The second input",
+# "name": "in2",
+# "shortdesc": "Input2",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The third input",
+# "name": "in3",
+# "shortdesc": "Input3",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(0.0)",
+# "label": "",
+# "longdesc": "The fourth input",
+# "name": "in4",
+# "shortdesc": "Input4",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the generated atlas",
+# "rgba": "($uv.y < 0.5) ? (($uv.x < 0.5) ? ($in1(2.0*$uv)) : ($in2(2.0*$uv-vec2(1.0, 0.0)))) : (($uv.x < 0.5) ? ($in3(2.0*$uv-vec2(0.0, 1.0))) : ($in4(2.0*$uv-vec2(1.0, 1.0))))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+
+#----------------------
+#tile2x2_variations.mmg
+#Places 4 input images into a single output to create an atlas of 4 images.
+#Chaining Tile2x2 nodes can be useful to create 16 images atlases.
+#Atlases are used by remapping nodes such as CustomUV, Tiler and Splatter.
+
+# "inputs": [
+# {
+# "default": "vec4(0.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The first input",
+# "name": "in",
+# "shortdesc": "Input1",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the generated atlas",
+# "rgba": "($uv.y < 0.5) ? (($uv.x < 0.5) ? ($in.variation(2.0*$uv, $seed)) : ($in.variation(2.0*$uv-vec2(1.0, 0.0), $seed+0.1))) : (($uv.x < 0.5) ? ($in.variation(2.0*$uv-vec2(0.0, 1.0), $seed+0.2)) : ($in.variation(2.0*$uv-vec2(1.0, 1.0), $seed+0.3)))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+
+#----------------------
+#tiler.mmg
+#Tiles several occurences of an input image while adding randomness.
+
+#vec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)));
+
+#instance
+#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed) {\n\t
+# float c = 0.0;\n\t
+# vec3 rc = vec3(0.0);\n\t
+# vec3 rc1;\n\t
+# for (int dx = -overlap; dx <= overlap; ++dx) {\n\t\t
+# for (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\t
+# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\t
+# vec2 seed = rand2(pos+_seed);\n\t\t\t
+# rc1 = rand3(seed);\n\t\t\t
+# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile);\n\t\t\t
+# float mask = $mask(fract(pos+vec2(0.5)));\n\t\t\t
+#
+# if (mask > 0.01) {\n\t\t\t\t
+# vec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\t
+# seed = rand2(seed);\n\t\t\t\t
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t\t
+# float ca = cos(angle);\n\t\t\t\t
+# float sa = sin(angle);\n\t\t\t\t
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\t
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t\t
+# pv /= vec2($scale_x, $scale_y);\n\t\t\t\t
+# pv += vec2(0.5);\n\t\t\t\t
+# seed = rand2(seed);\n\t\t\t\t
+# vec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\t
+# if (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\t
+# continue;\n\t\t\t\t
+# }\n\t\t\t\t
+#
+# $select_inputs\n\t\t\t\t
+#
+# float c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask*(1.0-$value*seed.x);\n\t\t\t\t
+# c = max(c, c1);\n\t\t\t\t
+# rc = mix(rc, rc1, step(c, c1));\n\t\t\t
+# }\n\t\t
+# }\n\t
+# }\n\t
+#
+# return vec4(rc, c);\n
+#}
+
+#Inputs:
+
+#in, float, default: 0, - The input image or atlas of 4 or 16 input images
+#Mask, float, default: 1, - The mask applied to the pattern
+
+#Outputs:
+#Output, float, Shows the generated pattern
+#$(name_uv)_rch.a
+
+#Instance map, rgb, Shows a random color for each instance of the input image
+#$(name_uv)_rch.rgb
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+#Parameters:
+#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern
+#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.
+#select_inputs (Inputs), enum, default 0, values 1, 4, 16
+#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis
+#fixed_offset, float, default 0.5, min 0, max 1, step 0.01 - The relative offset of odd rows
+#offset (rnd_offset), float, default 0.5, min 0, max 1, step 0.01
+#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1
+#scale (rnd_scale), float, default 0.5, min 0, max 1, step 0.01 - The random scale applied to each image instance
+#value (rnd_value), float, default 0.5, min 0, max 1, step 0.01 - The random greyscale value applied to each image instance
+#variations, bool, default false, (disabled) - Check to tile variations of the input
+
+#----------------------
+#tiler_advanced.mmg
+#Tiles several occurences of an input image while adding randomness.
+
+# "code": "vec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), float($seed));",
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image or atlas of 4 or 16 input images",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The mask applied to the pattern",
+# "name": "mask",
+# "shortdesc": "Mask",
+# "type": "f"
+# },
+# {
+# "default": "vec4(rand2($uv+vec2(float($seed))), rand2($uv-vec2(float($seed))))",
+# "label": "",
+# "longdesc": "An input color map used to generate the Instance map 1 output",
+# "name": "color1",
+# "shortdesc": "Color map 1",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(rand2(-$uv+vec2(float($seed))), rand2(-$uv-vec2(float($seed))))",
+# "label": "",
+# "longdesc": "An input color map used to generate the Instance map 2 output",
+# "name": "color2",
+# "shortdesc": "Color map 2",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "5:",
+# "longdesc": "A map for translation along the X axis",
+# "name": "tr_x",
+# "shortdesc": "Translate map X",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for translation along the Y axis",
+# "name": "tr_y",
+# "shortdesc": "Translate map Y",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for rotation",
+# "name": "r",
+# "shortdesc": "Rotate map",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for scale along the X axis",
+# "name": "sc_x",
+# "shortdesc": "Scale map X",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for scale along the Y axis",
+# "name": "sc_y",
+# "shortdesc": "Scale map Y",
+# "type": "f"
+# }
+# ],
+# "instance": "vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, float _seed) {\n\tfloat c = 0.0;\n\tvec2 map_uv = vec2(0.0);\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\tfloat mask = $mask(fract(pos+vec2(0.5)));\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tpos = fract(pos+vec2(0.5));\n\t\t\t\tpv -= vec2($translate_x*$tr_x(pos), $translate_y*$tr_y(pos))/tile;\n\t\t\t\tfloat angle = $r(pos) * $rotate * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv /= vec2($scale_x*$sc_x(pos), $scale_y*$sc_y(pos));\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tif (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 seed = rand2(vec2(_seed)+pos);\n\t\t\t\t$select_inputs\n\t\t\t\tfloat c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask;\n\t\t\t\tc = max(c, c1);\n\t\t\t\tmap_uv = mix(map_uv, pos, step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(map_uv, 0.0, c);\n}",
+# "outputs": [
+# {
+# "f": "$(name_uv)_rch.a",
+# "longdesc": "Shows the generated pattern",
+# "shortdesc": "Output",
+# "type": "f"
+# },
+# {
+# "longdesc": "Shows a color for each instance of the input image",
+# "rgba": "$color1($(name_uv)_rch.rg)",
+# "shortdesc": "Instance map 1",
+# "type": "rgba"
+# },
+# {
+# "longdesc": "Shows a color for each instance of the input image",
+# "rgba": "$color2($(name_uv)_rch.rg)",
+# "shortdesc": "Instance map 2",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Tile X",
+# "longdesc": "The number of columns of the tiles pattern",
+# "max": 64,
+# "min": 1,
+# "name": "tx",
+# "shortdesc": "Tile.x",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Tile Y",
+# "longdesc": "The number of rows of the tiles pattern",
+# "max": 64,
+# "min": 1,
+# "name": "ty",
+# "shortdesc": "Tile.y",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Overlap",
+# "longdesc": "The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.",
+# "max": 5,
+# "min": 0,
+# "name": "overlap",
+# "shortdesc": "Overlap",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "default": 0,
+# "label": "Inputs",
+# "longdesc": "The input type of the node:\n- 1: single image\n- 4: atlas of 4 images\n- 16: atlas of 16 images\nAtlases can be created using the Tile2x2 node.",
+# "name": "select_inputs",
+# "shortdesc": "Input",
+# "type": "enum",
+# "values": [
+# {
+# "name": "1",
+# "value": " "
+# },
+# {
+# "name": "4",
+# "value": "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+# },
+# {
+# "name": "16",
+# "value": "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Translate X",
+# "longdesc": "The translation along the X axis applied to the instances",
+# "max": 1,
+# "min": 0,
+# "name": "translate_x",
+# "shortdesc": "Translate.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Translate Y",
+# "longdesc": "The translation along the Y axis applied to the instances",
+# "max": 1,
+# "min": 0,
+# "name": "translate_y",
+# "shortdesc": "Translate.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Rotate",
+# "longdesc": "The angle of instances of the input",
+# "max": 180,
+# "min": 0,
+# "name": "rotate",
+# "shortdesc": "Rotate",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Scale X",
+# "longdesc": "The scale of input images on the X axis",
+# "max": 2,
+# "min": 0,
+# "name": "scale_x",
+# "shortdesc": "Scale.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Scale Y",
+# "longdesc": "The scale of input images on the Y axis",
+# "max": 2,
+# "min": 0,
+# "name": "scale_y",
+# "shortdesc": "Scale.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "default": false,
+# "label": "Variations",
+# "longdesc": "Check to tile variations of the input",
+# "name": "variations",
+# "shortdesc": "Variations",
+# "type": "boolean"
+# }
+# ],
+
+#----------------------
+#tiler_advanced_color.mmg
+#Tiles several occurences of an input image while adding randomness.
+
+# "code": "vec2 $(name_uv)_mapuv;\nvec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), float($seed), $(name_uv)_mapuv);",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image or atlas of 4 or 16 input images",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The mask applied to the pattern",
+# "name": "mask",
+# "shortdesc": "Mask",
+# "type": "f"
+# },
+# {
+# "default": "vec4(rand2($uv+vec2(float($seed))), rand2($uv-vec2(float($seed))))",
+# "label": "",
+# "longdesc": "An input color map used to generate the Instance map 1 output",
+# "name": "color1",
+# "shortdesc": "Color map 1",
+# "type": "rgba"
+# },
+# {
+# "default": "vec4(rand2(-$uv+vec2(float($seed))), rand2(-$uv-vec2(float($seed))))",
+# "label": "",
+# "longdesc": "An input color map used to generate the Instance map 2 output",
+# "name": "color2",
+# "shortdesc": "Color map 2",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "5:",
+# "longdesc": "A map for translation along the X axis",
+# "name": "tr_x",
+# "shortdesc": "Translate map X",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for translation along the Y axis",
+# "name": "tr_y",
+# "shortdesc": "Translate map Y",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for rotation",
+# "name": "r",
+# "shortdesc": "Rotate map",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for scale along the X axis",
+# "name": "sc_x",
+# "shortdesc": "Scale map X",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "function": true,
+# "label": "",
+# "longdesc": "A map for scale along the Y axis",
+# "name": "sc_y",
+# "shortdesc": "Scale map Y",
+# "type": "f"
+# }
+# ],
+# "instance": "vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, float _seed, out vec2 outmapuv) {\n\t// $seed\n\tvec4 c = vec4(0.0);\n\toutmapuv = vec2(0.0);\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\tfloat mask = $mask(fract(pos+vec2(0.5)));\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tpos = fract(pos+vec2(0.5));\n\t\t\t\tpv -= vec2($translate_x*$tr_x(pos), $translate_y*$tr_y(pos))/tile;\n\t\t\t\tfloat angle = $r(pos) * $rotate * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv /= vec2($scale_x*$sc_x(pos), $scale_y*$sc_y(pos));\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tif (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 seed = rand2(vec2(_seed)+pos);\n\t\t\t\t$select_inputs\n\t\t\t\tvec4 n = $in.variation(pv, $variations ? seed.x : 0.0);\n\t\t\t\tfloat na = n.a*mask;\n\t\t\t\toutmapuv = mix(outmapuv, pos, step(c.a, na));\n\t\t\t\tc = mix(c, n, na);\n\t\t\t}\n\t\t}\n\t}\n\treturn c;\n}\n",
+# "outputs": [
+# {
+# "longdesc": "Shows the generated pattern",
+# "rgba": "$(name_uv)_rch",
+# "shortdesc": "Output",
+# "type": "rgba"
+# },
+# {
+# "longdesc": "Shows a color for each instance of the input image",
+# "rgba": "$color1($(name_uv)_mapuv)",
+# "shortdesc": "Instance map 1",
+# "type": "rgba"
+# },
+# {
+# "longdesc": "Shows a color for each instance of the input image",
+# "rgba": "$color2($(name_uv)_mapuv)",
+# "shortdesc": "Instance map 2",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Tile X",
+# "longdesc": "The number of columns of the tiles pattern",
+# "max": 64,
+# "min": 1,
+# "name": "tx",
+# "shortdesc": "Tile.x",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 4,
+# "label": "Tile Y",
+# "longdesc": "The number of rows of the tiles pattern",
+# "max": 64,
+# "min": 1,
+# "name": "ty",
+# "shortdesc": "Tile.y",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Overlap",
+# "longdesc": "The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.",
+# "max": 5,
+# "min": 0,
+# "name": "overlap",
+# "shortdesc": "Overlap",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "default": 0,
+# "label": "Inputs",
+# "longdesc": "The input type of the node:\n- 1: single image\n- 4: atlas of 4 images\n- 16: atlas of 16 images\nAtlases can be created using the Tile2x2 node.",
+# "name": "select_inputs",
+# "shortdesc": "Input",
+# "type": "enum",
+# "values": [
+# {
+# "name": "1",
+# "value": " "
+# },
+# {
+# "name": "4",
+# "value": "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+# },
+# {
+# "name": "16",
+# "value": "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Translate X",
+# "longdesc": "The translation along the X axis applied to the instances",
+# "max": 1,
+# "min": 0,
+# "name": "translate_x",
+# "shortdesc": "Translate.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Translate Y",
+# "longdesc": "The translation along the Y axis applied to the instances",
+# "max": 1,
+# "min": 0,
+# "name": "translate_y",
+# "shortdesc": "Translate.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Rotate",
+# "longdesc": "The angle of instances of the input",
+# "max": 180,
+# "min": 0,
+# "name": "rotate",
+# "shortdesc": "Rotate",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Scale X",
+# "longdesc": "The scale of input images on the X axis",
+# "max": 2,
+# "min": 0,
+# "name": "scale_x",
+# "shortdesc": "Scale.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Scale Y",
+# "longdesc": "The scale of input images on the Y axis",
+# "max": 2,
+# "min": 0,
+# "name": "scale_y",
+# "shortdesc": "Scale.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "default": false,
+# "label": "Variations",
+# "longdesc": "Check to tile variations of the input",
+# "name": "variations",
+# "shortdesc": "Variations",
+# "type": "boolean"
+# }
+# ],
+
+#----------------------
+#tiler_color.mmg
+#Tiles several occurences of an input image while adding randomness.
+
+#vec3 $(name_uv)_random_color;\n
+#vec4 $(name_uv)_tiled_output = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)), $(name_uv)_random_color);
+
+#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed, out vec3 random_color) {\n\t
+# vec4 c = vec4(0.0);\n\t
+# vec3 rc = vec3(0.0);\n\t
+# vec3 rc1;\n\t
+#
+# for (int dx = -overlap; dx <= overlap; ++dx) {\n\t\t
+# for (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\t
+# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\t
+# vec2 seed = rand2(pos+_seed);\n\t\t\t
+# rc1 = rand3(seed);\n\t\t\t
+# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile);\n\t\t\t
+# float mask = $mask(fract(pos+vec2(0.5)));\n\t\t\t
+# if (mask > 0.01) {\n\t\t\t\t
+# vec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\t
+# seed = rand2(seed);\n\t\t\t\t
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t\t
+# float ca = cos(angle);\n\t\t\t\t
+# float sa = sin(angle);\n\t\t\t\t
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\t
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t\t
+# pv /= vec2($scale_x, $scale_y);\n\t\t\t\t
+# pv += vec2(0.5);\n\t\t\t\t
+# pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\t
+#
+# $select_inputs\n\t\t\t\t
+#
+# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0);\n\t\t\t\t
+#
+# seed = rand2(seed);\n\t\t\t\t
+# float na = n.a*mask*(1.0-$opacity*seed.x);\n\t\t\t\t
+# float a = (1.0-c.a)*(1.0*na);\n\t\t\t\t
+#
+# c = mix(c, n, na);\n\t\t\t\t
+# rc = mix(rc, rc1, n.a);\n\t\t\t
+# }\n\t\t
+# }\n\t
+# }\n\t
+#
+# random_color = rc;\n\t
+# return c;\n
+#}
+
+
+#Inputs:
+
+#in, rgba, default: 0, - The input image or atlas of 4 or 16 input images
+#Mask, float, default: 1, - The mask applied to the pattern
+
+#Outputs:
+#Output, float, Shows the generated pattern
+#$(name_uv)_tiled_output
+
+#Instance map, rgb, Shows a random color for each instance of the input image
+#$(name_uv)_random_color
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+#Parameters:
+#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern
+#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.
+#select_inputs (Inputs), enum, default 0, values 1, 4, 16
+#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis
+#fixed_offset, float, default 0.5, min 0, max 1, step 0.01 - The relative offset of odd rows
+#offset (rnd_offset), float, default 0.5, min 0, max 1, step 0.01
+#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1
+#scale (rnd_scale), float, default 0.5, min 0, max 1, step 0.01 - The random scale applied to each image instance
+#opacity (rnd_opacity), float, default 0, min 0, max 1, step 0.01 - The random greyscale value applied to each image instance
+#variations, bool, default false, (disabled) - Check to tile variations of the input
+
diff --git a/game/addons/mat_maker_gd/nodes/common/transforms.gd b/game/addons/mat_maker_gd/nodes/common/transforms.gd
new file mode 100644
index 0000000..0037140
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/common/transforms.gd
@@ -0,0 +1,1765 @@
+tool
+extends Reference
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+#----------------------
+#transform.mmg
+#Translates, rotates and scales its input
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image to be transformed",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for translation along the X axis",
+# "name": "tx",
+# "shortdesc": "TranslateMap.x",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for translation along the Y axis",
+# "name": "ty",
+# "shortdesc": "TranslateMap.y",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for rotation",
+# "name": "r",
+# "shortdesc": "RotateMap",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for scaling along the X axis",
+# "name": "sx",
+# "shortdesc": "ScaleMap.x",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for scaling along the Y axis",
+# "name": "sy",
+# "shortdesc": "ScaleMap.y",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the transformed image",
+# "rgba": "$i(transform($uv, vec2($translate_x*(2.0*$tx($uv)-1.0), $translate_y*(2.0*$ty($uv)-1.0)), $rotate*0.01745329251*(2.0*$r($uv)-1.0), vec2($scale_x*(2.0*$sx($uv)-1.0), $scale_y*(2.0*$sy($uv)-1.0)), $repeat))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "2:Translate X:",
+# "longdesc": "The translation along the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "translate_x",
+# "shortdesc": "Translate.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Translate Y:",
+# "longdesc": "The translation along the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "translate_y",
+# "shortdesc": "Translate.y",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Radius1.a",
+# "default": 0,
+# "label": "Rotate:",
+# "longdesc": "The rotation angle",
+# "max": 720,
+# "min": -720,
+# "name": "rotate",
+# "shortdesc": "Rotate",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Scale1.x",
+# "default": 1,
+# "label": "Scale X:",
+# "longdesc": "The scaling factor along the X axis",
+# "max": 50,
+# "min": 0,
+# "name": "scale_x",
+# "shortdesc": "Scale.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Scale1.y",
+# "default": 1,
+# "label": "Scale Y:",
+# "longdesc": "The scaling factor along the Y axis",
+# "max": 50,
+# "min": 0,
+# "name": "scale_y",
+# "shortdesc": "Scale.y",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "default": false,
+# "label": "Repeat:",
+# "longdesc": "Repeat the input if checked, clamps otherwise",
+# "name": "repeat",
+# "shortdesc": "Repeat",
+# "type": "boolean"
+# }
+# ]
+
+#----------------------
+#transform2.mmg
+#Translates, rotates and scales its input
+
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image to be transformed",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for translation along the X axis",
+# "name": "tx",
+# "shortdesc": "TranslateMap.x",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for translation along the Y axis",
+# "name": "ty",
+# "shortdesc": "TranslateMap.y",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for rotation",
+# "name": "r",
+# "shortdesc": "RotateMap",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for scaling along the X axis",
+# "name": "sx",
+# "shortdesc": "ScaleMap.x",
+# "type": "f"
+# },
+# {
+# "default": "1.0",
+# "label": "",
+# "longdesc": "An optional map for scaling along the Y axis",
+# "name": "sy",
+# "shortdesc": "ScaleMap.y",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the transformed image",
+# "rgba": "$i($mode(transform2($uv, vec2($translate_x*(2.0*$tx($uv)-1.0), $translate_y*(2.0*$ty($uv)-1.0)), $rotate*0.01745329251*(2.0*$r($uv)-1.0), vec2($scale_x*(2.0*$sx($uv)-1.0), $scale_y*(2.0*$sy($uv)-1.0)))))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "2:Translate X:",
+# "longdesc": "The translation along the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "translate_x",
+# "shortdesc": "Translate.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Translate Y:",
+# "longdesc": "The translation along the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "translate_y",
+# "shortdesc": "Translate.y",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Radius1.a",
+# "default": 0,
+# "label": "Rotate:",
+# "longdesc": "The rotation angle",
+# "max": 720,
+# "min": -720,
+# "name": "rotate",
+# "shortdesc": "Rotate",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Scale1.x",
+# "default": 1,
+# "label": "Scale X:",
+# "longdesc": "The scaling factor along the X axis",
+# "max": 50,
+# "min": 0,
+# "name": "scale_x",
+# "shortdesc": "Scale.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Scale1.y",
+# "default": 1,
+# "label": "Scale Y:",
+# "longdesc": "The scaling factor along the Y axis",
+# "max": 50,
+# "min": 0,
+# "name": "scale_y",
+# "shortdesc": "Scale.y",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "default": 0,
+# "label": "Mode",
+# "longdesc": "Defines the behavior beyond the limits or the input image:\n- Clamp stretches the edges\n- Repeat tiles the input\n- Extend shows parts of the input that are beyond the edges",
+# "name": "mode",
+# "shortdesc": "Mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Clamp",
+# "value": "transform2_clamp"
+# },
+# {
+# "name": "Repeat",
+# "value": "fract"
+# },
+# {
+# "name": "Extend",
+# "value": ""
+# }
+# ]
+# }
+# ]
+
+#----------------------
+#translate.mmg
+#Translates its input
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the translated image",
+# "rgba": "$i($uv-vec2($translate_x, $translate_y))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Translate X:",
+# "longdesc": "The translation along the X axis",
+# "max": 1,
+# "min": -1,
+# "name": "translate_x",
+# "shortdesc": "Translate.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Translate Y:",
+# "longdesc": "The translation along the Y axis",
+# "max": 1,
+# "min": -1,
+# "name": "translate_y",
+# "shortdesc": "Translate.y",
+# "step": 0.005,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#rotate.mmg
+#Rotates its input
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the rotated image",
+# "rgba": "$i(rotate($uv, vec2(0.5+$cx, 0.5+$cy), $rotate*0.01745329251))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Center X:",
+# "longdesc": "The position of the rotation center",
+# "max": 1,
+# "min": -1,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Center Y:",
+# "longdesc": "The position of the rotation center",
+# "max": 1,
+# "min": -1,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Radius1.a",
+# "default": 0,
+# "label": "Rotate:",
+# "longdesc": "The angle of the rotation",
+# "max": 720,
+# "min": -720,
+# "name": "rotate",
+# "shortdesc": "Angle",
+# "step": 0.005,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#scale.mmg
+#Scales its input
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the scaled image",
+# "rgba": "$i(scale($uv, vec2(0.5+$cx, 0.5+$cy), vec2($scale_x, $scale_y)))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "P1.x",
+# "default": 0,
+# "label": "Center X:",
+# "longdesc": "The position of the scale center",
+# "max": 1,
+# "min": -1,
+# "name": "cx",
+# "shortdesc": "Center.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "P1.y",
+# "default": 0,
+# "label": "Center Y:",
+# "longdesc": "The poisition of the scale center",
+# "max": 1,
+# "min": -1,
+# "name": "cy",
+# "shortdesc": "Center.y",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Scale1.x",
+# "default": 1,
+# "label": "Scale X:",
+# "longdesc": "The scale amount along the X axis",
+# "max": 50,
+# "min": 0,
+# "name": "scale_x",
+# "shortdesc": "Scale.x",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "Scale1.y",
+# "default": 1,
+# "label": "Scale Y:",
+# "longdesc": "The scale amount along the Y axis",
+# "max": 50,
+# "min": 0,
+# "name": "scale_y",
+# "shortdesc": "Scale.y",
+# "step": 0.005,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#shear.mmg
+#Performs a shear stress transform on its input
+
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the transformed image",
+# "rgba": "$in($uv+$amount*($uv.yx-vec2($center))*vec2($direction))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 1,
+# "label": "",
+# "longdesc": "The direction of the shear transform (horizontal or vertical)",
+# "name": "direction",
+# "shortdesc": "Direction",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Horizontal",
+# "value": "1.0, 0.0"
+# },
+# {
+# "name": "Vertical",
+# "value": "0.0, 1.0"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The amount of the transform",
+# "max": 1,
+# "min": -1,
+# "name": "amount",
+# "shortdesc": "Amount",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The position of the shear center",
+# "max": 1,
+# "min": 0,
+# "name": "center",
+# "shortdesc": "Center",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#mirror.mmg
+#Mirrors its input while applying an offset from the center
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0, 1)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the mirrored image",
+# "rgba": "$i(uvmirror_$direction($uv, $offset))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "The mirror direction (horizontal or vertical)",
+# "name": "direction",
+# "shortdesc": "Direction",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Horizontal",
+# "value": "h"
+# },
+# {
+# "name": "Vertical",
+# "value": "v"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The offset from the center",
+# "max": 1,
+# "min": 0,
+# "name": "offset",
+# "shortdesc": "Offset",
+# "step": 0.005,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#kaleidoscope.mmg
+#Replicated an angle of the input image several times around the center.
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0, 1)",
+# "label": "",
+# "longdesc": "The input image",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the transformed image",
+# "rgba": "$i(kal_rotate($uv, $count, $offset))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The number of replications of an angle of the input",
+# "max": 10,
+# "min": 2,
+# "name": "count",
+# "shortdesc": "Count",
+# "step": 1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The angular offset of the replicated angle of the input",
+# "max": 180,
+# "min": -180,
+# "name": "offset",
+# "shortdesc": "Offset",
+# "step": 0.1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#warp.mmg
+#Warps its input according to a heightmap
+
+# "code": "vec2 $(name_uv)_slope = $(name)_slope($uv, $eps);\nvec2 $(name_uv)_warp = $mode;",
+# "global": "",
+# "inputs": [
+# {
+# "default": "vec4(sin($uv.x*20.0)*0.5+0.5, sin($uv.y*20.0)*0.5+0.5, 0, 1)",
+# "label": "",
+# "longdesc": "The input image to be warped",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The height map whose slopes are used to deform the input",
+# "name": "d",
+# "shortdesc": "Height map",
+# "type": "f"
+# }
+# ],
+# "instance": "vec2 $(name)_slope(vec2 uv, float epsilon) {\n\treturn vec2($d(fract(uv+vec2(epsilon, 0.0)))-$d(fract(uv-vec2(epsilon, 0.0))), $d(fract(uv+vec2(0.0, epsilon)))-$d(fract(uv-vec2(0.0, epsilon))));\n}",
+# "outputs": [
+# {
+# "longdesc": "Shows the warped image",
+# "rgba": "$in($uv+$amount*$(name_uv)_warp)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "Both warp modes extract their direction from the height map slopes:\n- Slope warp intensity only depends on the slope\n- Distance to top warp intensity depends on the slope and the distance to the top, and can be used to create mosaic-like patterns\n\nA Transform node with translate maps can produce effects similar to Slope Warp and is generally faster.",
+# "name": "mode",
+# "shortdesc": "Mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Slope",
+# "value": "$(name_uv)_slope"
+# },
+# {
+# "name": "Distance to top",
+# "value": "$(name_uv)_slope*(1.0-$d($uv))"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The strength of the warp effect",
+# "max": 1,
+# "min": 0,
+# "name": "amount",
+# "shortdesc": "Strength",
+# "step": 0.005,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The offset used to measure slopes",
+# "max": 0.2,
+# "min": 0.005,
+# "name": "eps",
+# "shortdesc": "Epsilon",
+# "step": 0.005,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#warp2.mmg
+#Warps its input according to a heightmap
+
+# "code": "vec2 $(name_uv)_slope = $(name)_slope($uv);\nvec2 $(name_uv)_warp = $mode;",
+# "inputs": [
+# {
+# "default": "vec4(sin($uv.x*20.0)*0.5+0.5, sin($uv.y*20.0)*0.5+0.5, 0, 1)",
+# "label": "",
+# "longdesc": "The input image to be warped",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The height map whose slopes are used to deform the input",
+# "name": "d",
+# "shortdesc": "Height map",
+# "type": "f"
+# }
+# ],
+# "instance": "vec2 $(name)_slope(vec2 uv) {\n vec2 e = vec2(0.001, 0.0);\n return 0.5*vec2($d(uv+e)-$d(uv-e), $d(uv+e.yx)-$d(uv-e.yx))/e.x;\n}",
+# "outputs": [
+# {
+# "longdesc": "Shows the warped image",
+# "rgba": "$in($uv+$amount*$(name_uv)_warp)",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "",
+# "longdesc": "Both warp modes extract their direction from the height map slopes:\n- Slope warp intensity only depends on the slope\n- Distance to top warp intensity depends on the slope and the distance to the top, and can be used to create mosaic-like patterns\n\nA Transform node with translate maps can produce effects similar to Slope Warp and is generally faster.",
+# "name": "mode",
+# "shortdesc": "Mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Slope",
+# "value": "$(name_uv)_slope"
+# },
+# {
+# "name": "Distance to top",
+# "value": "$(name_uv)_slope*(1.0-$d($uv))"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The strength of the warp effect",
+# "max": 1,
+# "min": 0,
+# "name": "amount",
+# "shortdesc": "Strength",
+# "step": 0.005,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#circle_map.mmg
+#Maps its input into a circle
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image to be remapped",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the remapped image",
+# "rgba": "$in(vec2(fract($repeat*atan($uv.y-0.5, $uv.x-0.5)*0.15915494309), min(0.99999, 2.0/$radius*length($uv-vec2(0.5)))))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Radius",
+# "longdesc": "The radius of the circle where the input is mapped",
+# "max": 1.5,
+# "min": 0,
+# "name": "radius",
+# "shortdesc": "Radius",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Repeat",
+# "longdesc": "The number of repetitions of the input image around the circle",
+# "max": 16,
+# "min": 0,
+# "name": "repeat",
+# "shortdesc": "Repeat",
+# "step": 1,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#custom_uv.mmg
+#Remaps an Input image using a custom UV map.
+
+# "code": "vec3 $(name_uv)_map = $map($uv);\nfloat $(name_uv)_rnd = float($seed)+$(name_uv)_map.z;\n",
+# "inputs": [
+# {
+# "default": "vec4(1.0)",
+# "label": "Input",
+# "longdesc": "The image or atlas of images to be remapped.",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "rgba"
+# },
+# {
+# "default": "vec3(1.0)",
+# "label": "UV",
+# "longdesc": "The custom UV map to be used for remapping.",
+# "name": "map",
+# "shortdesc": "Map",
+# "type": "rgb"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the remapped image",
+# "rgba": "$in(get_from_tileset($inputs, $(name_uv)_rnd, custom_uv_transform($(name_uv)_map.xy, vec2($sx, $sy), $rotate*0.01745329251, $scale, vec2($(name_uv)_map.z, float($seed)))))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "Inputs",
+# "longdesc": "The input type of the node:\n- 1: single image\n- 4: atlas of 4 images\n- 16: atlas of 16 images\nAtlases can be created using the Tile2x2 node.",
+# "name": "inputs",
+# "shortdesc": "Inputs",
+# "type": "enum",
+# "values": [
+# {
+# "name": "1",
+# "value": "1.0"
+# },
+# {
+# "name": "4",
+# "value": "2.0"
+# },
+# {
+# "name": "16",
+# "value": "4.0"
+# }
+# ]
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Scale X",
+# "longdesc": "The scale of the input image along the X axis.",
+# "max": 5,
+# "min": 0,
+# "name": "sx",
+# "shortdesc": "Scale.x",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 1,
+# "label": "Scale Y",
+# "longdesc": "The scale of the input image along the Y axis.",
+# "max": 5,
+# "min": 0,
+# "name": "sy",
+# "shortdesc": "Scale.y",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Rnd Rotate",
+# "longdesc": "The random rotation applied to each remapped instance.",
+# "max": 180,
+# "min": 0,
+# "name": "rotate",
+# "shortdesc": "RndRotate",
+# "step": 0.1,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0.5,
+# "label": "Rnd Scale",
+# "longdesc": "The random scale applied to each remapped instance.",
+# "max": 1,
+# "min": 0,
+# "name": "scale",
+# "shortdesc": "RndScale",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#splatter.mmg
+#Spreads several occurences of an input image randomly.
+
+#vec4 $(name_uv)_rch = splatter_$(name)($uv, int($count), vec2(float($seed)));
+
+#vec4 splatter_$(name)(vec2 uv, int count, vec2 seed) {\n\t
+# float c = 0.0;\n\t
+# vec3 rc = vec3(0.0);\n\t
+# vec3 rc1;\n\t
+#
+# for (int i = 0; i < count; ++i) {\n\t\t
+# seed = rand2(seed);\n\t\t
+# rc1 = rand3(seed);\n\t\t
+# float mask = $mask(fract(seed+vec2(0.5)));\n\t\t
+#
+# if (mask > 0.01) {\n\t\t\t
+# vec2 pv = fract(uv - seed)-vec2(0.5);\n\t\t\t
+# seed = rand2(seed);\n\t\t\t
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t
+# float ca = cos(angle);\n\t\t\t
+# float sa = sin(angle);\n\t\t\t
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t
+# pv /= vec2($scale_x, $scale_y);\n\t\t\t
+# pv += vec2(0.5);\n\t\t\t
+# seed = rand2(seed);\n\t\t\t
+# vec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t
+#
+# if (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t
+# continue;\n\t\t\t
+# }\n\t\t\t
+#
+# $select_inputs\n\t\t\t
+#
+# float c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask*(1.0-$value*seed.x);\n\t\t\t
+# c = max(c, c1);\n\t\t\t
+# rc = mix(rc, rc1, step(c, c1));\n\t\t
+# }\n\t
+# }\n\t
+#
+# return vec4(rc, c);\n
+#}
+
+#Inputs:
+
+#in, float, default: 0, - The input image or atlas of 4 or 16 input images
+#Mask, float, default: 1, - The mask applied to the pattern
+
+#Outputs:
+#Output, float, Shows the generated pattern
+#$(name_uv)_rch.a
+
+#Instance map, rgb, Shows a random color for each instance of the input image
+#$(name_uv)_rch.rgb
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+#Parameters:
+#count, int, default 25, min 1, max 100, - The number of occurences of the input image
+#select_inputs (Inputs), enum, default 0, values 1, 4, 16
+#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern
+#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.
+#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis
+#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1
+#scale (rnd_scale), float, default 0, min 0, max 1, step 0.01 - The random scale applied to each image instance
+#value (rnd_value), float, default 0, min 0, max 1, step 0.01
+
+#----------------------
+#splatter_color.mmg
+#preads several occurences of an input image randomly.
+
+#vec4 splatter_$(name)(vec2 uv, int count, vec2 seed) {\n\t
+# vec4 c = vec4(0.0);\n\t
+#
+# for (int i = 0; i < count; ++i) {\n\t\t
+# seed = rand2(seed);\n\t\t
+# float mask = $mask(fract(seed+vec2(0.5)));\n\t\t
+#
+# if (mask > 0.01) {\n\t\t\t
+# vec2 pv = fract(uv - seed)-vec2(0.5);\n\t\t\t
+# seed = rand2(seed);\n\t\t\t
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t
+# float ca = cos(angle);\n\t\t\t
+# float sa = sin(angle);\n\t\t\t
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t
+# pv /= vec2($scale_x, $scale_y);\n\t\t\tpv += vec2(0.5);\n\t\t\t
+# seed = rand2(seed);\n\t\t\t
+#
+# if (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t
+# continue;\n\t\t\t
+# }\n\t\t\t
+#
+# $select_inputs\n\t\t\t
+#
+# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0);\n\t\t\t
+#
+# float na = n.a*mask*(1.0-$opacity*seed.x);\n\t\t\t
+# float a = (1.0-c.a)*(1.0*na);\n\t\t\t
+# c = mix(c, n, na);\n\t\t
+# }\n\t
+# }\n\t
+#
+# return c;\n
+#}
+
+#Inputs:
+
+#in, rgba, default: 0, - The input image or atlas of 4 or 16 input images
+#Mask, float, default: 1, - The mask applied to the pattern
+
+#Outputs:
+#Output, rgba, Shows the generated pattern
+#splatter_$(name)($uv, int($count), vec2(float($seed)))
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+#Parameters:
+#count, int, default 25, min 1, max 100, - The number of occurences of the input image
+#select_inputs (Inputs), enum, default 0, values 1, 4, 16
+#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern
+#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.
+#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis
+#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1
+#scale (rnd_scale), float, default 0, min 0, max 1, step 0.01 - The random scale applied to each image instance
+#value (rnd_value), float, default 0, min 0, max 1, step 0.01
+#variations bool
+
+#----------------------
+#circle_splatter.mmg
+#Spreads several occurences of an input image in a circle or spiral pattern.
+
+#vec4 $(name_uv)_rch = splatter_$(name)($uv, int($count), int($rings), vec2(float($seed)));
+
+#vec4 splatter_$(name)(vec2 uv, int count, int rings, vec2 seed) {\n\t
+# float c = 0.0;\n\t
+# vec3 rc = vec3(0.0);\n\t
+# vec3 rc1;\n\t
+# seed = rand2(seed);\n\t
+#
+# for (int i = 0; i < count; ++i) {\n\t\t
+# float a = -1.57079632679+6.28318530718*float(i)*$rings/float(count);\n\t\t
+# float rings_distance = ceil(float(i+1)*float(rings)/float(count))/float(rings);\n\t\t
+# float spiral_distance = float(i+1)/float(count);\n\t\t
+# vec2 pos = $radius*mix(rings_distance, spiral_distance, $spiral)*vec2(cos(a), sin(a));\n\t\t
+# float mask = $mask(fract(pos-vec2(0.5)));\n\t\t
+#
+# if (mask > 0.01) {\n\t\t\t
+# vec2 pv = uv-0.5-pos;\n\t\t\t
+# rc1 = rand3(seed);\n\t\t\tseed = rand2(seed);\n\t\t\t
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251 + (a+1.57079632679) * $i_rotate;\n\t\t\t
+# float ca = cos(angle);\n\t\t\t
+# float sa = sin(angle);\n\t\t\t
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t
+# pv /= mix(1.0, float(i+1)/float(count+1), $i_scale);\n\t\t\t
+# pv /= vec2($scale_x, $scale_y);\n\t\t\t
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t
+# pv += vec2(0.5);\n\t\t\tseed = rand2(seed);\n\t\t\t
+#
+# if (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t
+# continue;\n\t\t\t
+# }\n\t\t\t
+#
+# $select_inputs\n\t\t\t
+#
+# float c1 = $in(pv)*mask*(1.0-$value*seed.x);\n\t\t\t
+#
+# c = max(c, c1);\n\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t
+# }\n\t
+# }\n\t
+#
+# return vec4(rc, c);\n
+#}
+
+
+#Inputs:
+
+#in, float, default: 0, - The input image or atlas of 4 or 16 input images
+#Mask, float, default: 1, - The mask applied to the pattern
+
+#Outputs:
+#Output, float, Shows the generated pattern
+#$(name_uv)_rch.rgb
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+#Parameters:
+#count, int, default 10, min 1, max 256, - The number of occurences of the input image
+#rings, int, default 1, min 1, max 16, - The number of occurences of the input image
+#select_inputs (Inputs), enum, default 0, values 1, 4, 16
+#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis
+#radius, float, default 0.4, min 0, max 0.5, step 0.01
+#spiral, float, default 0, min 0, max 1, step 0.01
+#i_rotate (inc_rotate), float, default 0, min 0, max 180, step 0.1
+#i_scale (inc_scale), float, default 0, min 0, max 1, step 0.01
+#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1
+#scale (rnd_scale), float, default 0, min 0, max 1, step 0.01 - The random scale applied to each image instance
+#value (rnd_value), float, default 0, min 0, max 1, step 0.01
+
+#----------------------
+#warp_dilation.mmg
+
+#{
+# "connections": [
+# {
+# "from": "warp_dilation",
+# "from_port": 0,
+# "to": "buffer_5",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_5",
+# "from_port": 0,
+# "to": "gen_outputs",
+# "to_port": 0
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 1,
+# "to": "buffer_6",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_6",
+# "from_port": 0,
+# "to": "warp_dilation",
+# "to_port": 1
+# },
+# {
+# "from": "gen_inputs",
+# "from_port": 0,
+# "to": "buffer_7",
+# "to_port": 0
+# },
+# {
+# "from": "buffer_7",
+# "from_port": 0,
+# "to": "warp_dilation",
+# "to_port": 0
+# }
+# ],
+# "label": "Warp Dilation",
+# "longdesc": "",
+# "name": "warp_dilation",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "nodes": [
+# {
+# "name": "buffer_5",
+# "node_position": {
+# "x": -387.923584,
+# "y": -38
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "buffer_6",
+# "node_position": {
+# "x": -636.189514,
+# "y": -90.757477
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "buffer_7",
+# "node_position": {
+# "x": -635.189514,
+# "y": -199.757477
+# },
+# "parameters": {
+# "lod": 0,
+# "size": 9
+# },
+# "type": "buffer"
+# },
+# {
+# "name": "warp_dilation",
+# "node_position": {
+# "x": -404.125,
+# "y": -172.25
+# },
+# "parameters": {
+# "a": 0,
+# "d": 0.5,
+# "mode": 0,
+# "s": 9
+# },
+# "type": "warp_dilation_nobuf"
+# },
+# {
+# "name": "gen_inputs",
+# "node_position": {
+# "x": -1127.189453,
+# "y": -144.691238
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "name": "port1",
+# "type": "f"
+# },
+# {
+# "group_size": 0,
+# "name": "port0",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_outputs",
+# "node_position": {
+# "x": -70.923584,
+# "y": -122.691238
+# },
+# "parameters": {
+#
+# },
+# "ports": [
+# {
+# "group_size": 0,
+# "name": "port0",
+# "type": "f"
+# }
+# ],
+# "type": "ios"
+# },
+# {
+# "name": "gen_parameters",
+# "node_position": {
+# "x": -463.856934,
+# "y": -398.757477
+# },
+# "parameters": {
+# "a": 0,
+# "d": 0.5,
+# "mode": 0,
+# "s": 9
+# },
+# "type": "remote",
+# "widgets": [
+# {
+# "label": "Mode",
+# "linked_widgets": [
+# {
+# "node": "warp_dilation",
+# "widget": "mode"
+# }
+# ],
+# "name": "mode",
+# "type": "linked_control"
+# },
+# {
+# "label": "Resolution",
+# "linked_widgets": [
+# {
+# "node": "warp_dilation",
+# "widget": "s"
+# },
+# {
+# "node": "buffer_7",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_6",
+# "widget": "size"
+# },
+# {
+# "node": "buffer_5",
+# "widget": "size"
+# }
+# ],
+# "name": "s",
+# "type": "linked_control"
+# },
+# {
+# "label": "Distance",
+# "linked_widgets": [
+# {
+# "node": "warp_dilation",
+# "widget": "d"
+# }
+# ],
+# "name": "d",
+# "type": "linked_control"
+# },
+# {
+# "label": "Attenuation",
+# "linked_widgets": [
+# {
+# "node": "warp_dilation",
+# "widget": "a"
+# }
+# ],
+# "name": "a",
+# "type": "linked_control"
+# }
+# ]
+# }
+# ],
+# "parameters": {
+# "a": 0,
+# "d": 0.5,
+# "mode": 0,
+# "s": 9
+# },
+# "shortdesc": "",
+# "type": "graph"
+#}
+
+#----------------------
+#warp_dilation_nobuf.mmg
+
+#{
+# "name": "warp_dilation",
+# "node_position": {
+# "x": 0,
+# "y": 0
+# },
+# "parameters": {
+# "a": 0,
+# "d": 0.5,
+# "mode": 0,
+# "s": 9
+# },
+# "shader_model": {
+# "code": "",
+# "global": "",
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The input image",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# },
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The height map whose contours or slopes are followed",
+# "name": "hm",
+# "shortdesc": "Height map",
+# "type": "f"
+# }
+# ],
+# "instance": "vec2 $(name)_slope(vec2 uv, float epsilon) {\n\tfloat dx = $hm(fract(uv+vec2(epsilon, 0.0)))-$hm(fract(uv-vec2(epsilon, 0.0)));\n\tfloat dy = $hm(fract(uv+vec2(0.0, epsilon)))-$hm(fract(uv-vec2(0.0, epsilon)));\n\treturn vec2($mode);\n}\n\nfloat $(name)_dilate(vec2 uv, vec2 slope) {\n\tfloat e = 1.0/$s;\n\tfloat v = 0.0;\n\tfor (float x = 0.0; x <= $d; x += e) {\n\t\tv = max(v, $in(fract(uv))*(1.0-x/$d*$a));\n\t\tuv += e*normalize($(name)_slope(uv, 0.0001));\n\t}\n\treturn v;\n}",
+# "longdesc": "Dilates its input following the contours or slope of an input heightmap",
+# "name": "Warp Dilation",
+# "outputs": [
+# {
+# "f": "$(name)_dilate($uv, normalize($(name)_slope($uv, 0.001)))",
+# "longdesc": "The dilated image",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "default": 0,
+# "label": "Mode",
+# "longdesc": "The dilate mode (clockwise contour, counter clockwise contour or slope)",
+# "name": "mode",
+# "shortdesc": "Mode",
+# "type": "enum",
+# "values": [
+# {
+# "name": "Contour (cw)",
+# "value": "-dy,dx"
+# },
+# {
+# "name": "Contour (ccw)",
+# "value": "dy, -dx"
+# },
+# {
+# "name": "Slope",
+# "value": "dx,dy"
+# }
+# ]
+# },
+# {
+# "default": 9,
+# "first": 6,
+# "label": "Resolution",
+# "last": 12,
+# "longdesc": "The resolution at which the contours or slopes are followed (higher values will be more precise but rendering time will be higher)",
+# "name": "s",
+# "shortdesc": "Resolution",
+# "type": "size"
+# },
+# {
+# "control": "None",
+# "default": 0.1,
+# "label": "Distance",
+# "longdesc": "The distance along which the contours or slopes are followed",
+# "max": 0.5,
+# "min": 0,
+# "name": "d",
+# "shortdesc": "Distance",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Attenuation",
+# "longdesc": "The attenuation applied along the path",
+# "max": 1,
+# "min": 0,
+# "name": "a",
+# "shortdesc": "Attenuation",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+# "shortdesc": "Warp Dilation"
+# },
+# "type": "shader"
+#}
+
+#----------------------
+#repeat.mmg
+#Translates, rotates and scales its input
+
+# "inputs": [
+# {
+# "default": "vec4($uv, 0.0, 1.0)",
+# "label": "",
+# "longdesc": "The input image to be transformed",
+# "name": "i",
+# "shortdesc": "Input",
+# "type": "rgba"
+# }
+# ],
+# "outputs": [
+# {
+# "longdesc": "Shows the transformed image",
+# "rgba": "$i(fract($uv))",
+# "shortdesc": "Output",
+# "type": "rgba"
+# }
+# ],
+
+#----------------------
+#remap.mmg
+#The remapped image map
+
+# "code": "float $(name_uv)_x = $in($uv)*($max-$min);",
+# "inputs": [
+# {
+# "default": "0.0",
+# "label": "",
+# "longdesc": "The greyscale input map",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "outputs": [
+# {
+# "f": "$min+$(name_uv)_x-mod($(name_uv)_x, max($step, 0.00000001))",
+# "longdesc": "The remapped image map",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Min",
+# "longdesc": "The value generated for black areas of the input",
+# "max": 10,
+# "min": -10,
+# "name": "min",
+# "shortdesc": "Min",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Max",
+# "longdesc": "The value generated for white areas of the input",
+# "max": 10,
+# "min": -10,
+# "name": "max",
+# "shortdesc": "Max",
+# "step": 0.01,
+# "type": "float"
+# },
+# {
+# "control": "None",
+# "default": 0,
+# "label": "Step",
+# "longdesc": "The step between generated values",
+# "max": 1,
+# "min": 0,
+# "name": "step",
+# "shortdesc": "Step",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#----------------------
+#height_to_angle.mmg
+#Generates an angle map to be used by Advances Tiler nodes from a heightmap
+
+# "inputs": [
+# {
+# "default": "0.0",
+# "function": true,
+# "label": "",
+# "longdesc": "The input heightmap",
+# "name": "in",
+# "shortdesc": "Input",
+# "type": "f"
+# }
+# ],
+# "instance": "float $(name)_fct(vec2 uv, float epsilon) {\n\tvec3 e = vec3(epsilon, -epsilon, 0);\n\tvec2 rv = vec2(1.0, -1.0)*$in(uv+e.xy);\n\trv += vec2(-1.0, 1.0)*$in(uv-e.xy);\n\trv += vec2(1.0, 1.0)*$in(uv+e.xx);\n\trv += vec2(-1.0, -1.0)*$in(uv-e.xx);\n\trv += vec2(2.0, 0.0)*$in(uv+e.xz);\n\trv += vec2(-2.0, 0.0)*$in(uv-e.xz);\n\trv += vec2(0.0, 2.0)*$in(uv+e.zx);\n\trv += vec2(0.0, -2.0)*$in(uv-e.zx);\n\treturn atan(rv.y, rv.x)/3.141592;\n}",
+# "outputs": [
+# {
+# "f": "$(name)_fct($uv, 0.0001)+$angle/180.0",
+# "longdesc": "The generated angle map. Values are between -1 and 1 and the corresponding Advanced Tiler parameter (Rotate) must be set to 180.",
+# "shortdesc": "Output",
+# "type": "f"
+# }
+# ],
+# "parameters": [
+# {
+# "control": "None",
+# "default": 0,
+# "label": "",
+# "longdesc": "The offset angle applied to the generated map",
+# "max": 180,
+# "min": -180,
+# "name": "angle",
+# "shortdesc": "Angle",
+# "step": 0.01,
+# "type": "float"
+# }
+# ],
+
+#vec2 transform(vec2 uv, vec2 translate, float rotate, vec2 scale, bool repeat) {\n \t
+# vec2 rv;\n\t
+# uv -= translate;\n\t
+# uv -= vec2(0.5);\n\t
+# rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\t
+# rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\t
+# rv /= scale;\n\t
+# rv += vec2(0.5);\n
+#
+# if (repeat) {\n\t\t
+# return fract(rv);\n\t
+# } else {\n\t\t
+# return clamp(rv, vec2(0.0), vec2(1.0));\n\t
+# }\t\n
+#}
+
+static func transform(uv : Vector2, translate : Vector2, rotate : float, scale : Vector2, repeat : bool) -> Vector2:
+ var rv : Vector2 = Vector2()
+ uv -= translate
+ uv -= Vector2(0.5, 0.5)
+ rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y
+ rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y
+ rv /= scale
+ rv += Vector2(0.5, 0.5)
+
+ if (repeat):
+ return Commons.fractv2(rv)
+ else:
+ return Commons.clampv2(rv, Vector2(0, 0), Vector2(1, 1))
+
+#vec2 transform2_clamp(vec2 uv) {\n\t
+# return clamp(uv, vec2(0.0), vec2(1.0));\n
+#}
+
+static func transform2_clamp(uv : Vector2) -> Vector2:
+ return Commons.clampv2(uv, Vector2(0, 0), Vector2(1, 1))
+
+#vec2 transform2(vec2 uv, vec2 translate, float rotate, vec2 scale) {\n \t
+# vec2 rv;\n\t
+# uv -= translate;\n\t
+# uv -= vec2(0.5);\n\t
+# rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\t
+# rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\t
+# rv /= scale;\n\t
+# rv += vec2(0.5);\n\t
+# return rv;\t\n
+#}
+
+static func transform2(uv : Vector2, translate : Vector2, rotate : float, scale : Vector2) -> Vector2:
+ var rv : Vector2 = Vector2()
+ uv -= translate
+ uv -= Vector2(0.5, 0.5)
+ rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y
+ rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y
+ rv /= scale
+ rv += Vector2(0.5, 0.5)
+ return rv
+
+#vec2 rotate(vec2 uv, vec2 center, float rotate) {\n \t
+# vec2 rv;\n\t
+# uv -= center;\n\t
+# rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\t
+# rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\t
+# rv += center;\n
+# return rv;\t\n
+#}
+
+static func rotate(uv : Vector2, center : Vector2, rotate : float) -> Vector2:
+ var rv : Vector2 = Vector2()
+ uv -= center
+ rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y
+ rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y
+ rv += center
+ return rv
+
+#vec2 scale(vec2 uv, vec2 center, vec2 scale) {\n\t
+# uv -= center;\n\t
+# uv /= scale;\n\t
+# uv += center;\n
+# return uv;\n
+#}
+
+static func scale(uv : Vector2, center : Vector2, scale : Vector2) -> Vector2:
+ uv -= center
+ uv /= scale
+ uv += center
+ return uv
+
+#vec2 uvmirror_h(vec2 uv, float offset) {\n\t
+# return vec2(max(0, abs(uv.x-0.5)-0.5*offset)+0.5, uv.y);
+#}
+
+static func uvmirror_h(uv : Vector2, offset : float) -> Vector2:
+ return Vector2(max(0, abs(uv.x - 0.5) - 0.5 * offset)+0.5, uv.y)
+
+#vec2 uvmirror_v(vec2 uv, float offset) {\n\t
+# return vec2(uv.x, max(0, abs(uv.y-0.5)-0.5*offset)+0.5);\n
+#}
+
+static func uvmirror_v(uv : Vector2, offset : float) -> Vector2:
+ return Vector2(uv.x, max(0, abs(uv.y - 0.5) - 0.5 * offset) + 0.5)
+
+#vec2 kal_rotate(vec2 uv, float count, float offset) {\n\t
+# float pi = 3.14159265359;\n\t
+# offset *= pi/180.0;\n\t
+# offset += pi*(1.0/count+0.5);\n\t
+# uv -= vec2(0.5);\n\t
+#
+# float l = length(uv);\n\t
+# float a = mod(atan(uv.y, uv.x)+offset, 2.0*pi/count)-offset;\n\t
+#
+# return vec2(0.5)+l*vec2(cos(a), sin(a));\n
+#}
+
+static func kal_rotate(uv : Vector2, count : float, offset : float) -> Vector2:
+ var pi : float = 3.14159265359
+ offset *= pi / 180.0
+ offset += pi * (1.0/ count + 0.5)
+ uv -= Vector2(0.5, 0.5)
+
+ var l : float = uv.length()
+ var a : float = Commons.modf(atan2(uv.y, uv.x) + offset, 2.0 * pi / count) - offset
+
+ return Vector2(0.5, 0.5) + l * Vector2(cos(a), sin(a))
+
+#vec2 get_from_tileset(float count, float seed, vec2 uv) {\n\t
+# return clamp((uv+floor(rand2(vec2(seed))*count))/count, vec2(0.0), vec2(1.0));\n
+#}
+
+static func get_from_tileset(count : float, pseed : float, uv : Vector2) -> Vector2:
+ return Commons.clampv2((uv + Commons.floorv2(Commons.rand2(Vector2(pseed, pseed))*count))/count, Vector2(0, 0), Vector2(1, 1))
+
+#vec2 custom_uv_transform(vec2 uv, vec2 cst_scale, float rnd_rotate, float rnd_scale, vec2 seed) {\n\t
+# seed = rand2(seed);\n\t
+# uv -= vec2(0.5);\n\t
+# float angle = (seed.x * 2.0 - 1.0) * rnd_rotate;\n\t
+# float ca = cos(angle);\n\t
+# float sa = sin(angle);\n\t
+# uv = vec2(ca*uv.x+sa*uv.y, -sa*uv.x+ca*uv.y);\n\t
+# uv *= (seed.y-0.5)*2.0*rnd_scale+1.0;\n\t
+# uv /= cst_scale;\n\t
+# uv += vec2(0.5);\n\t
+#
+# return uv;\n
+#}
+
+static func custom_uv_transform(uv : Vector2, cst_scale : Vector2, rnd_rotate : float, rnd_scale : float, pseed : Vector2) -> Vector2:
+ pseed = Commons.rand2(pseed)
+ uv -= Vector2(0.5, 0.5)
+ var angle : float = (pseed.x * 2.0 - 1.0) * rnd_rotate
+ var ca : float = cos(angle)
+ var sa : float = sin(angle)
+ uv = Vector2(ca * uv.x + sa * uv.y, -sa * uv.x + ca * uv.y)
+ uv *= (pseed.y-0.5)*2.0*rnd_scale+1.0
+ uv /= cst_scale
+ uv += Vector2(0.5, 0.5)
+
+ return uv
diff --git a/game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd b/game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd
new file mode 100644
index 0000000..664ff95
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd
@@ -0,0 +1,75 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(float) var hue : float = 0
+export(float) var saturation : float = 1
+export(float) var value : float = 1
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_hue", "set_hue", "Hue", 0.01)
+ mm_graph_node.add_slot_float("get_saturation", "set_saturation", "Saturation", 0.01)
+ mm_graph_node.add_slot_float("get_value", "set_value", "Value", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+
+ return Filter.adjust_hsv(c, hue, saturation, value)
+
+#hue
+func get_hue() -> float:
+ return hue
+
+func set_hue(val : float) -> void:
+ hue = val
+
+ set_dirty(true)
+
+#saturation
+func get_saturation() -> float:
+ return saturation
+
+func set_saturation(val : float) -> void:
+ saturation = val
+
+ set_dirty(true)
+
+#value
+func get_value() -> float:
+ return value
+
+func set_value(val : float) -> void:
+ value = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/blend.gd b/game/addons/mat_maker_gd/nodes/filter/blend.gd
new file mode 100644
index 0000000..ffeed8a
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/blend.gd
@@ -0,0 +1,125 @@
+tool
+extends MMNode
+
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+enum BlendType {
+ NORMAL = 0,
+ DISSOLVE,
+ MULTIPLY,
+ SCREEN,
+ OVERLAY,
+ HARD_LIGHT,
+ SOFT_LIGHT,
+ BURN,
+ DODGE,
+ LIGHTEN,
+ DARKEN,
+ DIFFRENCE
+}
+
+export(Resource) var image : Resource
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(int, "Normal,Dissolve,Multiply,Screen,Overlay,Hard Light,Soft Light,Burn,Dodge,Lighten,Darken,Difference") var blend_type : int = 0
+export(Resource) var opacity : Resource
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input1.set_default_value(Color(1, 1, 1, 1))
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input1.slot_name = ">>> Input1 "
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input2.set_default_value(Color(1, 1, 1, 1))
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input2.slot_name = ">>> Input2 "
+
+ if !opacity:
+ opacity = MMNodeUniversalProperty.new()
+ opacity.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ opacity.set_default_value(0.5)
+ opacity.value_range = Vector2(0, 1)
+ opacity.value_step = 0.01
+
+ opacity.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ opacity.slot_name = "opacity"
+
+ register_input_property(input1)
+ register_input_property(input2)
+
+ register_output_property(image)
+ register_input_property(opacity)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_blend_type", "set_blend_type", "blend_type", [ "Normal", "Dissolve", "Multiply", "Screen", "Overlay", "Hard Light", "Soft Light", "Burn", "Dodge", "Lighten", "Darken", "Difference" ])
+
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_float_universal(opacity)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var b : Vector3 = Vector3()
+
+ #vec4 $(name_uv)_s1 = $s1($uv);
+ var s1 : Color = input1.get_value(uv)
+ #vec4 $(name_uv)_s2 = $s2($uv);
+ var s2 : Color = input2.get_value(uv)
+ #float $(name_uv)_a = $amount*$a($uv);
+ var a : float = opacity.get_value(uv)
+
+ #vec4(blend_$blend_type($uv, $(name_uv)_s1.rgb, $(name_uv)_s2.rgb, $(name_uv)_a*$(name_uv)_s1.a), min(1.0, $(name_uv)_s2.a+$(name_uv)_a*$(name_uv)_s1.a))
+
+ #"Normal,Dissolve,Multiply,Screen,Overlay,Hard Light,Soft Light,Burn,Dodge,Lighten,Darken,Difference"
+ if blend_type == BlendType.NORMAL:
+ b = Filter.blend_normal(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.DISSOLVE:
+ b = Filter.blend_dissolve(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.MULTIPLY:
+ b = Filter.blend_multiply(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.SCREEN:
+ b = Filter.blend_screen(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.OVERLAY:
+ b = Filter.blend_overlay(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.HARD_LIGHT:
+ b = Filter.blend_hard_light(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.SOFT_LIGHT:
+ b = Filter.blend_soft_light(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.BURN:
+ b = Filter.blend_burn(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.DODGE:
+ b = Filter.blend_dodge(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.LIGHTEN:
+ b = Filter.blend_lighten(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.DARKEN:
+ b = Filter.blend_darken(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+ elif blend_type == BlendType.DIFFRENCE:
+ b = Filter.blend_difference(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a)
+
+ return Color(b.x, b.y, b.z, min(1, s2.a + a * s1.a))
+
+func get_blend_type() -> int:
+ return blend_type
+
+func set_blend_type(val : int) -> void:
+ blend_type = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd b/game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd
new file mode 100644
index 0000000..afcfcb2
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd
@@ -0,0 +1,220 @@
+tool
+extends MMNode
+
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Resource) var sigma : Resource
+export(int, "Both,X,Y") var direction : int = 0
+
+var size : int = 0
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color())
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !sigma:
+ sigma = MMNodeUniversalProperty.new()
+ sigma.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ sigma.set_default_value(50)
+
+ sigma.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ sigma.slot_name = "Sigma"
+
+ register_input_property(input)
+ register_output_property(image)
+ register_input_property(sigma)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_int_universal(sigma)
+
+ mm_graph_node.add_slot_enum("get_direction", "set_direction", "Direction", [ "Both", "X", "Y" ])
+
+
+func _render(material) -> void:
+ size = max(material.image_size.x, material.image_size.y)
+
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func render_image(material) -> Image:
+ var img : Image = Image.new()
+ img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ img.lock()
+
+ var w : float = img.get_width()
+ var h : float = img.get_width()
+
+ var pseed : float = randf() + randi()
+
+ if direction == 0:
+ for x in range(img.get_width()):
+ for y in range(img.get_height()):
+ var v : Vector2 = Vector2(x / w, y / h)
+ var col : Color = get_value_x(v, pseed)
+ img.set_pixel(x, y, col)
+
+ img.unlock()
+ image.set_value(img)
+
+ var image2 : Image = Image.new()
+ image2.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ image2.lock()
+
+ for x in range(img.get_width()):
+ for y in range(img.get_height()):
+ var v : Vector2 = Vector2(x / w, y / h)
+ var col : Color = get_value_y_img(v, pseed)
+ image2.set_pixel(x, y, col)
+
+ image2.unlock()
+
+ return image2
+
+ if direction == 1:
+ for x in range(img.get_width()):
+ for y in range(img.get_height()):
+ var v : Vector2 = Vector2(x / w, y / h)
+ var col : Color = get_value_x(v, pseed)
+ img.set_pixel(x, y, col)
+
+ if direction == 2:
+ for x in range(img.get_width()):
+ for y in range(img.get_height()):
+ var v : Vector2 = Vector2(x / w, y / h)
+ var col : Color = get_value_y(v, pseed)
+ img.set_pixel(x, y, col)
+
+ img.unlock()
+
+ return img
+
+func get_value_x(uv : Vector2, pseed : int) -> Color:
+ var sig_def : float = sigma.get_default_value(uv)
+ var sig : float = sigma.get_value(uv)
+
+ return gaussian_blur_x(uv, size, sig_def, sig)
+
+func get_value_y(uv : Vector2, pseed : int) -> Color:
+ var sig_def : float = sigma.get_default_value(uv)
+ var sig : float = sigma.get_value(uv)
+
+ return gaussian_blur_y(uv, size, sig_def, sig)
+
+func get_value_y_img(uv : Vector2, pseed : int) -> Color:
+ var sig_def : float = sigma.get_default_value(uv)
+ var sig : float = sigma.get_value(uv)
+
+ return gaussian_blur_y_img(uv, size, sig_def, sig)
+
+func get_direction() -> int:
+ return direction
+
+func set_direction(val : int) -> void:
+ direction = val
+
+ set_dirty(true)
+
+#----------------------
+#gaussian_blur_x.mmg
+
+#vec4 $(name)_fct(vec2 uv) {
+# float e = 1.0 / $size;
+# vec4 rv = vec4(0.0);
+# float sum = 0.0;
+# float sigma = max(0.000001, $sigma * $amount(uv));
+#
+# for (float i = -50.0; i <= 50.0; i += 1.0) {
+# float coef = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma);
+# rv += $in(uv+vec2(i*e, 0.0))*coef;
+# sum += coef;
+# }
+#
+# return rv/sum;
+#}
+
+func gaussian_blur_x(uv : Vector2, psize : float, psigma : float, pamount : float) -> Color:
+ var e : float = 1.0 / psize
+ var rv : Color = Color()
+ var sum : float = 0.0
+ var sigma : float = max(0.000001, psigma * pamount)#pamount(uv))
+
+ var i : float = -50
+
+ while i <= 50: #for (float i = -50.0; i <= 50.0; i += 1.0) {
+ var coef : float = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma)
+ rv += input.get_value(uv + Vector2(i*e, 0.0)) * coef
+ sum += coef
+
+ i += 1
+
+ return rv / sum;
+
+
+#----------------------
+#gaussian_blur_y.mmg
+
+#vec4 $(name)_fct(vec2 uv) {
+# float e = 1.0/$size;
+# vec4 rv = vec4(0.0);
+# float sum = 0.0;
+# float sigma = max(0.000001, $sigma*$amount(uv));
+# for (float i = -50.0; i <= 50.0; i += 1.0) {
+# float coef = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718*sigma*sigma);
+# rv += $in(uv+vec2(0.0, i*e))*coef;
+# sum += coef;
+# }
+#
+# return rv/sum;
+#}
+
+func gaussian_blur_y(uv : Vector2, psize : float, psigma : float, pamount : float) -> Color:
+ var e : float = 1.0 / psize
+ var rv : Color = Color()
+ var sum : float = 0.0
+ var sigma : float = max(0.000001, psigma * pamount)#pamount(uv))
+
+ var i : float = -50
+
+ while i <= 50: #for (float i = -50.0; i <= 50.0; i += 1.0) {
+ var coef : float = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma)
+ rv += input.get_value(uv + Vector2(0.0, i * e)) * coef
+ sum += coef
+
+ i += 1
+
+ return rv / sum;
+
+
+func gaussian_blur_y_img(uv : Vector2, psize : float, psigma : float, pamount : float) -> Color:
+ var e : float = 1.0 / psize
+ var rv : Color = Color()
+ var sum : float = 0.0
+ var sigma : float = max(0.000001, psigma * pamount)#pamount(uv))
+
+ var i : float = -50
+
+ while i <= 50: #for (float i = -50.0; i <= 50.0; i += 1.0) {
+ var coef : float = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma)
+ rv += image.get_value(uv + Vector2(0.0, i * e)) * coef
+ sum += coef
+
+ i += 1
+
+ return rv / sum;
diff --git a/game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd b/game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd
new file mode 100644
index 0000000..b22db91
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd
@@ -0,0 +1,64 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(float) var brightness : float = 0
+export(float) var contrast : float = 1
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_brightness", "set_brightness", "Brightness", 0.01)
+ mm_graph_node.add_slot_float("get_contrast", "set_contrast", "Contrast", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+
+ return Filter.brightness_contrast(c, brightness, contrast)
+
+#brightness
+func get_brightness() -> float:
+ return brightness
+
+func set_brightness(val : float) -> void:
+ brightness = val
+
+ set_dirty(true)
+
+#contrast
+func get_contrast() -> float:
+ return contrast
+
+func set_contrast(val : float) -> void:
+ contrast = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/colorize.gd b/game/addons/mat_maker_gd/nodes/filter/colorize.gd
new file mode 100644
index 0000000..52fdb81
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/colorize.gd
@@ -0,0 +1,55 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd"
+
+var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input.set_default_value(1)
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_gradient()
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = input.get_value(uv)
+
+ return get_gradient_color(f)
+# return Color(0.5, 0.5, 0.5, 1)
+
+func get_gradient_color(x : float) -> Color:
+ if interpolation_type == 0:
+ return Gradients.gradient_type_1(x, points)
+ elif interpolation_type == 1:
+ return Gradients.gradient_type_2(x, points)
+ elif interpolation_type == 2:
+ return Gradients.gradient_type_3(x, points)
+ elif interpolation_type == 3:
+ return Gradients.gradient_type_4(x, points)
+
+ return Color(1, 1, 1, 1)
diff --git a/game/addons/mat_maker_gd/nodes/filter/combine.gd b/game/addons/mat_maker_gd/nodes/filter/combine.gd
new file mode 100644
index 0000000..326ea37
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/combine.gd
@@ -0,0 +1,78 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input_r : Resource
+export(Resource) var input_g : Resource
+export(Resource) var input_b : Resource
+export(Resource) var input_a : Resource
+
+func _init_properties():
+ if !input_r:
+ input_r = MMNodeUniversalProperty.new()
+ input_r.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input_r.set_default_value(0)
+
+ input_r.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input_r.slot_name = ">>> R "
+
+ if !input_g:
+ input_g = MMNodeUniversalProperty.new()
+ input_g.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input_g.set_default_value(0)
+
+ input_g.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input_g.slot_name = ">>> G "
+
+ if !input_b:
+ input_b = MMNodeUniversalProperty.new()
+ input_b.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input_b.set_default_value(0)
+
+ input_b.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input_b.slot_name = ">>> B "
+
+ if !input_a:
+ input_a = MMNodeUniversalProperty.new()
+ input_a.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input_a.set_default_value(1)
+
+ input_a.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input_a.slot_name = ">>> A "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input_r)
+ register_input_property(input_g)
+ register_input_property(input_b)
+ register_input_property(input_a)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input_r)
+ mm_graph_node.add_slot_label_universal(input_g)
+ mm_graph_node.add_slot_label_universal(input_b)
+ mm_graph_node.add_slot_label_universal(input_a)
+ mm_graph_node.add_slot_texture_universal(image)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var r : float = input_r.get_value(uv)
+ var g : float = input_g.get_value(uv)
+ var b : float = input_b.get_value(uv)
+ var a : float = input_a.get_value(uv)
+
+ return Color(r, g, b, a)
diff --git a/game/addons/mat_maker_gd/nodes/filter/decompose.gd b/game/addons/mat_maker_gd/nodes/filter/decompose.gd
new file mode 100644
index 0000000..5dd5be9
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/decompose.gd
@@ -0,0 +1,104 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var NoiseVoronoi = preload("res://addons/mat_maker_gd/nodes/common/noise_voronoi.gd")
+
+export(Resource) var input : Resource
+export(Resource) var out_r : Resource
+export(Resource) var out_g : Resource
+export(Resource) var out_b : Resource
+export(Resource) var out_a : Resource
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !out_r:
+ out_r = MMNodeUniversalProperty.new()
+ out_r.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_r.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_g:
+ out_g = MMNodeUniversalProperty.new()
+ out_g.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_g.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_b:
+ out_b = MMNodeUniversalProperty.new()
+ out_b.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_b.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_a:
+ out_a = MMNodeUniversalProperty.new()
+ out_a.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_a.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_input_property(input)
+ register_output_property(out_r)
+ register_output_property(out_g)
+ register_output_property(out_b)
+ register_output_property(out_a)
+
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(out_r)
+ mm_graph_node.add_slot_texture_universal(out_g)
+ mm_graph_node.add_slot_texture_universal(out_b)
+ mm_graph_node.add_slot_texture_universal(out_a)
+
+
+func _render(material) -> void:
+ var img_r : Image = Image.new()
+ var img_g : Image = Image.new()
+ var img_b : Image = Image.new()
+ var img_a : Image = Image.new()
+
+ img_r.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ img_g.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ img_b.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ img_a.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ img_r.lock()
+ img_g.lock()
+ img_b.lock()
+ img_a.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ for x in range(material.image_size.x):
+ for y in range(material.image_size.y):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ var c : Color = input.get_value(uv)
+
+ img_r.set_pixel(x, y, Color(c.r, c.r, c.r, 1))
+ img_g.set_pixel(x, y, Color(c.g, c.g, c.g, 1))
+ img_b.set_pixel(x, y, Color(c.b, c.b, c.b, 1))
+ img_a.set_pixel(x, y, Color(c.a, c.a, c.a, c.a))
+
+ img_r.unlock()
+ img_g.unlock()
+ img_b.unlock()
+ img_a.unlock()
+
+ out_r.set_value(img_r)
+ out_g.set_value(img_g)
+ out_b.set_value(img_b)
+ out_a.set_value(img_a)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
diff --git a/game/addons/mat_maker_gd/nodes/filter/emboss.gd b/game/addons/mat_maker_gd/nodes/filter/emboss.gd
new file mode 100644
index 0000000..1269371
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/emboss.gd
@@ -0,0 +1,112 @@
+tool
+extends MMNode
+
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(float) var angle : float = 0
+export(float) var amount : float = 5
+export(float) var width : float = 1
+
+var size : int = 0
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input.set_default_value(1)
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_label_universal(input)
+
+ mm_graph_node.add_slot_float("get_angle", "set_angle", "Angle", 0.1)
+ mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.1)
+ mm_graph_node.add_slot_float("get_width", "set_width", "Width", 1)
+
+
+func _render(material) -> void:
+ size = max(material.image_size.x, material.image_size.y)
+
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = 0
+
+ f = emboss(uv, size, angle, amount, width)
+
+ return Color(f, f, f, 1)
+
+func get_angle() -> float:
+ return angle
+
+func set_angle(val : float) -> void:
+ angle = val
+
+ set_dirty(true)
+
+func get_amount() -> float:
+ return amount
+
+func set_amount(val : float) -> void:
+ amount = val
+
+ set_dirty(true)
+
+func get_width() -> float:
+ return width
+
+func set_width(val : float) -> void:
+ width = val
+
+ set_dirty(true)
+
+#float $(name)_fct(vec2 uv) {
+# float pixels = max(1.0, $width);
+# float e = 1.0/$size;
+# float rv = 0.0;
+#
+# for (float dx = -pixels; dx <= pixels; dx += 1.0) {
+# for (float dy = -pixels; dy <= pixels; dy += 1.0) {
+# if (abs(dx) > 0.5 || abs(dy) > 0.5) {
+# rv += $in(uv+e*vec2(dx, dy))*cos(atan(dy, dx)-$angle*3.14159265359/180.0)/length(vec2(dx, dy));
+# }
+# }
+# }
+#
+# return $amount*rv/pixels+0.5;
+#}
+
+func emboss(uv : Vector2, psize : float, pangle : float, pamount : float, pwidth : float) -> float:
+ var pixels : float = max(1.0, pwidth)
+ var e : float = 1.0 / psize
+ var rv : float = 0.0
+
+ var dx : float = -pixels
+ var dy : float = -pixels
+
+ while dx <= pixels: #for (float dx = -pixels; dx <= pixels; dx += 1.0) {
+ while dy <= pixels: #for (float dy = -pixels; dy <= pixels; dy += 1.0) {
+ if (abs(dx) > 0.5 || abs(dy) > 0.5):
+ rv += input.get_value(uv + e * Vector2(dx, dy)) * cos(atan2(dy, dx) - pangle * 3.14159265359 / 180.0) / Vector2(dx, dy).length()
+
+ dx += 1
+ dy += 1
+
+ return pamount * rv / pixels + 0.5
+
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_channel.gd b/game/addons/mat_maker_gd/nodes/filter/fill_channel.gd
new file mode 100644
index 0000000..53a5169
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_channel.gd
@@ -0,0 +1,72 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Resource) var value : Resource
+export(int, "R,G,B,A") var channel : int = 3
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color())
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !value:
+ value = MMNodeUniversalProperty.new()
+ value.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ value.set_default_value(1)
+
+ value.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ value.value_step = 0.01
+ value.value_range = Vector2(0, 1)
+
+ register_input_property(input)
+ register_output_property(image)
+ register_input_property(value)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float_universal(value)
+ mm_graph_node.add_slot_enum("get_channel", "set_channel", "Channel", [ "R", "G", "B", "A" ])
+
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var col : Color = input.get_value(uv)
+
+ if channel == 0:
+ col.r = value.get_value(uv)
+ if channel == 1:
+ col.g = value.get_value(uv)
+ if channel == 2:
+ col.b = value.get_value(uv)
+ if channel == 3:
+ col.a = value.get_value(uv)
+
+ return col
+
+func get_channel() -> int:
+ return channel
+
+func set_channel(val : int) -> void:
+ channel = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd
new file mode 100644
index 0000000..3f660f2
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd
@@ -0,0 +1,70 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Resource) var color_map : Resource
+export(Color) var edge_color : Color = Color(1, 1, 1, 1)
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !color_map:
+ color_map = MMNodeUniversalProperty.new()
+ color_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ color_map.set_default_value(Color(1, 1, 1, 1))
+
+ color_map.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ color_map.slot_name = ">>> Color Map "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_input_property(color_map)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(color_map)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_color("get_edge_color", "set_edge_color")
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #vec4 $(name_uv)_bb = $in($uv);
+ var c : Color = input.get_value(uv)
+
+ #mix($edgecolor, $map(fract($(name_uv)_bb.xy+0.5*$(name_uv)_bb.zw)), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))
+
+ var rc : Color = color_map.get_value(Commons.fractv2(Vector2(c.r, c.g) + 0.5 * Vector2(c.b, c.a)))
+ var s : float = Commons.step(0.0000001, Vector2(c.b, c.a).dot(Vector2(1, 1)))
+
+ return lerp(edge_color, rc, s)
+
+#edge_color
+func get_edge_color() -> Color:
+ return edge_color
+
+func set_edge_color(val : Color) -> void:
+ edge_color = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd
new file mode 100644
index 0000000..69eded4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd
@@ -0,0 +1,68 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "X,Y,Radial") var axis : int = 2
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Radial" ])
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+ #vec2 $(name_uv)_c = fract($in($uv).xy+0.5*$in($uv).zw);
+ var cnv : Vector2 = Commons.fractv2(Vector2(c.r, c.g) + 0.5 * Vector2(c.b, c.a))
+
+ #X, $(name_uv)_c.x
+ #Y, $(name_uv)_c.y
+ #Radial, length($(name_uv)_c-vec2(0.5))
+
+ if axis == 0:
+ return Color(cnv.x, cnv.x, cnv.x, 1)
+ elif axis == 1:
+ return Color(cnv.y, cnv.y, cnv.y, 1)
+ elif axis == 2:
+ var f : float = (cnv - Vector2(0.5, 0.5)).length()
+
+ return Color(f, f, f, 1)
+
+ return Color(0, 0, 0, 1)
+
+#axis
+func get_axis() -> int:
+ return axis
+
+func set_axis(val : int) -> void:
+ axis = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd
new file mode 100644
index 0000000..3360a29
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd
@@ -0,0 +1,61 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Color) var edge_color : Color = Color(1, 1, 1, 1)
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_color("get_edge_color", "set_edge_color")
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #vec4 $(name_uv)_bb = $in($uv);
+ var c : Color = input.get_value(uv)
+
+ #mix($edgecolor.rgb, rand3(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))
+
+ var r1 : float = Commons.rand(Vector2(c.r, c.g))
+ var r2 : float = Commons.rand(Vector2(c.b, c.a))
+ var s : float = Commons.step(0.0000001, Vector2(c.b, c.a).dot(Vector2(1, 1)))
+
+ var f : Vector3 = lerp(Vector3(edge_color.r, edge_color.g, edge_color.b), Commons.rand3(Vector2(1.0 / float(pseed), Commons.rand(Vector2(r1, r2)))), s)
+ return Color(f.x, f.y, f.z, 1)
+
+#edge_color
+func get_edge_color() -> Color:
+ return edge_color
+
+func set_edge_color(val : Color) -> void:
+ edge_color = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd
new file mode 100644
index 0000000..53e7c4d
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd
@@ -0,0 +1,60 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(float) var edge_color : float = 1
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_edge_color", "set_edge_color", "Edge color", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #vec4 $(name_uv)_bb = $in($uv);
+ var c : Color = input.get_value(uv)
+
+ #mix($edgecolor, rand(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))
+ var r1 : float = Commons.rand(Vector2(c.r, c.g))
+ var r2 : float = Commons.rand(Vector2(c.b, c.a))
+ var s : float = Commons.step(0.0000001, Vector2(c.b, c.a).dot(Vector2(1, 1)))
+
+ var f : float = lerp(edge_color, Commons.rand(Vector2(1.0 / float(pseed), Commons.rand(Vector2(r1, r2)))), s)
+ return Color(f, f, f, 1)
+
+#edge_color
+func get_edge_color() -> float:
+ return edge_color
+
+func set_edge_color(val : float) -> void:
+ edge_color = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd
new file mode 100644
index 0000000..edfe95d
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd
@@ -0,0 +1,70 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "Area,Width,Height,Max(W,H)") var formula : int = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_formula", "set_formula", "Formula", [ "Area", "Width", "Height", "Max(W,H)" ])
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #vec4 $(name_uv)_bb = $in($uv);
+ var c : Color = input.get_value(uv)
+
+ var f : float = 0
+
+ #"Area" sqrt($(name_uv)_bb.z*$(name_uv)_bb.w)
+ #"Width" $(name_uv)_bb.z
+ #"Height" $(name_uv)_bb.w
+ #"max(W, H)" max($(name_uv)_bb.z, $(name_uv)_bb.w)
+
+ if formula == 0:
+ f = sqrt(c.b * c.a)
+ elif formula == 1:
+ f = c.b
+ elif formula == 2:
+ f = c.a
+ elif formula == 3:
+ f = max(c.b, c.a)
+
+ return Color(f, f, f, 1)
+
+#formula
+func get_formula() -> int:
+ return formula
+
+func set_formula(val : int) -> void:
+ formula = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd
new file mode 100644
index 0000000..63db519
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd
@@ -0,0 +1,62 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "Stretch,Square") var mode : int = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_mode", "set_mode", "Mode", [ "Stretch", "Square" ])
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #vec4 $(name_uv)_bb = $in($uv);
+ var c : Color = input.get_value(uv)
+
+ #fill_to_uv_$mode($uv, $(name_uv)_bb, float($seed))
+ var r : Vector3 = Vector3()
+
+ if mode == 0:
+ r = Fills.fill_to_uv_stretch(uv, c, float(pseed))
+ elif mode == 1:
+ r = Fills.fill_to_uv_square(uv, c, float(pseed))
+
+ return Color(r.x, r.y, r.z, 1)
+
+#mode
+func get_mode() -> int:
+ return mode
+
+func set_mode(val : int) -> void:
+ mode = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/greyscale.gd b/game/addons/mat_maker_gd/nodes/filter/greyscale.gd
new file mode 100644
index 0000000..cc95b1e
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/greyscale.gd
@@ -0,0 +1,66 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "Lightness,Average,Luminosity,Min,Max") var type : int = 2
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_type", "set_type", "Type", [ "Lightness", "Average", "Luminosity", "Min", "Max" ])
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+
+ var f : float = 0
+
+ if type == 0:
+ f = Filter.grayscale_lightness(Vector3(c.r, c.g, c.b))
+ elif type == 1:
+ f = Filter.grayscale_average(Vector3(c.r, c.g, c.b))
+ elif type == 2:
+ f = Filter.grayscale_luminosity(Vector3(c.r, c.g, c.b))
+ elif type == 3:
+ f = Filter.grayscale_min(Vector3(c.r, c.g, c.b))
+ elif type == 4:
+ f = Filter.grayscale_max(Vector3(c.r, c.g, c.b))
+
+ return Color(f, f, f, c.a)
+
+#type
+func get_type() -> int:
+ return type
+
+func set_type(val : int) -> void:
+ type = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/invert.gd b/game/addons/mat_maker_gd/nodes/filter/invert.gd
new file mode 100644
index 0000000..994c7b7
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/invert.gd
@@ -0,0 +1,42 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+
+ return Filter.invert(c)
diff --git a/game/addons/mat_maker_gd/nodes/filter/make_tileable.gd b/game/addons/mat_maker_gd/nodes/filter/make_tileable.gd
new file mode 100644
index 0000000..1abeff8
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/make_tileable.gd
@@ -0,0 +1,78 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(float) var width : float = 0.1
+
+var size : int = 0
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color())
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_label_universal(input)
+
+ mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01)
+
+
+func _render(material) -> void:
+ size = max(material.image_size.x, material.image_size.y)
+
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #make_tileable_$(name)($uv, 0.5*$w)
+ return make_tileable(uv, 0.5 * width)
+
+func get_width() -> float:
+ return width
+
+func set_width(val : float) -> void:
+ width = val
+
+ set_dirty(true)
+
+
+#----------------------
+#make_tileable.mmg
+
+#vec4 make_tileable_$(name)(vec2 uv, float w) {
+# vec4 a = $in(uv);
+# vec4 b = $in(fract(uv+vec2(0.5)));
+# float coef_ab = sin(1.57079632679*clamp((length(uv-vec2(0.5))-0.5+w)/w, 0.0, 1.0));
+# vec4 c = $in(fract(uv+vec2(0.25)));
+# float coef_abc = sin(1.57079632679*clamp((min(min(length(uv-vec2(0.0, 0.5)), length(uv-vec2(0.5, 0.0))), min(length(uv-vec2(1.0, 0.5)), length(uv-vec2(0.5, 1.0))))-w)/w, 0.0, 1.0));
+# return mix(c, mix(a, b, coef_ab), coef_abc);
+#}
+
+func make_tileable(uv : Vector2, w : float) -> Color:
+ var a: Color = input.get_value(uv);
+ var b : Color = input.get_value(Commons.fractv2(uv + Vector2(0.5, 0.5)));
+ var coef_ab : float = sin(1.57079632679 * clamp(((uv - Vector2(0.5, 0.5)).length() - 0.5 + w) / w, 0.0, 1.0));
+ var c: Color = input.get_value(Commons.fractv2(uv + Vector2(0.25, 0.25)));
+ var coef_abc : float = sin(1.57079632679 * clamp((min(min((uv - Vector2(0.0, 0.5)).length(), (uv - Vector2(0.5, 0.0)).length()), min((uv- Vector2(1.0, 0.5)).length(), (uv - Vector2(0.5, 1.0)).length())) - w) / w, 0.0, 1.0));
+
+ return lerp(c, lerp(a, b, coef_ab), coef_abc)
+
diff --git a/game/addons/mat_maker_gd/nodes/filter/math.gd b/game/addons/mat_maker_gd/nodes/filter/math.gd
new file mode 100644
index 0000000..56defca
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/math.gd
@@ -0,0 +1,151 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd")
+
+export(Resource) var image : Resource
+export(Resource) var a : Resource
+export(Resource) var b : Resource
+export(Resource) var output : Resource
+
+export(int, "A+B,A-B,A*B,A/B,log(A),log2(A),pow(A; B),abs(A),round(A),floor(A),ceil(A),trunc(A),fract(A),min(A; B),max(A; B),A void:
+ mm_graph_node.add_slot_label_universal(a)
+ mm_graph_node.add_slot_label_universal(b)
+ mm_graph_node.add_slot_label_universal(output)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "A+B", "A-B", "A*B", "A/B", "log(A)", "log2(A)", "pow(A, B)", "abs(A)", "round(A)", "floor(A)", "ceil(A)", "trunc(A)", "fract(A)", "min(A, B)", "max(A, B)", "A float:
+ var af : float = a.get_value(uv)
+ var bf : float = b.get_value(uv)
+
+ var f : float = 0
+
+ if operation == 0:#"A+B",
+ f = af + bf
+ elif operation == 1:#"A-B",
+ f = af - bf
+ elif operation == 2:#"A*B",
+ f = af * bf
+ elif operation == 3:#"A/B",
+ if bf == 0:
+ bf = 0.000001
+ f = af / bf
+ elif operation == 4:#"log(A)",
+ #todo needs to be implemented
+ f = log(af)
+ elif operation == 5:#"log2(A)",
+ #todo needs to be implemented
+ f = log(af)
+ elif operation == 6:#"pow(A, B)",
+ f = pow(af, bf)
+ elif operation == 7:#"abs(A)",
+ f = abs(af)
+ elif operation == 8:#"round(A)",
+ f = round(af)
+ elif operation == 9:#"floor(A)",
+ f = floor(af)
+ elif operation == 10:#"ceil(A)",
+ f = ceil(af)
+ elif operation == 11:#"trunc(A)",
+ f = int(af)
+ elif operation == 12:#"fract(A)",
+ f = Commons.fractf(af)
+ elif operation == 13:#"min(A, B)",
+ f = min(af, bf)
+ elif operation == 14:#"max(A, B)",
+ f = max(af, bf)
+ elif operation == 15:#"A void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = get_property_value(uv)
+
+ return Color(f, f, f, 1)
+
+#operation
+func get_operation() -> int:
+ return operation
+
+func set_operation(val : int) -> void:
+ operation = val
+
+ set_dirty(true)
+ output.emit_changed()
+
+#clamp_result
+func get_clamp_result() -> bool:
+ return clamp_result
+
+func set_clamp_result(val : bool) -> void:
+ clamp_result = val
+
+ set_dirty(true)
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/filter/quantize.gd b/game/addons/mat_maker_gd/nodes/filter/quantize.gd
new file mode 100644
index 0000000..a86b4c5
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/quantize.gd
@@ -0,0 +1,56 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int) var steps : int = 4
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_int("get_steps", "set_steps", "Steps")
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+
+ #vec4(floor($in($uv).rgb*$steps)/$steps, $in($uv).a)
+ var v : Vector3 = Commons.floorv3(Vector3(c.r, c.g, c.b) * steps) / float(steps)
+
+ return Color(v.x, v.y, v.z, c.a)
+
+#steps
+func get_steps() -> int:
+ return steps
+
+func set_steps(val : int) -> void:
+ steps = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/swap_channels.gd b/game/addons/mat_maker_gd/nodes/filter/swap_channels.gd
new file mode 100644
index 0000000..eca84d1
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/swap_channels.gd
@@ -0,0 +1,111 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_r : int = 2
+export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_g : int = 4
+export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_b : int = 6
+export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_a : int = 8
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+
+ mm_graph_node.add_slot_enum("get_op_r", "set_op_r", "R", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ])
+ mm_graph_node.add_slot_enum("get_op_g", "set_op_g", "G", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ])
+ mm_graph_node.add_slot_enum("get_op_b", "set_op_b", "B", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ])
+ mm_graph_node.add_slot_enum("get_op_a", "set_op_a", "A", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ])
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func apply(op : int, val : Color) -> float:
+ if op == 0:
+ return 0.0
+ elif op == 1:
+ return 1.0
+ elif op == 2:
+ return val.r
+ elif op == 3:
+ return 1.0 - val.r
+ elif op == 4:
+ return val.g
+ elif op == 5:
+ return 1.0 - val.g
+ elif op == 6:
+ return val.b
+ elif op == 7:
+ return 1.0 - val.b
+ elif op == 8:
+ return val.a
+ elif op == 9:
+ return 1.0 - val.a
+
+ return 0.0
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : Color = input.get_value(uv)
+
+ return Color(apply(op_r, c), apply(op_g, c), apply(op_b, c), apply(op_a, c))
+
+#op_r
+func get_op_r() -> int:
+ return op_r
+
+func set_op_r(val : int) -> void:
+ op_r = val
+
+ set_dirty(true)
+
+#op_g
+func get_op_g() -> int:
+ return op_g
+
+func set_op_g(val : int) -> void:
+ op_g = val
+
+ set_dirty(true)
+
+#op_b
+func get_op_b() -> int:
+ return op_b
+
+func set_op_b(val : int) -> void:
+ op_b = val
+
+ set_dirty(true)
+
+#op_a
+func get_op_a() -> int:
+ return op_a
+
+func set_op_a(val : int) -> void:
+ op_a = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/filter/tonality.gd b/game/addons/mat_maker_gd/nodes/filter/tonality.gd
new file mode 100644
index 0000000..66f1aba
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/filter/tonality.gd
@@ -0,0 +1,50 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/curve_base.gd"
+
+var Curves = preload("res://addons/mat_maker_gd/nodes/common/curves.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+
+func _init():
+ init_points_01()
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input.set_default_value(0)
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_curve()
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = input.get_value(uv)
+
+ var cf : float = Curves.curve(f, points)
+
+ return Color(cf, cf, cf, 1)
+
+func _curve_changed() -> void:
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd b/game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd
new file mode 100644
index 0000000..1fc45b7
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd
@@ -0,0 +1,60 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd"
+
+var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd")
+
+export(Resource) var image : Resource
+export(float) var repeat : float = 1
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_repeat", "set_repeat", "repeat")
+ mm_graph_node.add_slot_gradient()
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ if interpolation_type == 0:
+ return Gradients.circular_gradient_type_1(uv, repeat, points)
+ elif interpolation_type == 1:
+ return Gradients.circular_gradient_type_2(uv, repeat, points)
+ elif interpolation_type == 2:
+ return Gradients.circular_gradient_type_3(uv, repeat, points)
+ elif interpolation_type == 3:
+ return Gradients.circular_gradient_type_4(uv, repeat, points)
+
+ return Color(1, 1, 1, 1)
+
+
+func get_gradient_color(x : float) -> Color:
+ if interpolation_type == 0:
+ return Gradients.gradient_type_1(x, points)
+ elif interpolation_type == 1:
+ return Gradients.gradient_type_2(x, points)
+ elif interpolation_type == 2:
+ return Gradients.gradient_type_3(x, points)
+ elif interpolation_type == 3:
+ return Gradients.gradient_type_4(x, points)
+
+ return Color(1, 1, 1, 1)
+
+func get_repeat() -> float:
+ return repeat
+
+func set_repeat(val : float) -> void:
+ repeat = val
+
+ set_dirty(true)
+
diff --git a/game/addons/mat_maker_gd/nodes/gradient/gradient.gd b/game/addons/mat_maker_gd/nodes/gradient/gradient.gd
new file mode 100644
index 0000000..6db5aff
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/gradient/gradient.gd
@@ -0,0 +1,68 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd"
+
+var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd")
+
+export(Resource) var image : Resource
+export(float) var repeat : float = 1
+export(float) var rotate : float = 0
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_repeat", "set_repeat", "repeat")
+ mm_graph_node.add_slot_float("get_rotate", "set_rotate", "rotate")
+ mm_graph_node.add_slot_gradient()
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ if interpolation_type == 0:
+ return Gradients.normal_gradient_type_1(uv, repeat, rotate, points)
+ elif interpolation_type == 1:
+ return Gradients.normal_gradient_type_2(uv, repeat, rotate, points)
+ elif interpolation_type == 2:
+ return Gradients.normal_gradient_type_3(uv, repeat, rotate, points)
+ elif interpolation_type == 3:
+ return Gradients.normal_gradient_type_4(uv, repeat, rotate, points)
+
+ return Color(1, 1, 1, 1)
+
+func get_gradient_color(x : float) -> Color:
+ if interpolation_type == 0:
+ return Gradients.gradient_type_1(x, points)
+ elif interpolation_type == 1:
+ return Gradients.gradient_type_2(x, points)
+ elif interpolation_type == 2:
+ return Gradients.gradient_type_3(x, points)
+ elif interpolation_type == 3:
+ return Gradients.gradient_type_4(x, points)
+
+ return Color(1, 1, 1, 1)
+
+func get_repeat() -> float:
+ return repeat
+
+func set_repeat(val : float) -> void:
+ repeat = val
+
+ set_dirty(true)
+
+func get_rotate() -> float:
+ return rotate
+
+func set_rotate(val : float) -> void:
+ rotate = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd b/game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd
new file mode 100644
index 0000000..76e84c5
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd
@@ -0,0 +1,60 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd"
+
+var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd")
+
+export(Resource) var image : Resource
+export(float) var repeat : float = 1
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_repeat", "set_repeat", "repeat")
+ mm_graph_node.add_slot_gradient()
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ if interpolation_type == 0:
+ return Gradients.radial_gradient_type_1(uv, repeat, points)
+ elif interpolation_type == 1:
+ return Gradients.radial_gradient_type_2(uv, repeat, points)
+ elif interpolation_type == 2:
+ return Gradients.radial_gradient_type_3(uv, repeat, points)
+ elif interpolation_type == 3:
+ return Gradients.radial_gradient_type_4(uv, repeat, points)
+
+ return Color(1, 1, 1, 1)
+
+
+func get_gradient_color(x : float) -> Color:
+ if interpolation_type == 0:
+ return Gradients.gradient_type_1(x, points)
+ elif interpolation_type == 1:
+ return Gradients.gradient_type_2(x, points)
+ elif interpolation_type == 2:
+ return Gradients.gradient_type_3(x, points)
+ elif interpolation_type == 3:
+ return Gradients.gradient_type_4(x, points)
+
+ return Color(1, 1, 1, 1)
+
+func get_repeat() -> float:
+ return repeat
+
+func set_repeat(val : float) -> void:
+ repeat = val
+
+ set_dirty(true)
+
diff --git a/game/addons/mat_maker_gd/nodes/mm_material.gd b/game/addons/mat_maker_gd/nodes/mm_material.gd
new file mode 100644
index 0000000..c13055c
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/mm_material.gd
@@ -0,0 +1,119 @@
+tool
+class_name MMMateial
+extends Resource
+
+#threads are implemented using my thread pool engine module.
+#if you want to use this without that module in your engine set this to false,
+#and comment out the lines that give errors
+const USE_THREADS = true
+
+export(Vector2) var image_size : Vector2 = Vector2(128, 128)
+export(Array) var nodes : Array
+
+var initialized : bool = false
+var rendering : bool = false
+var queued_render : bool = false
+var job : ThreadPoolExecuteJob = ThreadPoolExecuteJob.new()
+
+func initialize():
+ if !initialized:
+ initialized = true
+
+ job.setup(self, "_thread_func")
+
+ for n in nodes:
+ n.connect("changed", self, "on_node_changed")
+
+func add_node(node : MMNode) -> void:
+ nodes.append(node)
+
+ node.connect("changed", self, "on_node_changed")
+
+ emit_changed()
+
+func remove_node(node : MMNode) -> void:
+ if !node:
+ return
+
+ for op in node.output_properties:
+ for n in nodes:
+ if n:
+ for ip in n.input_properties:
+ if ip.input_property == op:
+ ip.set_input_property(null)
+
+ nodes.erase(node)
+
+ node.disconnect("changed", self, "on_node_changed")
+
+ emit_changed()
+
+func render() -> void:
+ if USE_THREADS:
+ render_threaded()
+ else:
+ render_non_threaded()
+
+func render_non_threaded() -> void:
+ if !initialized:
+ initialize()
+
+ var did_render : bool = true
+
+ while did_render:
+ did_render = false
+
+ for n in nodes:
+ if n && n.render(self):
+ did_render = true
+
+func render_threaded() -> void:
+ job.cancelled = false
+
+ if rendering:
+ queued_render = true
+ return
+
+ if !initialized:
+ initialize()
+
+ if !ThreadPool.has_job(job):
+ ThreadPool.add_job(job)
+
+func _thread_func() -> void:
+ if job.cancelled:
+ rendering = false
+ return
+
+ rendering = true
+ job.cancelled = false
+
+ var did_render : bool = true
+
+ while did_render:
+ did_render = false
+
+ for n in nodes:
+ if n && n.render(self):
+ did_render = true
+
+ if job.cancelled:
+ rendering = false
+ return
+
+ rendering = false
+
+ if queued_render:
+ queued_render = false
+ _thread_func()
+
+func cancel_render_and_wait() -> void:
+ if rendering:
+ ThreadPool.cancel_task_wait(job)
+
+ job.cancelled = false
+
+ pass
+
+func on_node_changed() -> void:
+ call_deferred("render")
diff --git a/game/addons/mat_maker_gd/nodes/mm_node.gd b/game/addons/mat_maker_gd/nodes/mm_node.gd
new file mode 100644
index 0000000..a296825
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/mm_node.gd
@@ -0,0 +1,121 @@
+tool
+class_name MMNode
+extends Resource
+
+export(Vector2) var graph_position : Vector2 = Vector2()
+
+var input_properties : Array
+var output_properties : Array
+
+var properties_initialized : bool = false
+
+var dirty : bool = true
+
+#MMMateial
+func render(material) -> bool:
+ if !dirty:
+ return false
+
+ for p in input_properties:
+ if p.input_property && p.input_property.owner.dirty:
+ return false
+
+ _render(material)
+
+ dirty = false
+
+ return true
+
+#MMMateial
+func _render(material) -> void:
+ pass
+
+func render_image(material) -> Image:
+ var image : Image = Image.new()
+ image.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ image.lock()
+
+ var w : float = image.get_width()
+ var h : float = image.get_width()
+
+ var pseed : float = randf() + randi()
+
+ for x in range(image.get_width()):
+ for y in range(image.get_height()):
+ var v : Vector2 = Vector2(x / w, y / h)
+
+ var col : Color = get_value_for(v, pseed)
+
+ image.set_pixel(x, y, col)
+
+ image.unlock()
+
+ return image
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+func init_properties() -> void:
+ if !properties_initialized:
+ properties_initialized = true
+
+ _init_properties()
+
+func _init_properties() -> void:
+ pass
+
+func register_methods(mm_graph_node) -> void:
+ init_properties()
+ _register_methods(mm_graph_node)
+
+func _register_methods(mm_graph_node) -> void:
+ pass
+
+func get_graph_position() -> Vector2:
+ return graph_position
+
+func set_graph_position(pos : Vector2) -> void:
+ graph_position = pos
+
+ emit_changed()
+
+func register_input_property(prop : MMNodeUniversalProperty) -> void:
+ prop.owner = self
+
+ if !prop.is_connected("changed", self, "on_input_property_changed"):
+ prop.connect("changed", self, "on_input_property_changed")
+
+ input_properties.append(prop)
+
+func unregister_input_property(prop : MMNodeUniversalProperty) -> void:
+ if prop.owner == self:
+ prop.owner = null
+
+ if prop.is_connected("changed", self, "on_input_property_changed"):
+ prop.disconnect("changed", self, "on_input_property_changed")
+
+ input_properties.erase(prop)
+
+func register_output_property(prop : MMNodeUniversalProperty) -> void:
+ prop.owner = self
+
+ output_properties.append(prop)
+
+func unregister_output_property(prop : MMNodeUniversalProperty) -> void:
+ if prop.owner == self:
+ prop.owner = null
+
+ output_properties.erase(prop)
+
+func set_dirty(val : bool) -> void:
+ var changed : bool = val != dirty
+
+ dirty = val
+
+ if changed:
+ emit_changed()
+
+func on_input_property_changed() -> void:
+ set_dirty(true)
+ emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd b/game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd
new file mode 100644
index 0000000..d79dc27
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd
@@ -0,0 +1,316 @@
+tool
+class_name MMNodeUniversalProperty
+extends Resource
+
+enum SlotTypes {
+ SLOT_TYPE_NONE = -1,
+ SLOT_TYPE_IMAGE = 0,
+ SLOT_TYPE_INT = 1,
+ SLOT_TYPE_FLOAT = 2,
+ SLOT_TYPE_VECTOR2 = 3,
+ SLOT_TYPE_VECTOR3 = 4,
+ SLOT_TYPE_COLOR = 5,
+ SLOT_TYPE_UNIVERSAL = 6,
+}
+
+enum MMNodeUniversalPropertyDefaultType {
+ DEFAULT_TYPE_INT = 0,
+ DEFAULT_TYPE_FLOAT = 1,
+ DEFAULT_TYPE_VECTOR2 = 2,
+ DEFAULT_TYPE_VECTOR3 = 3,
+ DEFAULT_TYPE_COLOR = 4,
+ DEFAULT_TYPE_IMAGE = 5,
+}
+
+export(int, "Int,Float,Vector2,Vector3,Color,Image") var default_type : int
+
+export(int) var default_int : int
+export(float) var default_float : float
+export(Vector2) var default_vector2 : Vector2
+export(Vector3) var default_vector3 : Vector3
+export(Color) var default_color : Color
+export(Image) var default_image : Image
+
+var get_value_from_owner : bool = false
+var force_override : bool = false
+#This is not exported on purpose!
+var override_image : Image
+
+#Should be a MMNodeUniversalProperty, but can't set it up like that
+export(Resource) var input_property : Resource
+
+var input_slot_type : int = SlotTypes.SLOT_TYPE_NONE
+var output_slot_type : int = SlotTypes.SLOT_TYPE_NONE
+var slot_name : String
+var value_step : float = 0.1
+var value_range : Vector2 = Vector2(-1000, 1000)
+
+#MMNode
+var owner
+
+func _init():
+ if input_property:
+ input_property.connect("changed", self, "on_input_property_changed")
+
+func get_value(uv : Vector2, skip_owner_val : bool = false):
+ if get_value_from_owner && !skip_owner_val:
+ return get_owner_value(uv)
+
+ if !input_property:
+ return get_default_value(uv)
+
+ if default_type == input_property.default_type:
+ return input_property.get_value(uv)
+
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT:
+ return to_int(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT:
+ return to_float(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2:
+ return to_vector2(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3:
+ return to_vector3(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR:
+ return to_color(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ return to_color(input_property.get_value(uv))
+
+ return input_property.get_value(uv)
+
+func get_owner_value(uv : Vector2):
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT:
+ return to_int(owner.get_property_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT:
+ return to_float(owner.get_property_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2:
+ return to_vector2(owner.get_property_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3:
+ return to_vector3(owner.get_property_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR:
+ return to_color(owner.get_property_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ return to_color(owner.get_property_value(uv))
+
+func get_value_or_zero(uv : Vector2, skip_owner_val : bool = false):
+ if get_value_from_owner && !skip_owner_val:
+ return get_owner_value(uv)
+
+ if !input_property:
+ return get_zero_value()
+
+ if default_type == input_property.default_type:
+ return input_property.get_value(uv)
+
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT:
+ return to_int(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT:
+ return to_float(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2:
+ return to_vector2(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3:
+ return to_vector3(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR:
+ return to_color(input_property.get_value(uv))
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ return to_color(input_property.get_value(uv))
+
+ return input_property.get_value(uv)
+
+func get_value_sdf3d(uv3 : Vector3, skip_owner_val : bool = false) -> Vector2:
+ if get_value_from_owner && !skip_owner_val:
+ return owner.get_property_value_sdf3d(uv3)
+
+ if !input_property:
+ return default_vector2
+
+ return input_property.get_value_sdf3d(uv3)
+
+func to_int(val) -> int:
+ if val is int:
+ return val
+
+ if val is float:
+ return int(val)
+
+ if val is Vector2:
+ return int(val.x)
+
+ if val is Vector3:
+ return int(val.x)
+
+ if val is Color:
+ return int(val.r)
+
+ return 0
+
+func to_float(val) -> float:
+ if val is float:
+ return val
+
+ if val is int:
+ return float(val)
+
+ if val is Vector2:
+ return float(val.x)
+
+ if val is Vector3:
+ return float(val.x)
+
+ if val is Color:
+ return float(val.r)
+
+ return 0.0
+
+func to_vector2(val) -> Vector2:
+ if val is Vector2:
+ return val
+
+ if val is int:
+ return Vector2(val, val)
+
+ if val is float:
+ return Vector2(val, val)
+
+ if val is Vector3:
+ return Vector2(val.x, val.y)
+
+ if val is Color:
+ return Vector2(val.r, val.g)
+
+ return Vector2()
+
+func to_vector3(val) -> Vector3:
+ if val is Vector3:
+ return val
+
+ if val is int:
+ return Vector3(val, val, val)
+
+ if val is float:
+ return Vector3(val, val, val)
+
+ if val is Vector2:
+ return Vector3(val.x, val.y, 0)
+
+ if val is Color:
+ return Vector3(val.r, val.g, val.b)
+
+ return Vector3()
+
+func to_color(val) -> Color:
+ if val is Color:
+ return val
+
+ if val is int:
+ return Color(val, val, val, 1)
+
+ if val is float:
+ return Color(val, val, val, 1)
+
+ if val is Vector2:
+ return Color(val.x, val.y, 0, 1)
+
+ if val is Vector3:
+ return Color(val.x, val.y, val.z, 1)
+
+ return Color()
+
+func set_value(val):
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ override_image = val
+ emit_changed()
+ return
+
+ set_default_value(val)
+
+func get_zero_value():
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT:
+ return 0
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT:
+ return 0.0
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2:
+ return Vector2()
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3:
+ return Vector3()
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR:
+ return Color()
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ return Color()
+
+ return null
+
+func get_default_value(uv : Vector2 = Vector2()):
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT:
+ return default_int
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT:
+ return default_float
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2:
+ return default_vector2
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3:
+ return default_vector3
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR:
+ return default_color
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ var image : Image = default_image
+
+ if override_image:
+ image = override_image
+
+ if !image:
+ return default_color
+
+ image.lock()
+ var x : int = uv.x * image.get_width()
+ var y : int = uv.y * image.get_height()
+
+ x = clamp(x, 0, image.get_width() - 1)
+ y = clamp(y, 0, image.get_width() - 1)
+
+ var c : Color = image.get_pixel(x, y)
+ image.unlock()
+
+ return c
+
+ return null
+
+func set_default_value(val):
+ if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT:
+ default_int = val
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT:
+ default_float = val
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2:
+ default_vector2 = val
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3:
+ default_vector3 = val
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR:
+ default_color = val
+ elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
+ default_image = val
+
+ emit_changed()
+
+func get_active_image() -> Image:
+ if !force_override && input_property:
+ return input_property.get_active_image()
+
+ if override_image:
+ return override_image
+
+ return default_image
+
+func set_input_property(val : MMNodeUniversalProperty) -> void:
+ if input_property == val:
+ return
+
+ if input_property:
+ input_property.disconnect("changed", self, "on_input_property_changed")
+
+ input_property = val
+
+ if input_property:
+ input_property.connect("changed", self, "on_input_property_changed")
+
+ emit_changed()
+
+func on_input_property_changed() -> void:
+ emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd b/game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd
new file mode 100644
index 0000000..2b27849
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd
@@ -0,0 +1,60 @@
+tool
+extends MMNode
+
+var Noises = preload("res://addons/mat_maker_gd/nodes/common/noises.gd")
+
+export(Resource) var image : Resource
+
+export(Vector2) var scale : Vector2 = Vector2(4, 256)
+export(float) var smoothness : float = 1
+export(float) var interpolation : float = 1
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 1)#, Vector2(1, 10))
+ mm_graph_node.add_slot_float("get_smoothness", "set_smoothness", "Smoothness", 0.01)#, Vector2(0, 1))
+ mm_graph_node.add_slot_float("get_interpolation", "set_interpolation", "Interpolation", 0.01)#, Vector2(0, 1))
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #anisotropic($(uv), vec2($(scale_x), $(scale_y)), $(seed), $(smoothness), $(interpolation))
+ return Noises.anisotropicc(uv, scale, ps, smoothness, interpolation)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
+
+func get_smoothness() -> float:
+ return smoothness
+
+func set_smoothness(val : float) -> void:
+ smoothness = val
+
+ set_dirty(true)
+
+func get_interpolation() -> float:
+ return interpolation
+
+func set_interpolation(val : float) -> void:
+ interpolation = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/noise/color_noise.gd b/game/addons/mat_maker_gd/nodes/noise/color_noise.gd
new file mode 100644
index 0000000..d5dbdee
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/noise/color_noise.gd
@@ -0,0 +1,52 @@
+tool
+extends MMNode
+
+var Noises = preload("res://addons/mat_maker_gd/nodes/common/noises.gd")
+
+export(Resource) var image : Resource
+
+export(int) var size : int = 8
+
+#----------------------
+#color_noise.mmg
+
+#Outputs:
+
+#Output - (rgb) - Shows the noise pattern
+#color_dots($(uv), 1.0/$(size), $(seed))
+
+#Inputs:
+#size, float, default: 8, min: 2, max: 12, step: 1
+
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_int("get_size", "set_size", "Size")#, Vector2(1, 10))
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #color_dots($(uv), 1.0/$(size), $(seed))
+ return Noises.noise_color(uv, float(size), ps)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_size() -> int:
+ return size
+
+func set_size(val : int) -> void:
+ size = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/noise/color_value.gd b/game/addons/mat_maker_gd/nodes/noise/color_value.gd
new file mode 100644
index 0000000..97fff54
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/noise/color_value.gd
@@ -0,0 +1,60 @@
+tool
+extends MMNode
+
+var NoisePerlin = preload("res://addons/mat_maker_gd/nodes/common/noise_perlin.gd")
+
+export(Resource) var image : Resource
+
+export(Vector2) var scale : Vector2 = Vector2(4, 4)
+export(int) var iterations : int = 3
+export(float) var persistence : float = 0.5
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale")#, Vector2(1, 10))
+ mm_graph_node.add_slot_int("get_iterations", "set_iterations", "Iterations")#, Vector2(0, 1))
+ mm_graph_node.add_slot_float("get_persistence", "set_persistence", "Persistence", 0.01)#, Vector2(0, 1))
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #perlin_color($(uv), vec2($(scale_x), $(scale_y)), int($(iterations)), $(persistence), $(seed))
+ return NoisePerlin.perlin_colorc(uv, scale, iterations, persistence, ps)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
+
+func get_iterations() -> int:
+ return iterations
+
+func set_iterations(val : int) -> void:
+ iterations = val
+
+ set_dirty(true)
+
+func get_persistence() -> float:
+ return persistence
+
+func set_persistence(val : float) -> void:
+ persistence = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd b/game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd
new file mode 100644
index 0000000..036b9cb
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd
@@ -0,0 +1,99 @@
+tool
+extends MMNode
+
+var NoiseFBM = preload("res://addons/mat_maker_gd/nodes/common/noise_fbm.gd")
+
+export(Resource) var image : Resource
+
+export(int, "Value,Perlin,Simplex,Cellular1,Cellular2,Cellular3,Cellular4,Cellular5,Cellular6") var type : int = 0
+export(Vector2) var scale : Vector2 = Vector2(2, 2)
+export(int) var folds : int = 0
+export(int) var iterations : int = 5
+export(float) var persistence : float = 0.5
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_type", "set_type", "Type", [ "Value", "Perlin", "Simplex", "Cellular1", "Cellular2", "Cellular3", "Cellular4", "Cellular5", "Cellular6" ])#, Vector2(0, 1))
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale")#, Vector2(1, 10))
+ mm_graph_node.add_slot_int("get_folds", "set_folds", "folds")#, Vector2(0, 1))
+ mm_graph_node.add_slot_int("get_iterations", "set_iterations", "Iterations")#, Vector2(0, 1))
+ mm_graph_node.add_slot_float("get_persistence", "set_persistence", "Persistence", 0.01)#, Vector2(0, 1))
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #"Value,Perlin,Simplex,Cellular1,Cellular2,Cellular3,Cellular4,Cellular5,Cellular6"
+ if type == 0:
+ return NoiseFBM.fbmval(uv, scale, folds, iterations, persistence, ps)
+ elif type == 1:
+ return NoiseFBM.perlin(uv, scale, folds, iterations, persistence, ps)
+ elif type == 2:
+ return NoiseFBM.simplex(uv, scale, folds, iterations, persistence, ps)
+ elif type == 3:
+ return NoiseFBM.cellular(uv, scale, folds, iterations, persistence, ps)
+ elif type == 4:
+ return NoiseFBM.cellular2(uv, scale, folds, iterations, persistence, ps)
+ elif type == 5:
+ return NoiseFBM.cellular3(uv, scale, folds, iterations, persistence, ps)
+ elif type == 6:
+ return NoiseFBM.cellular4(uv, scale, folds, iterations, persistence, ps)
+ elif type == 7:
+ return NoiseFBM.cellular5(uv, scale, folds, iterations, persistence, ps)
+ elif type == 8:
+ return NoiseFBM.cellular6(uv, scale, folds, iterations, persistence, ps)
+
+ return Color()
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_type() -> int:
+ return type
+
+func set_type(val : int) -> void:
+ type = val
+
+ set_dirty(true)
+
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
+
+func get_folds() -> int:
+ return folds
+
+func set_folds(val : int) -> void:
+ folds = val
+
+ set_dirty(true)
+
+func get_iterations() -> int:
+ return iterations
+
+func set_iterations(val : int) -> void:
+ iterations = val
+
+ set_dirty(true)
+
+func get_persistence() -> float:
+ return persistence
+
+func set_persistence(val : float) -> void:
+ persistence = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/noise/noise.gd b/game/addons/mat_maker_gd/nodes/noise/noise.gd
new file mode 100644
index 0000000..30e23ee
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/noise/noise.gd
@@ -0,0 +1,52 @@
+tool
+extends MMNode
+
+var Noises = preload("res://addons/mat_maker_gd/nodes/common/noises.gd")
+
+export(Resource) var image : Resource
+
+export(int) var grid_size : int = 16
+export(float) var density : float = 0.5
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_int("get_grid_size", "set_grid_size", "Grid Size")#, Vector2(1, 10))
+ mm_graph_node.add_slot_float("get_density", "set_density", "Density", 0.01)#, Vector2(0, 1))
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #return dots(uv, 1.0/$(size), $(density), $(seed));
+ var f : float = Noises.dots(uv, 1.0 / float(grid_size), density, ps)
+
+ return Color(f, f, f, 1)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_grid_size() -> int:
+ return grid_size
+
+func set_grid_size(val : int) -> void:
+ grid_size = val
+
+ set_dirty(true)
+
+func get_density() -> float:
+ return density
+
+func set_density(val : float) -> void:
+ density = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/noise/voronoi.gd b/game/addons/mat_maker_gd/nodes/noise/voronoi.gd
new file mode 100644
index 0000000..0c45239
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/noise/voronoi.gd
@@ -0,0 +1,163 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var NoiseVoronoi = preload("res://addons/mat_maker_gd/nodes/common/noise_voronoi.gd")
+
+export(Resource) var out_nodes : Resource
+export(Resource) var out_borders : Resource
+export(Resource) var out_random_color : Resource
+export(Resource) var out_fill : Resource
+
+export(Vector2) var scale : Vector2 = Vector2(4, 4)
+export(Vector2) var stretch : Vector2 = Vector2(1, 1)
+export(float) var intensity : float = 1
+export(float) var randomness : float = 0.85
+
+func _init_properties():
+ if !out_nodes:
+ out_nodes = MMNodeUniversalProperty.new()
+ out_nodes.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_nodes.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_borders:
+ out_borders = MMNodeUniversalProperty.new()
+ out_borders.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_borders.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_random_color:
+ out_random_color = MMNodeUniversalProperty.new()
+ out_random_color.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_random_color.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_fill:
+ out_fill = MMNodeUniversalProperty.new()
+ out_fill.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_fill.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(out_nodes)
+ register_output_property(out_borders)
+ register_output_property(out_random_color)
+ register_output_property(out_fill)
+
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(out_nodes)
+ mm_graph_node.add_slot_texture_universal(out_borders)
+ mm_graph_node.add_slot_texture_universal(out_random_color)
+ mm_graph_node.add_slot_texture_universal(out_fill)
+
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.1)#, Vector2(1, 32))#, Vector2(0, 32))
+ mm_graph_node.add_slot_vector2("get_stretch", "set_stretch", "stretch", 0.01)#, Vector2(1, 32))#, Vector2(0, 32))
+ mm_graph_node.add_slot_float("get_intensity", "set_intensity", "Intensity", 0.01)#, Vector2(1, 32))#, Vector2(0, 32))
+ mm_graph_node.add_slot_float("get_randomness", "set_randomness", "Randomness", 0.01)#, Vector2(1, 32))#, Vector2(0, 32))
+
+
+
+
+func _render(material) -> void:
+ var nodes : Image = Image.new()
+ var borders : Image = Image.new()
+ var random_color : Image = Image.new()
+ var fill : Image = Image.new()
+
+ nodes.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ borders.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ random_color.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ fill.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ nodes.lock()
+ borders.lock()
+ random_color.lock()
+ fill.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ for x in range(material.image_size.x):
+ for y in range(material.image_size.y):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ var ps : float = 1.0 / float(pseed)
+
+ #vec4 $(name_uv)_xyzw = voronoi($uv, vec2($scale_x, $scale_y), vec2($stretch_y, $stretch_x), $intensity, $randomness, $seed);
+ var voronoi : Color = NoiseVoronoi.voronoi(uv, scale, stretch, intensity, randomness, ps)
+
+ #Nodes - float - A greyscale pattern based on the distance to cell centers
+ #$(name_uv)_xyzw.z
+ var nodes_col : Color = Color(voronoi.b, voronoi.b, voronoi.b, 1)
+
+ #Borders - float - A greyscale pattern based on the distance to borders
+ #$(name_uv)_xyzw.w
+ var borders_col : Color = Color(voronoi.a, voronoi.a, voronoi.a, 1)
+
+ #Random color - rgb - A color pattern that assigns a random color to each cell
+ #rand3(fract(floor($(name_uv)_xyzw.xy)/vec2($scale_x, $scale_y)))
+ var rv3 : Vector3 = Commons.rand3(Commons.fractv2(Vector2(voronoi.r, voronoi.g) / scale))
+ var random_color_col : Color = Color(rv3.x, rv3.y, rv3.z, 1)
+
+ #Fill - rgba - An output that should be plugged into a Fill companion node
+ #vec4(fract(($(name_uv)_xyzw.xy-1.0)/vec2($scale_x, $scale_y)), vec2(2.0)/vec2($scale_x, $scale_y))
+ var fv21 : Vector2 = Commons.fractv2((Vector2(voronoi.r, voronoi.g) - Vector2(1, 1)) / scale)
+ var fv22 : Vector2 = Vector2(2, 2) / scale
+ var fill_col : Color = Color(fv21.x, fv21.y, fv22.x, fv22.y)
+
+ nodes.set_pixel(x, y, nodes_col)
+ borders.set_pixel(x, y, borders_col)
+ random_color.set_pixel(x, y, random_color_col)
+ fill.set_pixel(x, y, fill_col)
+
+ nodes.unlock()
+ borders.unlock()
+ random_color.unlock()
+ fill.unlock()
+
+ out_nodes.set_value(nodes)
+ out_borders.set_value(borders)
+ out_random_color.set_value(random_color)
+ out_fill.set_value(fill)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#scale
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
+
+#stretch
+func get_stretch() -> Vector2:
+ return stretch
+
+func set_stretch(val : Vector2) -> void:
+ stretch = val
+
+ set_dirty(true)
+
+#intensity
+func get_intensity() -> float:
+ return intensity
+
+func set_intensity(val : float) -> void:
+ intensity = val
+
+ set_dirty(true)
+
+#randomness
+func get_randomness() -> float:
+ return randomness
+
+func set_randomness(val : float) -> void:
+ randomness = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/other/output_image.gd b/game/addons/mat_maker_gd/nodes/other/output_image.gd
new file mode 100644
index 0000000..84a77fb
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/other/output_image.gd
@@ -0,0 +1,45 @@
+tool
+extends MMNode
+
+export(Resource) var image : Resource
+
+export(String) var postfix : String = ""
+
+func _init_properties():
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+ image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ image.slot_name = "image"
+
+ register_input_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_line_edit("get_postfix", "set_postfix", "postfix")
+
+func _render(material) -> void:
+ if !image:
+ return
+
+ var img : Image = image.get_active_image()
+
+ if !img:
+ return
+
+ var matpath : String = material.get_path()
+
+ if matpath == "":
+ return
+
+ var matbn : String = matpath.get_basename()
+ var final_file_name : String = matbn + postfix + ".png"
+
+ img.save_png(final_file_name)
+
+func get_postfix() -> String:
+ return postfix
+
+func set_postfix(pf : String) -> void:
+ postfix = pf
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/beehive.gd b/game/addons/mat_maker_gd/nodes/pattern/beehive.gd
new file mode 100644
index 0000000..b439ae3
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/beehive.gd
@@ -0,0 +1,113 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var out_main : Resource
+export(Resource) var out_random_color : Resource
+export(Resource) var out_uv_map : Resource
+
+export(Vector2) var size : Vector2 = Vector2(4, 4)
+
+func _init_properties():
+ if !out_main:
+ out_main = MMNodeUniversalProperty.new()
+ out_main.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_main.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_random_color:
+ out_random_color = MMNodeUniversalProperty.new()
+ out_random_color.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_random_color.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_uv_map:
+ out_uv_map = MMNodeUniversalProperty.new()
+ out_uv_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_uv_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(out_main)
+ register_output_property(out_random_color)
+ register_output_property(out_uv_map)
+
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(out_main)
+ mm_graph_node.add_slot_texture_universal(out_random_color)
+ mm_graph_node.add_slot_texture_universal(out_uv_map)
+
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size")#, Vector2(1, 32))#, Vector2(0, 32))
+
+
+func _render(material) -> void:
+ var main_pattern : Image = Image.new()
+ var random_color : Image = Image.new()
+ var uv_map : Image = Image.new()
+
+ main_pattern.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ random_color.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ uv_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ main_pattern.lock()
+ random_color.lock()
+ uv_map.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ for x in range(material.image_size.x):
+ for y in range(material.image_size.y):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ var ps : float = 1.0 / float(pseed)
+
+ #vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757);
+ #vec4 $(name_uv)_center = beehive_center($(name_uv)_uv);
+ var beehive_uv : Vector2 = uv * size;
+ var beehive_uv_center : Color = Patterns.beehive_center(beehive_uv);
+
+ #Output (float) - Shows the greyscale pattern
+ #1.0-2.0*beehive_dist($(name_uv)_center.xy)
+ var f : float = 1.0 - 2.0 * Patterns.beehive_dist(Vector2(beehive_uv_center.r, beehive_uv_center.g))
+ var main_pattern_col : Color = Color(f, f, f, 1)
+
+ #Random color (rgb) - Shows a random color for each hexagonal tile
+ #rand3(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed)))
+ var rcv3 : Vector3 = Commons.rand3(Commons.fractv2(Vector2(beehive_uv_center.b, beehive_uv_center.a) / size) + Vector2(ps, ps))
+ var random_color_col : Color = Color(rcv3.x, rcv3.y, rcv3.z, 1)
+
+ #UV map (rgb) - Shows an UV map to be connected to the UV map port of the Custom UV node
+ #vec3(vec2(0.5)+$(name_uv)_center.xy, rand(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed))))
+ var uvm1 : Vector2 = Vector2(0.5, 0.5) + Vector2(beehive_uv_center.r, beehive_uv_center.g)
+ var uvm2 : Vector2 = Commons.rand2(Commons.fractv2(Vector2(beehive_uv_center.b, beehive_uv_center.a) / size) + Vector2(ps, ps))
+
+ var uv_map_col : Color = Color(uvm1.x, uvm1.y, uvm2.x, 1)
+
+ main_pattern.set_pixel(x, y, main_pattern_col)
+ random_color.set_pixel(x, y, random_color_col)
+ uv_map.set_pixel(x, y, uv_map_col)
+
+ main_pattern.unlock()
+ random_color.unlock()
+ uv_map.unlock()
+
+ out_main.set_value(main_pattern)
+ out_random_color.set_value(random_color)
+ out_uv_map.set_value(uv_map)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/bricks.gd b/game/addons/mat_maker_gd/nodes/pattern/bricks.gd
new file mode 100644
index 0000000..498460f
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/bricks.gd
@@ -0,0 +1,288 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var out_bricks_pattern : Resource
+export(Resource) var out_random_color : Resource
+export(Resource) var out_position_x : Resource
+export(Resource) var out_position_y : Resource
+export(Resource) var out_brick_uv : Resource
+export(Resource) var out_corner_uv : Resource
+export(Resource) var out_direction : Resource
+
+export(int, "Running Bond,Running Bond (2),HerringBone,Basket Weave,Spanish Bond") var type : int = 0
+export(int) var repeat : int = 1
+export(Vector2) var col_row : Vector2 = Vector2(4, 4)
+export(float) var offset : float = 0.5
+export(Resource) var mortar : Resource
+export(Resource) var bevel : Resource
+export(Resource) var roundness : Resource
+export(float) var corner : float = 0.3
+
+func _init_properties():
+ if !out_bricks_pattern:
+ out_bricks_pattern = MMNodeUniversalProperty.new()
+ out_bricks_pattern.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_bricks_pattern.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_random_color:
+ out_random_color = MMNodeUniversalProperty.new()
+ out_random_color.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_random_color.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_position_x:
+ out_position_x = MMNodeUniversalProperty.new()
+ out_position_x.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_position_x.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_position_y:
+ out_position_y = MMNodeUniversalProperty.new()
+ out_position_y.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_position_y.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_brick_uv:
+ out_brick_uv = MMNodeUniversalProperty.new()
+ out_brick_uv.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_brick_uv.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_corner_uv:
+ out_corner_uv = MMNodeUniversalProperty.new()
+ out_corner_uv.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_corner_uv.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_direction:
+ out_direction = MMNodeUniversalProperty.new()
+ out_direction.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_direction.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !mortar:
+ mortar = MMNodeUniversalProperty.new()
+ mortar.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ mortar.set_default_value(0.1)
+
+ mortar.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ mortar.slot_name = "Mortar"
+ mortar.value_step = 0.01
+ mortar.value_range = Vector2(0, 0.5)
+
+ if !bevel:
+ bevel = MMNodeUniversalProperty.new()
+ bevel.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ bevel.set_default_value(0.1)
+
+ bevel.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ bevel.slot_name = "Bevel"
+ bevel.value_step = 0.01
+ bevel.value_range = Vector2(0, 0.5)
+
+ if !roundness:
+ roundness = MMNodeUniversalProperty.new()
+ roundness.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ roundness.set_default_value(0.1)
+
+ roundness.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ roundness.slot_name = "Roundness"
+ roundness.value_step = 0.01
+ roundness.value_range = Vector2(0, 0.5)
+
+ register_output_property(out_bricks_pattern)
+ register_output_property(out_random_color)
+ register_output_property(out_position_x)
+ register_output_property(out_position_y)
+ register_output_property(out_brick_uv)
+ register_output_property(out_corner_uv)
+ register_output_property(out_direction)
+
+ register_input_property(mortar)
+ register_input_property(bevel)
+ register_input_property(roundness)
+
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(out_bricks_pattern)
+ mm_graph_node.add_slot_texture_universal(out_random_color)
+ mm_graph_node.add_slot_texture_universal(out_position_x)
+ mm_graph_node.add_slot_texture_universal(out_position_y)
+ mm_graph_node.add_slot_texture_universal(out_brick_uv)
+ mm_graph_node.add_slot_texture_universal(out_corner_uv)
+ mm_graph_node.add_slot_texture_universal(out_direction)
+
+ mm_graph_node.add_slot_enum("get_type", "set_type", "Type", [ "Running Bond", "Running Bond (2)", "HerringBone", "Basket Weave", "Spanish Bond" ])
+ mm_graph_node.add_slot_int("get_repeat", "set_repeat", "Repeat")
+
+ mm_graph_node.add_slot_vector2("get_col_row", "set_col_row", "Col, Row")#, Vector2(1, 32))#, Vector2(0, 32))
+ mm_graph_node.add_slot_float("get_offset", "set_offset", "Offset")
+
+ mm_graph_node.add_slot_float_universal(mortar)
+ mm_graph_node.add_slot_float_universal(bevel)
+ mm_graph_node.add_slot_float_universal(roundness)
+
+ mm_graph_node.add_slot_float("get_corner", "set_corner", "Corner")
+
+func _render(material) -> void:
+ var bricks_pattern : Image = Image.new()
+ var random_color : Image = Image.new()
+ var position_x : Image = Image.new()
+ var position_y : Image = Image.new()
+ var brick_uv : Image = Image.new()
+ var corner_uv : Image = Image.new()
+ var direction : Image = Image.new()
+
+ bricks_pattern.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ random_color.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ position_x.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ position_y.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ brick_uv.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ corner_uv.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ direction.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ bricks_pattern.lock()
+ random_color.lock()
+ position_x.lock()
+ position_y.lock()
+ brick_uv.lock()
+ corner_uv.lock()
+ direction.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ for x in range(material.image_size.x):
+ for y in range(material.image_size.y):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ #vec4 $(name_uv)_rect = bricks_$pattern($uv, vec2($columns, $rows), $repeat, $row_offset);
+ var brick_rect : Color = Color()
+
+ #"Running Bond,Running Bond (2),HerringBone,Basket Weave,Spanish Bond"
+
+ if type == 0:
+ brick_rect = Patterns.bricks_rb(uv, col_row, repeat, offset)
+ elif type == 1:
+ brick_rect = Patterns.bricks_rb2(uv, col_row, repeat, offset)
+ elif type == 2:
+ brick_rect = Patterns.bricks_hb(uv, col_row, repeat, offset)
+ elif type == 3:
+ brick_rect = Patterns.bricks_bw(uv, col_row, repeat, offset)
+ elif type == 4:
+ brick_rect = Patterns.bricks_sb(uv, col_row, repeat, offset)
+
+
+ #vec4 $(name_uv) = brick($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $round*$round_map($uv), max(0.001, $bevel*$bevel_map($uv)));
+ var brick : Color = Patterns.brick(uv, Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), mortar.get_value(uv), roundness.get_value(uv), max(0.001, bevel.get_value(uv)))
+
+ #Bricks pattern (float) - A greyscale image that shows the bricks pattern
+ #$(name_uv).x
+ var bricks_pattern_col : Color = Color(brick.r, brick.r, brick.r, 1)
+
+ #Random color (rgb) - A random color for each brick
+ #brick_random_color($(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed))
+ var brc : Vector3 = Patterns.brick_random_color(Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), 1 / float(pseed))
+ var random_color_col : Color = Color(brc.x, brc.y, brc.z, 1)
+
+ #Position.x (float) - The position of each brick along the X axis",
+ #$(name_uv).y
+ var position_x_col : Color = Color(brick.g, brick.g, brick.g, 1)
+
+ #Position.y (float) - The position of each brick along the Y axis
+ #$(name_uv).z
+ var position_y_col : Color = Color(brick.b, brick.b, brick.b, 1)
+
+ #Brick UV (rgb) - An UV map output for each brick, to be connected to the Map input of a CustomUV node
+ #brick_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed))
+ var buv : Vector3 = Patterns.brick_uv(uv, Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), pseed)
+ var brick_uv_col : Color = Color(buv.x, buv.y, buv.z, 1)
+
+ #Corner UV (rgb) - An UV map output for each brick corner, to be connected to the Map input of a CustomUV node
+ #brick_corner_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $corner, float($seed))
+ var bcuv : Vector3 = Patterns.brick_corner_uv(uv, Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), mortar.get_value(uv), corner, pseed)
+ var corner_uv_col : Color = Color(bcuv.x, bcuv.y, bcuv.z, 1)
+
+ #Direction (float) - The direction of each brick (white: horizontal, black: vertical)
+ #0.5*(sign($(name_uv)_rect.z-$(name_uv)_rect.x-$(name_uv)_rect.w+$(name_uv)_rect.y)+1.0)
+ var d : float = 0.5 * (sign(brick_rect.b - brick_rect.r - brick_rect.a + brick_rect.g) + 1.0)
+ var direction_col : Color = Color(d, d, d, 1)
+
+ bricks_pattern.set_pixel(x, y, bricks_pattern_col)
+ random_color.set_pixel(x, y, random_color_col)
+ position_x.set_pixel(x, y, position_x_col)
+ position_y.set_pixel(x, y, position_y_col)
+ brick_uv.set_pixel(x, y, brick_uv_col)
+ corner_uv.set_pixel(x, y, corner_uv_col)
+ direction.set_pixel(x, y, direction_col)
+
+ bricks_pattern.unlock()
+ random_color.unlock()
+ position_x.unlock()
+ position_y.unlock()
+ brick_uv.unlock()
+ corner_uv.unlock()
+ direction.unlock()
+
+ out_bricks_pattern.set_value(bricks_pattern)
+ out_random_color.set_value(random_color)
+ out_position_x.set_value(position_x)
+ out_position_y.set_value(position_y)
+ out_brick_uv.set_value(brick_uv)
+ out_corner_uv.set_value(corner_uv)
+ out_direction.set_value(direction)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#type
+func get_type() -> int:
+ return type
+
+func set_type(val : int) -> void:
+ type = val
+
+ set_dirty(true)
+
+#repeat
+func get_repeat() -> int:
+ return repeat
+
+func set_repeat(val : int) -> void:
+ repeat = val
+
+ set_dirty(true)
+
+#col_row
+func get_col_row() -> Vector2:
+ return col_row
+
+func set_col_row(val : Vector2) -> void:
+ col_row = val
+
+ set_dirty(true)
+
+#offset
+func get_offset() -> float:
+ return offset
+
+func set_offset(val : float) -> void:
+ offset = val
+
+ set_dirty(true)
+
+#corner
+func get_corner() -> float:
+ return corner
+
+func set_corner(val : float) -> void:
+ corner = val
+
+ set_dirty(true)
+
+
diff --git a/game/addons/mat_maker_gd/nodes/pattern/iching.gd b/game/addons/mat_maker_gd/nodes/pattern/iching.gd
new file mode 100644
index 0000000..5daceba
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/iching.gd
@@ -0,0 +1,40 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var image : Resource
+export(Vector2) var size : Vector2 = Vector2(4, 4)
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 1)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #IChing(vec2($columns, $rows)*$uv, float($seed))
+ return Patterns.IChingc(uv, size, ps)
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/pattern.gd b/game/addons/mat_maker_gd/nodes/pattern/pattern.gd
new file mode 100644
index 0000000..1bc9ac1
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/pattern.gd
@@ -0,0 +1,72 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var image : Resource
+export(int, "Multiply,Add,Max,Min,Xor,Pow") var combiner_type : int = 0
+export(int, "Sine,Triangle,Square,Sawtooth,Constant,Bounce") var combiner_axis_type_x : int = 0
+export(int, "Sine,Triangle,Square,Sawtooth,Constant,Bounce") var combiner_axis_type_y : int = 0
+export(Vector2) var repeat : Vector2 = Vector2(4, 4)
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_combiner_type", "set_combiner_type", "Combiner Type", [ "Multiply", "Add" , "Max", "Min", "Xor", "Pow" ])
+ mm_graph_node.add_slot_enum("get_combiner_axis_type_x", "set_combiner_axis_type_x", "Combiner Axis type", [ "Sine", "Triangle", "Square", "Sawtooth", "Constant", "Bounce" ])
+ mm_graph_node.add_slot_enum("get_combiner_axis_type_y", "set_combiner_axis_type_y", "", [ "Sine", "Triangle", "Square", "Sawtooth", "Constant", "Bounce" ])
+ mm_graph_node.add_slot_vector2("get_repeat", "set_repeat", "Repeat", 1)#, Vector2(0, 32))
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = Patterns.pattern(uv, repeat.x, repeat.y, combiner_type, combiner_axis_type_x, combiner_axis_type_y)
+
+ return Color(f, f, f, 1)
+
+#combiner_type
+func get_combiner_type() -> int:
+ return combiner_type
+
+func set_combiner_type(val : int) -> void:
+ combiner_type = val
+
+ set_dirty(true)
+
+#combiner_axis_type_x
+func get_combiner_axis_type_x() -> int:
+ return combiner_axis_type_x
+
+func set_combiner_axis_type_x(val : int) -> void:
+ combiner_axis_type_x = val
+
+ set_dirty(true)
+
+#combiner_axis_type_y
+func get_combiner_axis_type_y() -> int:
+ return combiner_axis_type_y
+
+func set_combiner_axis_type_y(val : int) -> void:
+ combiner_axis_type_y = val
+
+ set_dirty(true)
+
+#repeat
+func get_repeat() -> Vector2:
+ return repeat
+
+func set_repeat(val : Vector2) -> void:
+ repeat = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/runes.gd b/game/addons/mat_maker_gd/nodes/pattern/runes.gd
new file mode 100644
index 0000000..fd7a965
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/runes.gd
@@ -0,0 +1,40 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var image : Resource
+export(Vector2) var size : Vector2 = Vector2(4, 4)
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 1)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var ps : float = 1.0 / float(pseed)
+
+ #Rune(vec2($columns, $rows)*$uv, float($seed))
+ return Patterns.runesc(uv, size, ps)
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/scratches.gd b/game/addons/mat_maker_gd/nodes/pattern/scratches.gd
new file mode 100644
index 0000000..f333b2d
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/scratches.gd
@@ -0,0 +1,82 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var image : Resource
+export(Vector2) var size : Vector2 = Vector2(0.25, 0.4)
+export(int) var layers : int = 4
+export(float) var waviness : float = 0.51
+export(int) var angle : int = 0
+export(float) var randomness : float = 0.44
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 0.01)
+ mm_graph_node.add_slot_int("get_layers", "set_layers", "Layers")
+ mm_graph_node.add_slot_float("get_waviness", "set_waviness", "Waviness", 0.01)
+ mm_graph_node.add_slot_int("get_angle", "set_angle", "Angle")
+ mm_graph_node.add_slot_float("get_randomness", "set_randomness", "Randomness", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #scratches($uv, int($layers), vec2($length, $width), $waviness, $angle, $randomness, vec2(float($seed), 0.0))
+ return Patterns.scratchesc(uv, layers, size, waviness, angle, randomness, Vector2(pseed, 0.0))
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ set_dirty(true)
+
+#layers
+func get_layers() -> int:
+ return layers
+
+func set_layers(val : int) -> void:
+ layers = val
+
+ set_dirty(true)
+
+#waviness
+func get_waviness() -> float:
+ return waviness
+
+func set_waviness(val : float) -> void:
+ waviness = val
+
+ set_dirty(true)
+
+#angle
+func get_angle() -> int:
+ return angle
+
+func set_angle(val : int) -> void:
+ angle = val
+
+ set_dirty(true)
+
+#randomness
+func get_randomness() -> float:
+ return randomness
+
+func set_randomness(val : float) -> void:
+ randomness = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd b/game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd
new file mode 100644
index 0000000..d343bfc
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd
@@ -0,0 +1,61 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var image : Resource
+export(float) var amplitude : float = 0.5
+export(float) var frequency : float = 2
+export(float) var phase : float = 0
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_amplitude", "set_amplitude", "Amplitude", 0.01)
+ mm_graph_node.add_slot_float("get_frequency", "set_frequency", "Frequency", 0.1)
+ mm_graph_node.add_slot_float("get_phase", "set_phase", "Phase", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = 1.0 - abs(2.0 * (uv.y - 0.5) - amplitude *sin((frequency * uv.x + phase)*6.28318530718))
+
+ return Color(f, f, f, 1)
+
+#amplitude
+func get_amplitude() -> float:
+ return amplitude
+
+func set_amplitude(val : float) -> void:
+ amplitude = val
+
+ set_dirty(true)
+
+#frequency
+func get_frequency() -> float:
+ return frequency
+
+func set_frequency(val : float) -> void:
+ frequency = val
+
+ set_dirty(true)
+
+#phase
+func get_phase() -> float:
+ return phase
+
+func set_phase(val : float) -> void:
+ phase = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/truchet.gd b/game/addons/mat_maker_gd/nodes/pattern/truchet.gd
new file mode 100644
index 0000000..b07ec96
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/truchet.gd
@@ -0,0 +1,53 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var image : Resource
+export(int, "Line,Circle") var shape : int = 0
+export(float) var size : float = 4
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_shape", "set_shape", "Shape", [ "Line", "Circle" ])
+ mm_graph_node.add_slot_float("get_size", "set_size", "Size", 1)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ if shape == 0:
+ return Patterns.truchet1c(uv, size, pseed)
+ elif shape == 1:
+ return Patterns.truchet2c(uv, size, pseed)
+
+ return Color()
+
+#shape
+func get_shape() -> int:
+ return shape
+
+func set_shape(val : int) -> void:
+ shape = val
+
+ set_dirty(true)
+
+#size
+func get_size() -> float:
+ return size
+
+func set_size(val : float) -> void:
+ size = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/pattern/weave.gd b/game/addons/mat_maker_gd/nodes/pattern/weave.gd
new file mode 100644
index 0000000..f846549
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/pattern/weave.gd
@@ -0,0 +1,134 @@
+tool
+extends MMNode
+
+var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd")
+
+export(Resource) var out_main : Resource
+export(Resource) var out_horizontal_map : Resource
+export(Resource) var out_vertical_map : Resource
+
+export(Vector2) var size : Vector2 = Vector2(4, 4)
+export(Resource) var width : Resource
+export(int) var stitch : int = 1
+
+func _init_properties():
+ if !out_main:
+ out_main = MMNodeUniversalProperty.new()
+ out_main.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_main.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_horizontal_map:
+ out_horizontal_map = MMNodeUniversalProperty.new()
+ out_horizontal_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_horizontal_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_vertical_map:
+ out_vertical_map = MMNodeUniversalProperty.new()
+ out_vertical_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_vertical_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !width:
+ width = MMNodeUniversalProperty.new()
+ width.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+ width.set_default_value(Vector2(0.9, 0.9))
+
+ width.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ width.slot_name = "Width"
+ width.value_step = 0.01
+ width.value_range = Vector2(0, 1)
+
+ register_output_property(out_main)
+ register_output_property(out_horizontal_map)
+ register_output_property(out_vertical_map)
+
+ register_input_property(width)
+
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(out_main)
+ mm_graph_node.add_slot_texture_universal(out_horizontal_map)
+ mm_graph_node.add_slot_texture_universal(out_vertical_map)
+
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size")#, Vector2(1, 32))#, Vector2(0, 32))
+ mm_graph_node.add_slot_vector2_universal(width)
+
+ mm_graph_node.add_slot_int("get_stitch", "set_stitch", "Stitch")
+
+
+func _render(material) -> void:
+ var main_pattern : Image = Image.new()
+ var horizontal_map : Image = Image.new()
+ var vertical_map : Image = Image.new()
+
+ main_pattern.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ horizontal_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ vertical_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ main_pattern.lock()
+ horizontal_map.lock()
+ vertical_map.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ for x in range(material.image_size.x):
+ for y in range(material.image_size.y):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ var width_val : Vector2 = width.get_value(uv)
+
+ #vec3 $(name_uv) = weave2($uv, vec2($columns, $rows), $stitch, $width_x*$width_map($uv), $width_y*$width_map($uv));
+ var weave : Vector3 = Patterns.weave2(uv, size, stitch, width_val.x, width_val.y);
+
+ #Outputs:
+
+ #Output (float) - Shows the generated greyscale weave pattern.
+ #$(name_uv).x
+ var main_pattern_col : Color = Color(weave.x, weave.x, weave.x, 1)
+
+ #Horizontal mask (float) - Horizontal mask
+ #$(name_uv).y
+ var horizontal_map_col : Color = Color(weave.y, weave.y, weave.y, 1)
+
+ #Vertical mask (float) - Mask for vertical stripes
+ #$(name_uv).z
+ var vertical_map_col : Color = Color(weave.z, weave.z, weave.z, 1)
+
+ main_pattern.set_pixel(x, y, main_pattern_col)
+ horizontal_map.set_pixel(x, y, horizontal_map_col)
+ vertical_map.set_pixel(x, y, vertical_map_col)
+
+ main_pattern.unlock()
+ horizontal_map.unlock()
+ vertical_map.unlock()
+
+ out_main.set_value(main_pattern)
+ out_horizontal_map.set_value(horizontal_map)
+ out_vertical_map.set_value(vertical_map)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ set_dirty(true)
+
+#stitch
+func get_stitch() -> int:
+ return stitch
+
+func set_stitch(val : int) -> void:
+ stitch = val
+
+ set_dirty(true)
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd
new file mode 100644
index 0000000..c7e8829
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd
@@ -0,0 +1,53 @@
+tool
+extends MMNode
+
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(float) var width : float = 0.1
+export(int) var ripples : int = 1
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01)
+ mm_graph_node.add_slot_int("get_ripples", "set_ripples", "Ripples")
+
+func get_property_value(uv : Vector2):
+ var val : float = output.get_value(uv, true)
+
+ return SDF2D.sdRipples(val, width, ripples)
+
+#width
+func get_width() -> float:
+ return width
+
+func set_width(val : float) -> void:
+ width = val
+
+ emit_changed()
+ output.emit_changed()
+
+#ripples
+func get_ripples() -> int:
+ return ripples
+
+func set_ripples(val : int) -> void:
+ ripples = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd
new file mode 100644
index 0000000..69ee787
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd
@@ -0,0 +1,76 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(Resource) var output : Resource
+export(int, "Union,Substraction,Intersection") var operation : int = 0
+
+func _init_properties():
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input1.slot_name = ">>> Input 1 "
+ if !input1.is_connected("changed", self, "on_input_changed"):
+ input1.connect("changed", self, "on_input_changed")
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input2.slot_name = ">>> Input 2 "
+
+ if !input2.is_connected("changed", self, "on_input_changed"):
+ input2.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = " Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input1)
+ register_input_property(input2)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ])
+
+func get_property_value(uv : Vector2) -> float:
+ if operation == 0:
+ return SDF2D.sdf_boolean_union(input1.get_value(uv), input2.get_value(uv))
+ elif operation == 1:
+ return SDF2D.sdf_boolean_substraction(input1.get_value(uv), input2.get_value(uv))
+ elif operation == 2:
+ return SDF2D.sdf_boolean_intersection(input1.get_value(uv), input2.get_value(uv))
+
+ return 0.0
+
+#operation
+func get_operation() -> int:
+ return operation
+
+func set_operation(val : int) -> void:
+ operation = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd
new file mode 100644
index 0000000..f61f6dc
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd
@@ -0,0 +1,43 @@
+tool
+extends MMNode
+
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(int) var count : int = 6
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_int("get_count", "set_count", "Count")
+
+func get_property_value(uv : Vector2):
+ #$in(circle_repeat_transform_2d($uv-vec2(0.5), $c)+vec2(0.5))
+ var new_uv : Vector2 = SDF2D.circle_repeat_transform_2d(uv - Vector2(0.5, 0.5), count) + Vector2(0.5, 0.5)
+
+ return output.get_value(new_uv, true)
+
+#count
+func get_count() -> int:
+ return count
+
+func set_count(val : int) -> void:
+ count = val
+
+ emit_changed()
+ output.emit_changed()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd
new file mode 100644
index 0000000..e5aee5b
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd
@@ -0,0 +1,69 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(Resource) var output : Resource
+export(float) var amount : float = 0.5
+
+func _init_properties():
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input1.slot_name = ">>> Input 1 "
+ if !input1.is_connected("changed", self, "on_input_changed"):
+ input1.connect("changed", self, "on_input_changed")
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input2.slot_name = ">>> Input 2 "
+
+ if !input2.is_connected("changed", self, "on_input_changed"):
+ input2.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = " Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input1)
+ register_input_property(input2)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.01)
+
+func get_property_value(uv : Vector2) -> float:
+ return SDF2D.sdf_morph(input1.get_value(uv), input2.get_value(uv), amount)
+
+#amount
+func get_amount() -> float:
+ return amount
+
+func set_amount(val : float) -> void:
+ amount = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd
new file mode 100644
index 0000000..f36ca99
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd
@@ -0,0 +1,68 @@
+tool
+extends MMNode
+
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(int) var x : int = 3
+export(int) var y : int = 3
+export(float) var random_rotation : float = 0.5
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_int("get_x", "set_x", "X")
+ mm_graph_node.add_slot_int("get_y", "set_y", "Y")
+ mm_graph_node.add_slot_float("get_random_rotation", "set_random_rotation", "Random rotation", 0.01)
+
+func get_property_value(uv : Vector2):
+ #todo add this as a parameter
+ var pseed : int = 123123
+
+ #$in(repeat_2d($uv, vec2(1.0/$rx, 1.0/$ry), float($seed), $r))
+ var new_uv : Vector2 = SDF2D.repeat_2d(uv, Vector2(1.0 / float(x), 1.0/ float(y)), 1.0/float(pseed), random_rotation)
+
+ return output.get_value(new_uv, true)
+#x
+func get_x() -> int:
+ return x
+
+func set_x(val : int) -> void:
+ x = val
+
+ emit_changed()
+ output.emit_changed()
+
+#y
+func get_y() -> int:
+ return y
+
+func set_y(val : int) -> void:
+ y = val
+
+ emit_changed()
+ output.emit_changed()
+
+#random_rotation
+func get_random_rotation() -> float:
+ return random_rotation
+
+func set_random_rotation(val : float) -> void:
+ random_rotation = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd
new file mode 100644
index 0000000..ac71fd5
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd
@@ -0,0 +1,42 @@
+tool
+extends MMNode
+
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(float) var radius : float = 0
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+
+func get_property_value(uv : Vector2):
+ var val : float = output.get_value(uv, true)
+
+ return SDF2D.sdf_rounded_shape(val, radius)
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd
new file mode 100644
index 0000000..3b7a768
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd
@@ -0,0 +1,88 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(Resource) var output : Resource
+export(int, "Union,Substraction,Intersection") var operation : int = 0
+export(float) var smoothness : float = 0.15
+
+func _init_properties():
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input1.slot_name = ">>> Input 1 "
+ if !input1.is_connected("changed", self, "on_input_changed"):
+ input1.connect("changed", self, "on_input_changed")
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input2.slot_name = ">>> Input 2 "
+
+ if !input2.is_connected("changed", self, "on_input_changed"):
+ input2.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = " Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input1)
+ register_input_property(input2)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ])
+ mm_graph_node.add_slot_float("get_smoothness", "set_smoothness", "Smoothness", 0.01)
+
+func get_property_value(uv : Vector2) -> float:
+ if operation == 0:
+ return SDF2D.sdf_smooth_boolean_union(input1.get_value(uv), input2.get_value(uv), smoothness)
+ elif operation == 1:
+ return SDF2D.sdf_smooth_boolean_substraction(input1.get_value(uv), input2.get_value(uv), smoothness)
+ elif operation == 2:
+ return SDF2D.sdf_smooth_boolean_intersection(input1.get_value(uv), input2.get_value(uv), smoothness)
+
+ return 0.0
+
+#operation
+func get_operation() -> int:
+ return operation
+
+func set_operation(val : int) -> void:
+ operation = val
+
+ emit_changed()
+ output.emit_changed()
+
+#smoothness
+func get_smoothness() -> float:
+ return smoothness
+
+func set_smoothness(val : float) -> void:
+ smoothness = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd
new file mode 100644
index 0000000..b543604
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd
@@ -0,0 +1,61 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(Vector2) var angle : Vector2 = Vector2(30, 150)
+export(float) var radius : float = 0.3
+export(float) var width : float = 0.1
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_angle", "set_angle", "Angle", 1)
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+ mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01)
+
+func get_property_value(uv : Vector2) -> float:
+ return SDF2D.sdf_arc(uv, angle, Vector2(radius, width))
+
+#angle
+func get_angle() -> Vector2:
+ return angle
+
+func set_angle(val : Vector2) -> void:
+ angle = val
+
+ emit_changed()
+ output.emit_changed()
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
+
+#width
+func get_width() -> float:
+ return width
+
+func set_width(val : float) -> void:
+ width = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd
new file mode 100644
index 0000000..35c866e
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd
@@ -0,0 +1,49 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(Vector2) var center : Vector2 = Vector2(0, 0)
+export(Vector2) var size : Vector2 = Vector2(0.3, 0.2)
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01)
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 0.01)
+
+func get_property_value(uv : Vector2) -> float:
+ return SDF2D.sdf_box(uv, center, size)
+
+#center
+func get_center() -> Vector2:
+ return center
+
+func set_center(val : Vector2) -> void:
+ center = val
+
+ emit_changed()
+ output.emit_changed()
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd
new file mode 100644
index 0000000..bc8488a
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd
@@ -0,0 +1,49 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(Vector2) var center : Vector2 = Vector2(0, 0)
+export(float) var radius : float = 0.4
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01)
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+
+func get_property_value(uv : Vector2) -> float:
+ return SDF2D.sdf_circle(uv, center, radius)
+
+#center
+func get_center() -> Vector2:
+ return center
+
+func set_center(val : Vector2) -> void:
+ center = val
+
+ emit_changed()
+ output.emit_changed()
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd
new file mode 100644
index 0000000..fa3a5e4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd
@@ -0,0 +1,74 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/curve_base.gd"
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+var Curves = preload("res://addons/mat_maker_gd/nodes/common/curves.gd")
+
+export(Resource) var output : Resource
+export(Vector2) var A : Vector2 = Vector2(-0.3, -0.3)
+export(Vector2) var B : Vector2 = Vector2(0.3, 0.3)
+export(float) var width : float = 0.1
+
+func _init():
+ init_points_11()
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_a", "set_a", "A", 0.01)
+ mm_graph_node.add_slot_vector2("get_b", "set_b", "B", 0.01)
+ mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01)
+ mm_graph_node.add_slot_curve()
+
+func get_property_value(uv : Vector2) -> float:
+ var line : Vector2 = SDF2D.sdf_line(uv, A, B, width)
+
+ #$(name_uv)_sdl.x - $r * $profile($(name_uv)_sdl.y)
+
+ return line.x - width * Curves.curve(line.y, points)
+
+#a
+func get_a() -> Vector2:
+ return A
+
+func set_a(val : Vector2) -> void:
+ A = val
+
+ emit_changed()
+ output.emit_changed()
+
+#b
+func get_b() -> Vector2:
+ return B
+
+func set_b(val : Vector2) -> void:
+ B = val
+
+ emit_changed()
+ output.emit_changed()
+
+#width
+func get_width() -> float:
+ return width
+
+func set_width(val : float) -> void:
+ width = val
+
+ emit_changed()
+ output.emit_changed()
+
+func _curve_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd
new file mode 100644
index 0000000..daecf36
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd
@@ -0,0 +1,29 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/polygon_base.gd"
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+ mm_graph_node.add_slot_polygon()
+
+func get_property_value(uv : Vector2) -> float:
+ return SDF2D.sdPolygon(uv, points)
+
+func _polygon_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd
new file mode 100644
index 0000000..07b5ed4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd
@@ -0,0 +1,49 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(Vector2) var center : Vector2 = Vector2(0, 0)
+export(Vector2) var size : Vector2 = Vector2(0.3, 0.2)
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01)
+ mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 0.01)
+
+func get_property_value(uv : Vector2) -> float:
+ return SDF2D.sdf_rhombus(uv, center, size)
+
+#center
+func get_center() -> Vector2:
+ return center
+
+func set_center(val : Vector2) -> void:
+ center = val
+
+ emit_changed()
+ output.emit_changed()
+
+#size
+func get_size() -> Vector2:
+ return size
+
+func set_size(val : Vector2) -> void:
+ size = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd
new file mode 100644
index 0000000..65697a7
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd
@@ -0,0 +1,67 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(float) var bevel : float = 0
+export(float) var base : float = 0
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ #for some reason this doesn't work, todo check
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = "Input"
+
+ register_output_property(image)
+ register_input_property(input)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_label_universal(input)
+
+ mm_graph_node.add_slot_float("get_bevel", "set_bevel", "Bevel", 0.01)
+ mm_graph_node.add_slot_float("get_base", "set_base", "Base", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = input.get_value(uv)
+
+ #clamp($base-$in($uv)/max($bevel, 0.00001), 0.0, 1.0)
+ var cf : float = clamp(base - f / max(bevel, 0.00001), 0.0, 1.0)
+
+ return Color(cf, cf, cf, 1)
+
+#bevel
+func get_bevel() -> float:
+ return bevel
+
+func set_bevel(val : float) -> void:
+ bevel = val
+
+ set_dirty(true)
+
+#base
+func get_base() -> float:
+ return base
+
+func set_base(val : float) -> void:
+ base = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd
new file mode 100644
index 0000000..9ec52f7
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd
@@ -0,0 +1,41 @@
+tool
+extends MMNode
+
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(float) var angle : float = 0
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_angle", "set_angle", "Angle", 1)
+
+func get_property_value(uv : Vector2):
+ #$in(sdf2d_rotate($uv, $a*0.01745329251))",
+ return output.get_value(SDF2D.sdf2d_rotate(uv, angle * 0.01745329251), true)
+
+#angle
+func get_angle() -> float:
+ return angle
+
+func set_angle(val : float) -> void:
+ angle = val
+
+ emit_changed()
+ output.emit_changed()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd
new file mode 100644
index 0000000..f6302fa
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd
@@ -0,0 +1,41 @@
+tool
+extends MMNode
+
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var output : Resource
+export(float) var scale : float = 1
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_scale", "set_scale", "Scale", 0.01)
+
+func get_property_value(uv : Vector2):
+ #$in(($uv-vec2(0.5))/$s+vec2(0.5))*$s
+ return output.get_value(((uv - Vector2(0.5, 0.5)) / scale + Vector2(0.5, 0.5)), true)
+
+#scale
+func get_scale() -> float:
+ return scale
+
+func set_scale(val : float) -> void:
+ scale = val
+
+ emit_changed()
+ output.emit_changed()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd
new file mode 100644
index 0000000..c3099e0
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd
@@ -0,0 +1,38 @@
+tool
+extends MMNode
+
+export(Resource) var output : Resource
+export(Vector2) var translation : Vector2 = Vector2(0, 0)
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Apply >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(output)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_translation", "set_translation", "Translation", 0.01)
+
+func get_property_value(uv : Vector2):
+ return output.get_value(uv - translation, true)
+
+#a
+func get_translation() -> Vector2:
+ return translation
+
+func set_translation(val : Vector2) -> void:
+ translation = val
+
+ emit_changed()
+ output.emit_changed()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd
new file mode 100644
index 0000000..4c26ee4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd
@@ -0,0 +1,59 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(float) var color : float = 0.5
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_color", "set_color", "Color", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ var v : Vector2 = input.get_value_sdf3d(uv3)
+
+ v.y = color
+
+ return v
+
+
+#color
+func get_color() -> float:
+ return color
+
+func set_color(val : float) -> void:
+ color = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd
new file mode 100644
index 0000000..bff3538
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd
@@ -0,0 +1,79 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(Resource) var output : Resource
+export(int, "Union,Substraction,Intersection") var operation : int = 0
+
+func _init_properties():
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input1.slot_name = ">>> Input 1 "
+
+ if !input1.is_connected("changed", self, "on_input_changed"):
+ input1.connect("changed", self, "on_input_changed")
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input2.slot_name = ">>> Input 2 "
+
+ if !input2.is_connected("changed", self, "on_input_changed"):
+ input2.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input1)
+ register_input_property(input2)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ])
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ var s1 : Vector2 = input1.get_value_sdf3d(uv3)
+ var s2 : Vector2 = input2.get_value_sdf3d(uv3)
+
+ if operation == 0:
+ return SDF3D.sdf3dc_union(s1, s2)
+ elif operation == 1:
+ return SDF3D.sdf3dc_sub(s1, s2)
+ elif operation == 2:
+ return SDF3D.sdf3dc_inter(s1, s2)
+
+ return Vector2()
+
+#operation
+func get_operation() -> int:
+ return operation
+
+func set_operation(val : int) -> void:
+ operation = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd
new file mode 100644
index 0000000..9186c89
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd
@@ -0,0 +1,59 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(int) var count : int = 5
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_int("get_count", "set_count", "Count")
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #todo make seed a class variable probably into MMNode
+
+ var new_uv : Vector3 = SDF3D.circle_repeat_transform(uv3, count)
+
+ return input.get_value_sdf3d(new_uv)
+
+#count
+func get_count() -> int:
+ return count
+
+func set_count(val : int) -> void:
+ count = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd
new file mode 100644
index 0000000..b0b52d2
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd
@@ -0,0 +1,59 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(Vector3) var length : Vector3 = Vector3(0.2, 0, 0)
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector3("get_length", "set_length", "Length", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #$in($uv - clamp($uv, -abs(vec3($x, $y, $z)), abs(vec3($x, $y, $z))))
+
+ var new_uv : Vector3 = uv3 - Commons.clampv3(uv3, -Commons.absv3(length), Commons.absv3(length))
+
+ return input.get_value_sdf3d(new_uv)
+
+
+#length
+func get_length() -> Vector3:
+ return length
+
+func set_length(val : Vector3) -> void:
+ length = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd
new file mode 100644
index 0000000..7f7613a
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd
@@ -0,0 +1,63 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(float) var length : float = 0.25
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_length", "set_length", "Length", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #vec2 $(name_uv)_w = vec2($in($uv.xz+vec2(0.5)),abs($uv.y)-$d);
+ #ret min(max($(name_uv)_w.x,$(name_uv)_w.y),0.0)+length(max($(name_uv)_w,0.0))
+
+ var f : float = input.get_value(Vector2(uv3.x, uv3.z) + Vector2(0.5, 0.5))
+ var w : Vector2 = Vector2(f, abs(uv3.y) - length)
+
+ var ff : float = min(max(w.x,w.y),0.0) + Commons.maxv2(w, Vector2()).length()
+
+ return Vector2(ff, 0)
+
+#length
+func get_length() -> float:
+ return length
+
+func set_length(val : float) -> void:
+ length = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd
new file mode 100644
index 0000000..67f70a6
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd
@@ -0,0 +1,74 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(Resource) var output : Resource
+export(float) var amount : float = 0.5
+
+func _init_properties():
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input1.slot_name = ">>> Input 1 "
+
+ if !input1.is_connected("changed", self, "on_input_changed"):
+ input1.connect("changed", self, "on_input_changed")
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input2.slot_name = ">>> Input 2 "
+
+ if !input2.is_connected("changed", self, "on_input_changed"):
+ input2.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input1)
+ register_input_property(input2)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ var s1 : Vector2 = input1.get_value_sdf3d(uv3)
+ var s2 : Vector2 = input2.get_value_sdf3d(uv3)
+
+ #mix($in1($uv), $in2($uv), $amount)
+
+ return lerp(s1, s2, amount)
+
+#amount
+func get_amount() -> float:
+ return amount
+
+func set_amount(val : float) -> void:
+ amount = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd
new file mode 100644
index 0000000..f428e96
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd
@@ -0,0 +1,71 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(Vector2) var col_row : Vector2 = Vector2(3, 3)
+export(float) var rotation : float = 0.3
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector2("get_col_row", "set_col_row", "Col,Row", 1)
+ mm_graph_node.add_slot_float("get_rotation", "set_rotation", "Rotation", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #todo make seed a class variable probably into MMNode
+
+ var new_uv : Vector3 = SDF3D.sdf3d_repeat(uv3, col_row, rotation, 1)
+
+ return input.get_value_sdf3d(new_uv)
+
+#col_row
+func get_col_row() -> Vector2:
+ return col_row
+
+func set_col_row(val : Vector2) -> void:
+ col_row = val
+
+ emit_changed()
+ output.emit_changed()
+
+#rotation
+func get_rotation() -> float:
+ return rotation
+
+func set_rotation(val : float) -> void:
+ rotation = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd
new file mode 100644
index 0000000..98df2ab
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd
@@ -0,0 +1,60 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(float) var offset : float = 0.25
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_offset", "set_offset", "Offset", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #vec2 $(name_uv)_q = vec2(length($uv.xy) - $d + 0.5, $uv.z + 0.5);
+
+ var uv : Vector2 = Vector2(Vector2(uv3.x, uv3.y).length() - offset + 0.5, uv3.z + 0.5)
+ var f : float = input.get_value(uv)
+
+ return Vector2(f, 0)
+
+#offset
+func get_offset() -> float:
+ return offset
+
+func set_offset(val : float) -> void:
+ offset = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd
new file mode 100644
index 0000000..338c510
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd
@@ -0,0 +1,61 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(float) var radius : float = 0.15
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ var v : Vector2 = input.get_value_sdf3d(uv3)
+
+ #vec2($(name_uv)_v.x-$r, $(name_uv)_v.y)
+
+ v.x -= radius
+
+ return v
+
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd
new file mode 100644
index 0000000..01e03fe
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd
@@ -0,0 +1,91 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input1 : Resource
+export(Resource) var input2 : Resource
+export(Resource) var output : Resource
+export(int, "Union,Substraction,Intersection") var operation : int = 0
+export(float) var smoothness : float = 0.15
+
+func _init_properties():
+ if !input1:
+ input1 = MMNodeUniversalProperty.new()
+ input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input1.slot_name = ">>> Input 1 "
+
+ if !input1.is_connected("changed", self, "on_input_changed"):
+ input1.connect("changed", self, "on_input_changed")
+
+ if !input2:
+ input2 = MMNodeUniversalProperty.new()
+ input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input2.slot_name = ">>> Input 2 "
+
+ if !input2.is_connected("changed", self, "on_input_changed"):
+ input2.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input1)
+ register_input_property(input2)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input1)
+ mm_graph_node.add_slot_label_universal(input2)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ])
+ mm_graph_node.add_slot_float("get_smoothness", "set_smoothness", "Smoothness", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ var s1 : Vector2 = input1.get_value_sdf3d(uv3)
+ var s2 : Vector2 = input2.get_value_sdf3d(uv3)
+
+ if operation == 0:
+ return SDF3D.sdf3d_smooth_union(s1, s2, smoothness)
+ elif operation == 1:
+ return SDF3D.sdf3d_smooth_subtraction(s1, s2, smoothness)
+ elif operation == 2:
+ return SDF3D.sdf3d_smooth_intersection(s1, s2, smoothness)
+
+ return Vector2()
+
+#operation
+func get_operation() -> int:
+ return operation
+
+func set_operation(val : int) -> void:
+ operation = val
+
+ emit_changed()
+ output.emit_changed()
+
+#smoothness
+func get_smoothness() -> float:
+ return smoothness
+
+func set_smoothness(val : float) -> void:
+ smoothness = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd
new file mode 100644
index 0000000..4bd2918
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd
@@ -0,0 +1,179 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+
+export(Resource) var out_height_map : Resource
+export(Resource) var out_normal_map : Resource
+export(Resource) var out_color_map : Resource
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ #for some reason this doesn't work, todo check
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = "Input"
+
+ if !out_height_map:
+ out_height_map = MMNodeUniversalProperty.new()
+ out_height_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_height_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_normal_map:
+ out_normal_map = MMNodeUniversalProperty.new()
+ out_normal_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_normal_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !out_color_map:
+ out_color_map = MMNodeUniversalProperty.new()
+ out_color_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ out_color_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(out_height_map)
+ register_output_property(out_normal_map)
+ register_output_property(out_color_map)
+ register_input_property(input)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(out_height_map)
+ mm_graph_node.add_slot_texture_universal(out_normal_map)
+ mm_graph_node.add_slot_texture_universal(out_color_map)
+
+
+func _render(material) -> void:
+ var height_map : Image = Image.new()
+ var normal_map : Image = Image.new()
+ var color_map : Image = Image.new()
+
+ height_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ normal_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ color_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ height_map.lock()
+ normal_map.lock()
+ color_map.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ for x in range(material.image_size.x):
+ for y in range(material.image_size.y):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ var raymarch : Vector2 = sdf3d_raymarch(uv)
+
+ #HeightMap - float - The generated height map
+ #1.0-$(name_uv)_d.x
+ var hmf : float = 1.0 - raymarch.x
+ var height_map_col : Color = Color(hmf, hmf, hmf, 1)
+
+ #NormalMap - rgb - The generated normal map
+ #vec3(0.5) + 0.5* normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d.x))
+ var nuv : Vector2 = uv - Vector2(0.5, 0.5)
+ var n : Vector3 = sdf3d_normal(Vector3(nuv.x, nuv.y, 1.0 - raymarch.x))
+ var nn : Vector3 = Vector3(0.5, 0.5, 0.5) + 0.5 * n
+
+ var normal_map_col : Color = Color(nn.x, nn.y, nn.z, 1)
+
+ #ColorMap - float - The generated color index map
+ #$(name_uv)_d.y
+ var color_map_col : Color = Color(raymarch.y, raymarch.y, raymarch.y, 1)
+
+ height_map.set_pixel(x, y, height_map_col)
+ normal_map.set_pixel(x, y, normal_map_col)
+ color_map.set_pixel(x, y, color_map_col)
+
+ height_map.unlock()
+ normal_map.unlock()
+ color_map.unlock()
+
+ out_height_map.set_value(height_map)
+ out_normal_map.set_value(normal_map)
+ out_color_map.set_value(color_map)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#vec2 raymarch_$name(vec2 uv) {
+# vec3 ro = vec3(uv-vec2(0.5), 1.0);
+# vec3 rd = vec3(0.0, 0.0, -1.0);
+# float dO = 0.0;
+# float c = 0.0;
+#
+# for (int i=0; i < 100; i++) {
+# vec3 p = ro + rd*dO;
+# vec2 dS = $sdf(p);
+# dO += dS.x;
+#
+# if (dO >= 1.0) {
+# break;
+# } else if (dS.x < 0.0001) {
+# c = dS.y;
+# break;
+# }
+# }
+#
+# return vec2(dO, c);
+#}
+
+func sdf3d_raymarch(uv : Vector2) -> Vector2:
+ var ro : Vector3 = Vector3(uv.x - 0.5, uv.y - 0.5, 1.0);
+ var rd : Vector3 = Vector3(0.0, 0.0, -1.0);
+ var dO : float = 0.0;
+ var c : float = 0.0;
+
+ for i in range(100):
+ var p : Vector3 = ro + rd * dO;
+ var dS : Vector2 = input.get_value_sdf3d(p)
+
+ dO += dS.x;
+
+ if (dO >= 1.0):
+ break;
+ elif (dS.x < 0.0001):
+ c = dS.y;
+ break;
+
+ return Vector2(dO, c);
+
+#vec3 normal_$name(vec3 p) {
+# if (p.z <= 0.0) {
+# return vec3(0.0, 0.0, 1.0);
+# }
+#
+# float d = $sdf(p).x;
+# float e = .001;
+# vec3 n = d - vec3(
+# $sdf(p-vec3(e, 0.0, 0.0)).x,
+# $sdf(p-vec3(0.0, e, 0.0)).x,
+# $sdf(p-vec3(0.0, 0.0, e)).x);
+#
+# return vec3(-1.0, -1.0, -1.0)*normalize(n);
+#}
+
+func sdf3d_normal(p : Vector3) -> Vector3:
+ if (p.z <= 0.0):
+ return Vector3(0.0, 0.0, 1.0);
+
+ var d : float = input.get_value_sdf3d(p).x
+ var e : float = .001;
+
+ var n : Vector3 = Vector3(
+ d - input.get_value_sdf3d(p - Vector3(e, 0.0, 0.0)).x,
+ d - input.get_value_sdf3d(p - Vector3(0.0, e, 0.0)).x,
+ d - input.get_value_sdf3d(p - Vector3(0.0, 0.0, e)).x)
+
+ return Vector3(-1.0, -1.0, -1.0) * n.normalized()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd
new file mode 100644
index 0000000..3711c3c
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd
@@ -0,0 +1,49 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var output : Resource
+export(Vector3) var size : Vector3 = Vector3(0.3, 0.25, 0.25)
+export(float) var radius : float = 0.01
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector3("get_size", "set_size", "Size", 0.01)
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ return SDF3D.sdf3d_box(uv3, size.x, size.y, size.z, radius)
+
+#size
+func get_size() -> Vector3:
+ return size
+
+func set_size(val : Vector3) -> void:
+ size = val
+
+ emit_changed()
+ output.emit_changed()
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd
new file mode 100644
index 0000000..138f881
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd
@@ -0,0 +1,111 @@
+tool
+extends "res://addons/mat_maker_gd/nodes/bases/curve_base.gd"
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+var Curves = preload("res://addons/mat_maker_gd/nodes/common/curves.gd")
+
+export(Resource) var output : Resource
+export(int, "X,Y,Z") var axis : int = 1
+export(float) var length : float = 0.3
+export(float) var radius : float = 0.2
+
+func _init():
+ init_points_11()
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Z" ])
+ mm_graph_node.add_slot_float("get_length", "set_length", "Length", 0.01)
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+ mm_graph_node.add_slot_curve()
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ if axis == 0:
+ return sdf3d_capsule_x(uv3, radius, length)
+ elif axis == 1:
+ return sdf3d_capsule_y(uv3, radius, length)
+ elif axis == 2:
+ return sdf3d_capsule_z(uv3, radius, length)
+
+ return Vector2()
+
+#vec3 $(name_uv)_p = $uv;
+#$(name_uv)_p.$axis -= clamp($(name_uv)_p.$axis, -$l, $l);
+#return length($(name_uv)_p) - $r * $profile(clamp(0.5+0.5*($uv).$axis/$l, 0.0, 1.0))
+
+func sdf3d_capsule_y(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector3 = p;
+ v.y -= clamp(v.y, -l, l);
+
+ var cx : float = clamp(0.5 + 0.5 * p.y / l, 0.0, 1.0)
+ var cp : float = Curves.curve(cx, points)
+ var f : float = v.length() - r * cp
+
+ return Vector2(f, 0.0);
+
+func sdf3d_capsule_x(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector3 = p;
+ v.x -= clamp(v.x, -l, l);
+
+ var cx : float = clamp(0.5 + 0.5 * p.x / l, 0.0, 1.0)
+ var cp : float = Curves.curve(cx, points)
+ var f : float = v.length() - r * cp
+
+ return Vector2(f, 0.0);
+
+func sdf3d_capsule_z(p : Vector3, r : float, l : float) -> Vector2:
+ var v : Vector3 = p;
+ v.z -= clamp(v.z, -l, l);
+
+ var cx : float = clamp(0.5 + 0.5 * p.z / l, 0.0, 1.0)
+ var cp : float = Curves.curve(cx, points)
+ var f : float = v.length() - r * cp
+
+ return Vector2(f, 0.0);
+
+#axis
+func get_axis() -> int:
+ return axis
+
+func set_axis(val : int) -> void:
+ axis = val
+
+ emit_changed()
+ output.emit_changed()
+
+#length
+func get_length() -> float:
+ return length
+
+func set_length(val : float) -> void:
+ length = val
+
+ emit_changed()
+ output.emit_changed()
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
+
+func _curve_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd
new file mode 100644
index 0000000..9151b46
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd
@@ -0,0 +1,63 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var output : Resource
+export(int, "+X,-X,+Y,-Y,+Z,-Z") var axis : int = 2
+export(float) var angle : float = 30
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "+X", "-X", "+Y", "-Y", "+Z", "-Z" ])
+ mm_graph_node.add_slot_float("get_angle", "set_angle", "Angle", 1)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ if axis == 0:
+ return SDF3D.sdf3d_cone_px(uv3, angle)
+ elif axis == 1:
+ return SDF3D.sdf3d_cone_nx(uv3, angle)
+ elif axis == 2:
+ return SDF3D.sdf3d_cone_py(uv3, angle)
+ elif axis == 3:
+ return SDF3D.sdf3d_cone_ny(uv3, angle)
+ elif axis == 4:
+ return SDF3D.sdf3d_cone_pz(uv3, angle)
+ elif axis == 5:
+ return SDF3D.sdf3d_cone_nz(uv3, angle)
+
+ return Vector2()
+
+#axis
+func get_axis() -> int:
+ return axis
+
+func set_axis(val : int) -> void:
+ axis = val
+
+ emit_changed()
+ output.emit_changed()
+
+#angle
+func get_angle() -> float:
+ return angle
+
+func set_angle(val : float) -> void:
+ angle = val
+
+ emit_changed()
+ output.emit_changed()
+
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd
new file mode 100644
index 0000000..f13c3c2
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd
@@ -0,0 +1,68 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var output : Resource
+export(int, "X,Y,Z") var axis : int = 1
+export(float) var length : float = 0.25
+export(float) var radius : float = 0.25
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Z" ])
+ mm_graph_node.add_slot_float("get_length", "set_length", "Length", 0.01)
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ if axis == 0:
+ return SDF3D.sdf3d_cylinder_x(uv3, radius, length)
+ elif axis == 1:
+ return SDF3D.sdf3d_cylinder_y(uv3, radius, length)
+ elif axis == 2:
+ return SDF3D.sdf3d_cylinder_z(uv3, radius, length)
+
+ return Vector2()
+
+#axis
+func get_axis() -> int:
+ return axis
+
+func set_axis(val : int) -> void:
+ axis = val
+
+ emit_changed()
+ output.emit_changed()
+
+#length
+func get_length() -> float:
+ return length
+
+func set_length(val : float) -> void:
+ length = val
+
+ emit_changed()
+ output.emit_changed()
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd
new file mode 100644
index 0000000..145206b
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd
@@ -0,0 +1,37 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var output : Resource
+export(float) var radius : float = 0.5
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ return SDF3D.sdf3d_sphere(uv3, radius)
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd
new file mode 100644
index 0000000..682bba5
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd
@@ -0,0 +1,68 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var output : Resource
+export(int, "X,Y,Z") var axis : int = 2
+export(float) var major_radius : float = 0.3
+export(float) var minor_radius : float = 0.15
+
+func _init_properties():
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Z" ])
+ mm_graph_node.add_slot_float("get_major_radius", "set_major_radius", "Major_radius", 0.01)
+ mm_graph_node.add_slot_float("get_minor_radius", "set_minor_radius", "Minor_radius", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ if axis == 0:
+ return SDF3D.sdf3d_torus_x(uv3, major_radius, minor_radius)
+ elif axis == 1:
+ return SDF3D.sdf3d_torus_y(uv3, major_radius, minor_radius)
+ elif axis == 2:
+ return SDF3D.sdf3d_torus_z(uv3, major_radius, minor_radius)
+
+ return Vector2()
+
+#axis
+func get_axis() -> int:
+ return axis
+
+func set_axis(val : int) -> void:
+ axis = val
+
+ emit_changed()
+ output.emit_changed()
+
+#major_radius
+func get_major_radius() -> float:
+ return major_radius
+
+func set_major_radius(val : float) -> void:
+ major_radius = val
+
+ emit_changed()
+ output.emit_changed()
+
+#minor_radius
+func get_minor_radius() -> float:
+ return minor_radius
+
+func set_minor_radius(val : float) -> void:
+ minor_radius = val
+
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd
new file mode 100644
index 0000000..114056c
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd
@@ -0,0 +1,57 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(Vector3) var rotation : Vector3 = Vector3()
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector3("get_rotation", "set_rotation", "Rotation", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #$in(rotate3d($uv, -vec3($ax, $ay, $az)*0.01745329251))
+
+ return input.get_value_sdf3d(SDF3D.rotate3d(uv3, -rotation * 0.01745329251))
+
+#rotation
+func get_rotation() -> Vector3:
+ return rotation
+
+func set_rotation(val : Vector3) -> void:
+ rotation = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd
new file mode 100644
index 0000000..e29b633
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd
@@ -0,0 +1,56 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(float) var scale : float = 1
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_float("get_scale", "set_scale", "Scale", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #vec2 $(name_uv)_in = $in(($uv)/$s);
+ return input.get_value_sdf3d(uv3 / scale)
+
+#scale
+func get_scale() -> float:
+ return scale
+
+func set_scale(val : float) -> void:
+ scale = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd
new file mode 100644
index 0000000..b166af9
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd
@@ -0,0 +1,56 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
+
+export(Resource) var input : Resource
+export(Resource) var output : Resource
+export(Vector3) var translation : Vector3 = Vector3()
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2
+ input.slot_name = ">>> Input "
+
+ if !input.is_connected("changed", self, "on_input_changed"):
+ input.connect("changed", self, "on_input_changed")
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ output.slot_name = ">>> Output >>>"
+ output.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(output)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(output)
+
+ mm_graph_node.add_slot_vector3("get_translation", "set_translation", "Translation", 0.01)
+
+func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
+ #$in($uv-vec3($x, $y, $z))
+ return input.get_value_sdf3d(uv3 - translation)
+
+#translation
+func get_translation() -> Vector3:
+ return translation
+
+func set_translation(val : Vector3) -> void:
+ translation = val
+
+ emit_changed()
+ output.emit_changed()
+
+func on_input_changed() -> void:
+ emit_changed()
+ output.emit_changed()
diff --git a/game/addons/mat_maker_gd/nodes/simple/curve.gd b/game/addons/mat_maker_gd/nodes/simple/curve.gd
new file mode 100644
index 0000000..c6ed800
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/simple/curve.gd
@@ -0,0 +1,118 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd")
+
+export(Resource) var image : Resource
+
+export(Resource) var input : Resource
+export(Vector2) var a : Vector2 = Vector2(-0.35, -0.2)
+export(Vector2) var b : Vector2 = Vector2(0, 0.5)
+export(Vector2) var c : Vector2 = Vector2(0.35, -0.2)
+export(float) var width : float = 0.05
+export(int) var repeat : int = 1
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input.set_default_value(1.0)
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_label_universal(input)
+
+ mm_graph_node.add_slot_vector2("get_a", "set_a", "A", 0.01)
+ mm_graph_node.add_slot_vector2("get_b", "set_b", "B", 0.01)
+ mm_graph_node.add_slot_vector2("get_c", "set_c", "C", 0.01)
+ mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01)
+ mm_graph_node.add_slot_int("get_repeat", "set_repeat", "Repeat")
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var nuv : Vector2 = transform_uv(uv)
+
+ var f : float = 0
+
+ if nuv.x != 0 && nuv.y != 0:
+ f = input.get_value(nuv)
+
+ return Color(f, f, f, 1)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func transform_uv(uv : Vector2) -> Vector2:
+ #vec2 $(name_uv)_bezier = sdBezier($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5), vec2($cx+0.5, $cy+0.5));
+ var bezier : Vector2 = SDF2D.sdBezier(uv, Vector2(a.x + 0.5, a.y + 0.5), Vector2(b.x + 0.5, b.y + 0.5), Vector2(c.x + 0.5, c.y + 0.5))
+
+ #vec2 $(name_uv)_uv = vec2($(name_uv)_bezier.x, $(name_uv)_bezier.y / $width+0.5);
+ var new_uv : Vector2 = Vector2(bezier.x, bezier.y / width + 0.5)
+
+ #vec2 $(name_uv)_uvtest = step(vec2(0.5), abs($(name_uv)_uv-vec2(0.5)));
+ var uv_test : Vector2 = Commons.stepv2(Vector2(0.5, 0.5), Commons.absv2(new_uv - Vector2(0.5, 0.5)))
+
+ #$(name_uv)_uv = mix(vec2(fract($repeat*$(name_uv)_uv.x), $(name_uv)_uv.y), vec2(0.0), max($(name_uv)_uvtest.x, $(name_uv)_uvtest.y));
+ var final_uv : Vector2 = lerp(Vector2(Commons.fract(repeat * new_uv.x), new_uv.y), Vector2(), max(uv_test.x, uv_test.y))
+
+ return final_uv
+
+#b
+func get_a() -> Vector2:
+ return a
+
+func set_a(val : Vector2) -> void:
+ a = val
+
+ set_dirty(true)
+
+#b
+func get_b() -> Vector2:
+ return b
+
+func set_b(val : Vector2) -> void:
+ b = val
+
+ set_dirty(true)
+
+#c
+func get_c() -> Vector2:
+ return c
+
+func set_c(val : Vector2) -> void:
+ c = val
+
+ set_dirty(true)
+
+#width
+func get_width() -> float:
+ return width
+
+func set_width(val : float) -> void:
+ width = val
+
+ set_dirty(true)
+
+#repeat
+func get_repeat() -> int:
+ return repeat
+
+func set_repeat(val : int) -> void:
+ repeat = val
+
+ set_dirty(true)
+
diff --git a/game/addons/mat_maker_gd/nodes/simple/image.gd b/game/addons/mat_maker_gd/nodes/simple/image.gd
new file mode 100644
index 0000000..033a9eb
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/simple/image.gd
@@ -0,0 +1,41 @@
+tool
+extends MMNode
+
+export(Resource) var image : Resource
+export(String) var image_path : String
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_image_path_universal(image, "get_image_path", "set_image_path")
+
+#func _render(material) -> void:
+# var img : Image = render_image(material)
+#
+# image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return image.get_value(uv)
+
+func get_image_path() -> String:
+ return image_path
+
+func set_image_path(val : String) -> void:
+ image_path = val
+
+ var img : Image = Image.new()
+
+ if image_path && image_path != "":
+ img.load(image_path)
+
+ image.set_value(img)
+
+ set_dirty(true)
+
diff --git a/game/addons/mat_maker_gd/nodes/simple/shape.gd b/game/addons/mat_maker_gd/nodes/simple/shape.gd
new file mode 100644
index 0000000..0104274
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/simple/shape.gd
@@ -0,0 +1,101 @@
+tool
+extends MMNode
+
+var Shapes = preload("res://addons/mat_maker_gd/nodes/common/shapes.gd")
+
+enum ShapeType {
+ SHAPE_TYPE_CIRCLE = 0,
+ SHAPE_TYPE_POLYGON = 1,
+ SHAPE_TYPE_STAR = 2,
+ SHAPE_TYPE_CURVED_STAR = 3,
+ SHAPE_TYPE_RAYS = 4,
+}
+
+export(Resource) var image : Resource
+export(int, "Circle,Polygon,Star,Curved Star,Rays") var shape_type : int = 0
+export(int) var sides : int = 6
+export(Resource) var radius : Resource
+export(Resource) var edge : Resource
+
+func _init_properties():
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !radius:
+ radius = MMNodeUniversalProperty.new()
+ radius.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ radius.set_default_value(0.34375)
+
+ radius.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ radius.slot_name = "radius"
+ radius.value_step = 0.05
+
+ if !edge:
+ edge = MMNodeUniversalProperty.new()
+ edge.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ edge.set_default_value(0.2)
+
+ edge.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ edge.slot_name = "edge"
+ edge.value_step = 0.05
+
+ register_input_property(radius)
+ register_input_property(edge)
+
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_shape_typoe", "set_shape_typoe", "shape_type", [ "Circle", "Polygon", "Star", "Curved Star", "Rays" ])
+ mm_graph_node.add_slot_int("get_sides", "set_sides", "sides")#, Vector2(1, 10))
+ mm_graph_node.add_slot_float_universal(radius)
+ mm_graph_node.add_slot_float_universal(edge)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var c : float = 0
+
+ var rad : float = radius.get_value(uv)
+ var edg : float = edge.get_value(uv)
+
+ if rad == 0:
+ rad = 0.0000001
+
+ if edg == 0:
+ edg = 0.0000001
+
+ if shape_type == ShapeType.SHAPE_TYPE_CIRCLE:
+ c = Shapes.shape_circle(uv, sides, rad, edg)
+ elif shape_type == ShapeType.SHAPE_TYPE_POLYGON:
+ c = Shapes.shape_polygon(uv, sides, rad, edg)
+ elif shape_type == ShapeType.SHAPE_TYPE_STAR:
+ c = Shapes.shape_star(uv, sides, rad, edg)
+ elif shape_type == ShapeType.SHAPE_TYPE_CURVED_STAR:
+ c = Shapes.shape_curved_star(uv, sides, rad, edg)
+ elif shape_type == ShapeType.SHAPE_TYPE_RAYS:
+ c = Shapes.shape_rays(uv, sides, rad, edg)
+
+ return Color(c, c, c, 1)
+
+func get_shape_typoe() -> int:
+ return shape_type
+
+func set_shape_typoe(val : int) -> void:
+ shape_type = val
+
+ set_dirty(true)
+
+func get_sides() -> int:
+ return sides
+
+func set_sides(val : int) -> void:
+ sides = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/circle_map.gd b/game/addons/mat_maker_gd/nodes/transform/circle_map.gd
new file mode 100644
index 0000000..fb8e710
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/circle_map.gd
@@ -0,0 +1,70 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+
+export(float) var radius : float = 1
+export(int) var repeat : int = 1
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
+ mm_graph_node.add_slot_int("get_repeat", "set_repeat", "Repeat")
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$in(vec2(fract($repeat*atan($uv.y-0.5, $uv.x-0.5)*0.15915494309), min(0.99999, 2.0/$radius*length($uv-vec2(0.5)))))",
+
+ var nuv : Vector2 = Vector2(Commons.fractf(repeat*atan2(uv.y - 0.5, uv.x - 0.5) * 0.15915494309), min(0.99999, 2.0 / radius * (uv - Vector2(0.5, 0.5)).length()))
+
+ return input.get_value(nuv)
+
+#radius
+func get_radius() -> float:
+ return radius
+
+func set_radius(val : float) -> void:
+ radius = val
+
+ if radius == 0:
+ radius = 0.000000001
+
+ set_dirty(true)
+
+#repeat
+func get_repeat() -> int:
+ return repeat
+
+func set_repeat(val : int) -> void:
+ repeat = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/color_tiler.gd b/game/addons/mat_maker_gd/nodes/transform/color_tiler.gd
new file mode 100644
index 0000000..79e4765
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/color_tiler.gd
@@ -0,0 +1,305 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+export(Resource) var input : Resource
+export(Resource) var in_mask : Resource
+
+export(Resource) var output : Resource
+export(Resource) var instance_map : Resource
+
+export(Vector2) var tile : Vector2 = Vector2(4, 4)
+export(float) var overlap : float = 1
+export(int, "1,4,16") var select_inputs : int = 0
+export(Vector2) var scale : Vector2 = Vector2(0.5, 0.5)
+export(float) var fixed_offset : float = 0
+export(float) var rnd_offset : float = 0.25
+export(float) var rnd_rotate : float = 45
+export(float) var rnd_scale : float = 0.2
+export(float) var rnd_opacity : float = 0
+export(bool) var variations : bool = false
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !in_mask:
+ in_mask = MMNodeUniversalProperty.new()
+ in_mask.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ in_mask.set_default_value(1)
+
+ in_mask.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ in_mask.slot_name = ">>> Mask "
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !instance_map:
+ instance_map = MMNodeUniversalProperty.new()
+ instance_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ instance_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_input_property(input)
+ register_input_property(in_mask)
+ register_output_property(output)
+ register_output_property(instance_map)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(in_mask)
+ mm_graph_node.add_slot_texture_universal(output)
+ mm_graph_node.add_slot_texture_universal(instance_map)
+
+ mm_graph_node.add_slot_vector2("get_tile", "set_tile", "Tile", 1)
+ mm_graph_node.add_slot_float("get_overlap", "set_overlap", "Overlap", 1)
+ mm_graph_node.add_slot_enum("get_select_inputs", "set_select_inputs", "Select inputs", [ "1", "4", "16" ])
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.01)
+ mm_graph_node.add_slot_float("get_fixed_offset", "set_fixed_offset", "Fixed Offset", 0.01)
+ mm_graph_node.add_slot_float("get_rnd_offset", "set_rnd_offset", "Rnd Offset", 0.01)
+ mm_graph_node.add_slot_float("get_rnd_rotate", "set_rnd_rotate", "Rnd Rotate", 0.1)
+ mm_graph_node.add_slot_float("get_rnd_scale", "set_rnd_scale", "Rnd Scale", 0.01)
+ mm_graph_node.add_slot_float("get_rnd_opacity", "set_rnd_opacity", "Rnd Opacity", 0.01)
+ #mm_graph_node.add_slot_bool("get_variations", "set_variations", "Variations")
+
+func _render(material) -> void:
+ var output_img : Image = Image.new()
+ var instance_map_img : Image = Image.new()
+
+ output_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ instance_map_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ output_img.lock()
+ instance_map_img.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ var ps : float = 1.0 / float(pseed)
+
+ var ix : int = int(material.image_size.x)
+ var iy : int = int(material.image_size.y)
+
+ for x in range(ix):
+ for y in range(iy):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ #vec3 $(name_uv)_random_color;
+ #vec4 $(name_uv)_tiled_output = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)), $(name_uv)_random_color);
+ var rch : PoolColorArray = tiler_calc(uv, tile, overlap, Vector2(ps, ps))
+
+ output_img.set_pixel(x, y, rch[1])
+ instance_map_img.set_pixel(x, y, rch[0])
+
+ output_img.unlock()
+ instance_map_img.unlock()
+
+ output.set_value(output_img)
+ instance_map.set_value(instance_map_img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#tile
+func get_tile() -> Vector2:
+ return tile
+
+func set_tile(val : Vector2) -> void:
+ tile = val
+
+ set_dirty(true)
+
+#overlap
+func get_overlap() -> float:
+ return overlap
+
+func set_overlap(val : float) -> void:
+ overlap = val
+
+ set_dirty(true)
+
+#select_inputs
+func get_select_inputs() -> int:
+ return select_inputs
+
+func set_select_inputs(val : int) -> void:
+ select_inputs = val
+
+ set_dirty(true)
+
+#scale
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
+
+#fixed_offset
+func get_fixed_offset() -> float:
+ return fixed_offset
+
+func set_fixed_offset(val : float) -> void:
+ fixed_offset = val
+
+ set_dirty(true)
+
+#rnd_offset
+func get_rnd_offset() -> float:
+ return rnd_offset
+
+func set_rnd_offset(val : float) -> void:
+ rnd_offset = val
+
+ set_dirty(true)
+
+
+#rnd_rotate
+func get_rnd_rotate() -> float:
+ return rnd_rotate
+
+func set_rnd_rotate(val : float) -> void:
+ rnd_rotate = val
+
+ set_dirty(true)
+
+#rnd_scale
+func get_rnd_scale() -> float:
+ return rnd_scale
+
+func set_rnd_scale(val : float) -> void:
+ rnd_scale = val
+
+ set_dirty(true)
+
+#rnd_opacity
+func get_rnd_opacity() -> float:
+ return rnd_opacity
+
+func set_rnd_opacity(val : float) -> void:
+ rnd_opacity = val
+
+ set_dirty(true)
+
+#variations
+func get_variations() -> bool:
+ return variations
+
+func set_variations(val : bool) -> void:
+ variations = val
+
+ set_dirty(true)
+
+#----------------------
+#color_tiler.mmg
+#Tiles several occurences of an input image while adding randomness.
+
+#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed, out vec3 random_color) {
+# vec4 c = vec4(0.0);
+# vec3 rc = vec3(0.0);
+# vec3 rc1;
+#
+# for (int dx = -overlap; dx <= overlap; ++dx) {
+# for (int dy = -overlap; dy <= overlap; ++dy) {
+# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));
+# vec2 seed = rand2(pos+_seed);
+# rc1 = rand3(seed);
+# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile);
+# float mask = $mask(fract(pos+vec2(0.5)));
+# if (mask > 0.01) {
+# vec2 pv = fract(uv - pos)-vec2(0.5);
+# seed = rand2(seed);
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;
+# float ca = cos(angle);
+# float sa = sin(angle);
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;
+# pv /= vec2($scale_x, $scale_y);
+# pv += vec2(0.5);
+# pv = clamp(pv, vec2(0.0), vec2(1.0));
+#
+# $select_inputs
+#
+# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0);
+#
+# seed = rand2(seed);
+# float na = n.a*mask*(1.0-$opacity*seed.x);
+# float a = (1.0-c.a)*(1.0*na);
+#
+# c = mix(c, n, na);
+# rc = mix(rc, rc1, n.a);
+# }
+# }
+# }
+#
+# random_color = rc;
+# return c;
+#}
+
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+func tiler_calc(uv : Vector2, tile : Vector2, overlap : int, _seed : Vector2) -> PoolColorArray:
+ var c : Color = Color()
+ var rc : Vector3 = Vector3()
+ var rc1 : Vector3 = Vector3()
+
+ for dx in range(-overlap, overlap): #for (int dx = -overlap; dx <= overlap; ++dx) {
+ for dy in range(-overlap, overlap): #for (int dy = -overlap; dy <= overlap; ++dy) {
+ var pos : Vector2 = Commons.fractv2((Commons.floorv2(uv * tile) + Vector2(dx, dy) + Vector2(0.5, 0.5)) / tile - Vector2(0.5, 0.5))
+ var vseed : Vector2 = Commons.rand2(pos + _seed)
+ rc1 = Commons.rand3(vseed)
+ pos = Commons.fractv2(pos + Vector2(fixed_offset / tile.x, 0.0) * floor(Commons.modf(pos.y * tile.y, 2.0)) + rnd_offset * vseed / tile)
+ var mask : float = in_mask.get_value(Commons.fractv2(pos + Vector2(0.5, 0.5)))
+
+ if (mask > 0.01):
+ var pv : Vector2 = Commons.fractv2(uv - pos) - Vector2(0.5, 0.5)
+ vseed = Commons.rand2(vseed)
+ var angle : float = (vseed.x * 2.0 - 1.0) * rnd_rotate * 0.01745329251
+ var ca : float = cos(angle)
+ var sa : float = sin(angle)
+ pv = Vector2(ca * pv.x + sa * pv.y, -sa * pv.x + ca * pv.y)
+ pv *= (vseed.y-0.5) * 2.0 * rnd_scale + 1.0
+ pv /= scale
+ pv += Vector2(0.5, 0.5)
+ pv = Commons.clampv2(pv, Vector2(), Vector2(1, 1))
+
+ #1, " "
+ #4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+ #16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+ if select_inputs == 1:
+ pv = Commons.clampv2(0.5*(pv + Commons.floorv2(Commons.rand2(vseed)*2.0)), Vector2(), Vector2(1, 1));
+ elif select_inputs == 2:
+ pv = Commons.clampv2(0.25*(pv + Commons.floorv2(Commons.rand2(vseed)*4.0)), Vector2(), Vector2(1, 1));
+
+# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0);
+ var n : Color = input.get_value(pv) * mask * (1.0 - rnd_opacity * vseed.x)
+
+ vseed = Commons.rand2(vseed)
+ var na : float = n.a * mask * (1.0 - rnd_opacity * vseed.x)
+ var a : float = (1.0 - c.a) * (1.0 * na)
+
+ c = lerp(c, n, na);
+ rc = lerp(rc, rc1, n.a);
+
+ var pc : PoolColorArray = PoolColorArray()
+ pc.append(Color(rc.x, rc.y, rc.z, 1))
+ pc.append(c)
+
+ return pc
diff --git a/game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd b/game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd
new file mode 100644
index 0000000..a784f9b
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd
@@ -0,0 +1,63 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int) var count : int = 5
+export(float) var offset : float = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_int("get_count", "set_count", "Count")
+ mm_graph_node.add_slot_float("get_offset", "set_offset", "Offset", 0.5)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$i(kal_rotate($uv, $count, $offset))
+ return input.get_value(Transforms.kal_rotate(uv, count, offset))
+
+#count
+func get_count() -> int:
+ return count
+
+func set_count(val : int) -> void:
+ count = val
+
+ set_dirty(true)
+
+#offset
+func get_offset() -> float:
+ return offset
+
+func set_offset(val : float) -> void:
+ offset = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/mirror.gd b/game/addons/mat_maker_gd/nodes/transform/mirror.gd
new file mode 100644
index 0000000..a0413e4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/mirror.gd
@@ -0,0 +1,69 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "Horizontal,Vertical") var direction : int = 0
+export(float) var offset : float = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_direction", "set_direction", "Direction", [ "Horizontal", "Vertical" ])
+ mm_graph_node.add_slot_float("get_offset", "set_offset", "offset", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$i(uvmirror_$direction($uv, $offset))
+
+ if direction == 0:
+ return input.get_value(Transforms.uvmirror_h(uv, offset))
+ elif direction == 1:
+ return input.get_value(Transforms.uvmirror_v(uv, offset))
+
+ return Color(0, 0, 0, 1)
+
+#direction
+func get_direction() -> int:
+ return direction
+
+func set_direction(val : int) -> void:
+ direction = val
+
+ set_dirty(true)
+
+#offset
+func get_offset() -> float:
+ return offset
+
+func set_offset(val : float) -> void:
+ offset = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/repeat.gd b/game/addons/mat_maker_gd/nodes/transform/repeat.gd
new file mode 100644
index 0000000..5f0e387
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/repeat.gd
@@ -0,0 +1,27 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+export(Resource) var input : Resource
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Apply >>>"
+ #input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR
+ input.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.get_value_from_owner = true
+
+ register_input_property(input)
+ register_output_property(input)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+
+func get_property_value(uv : Vector2):
+ return input.get_value(Commons.fractv2(uv), true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/rotate.gd b/game/addons/mat_maker_gd/nodes/transform/rotate.gd
new file mode 100644
index 0000000..a2416a4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/rotate.gd
@@ -0,0 +1,63 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Vector2) var center : Vector2 = Vector2()
+export(float) var rotate : float = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01)
+ mm_graph_node.add_slot_float("get_rotate", "set_rotate", "Rotate", 0.1)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$i(rotate($uv, vec2(0.5+$cx, 0.5+$cy), $rotate*0.01745329251))
+ return input.get_value(Transforms.rotate(uv, center + Vector2(0.5, 0.5), rotate*0.01745329251))
+
+#center
+func get_center() -> Vector2:
+ return center
+
+func set_center(val : Vector2) -> void:
+ center = val
+
+ set_dirty(true)
+
+#rotate
+func get_rotate() -> float:
+ return rotate
+
+func set_rotate(val : float) -> void:
+ rotate = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/scale.gd b/game/addons/mat_maker_gd/nodes/transform/scale.gd
new file mode 100644
index 0000000..8f8d1e4
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/scale.gd
@@ -0,0 +1,63 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Vector2) var center : Vector2 = Vector2()
+export(Vector2) var scale : Vector2 = Vector2(1, 1)
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01)
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$i(scale($uv, vec2(0.5+$cx, 0.5+$cy), vec2($scale_x, $scale_y)))
+ return input.get_value(Transforms.scale(uv, center + Vector2(0.5, 0.5), scale))
+
+#center
+func get_center() -> Vector2:
+ return center
+
+func set_center(val : Vector2) -> void:
+ center = val
+
+ set_dirty(true)
+
+#scale
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/shear.gd b/game/addons/mat_maker_gd/nodes/transform/shear.gd
new file mode 100644
index 0000000..98236ed
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/shear.gd
@@ -0,0 +1,79 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(int, "Horizontal,Vertical") var direction : int = 0
+export(float) var amount : float = 1
+export(float) var center : float = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_enum("get_direction", "set_direction", "Direction", [ "Horizontal", "Vertical" ])
+ mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.01)
+ mm_graph_node.add_slot_float("get_center", "set_center", "Center", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$in($uv+$amount*($uv.yx-vec2($center))*vec2($direction))
+
+ if direction == 0:
+ return input.get_value(uv + amount * (Vector2(uv.y, uv.x) - Vector2(center, center)) * Vector2(1, 0))
+ elif direction == 1:
+ return input.get_value(uv + amount * (Vector2(uv.y, uv.x) - Vector2(center, center)) * Vector2(0, 1))
+
+ return Color(0, 0, 0, 1)
+
+#direction
+func get_direction() -> int:
+ return direction
+
+func set_direction(val : int) -> void:
+ direction = val
+
+ set_dirty(true)
+
+#amount
+func get_amount() -> float:
+ return amount
+
+func set_amount(val : float) -> void:
+ amount = val
+
+ set_dirty(true)
+
+#center
+func get_center() -> float:
+ return center
+
+func set_center(val : float) -> void:
+ center = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/tiler.gd b/game/addons/mat_maker_gd/nodes/transform/tiler.gd
new file mode 100644
index 0000000..d6d75f3
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/tiler.gd
@@ -0,0 +1,306 @@
+tool
+extends MMNode
+
+const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+export(Resource) var input : Resource
+export(Resource) var in_mask : Resource
+
+export(Resource) var output : Resource
+export(Resource) var instance_map : Resource
+
+export(Vector2) var tile : Vector2 = Vector2(4, 4)
+export(float) var overlap : float = 1
+export(int, "1,4,16") var select_inputs : int = 0
+export(Vector2) var scale : Vector2 = Vector2(0.5, 0.5)
+export(float) var fixed_offset : float = 0
+export(float) var rnd_offset : float = 0.25
+export(float) var rnd_rotate : float = 45
+export(float) var rnd_scale : float = 0.2
+export(float) var rnd_value : float = 2
+export(bool) var variations : bool = false
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ input.set_default_value(0)
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !in_mask:
+ in_mask = MMNodeUniversalProperty.new()
+ in_mask.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ in_mask.set_default_value(1)
+
+ in_mask.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ in_mask.slot_name = ">>> Mask "
+
+ if !output:
+ output = MMNodeUniversalProperty.new()
+ output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ if !instance_map:
+ instance_map = MMNodeUniversalProperty.new()
+ instance_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ instance_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+
+ register_input_property(input)
+ register_input_property(in_mask)
+ register_output_property(output)
+ register_output_property(instance_map)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_label_universal(in_mask)
+ mm_graph_node.add_slot_texture_universal(output)
+ mm_graph_node.add_slot_texture_universal(instance_map)
+
+ mm_graph_node.add_slot_vector2("get_tile", "set_tile", "Tile", 1)
+ mm_graph_node.add_slot_float("get_overlap", "set_overlap", "Overlap", 1)
+ mm_graph_node.add_slot_enum("get_select_inputs", "set_select_inputs", "Select inputs", [ "1", "4", "16" ])
+ mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.01)
+ mm_graph_node.add_slot_float("get_fixed_offset", "set_fixed_offset", "Fixed Offset", 0.01)
+ mm_graph_node.add_slot_float("get_rnd_offset", "set_rnd_offset", "Rnd Offset", 0.01)
+ mm_graph_node.add_slot_float("get_rnd_rotate", "set_rnd_rotate", "Rnd Rotate", 0.1)
+ mm_graph_node.add_slot_float("get_rnd_scale", "set_rnd_scale", "Rnd Scale", 0.01)
+ mm_graph_node.add_slot_float("get_rnd_value", "set_rnd_value", "Rnd Value", 0.01)
+ #mm_graph_node.add_slot_bool("get_variations", "set_variations", "Variations")
+
+func _render(material) -> void:
+ var output_img : Image = Image.new()
+ var instance_map_img : Image = Image.new()
+
+ output_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+ instance_map_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
+
+ output_img.lock()
+ instance_map_img.lock()
+
+ var w : float = material.image_size.x
+ var h : float = material.image_size.y
+
+ var pseed : float = randf() + randi()
+
+ var ps : float = 1.0 / float(pseed)
+
+ var ix : int = int(material.image_size.x)
+ var iy : int = int(material.image_size.y)
+
+ for x in range(ix):
+ for y in range(iy):
+ var uv : Vector2 = Vector2(x / w, y / h)
+
+ #vec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)))
+ var rch : Color = tiler_calc(uv, tile, overlap, Vector2(ps, ps))
+
+ #Output, float, Shows the generated pattern
+ #$(name_uv)_rch.a
+ var output_img_col : Color = Color(rch.a, rch.a, rch.a, 1)
+
+ #Instance map, rgb, Shows a random color for each instance of the input image
+ #$(name_uv)_rch.rgb
+ var instance_map_img_col : Color = Color(rch.r, rch.g, rch.b, 1)
+
+ output_img.set_pixel(x, y, output_img_col)
+ instance_map_img.set_pixel(x, y, instance_map_img_col)
+
+ output_img.unlock()
+ instance_map_img.unlock()
+
+ output.set_value(output_img)
+ instance_map.set_value(instance_map_img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return Color()
+
+#tile
+func get_tile() -> Vector2:
+ return tile
+
+func set_tile(val : Vector2) -> void:
+ tile = val
+
+ set_dirty(true)
+
+#overlap
+func get_overlap() -> float:
+ return overlap
+
+func set_overlap(val : float) -> void:
+ overlap = val
+
+ set_dirty(true)
+
+#select_inputs
+func get_select_inputs() -> int:
+ return select_inputs
+
+func set_select_inputs(val : int) -> void:
+ select_inputs = val
+
+ set_dirty(true)
+
+#scale
+func get_scale() -> Vector2:
+ return scale
+
+func set_scale(val : Vector2) -> void:
+ scale = val
+
+ set_dirty(true)
+
+#fixed_offset
+func get_fixed_offset() -> float:
+ return fixed_offset
+
+func set_fixed_offset(val : float) -> void:
+ fixed_offset = val
+
+ set_dirty(true)
+
+#rnd_offset
+func get_rnd_offset() -> float:
+ return rnd_offset
+
+func set_rnd_offset(val : float) -> void:
+ rnd_offset = val
+
+ set_dirty(true)
+
+
+#rnd_rotate
+func get_rnd_rotate() -> float:
+ return rnd_rotate
+
+func set_rnd_rotate(val : float) -> void:
+ rnd_rotate = val
+
+ set_dirty(true)
+
+#rnd_scale
+func get_rnd_scale() -> float:
+ return rnd_scale
+
+func set_rnd_scale(val : float) -> void:
+ rnd_scale = val
+
+ set_dirty(true)
+
+#rnd_value
+func get_rnd_value() -> float:
+ return rnd_value
+
+func set_rnd_value(val : float) -> void:
+ rnd_value = val
+
+ set_dirty(true)
+
+#variations
+func get_variations() -> bool:
+ return variations
+
+func set_variations(val : bool) -> void:
+ variations = val
+
+ set_dirty(true)
+
+#----------------------
+#tiler.mmg
+#Tiles several occurences of an input image while adding randomness.
+
+#instance
+#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed) {
+# float c = 0.0;
+# vec3 rc = vec3(0.0);
+# vec3 rc1;
+# for (int dx = -overlap; dx <= overlap; ++dx) {
+# for (int dy = -overlap; dy <= overlap; ++dy) {
+# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));
+# vec2 seed = rand2(pos+_seed);
+# rc1 = rand3(seed);
+# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile);
+# float mask = $mask(fract(pos+vec2(0.5)));
+#
+# if (mask > 0.01) {
+# vec2 pv = fract(uv - pos)-vec2(0.5);
+# seed = rand2(seed);
+# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;
+# float ca = cos(angle);
+# float sa = sin(angle);
+# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);
+# pv *= (seed.y-0.5)*2.0*$scale+1.0;
+# pv /= vec2($scale_x, $scale_y);
+# pv += vec2(0.5);
+# seed = rand2(seed);
+# vec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));
+# if (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {
+# continue;
+# }
+#
+# $select_inputs
+#
+# float c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask*(1.0-$value*seed.x);
+# c = max(c, c1);
+# rc = mix(rc, rc1, step(c, c1));
+# }
+# }
+# }
+#
+# return vec4(rc, c);
+#}
+
+#select_inputs enum
+#1, " "
+#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+func tiler_calc(uv : Vector2, tile : Vector2, overlap : int, _seed : Vector2) -> Color:
+ var c : float = 0.0
+ var rc : Vector3 = Vector3()
+ var rc1 : Vector3 = Vector3()
+
+ for dx in range(-overlap, overlap): #for (int dx = -overlap; dx <= overlap; ++dx) {
+ for dy in range(-overlap, overlap): #for (int dy = -overlap; dy <= overlap; ++dy) {
+ var pos : Vector2 = Commons.fractv2((Commons.floorv2(uv * tile) + Vector2(dx, dy) + Vector2(0.5, 0.5)) / tile - Vector2(0.5, 0.5))
+ var vseed : Vector2 = Commons.rand2(pos+_seed)
+ rc1 = Commons.rand3(vseed)
+ pos = Commons.fractv2(pos + Vector2(fixed_offset / tile.x, 0.0) * floor(Commons.modf(pos.y * tile.y, 2.0)) + rnd_offset * vseed / tile)
+ var mask : float = in_mask.get_value(Commons.fractv2(pos + Vector2(0.5, 0.5)))
+
+ if (mask > 0.01):
+ var pv : Vector2 = Commons.fractv2(uv - pos) - Vector2(0.5, 0.5)
+ vseed = Commons.rand2(vseed)
+ var angle : float = (vseed.x * 2.0 - 1.0) * rnd_rotate * 0.01745329251
+ var ca : float = cos(angle)
+ var sa : float = sin(angle)
+ pv = Vector2(ca * pv.x + sa * pv.y, -sa * pv.x + ca * pv.y)
+ pv *= (vseed.y-0.5) * 2.0 * rnd_scale + 1.0
+ pv /= scale
+ pv += Vector2(0.5, 0.5)
+ vseed = Commons.rand2(vseed)
+ var clamped_pv : Vector2 = Commons.clampv2(pv, Vector2(), Vector2(1, 1))
+
+ if (pv.x != clamped_pv.x || pv.y != clamped_pv.y):
+ continue
+
+ #1, " "
+ #4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
+ #16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
+
+ if select_inputs == 1:
+ pv = Commons.clampv2(0.5*(pv + Commons.floorv2(Commons.rand2(vseed)*2.0)), Vector2(), Vector2(1, 1));
+ elif select_inputs == 2:
+ pv = Commons.clampv2(0.25*(pv + Commons.floorv2(Commons.rand2(vseed)*4.0)), Vector2(), Vector2(1, 1));
+
+ #float c1 = $in.variation(pv, $variations ? vseed.x : 0.0) * mask * (1.0-$value*vseed.x)
+ var c1 : float = input.get_value(pv) * mask * (1.0 - rnd_value * vseed.x)
+ c = max(c, c1)
+ rc = lerp(rc, rc1, Commons.step(c, c1))
+
+ return Color(rc.x, rc.y, rc.z, c)
+
diff --git a/game/addons/mat_maker_gd/nodes/transform/transform.gd b/game/addons/mat_maker_gd/nodes/transform/transform.gd
new file mode 100644
index 0000000..94aab52
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/transform.gd
@@ -0,0 +1,132 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+
+export(Resource) var translate_x : Resource
+export(Resource) var translate_y : Resource
+export(Resource) var rotate : Resource
+export(Resource) var scale_x : Resource
+export(Resource) var scale_y : Resource
+export(int, "Clamp,Repeat,Extend") var mode : int = 0
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ if !translate_x:
+ translate_x = MMNodeUniversalProperty.new()
+ translate_x.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ translate_x.set_default_value(0)
+ translate_x.value_step = 0.01
+
+ translate_x.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ translate_x.slot_name = "Translate X"
+
+ if !translate_y:
+ translate_y = MMNodeUniversalProperty.new()
+ translate_y.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ translate_y.set_default_value(0)
+ translate_y.value_step = 0.01
+
+ translate_y.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ translate_y.slot_name = "Translate Y"
+
+ if !rotate:
+ rotate = MMNodeUniversalProperty.new()
+ rotate.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ rotate.set_default_value(0)
+ rotate.value_step = 0.01
+
+ rotate.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ rotate.slot_name = "Rotate"
+
+ if !scale_x:
+ scale_x = MMNodeUniversalProperty.new()
+ scale_x.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ scale_x.set_default_value(1)
+ scale_x.value_step = 0.01
+
+ scale_x.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ scale_x.slot_name = "Scale X"
+
+ if !scale_y:
+ scale_y = MMNodeUniversalProperty.new()
+ scale_y.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ scale_y.set_default_value(1)
+ scale_y.value_step = 0.01
+
+ scale_y.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ scale_y.slot_name = "Scale Y"
+
+ register_input_property(input)
+ register_output_property(image)
+ register_input_property(translate_x)
+ register_input_property(translate_y)
+ register_input_property(rotate)
+ register_input_property(scale_x)
+ register_input_property(scale_y)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+
+ mm_graph_node.add_slot_float_universal(translate_x)
+ mm_graph_node.add_slot_float_universal(translate_y)
+ mm_graph_node.add_slot_float_universal(rotate)
+ mm_graph_node.add_slot_float_universal(scale_x)
+ mm_graph_node.add_slot_float_universal(scale_y)
+
+ mm_graph_node.add_slot_enum("get_mode", "set_mode", "Mode", [ "Clamp", "Repeat", "Extend" ])
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$i($mode(transform2($uv, vec2($translate_x*(2.0*$tx($uv)-1.0), $translate_y*(2.0*$ty($uv)-1.0)), $rotate*0.01745329251*(2.0*$r($uv)-1.0), vec2($scale_x*(2.0*$sx($uv)-1.0), $scale_y*(2.0*$sy($uv)-1.0)))))",
+
+ #Mode:
+ #Clamp -> transform2_clamp
+ #Repeat -> fract
+ #Extend -> ""
+
+ var tr : Vector2 = Vector2(translate_x.get_default_value() * (2.0 * translate_x.get_value_or_zero(uv) - 1.0), translate_y.get_default_value() *(2.0 * translate_y.get_value_or_zero(uv) - 1.0))
+ var rot : float = rotate.get_default_value() * 0.01745329251*(2.0 * rotate.get_value_or_zero(uv) - 1.0)
+ var sc : Vector2 = Vector2(scale_x.get_default_value() *(2.0 * scale_x.get_value_or_zero(uv) - 1.0), scale_y.get_default_value() *(2.0 * scale_y.get_value_or_zero(uv) - 1.0))
+
+ var nuv : Vector2 = Transforms.transform2(uv, tr, rot, sc)
+
+ if mode == 0:
+ nuv = Transforms.transform2_clamp(nuv)
+ elif mode == 1:
+ nuv = Commons.fractv2(nuv)
+
+ return input.get_value(nuv)
+
+#mode
+func get_mode() -> int:
+ return mode
+
+func set_mode(val : int) -> void:
+ mode = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/transform/translate.gd b/game/addons/mat_maker_gd/nodes/transform/translate.gd
new file mode 100644
index 0000000..8c03d04
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/transform/translate.gd
@@ -0,0 +1,51 @@
+tool
+extends MMNode
+
+var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
+
+export(Resource) var image : Resource
+export(Resource) var input : Resource
+export(Vector2) var translation : Vector2 = Vector2()
+
+func _init_properties():
+ if !input:
+ input = MMNodeUniversalProperty.new()
+ input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ input.set_default_value(Color(0, 0, 0, 1))
+
+ input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
+ input.slot_name = ">>> Input1 "
+
+ if !image:
+ image = MMNodeUniversalProperty.new()
+ image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
+
+ #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
+ image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
+ #image.force_override = true
+
+ register_input_property(input)
+ register_output_property(image)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_label_universal(input)
+ mm_graph_node.add_slot_texture_universal(image)
+ mm_graph_node.add_slot_vector2("get_translation", "set_translation", "Translation", 0.01)
+
+func _render(material) -> void:
+ var img : Image = render_image(material)
+
+ image.set_value(img)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ #$i($uv-vec2($translate_x, $translate_y))
+ return input.get_value(uv - translation)
+
+#translation
+func get_translation() -> Vector2:
+ return translation
+
+func set_translation(val : Vector2) -> void:
+ translation = val
+
+ set_dirty(true)
diff --git a/game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd b/game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd
new file mode 100644
index 0000000..c3bf2d6
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd
@@ -0,0 +1,25 @@
+tool
+extends MMNode
+
+export(Resource) var uniform : Resource
+
+func _init_properties():
+ if !uniform:
+ uniform = MMNodeUniversalProperty.new()
+ uniform.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT
+ uniform.set_default_value(0.5)
+ uniform.slot_name = "Value (Color)"
+ uniform.value_step = 0.01
+ uniform.value_range = Vector2(0, 1)
+
+ uniform.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR
+
+ register_output_property(uniform)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_float_universal(uniform)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ var f : float = uniform.get_value(uv)
+
+ return Color(f, f, f, 1)
diff --git a/game/addons/mat_maker_gd/nodes/uniform/uniform.gd b/game/addons/mat_maker_gd/nodes/uniform/uniform.gd
new file mode 100644
index 0000000..dbd409a
--- /dev/null
+++ b/game/addons/mat_maker_gd/nodes/uniform/uniform.gd
@@ -0,0 +1,20 @@
+tool
+extends MMNode
+
+export(Resource) var uniform : Resource
+
+func _init_properties():
+ if !uniform:
+ uniform = MMNodeUniversalProperty.new()
+ uniform.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR
+ uniform.set_default_value(Color(1, 1, 1, 1))
+
+ uniform.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR
+
+ register_output_property(uniform)
+
+func _register_methods(mm_graph_node) -> void:
+ mm_graph_node.add_slot_color_universal(uniform)
+
+func get_value_for(uv : Vector2, pseed : int) -> Color:
+ return uniform.get_value(uv)
diff --git a/game/addons/mat_maker_gd/plugin.cfg b/game/addons/mat_maker_gd/plugin.cfg
new file mode 100644
index 0000000..0431311
--- /dev/null
+++ b/game/addons/mat_maker_gd/plugin.cfg
@@ -0,0 +1,7 @@
+[plugin]
+
+name="mat_maker_gd"
+description=""
+author="Relintai"
+version=""
+script="plugin.gd"
diff --git a/game/addons/mat_maker_gd/plugin.gd b/game/addons/mat_maker_gd/plugin.gd
new file mode 100644
index 0000000..c3b47e1
--- /dev/null
+++ b/game/addons/mat_maker_gd/plugin.gd
@@ -0,0 +1,66 @@
+tool
+extends EditorPlugin
+
+var MMNode = preload("res://addons/mat_maker_gd/nodes/mm_node.gd")
+var MMMaterial = preload("res://addons/mat_maker_gd/nodes/mm_material.gd")
+var MMNodeUniversalProperty = preload("res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd")
+
+var editor_packed_scene = preload("res://addons/mat_maker_gd/editor/MatMakerGDEditor.tscn")
+var editor_scene = null
+
+var tool_button : ToolButton = null
+
+func _enter_tree():
+ add_custom_type("MMNode", "Resource", MMNode, null)
+ add_custom_type("MMMaterial", "Resource", MMMaterial, null)
+ add_custom_type("MMNodeUniversalProperty", "Resource", MMNodeUniversalProperty, null)
+
+ editor_scene = editor_packed_scene.instance()
+
+ tool_button = add_control_to_bottom_panel(editor_scene, "MMGD")
+ tool_button.hide()
+
+func _exit_tree():
+ remove_custom_type("MMNode")
+ remove_custom_type("MMMaterial")
+ remove_custom_type("MMNodeUniversalProperty")
+
+ remove_control_from_bottom_panel(editor_scene)
+
+ if editor_scene:
+ editor_scene.queue_free()
+
+ editor_scene = null
+ tool_button = null
+
+func handles(object):
+ return object is MMMateial
+
+func edit(object):
+ #if editor_scene:
+ # make_bottom_panel_item_visible(editor_scene)
+
+ if object is MMMateial:
+ editor_scene.set_mmmaterial(object as MMMateial)
+
+func make_visible(visible):
+ if tool_button:
+ if visible:
+ tool_button.show()
+ else:
+ #if tool_button.pressed:
+ # tool_button.pressed = false
+
+ if !tool_button.pressed:
+ tool_button.hide()
+
+func get_plugin_icon():
+ return null
+
+func get_plugin_name():
+ return "MatMakerGD"
+
+func has_main_screen():
+ return false
+
+
diff --git a/game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd b/game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd
new file mode 100644
index 0000000..cf0e819
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd
@@ -0,0 +1,16 @@
+tool
+extends ColorPickerButton
+
+func get_drag_data(_position):
+ var preview = ColorRect.new()
+ preview.color = color
+ preview.rect_min_size = Vector2(32, 32)
+ set_drag_preview(preview)
+ return color
+
+func can_drop_data(_position, data) -> bool:
+ return typeof(data) == TYPE_COLOR
+
+func drop_data(_position, data) -> void:
+ color = data
+ emit_signal("color_changed", color)
diff --git a/game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn b/game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn
new file mode 100644
index 0000000..c4003f3
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn
@@ -0,0 +1,14 @@
+[gd_scene format=2]
+
+[node name="ColorPickerPopup" type="PopupPanel"]
+margin_right = 316.0
+margin_bottom = 470.0
+
+[node name="ColorPicker" type="ColorPicker" parent="."]
+margin_left = 4.0
+margin_top = 4.0
+margin_right = 312.0
+margin_bottom = 466.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd
new file mode 100644
index 0000000..5fd5e48
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd
@@ -0,0 +1,70 @@
+tool
+extends Control
+
+var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd")
+
+var moving : bool = false
+
+var min_x : float
+var max_x : float
+var min_y : float
+var max_y : float
+
+const OFFSET : Vector2 = Vector2(3, 3)
+
+signal moved(index)
+signal removed(index)
+
+func _ready():
+ pass # Replace with function body.
+
+func _draw():
+# var current_theme : Theme = get_node("/root/MainWindow").theme
+# var color : Color = current_theme.get_color("font_color", "Label")
+
+ var color : Color = Color(1, 1, 1, 1)
+ for c in get_children():
+ if c.visible:
+ draw_line(OFFSET, c.rect_position+OFFSET, color)
+
+ draw_rect(Rect2(0, 0, 7, 7), color)
+
+#p : MMCurve.Point
+func initialize(p) -> void:
+ rect_position = get_parent().transform_point(p.p)-OFFSET
+ if p.ls != INF:
+ $LeftSlope.rect_position = $LeftSlope.distance*(get_parent().rect_size*Vector2(1.0, -p.ls)).normalized()
+ if p.rs != INF:
+ $RightSlope.rect_position = $RightSlope.distance*(get_parent().rect_size*Vector2(1.0, -p.rs)).normalized()
+
+func set_constraint(x : float, X : float, y : float, Y : float) -> void:
+ min_x = x
+ max_x = X
+ min_y = y
+ max_y = Y
+
+func _on_ControlPoint_gui_input(event):
+ if event is InputEventMouseButton:
+ if event.button_index == BUTTON_LEFT:
+ if event.pressed:
+ moving = true
+ else:
+ moving = false
+ get_parent().update_controls()
+ elif event.button_index == BUTTON_RIGHT and event.pressed:
+ emit_signal("removed", get_index())
+ elif moving and event is InputEventMouseMotion:
+ rect_position += event.relative
+ if rect_position.x < min_x:
+ rect_position.x = min_x
+ elif rect_position.x > max_x:
+ rect_position.x = max_x
+ if rect_position.y < min_y:
+ rect_position.y = min_y
+ elif rect_position.y > max_y:
+ rect_position.y = max_y
+ emit_signal("moved", get_index())
+
+func update_tangents() -> void:
+ update()
+ emit_signal("moved", get_index())
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn
new file mode 100644
index 0000000..03bfd28
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn
@@ -0,0 +1,39 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/slope_point.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/control_point.gd" type="Script" id=2]
+
+[node name="ControlPoint" type="Control"]
+margin_left = 56.9864
+margin_top = 33.8615
+margin_right = 63.9864
+margin_bottom = 40.8615
+rect_min_size = Vector2( 7, 7 )
+script = ExtResource( 2 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="LeftSlope" type="Control" parent="."]
+margin_left = -18.5235
+margin_right = -11.5235
+margin_bottom = 7.0
+rect_min_size = Vector2( 7, 7 )
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+distance = -30.0
+
+[node name="RightSlope" type="Control" parent="."]
+margin_left = 15.6919
+margin_right = 22.6919
+margin_bottom = 7.0
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+distance = 30.0
+[connection signal="gui_input" from="." to="." method="_on_ControlPoint_gui_input"]
+[connection signal="gui_input" from="LeftSlope" to="LeftSlope" method="_on_ControlPoint_gui_input"]
+[connection signal="gui_input" from="RightSlope" to="RightSlope" method="_on_ControlPoint_gui_input"]
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd
new file mode 100644
index 0000000..df8f79a
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd
@@ -0,0 +1,37 @@
+tool
+extends WindowDialog
+
+var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd")
+
+var previous_points : Array
+var curve
+
+signal curve_changed(curve)
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+ pass # Replace with function body.
+
+func _on_CurveDialog_popup_hide():
+ queue_free()
+
+func _on_OK_pressed():
+ emit_signal("curve_changed", curve)
+ curve.curve_changed()
+
+ queue_free()
+
+func _on_Cancel_pressed():
+ curve.set_points(previous_points)
+ emit_signal("curve_changed", curve)
+
+ queue_free()
+
+func edit_curve(c) -> void:
+ curve = c
+ previous_points = curve.get_points()
+ $VBoxContainer/EditorContainer/CurveEditor.set_curve(curve)
+ popup_centered()
+
+func _on_CurveEditor_value_changed(value):
+ emit_signal("curve_changed", value)
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn
new file mode 100644
index 0000000..4898a89
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn
@@ -0,0 +1,81 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn" type="PackedScene" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd" type="Script" id=2]
+
+[node name="CurveDialog" type="WindowDialog"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 307.0
+margin_top = 151.0
+margin_right = -347.0
+margin_bottom = -174.0
+window_title = "Edit curve"
+script = ExtResource( 2 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 5.0
+margin_top = 5.0
+margin_right = -5.0
+margin_bottom = -5.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="EditorContainer" type="MarginContainer" parent="VBoxContainer"]
+margin_right = 616.0
+margin_bottom = 353.0
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 3
+custom_constants/margin_right = 4
+custom_constants/margin_top = 4
+custom_constants/margin_left = 4
+custom_constants/margin_bottom = 4
+
+[node name="CurveEditor" parent="VBoxContainer/EditorContainer" instance=ExtResource( 1 )]
+anchor_right = 0.0
+anchor_bottom = 0.0
+margin_left = 4.0
+margin_top = 4.0
+margin_right = 612.0
+margin_bottom = 349.0
+size_flags_vertical = 3
+
+[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
+margin_top = 357.0
+margin_right = 616.0
+margin_bottom = 361.0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
+margin_top = 365.0
+margin_right = 616.0
+margin_bottom = 385.0
+
+[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer"]
+margin_right = 488.0
+margin_bottom = 20.0
+size_flags_horizontal = 3
+
+[node name="OK" type="Button" parent="VBoxContainer/HBoxContainer"]
+margin_left = 492.0
+margin_right = 552.0
+margin_bottom = 20.0
+rect_min_size = Vector2( 60, 0 )
+text = "OK"
+
+[node name="Cancel" type="Button" parent="VBoxContainer/HBoxContainer"]
+margin_left = 556.0
+margin_right = 616.0
+margin_bottom = 20.0
+rect_min_size = Vector2( 60, 0 )
+text = "Cancel"
+[connection signal="popup_hide" from="." to="." method="_on_CurveDialog_popup_hide"]
+[connection signal="value_changed" from="VBoxContainer/EditorContainer/CurveEditor" to="." method="_on_CurveEditor_value_changed"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/OK" to="." method="_on_OK_pressed"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_Cancel_pressed"]
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd
new file mode 100644
index 0000000..885adbc
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd
@@ -0,0 +1,24 @@
+tool
+extends Control
+
+var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd")
+
+var value = null setget set_value
+
+signal updated(curve)
+
+func set_value(v) -> void:
+ value = v
+ $CurveView.set_curve(value)
+ $CurveView.update()
+
+func _on_CurveEdit_pressed():
+ var dialog = preload("res://addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn").instance()
+ add_child(dialog)
+ dialog.connect("curve_changed", self, "on_value_changed")
+ dialog.edit_curve(value)
+
+func on_value_changed(v) -> void:
+ #set_value(v)
+ emit_signal("updated", v)
+ $CurveView.update()
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn
new file mode 100644
index 0000000..9c018b5
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn
@@ -0,0 +1,22 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn" type="PackedScene" id=2]
+
+[node name="CurveEdit" type="Button"]
+anchor_left = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = -1280.0
+margin_right = -1220.0
+margin_bottom = -700.0
+rect_min_size = Vector2( 60, 20 )
+focus_mode = 1
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="CurveView" parent="." instance=ExtResource( 2 )]
+
+[connection signal="pressed" from="." to="." method="_on_CurveEdit_pressed"]
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd
new file mode 100644
index 0000000..abbe57f
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd
@@ -0,0 +1,80 @@
+tool
+extends "res://addons/mat_maker_gd/widgets/curve_edit/curve_view.gd"
+
+signal value_changed(value)
+
+func _ready():
+ update_controls()
+
+func set_curve(c) -> void:
+ curve = c
+ update()
+ update_controls()
+
+func update_controls() -> void:
+ if !curve:
+ return
+
+ for c in get_children():
+ c.queue_free()
+
+ var points = curve.get_points()
+
+ for i in points.size():
+ var p = points[i]
+ var control_point = preload("res://addons/mat_maker_gd/widgets/curve_edit/control_point.tscn").instance()
+ add_child(control_point)
+ control_point.initialize(p)
+ control_point.rect_position = transform_point(p.p)-control_point.OFFSET
+
+ if i == 0 or i == points.size()-1:
+ control_point.set_constraint(control_point.rect_position.x, control_point.rect_position.x, -control_point.OFFSET.y, rect_size.y-control_point.OFFSET.y)
+ if i == 0:
+ control_point.get_child(0).visible = false
+ else:
+ control_point.get_child(1).visible = false
+ else:
+ var min_x = transform_point(points[i-1].p).x+1
+ var max_x = transform_point(points[i+1].p).x-1
+ control_point.set_constraint(min_x, max_x, -control_point.OFFSET.y, rect_size.y-control_point.OFFSET.y)
+
+ control_point.connect("moved", self, "_on_ControlPoint_moved")
+ control_point.connect("removed", self, "_on_ControlPoint_removed")
+
+ emit_signal("value_changed", curve)
+
+func _on_ControlPoint_moved(index):
+ var points : Array = curve.get_points()
+
+ var control_point = get_child(index)
+ points[index].p = reverse_transform_point(control_point.rect_position+control_point.OFFSET)
+
+ if control_point.has_node("LeftSlope"):
+ var slope_vector = control_point.get_node("LeftSlope").rect_position/rect_size
+ if slope_vector.x != 0:
+ points[index].ls = -slope_vector.y / slope_vector.x
+
+ if control_point.has_node("RightSlope"):
+ var slope_vector = control_point.get_node("RightSlope").rect_position/rect_size
+ if slope_vector.x != 0:
+ points[index].rs = -slope_vector.y / slope_vector.x
+
+ curve.set_points(points, false)
+ update()
+ emit_signal("value_changed", curve)
+
+func _on_ControlPoint_removed(index):
+ if curve.remove_point(index):
+ update()
+ update_controls()
+
+func _on_CurveEditor_gui_input(event):
+ if event is InputEventMouseButton:
+ if event.button_index == BUTTON_LEFT and event.doubleclick:
+ var new_point_position = reverse_transform_point(get_local_mouse_position())
+ curve.add_point(new_point_position.x, new_point_position.y, 0.0, 0.0)
+ update_controls()
+
+func _on_resize() -> void:
+ ._on_resize()
+ update_controls()
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn
new file mode 100644
index 0000000..60d5c38
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn
@@ -0,0 +1,13 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn" type="PackedScene" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd" type="Script" id=2]
+
+[node name="CurveEditor" instance=ExtResource( 1 )]
+margin_left = 10.0
+margin_top = 10.0
+margin_right = -10.0
+margin_bottom = -10.0
+mouse_filter = 0
+script = ExtResource( 2 )
+[connection signal="gui_input" from="." to="." method="_on_CurveEditor_gui_input"]
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd
new file mode 100644
index 0000000..b6ea144
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd
@@ -0,0 +1,70 @@
+tool
+extends Control
+
+var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd")
+
+export var show_axes : bool = false
+
+var curve #: MMCurve
+
+func _ready() -> void:
+# curve = MMCurve.new()
+ connect("resized", self, "_on_resize")
+ update()
+
+func set_curve(val) -> void:
+ curve = val
+ update()
+
+func transform_point(p : Vector2) -> Vector2:
+ return (Vector2(0.0, 1.0)+Vector2(1.0, -1.0)*p)*rect_size
+
+func reverse_transform_point(p : Vector2) -> Vector2:
+ return Vector2(0.0, 1.0)+Vector2(1.0, -1.0)*p/rect_size
+
+func _draw():
+ if !curve:
+ return
+
+# var current_theme : Theme = get_node("/root/MainWindow").theme
+#
+# var bg = current_theme.get_stylebox("panel", "Panel").bg_color
+# var fg = current_theme.get_color("font_color", "Label")
+#
+# var axes_color : Color = bg.linear_interpolate(fg, 0.25)
+# var curve_color : Color = bg.linear_interpolate(fg, 0.75)
+
+ var axes_color : Color = Color(0.9, 0.9, 0.9, 1)
+ var curve_color : Color = Color(1, 1, 1, 1)
+
+ if show_axes:
+ for i in range(5):
+ var p = transform_point(0.25*Vector2(i, i))
+ draw_line(Vector2(p.x, 0), Vector2(p.x, rect_size.y-1), axes_color)
+ draw_line(Vector2(0, p.y), Vector2(rect_size.x-1, p.y), axes_color)
+
+ var points = curve.get_points()
+
+ for i in range(points.size() - 1):
+ var p1 = points[i].p
+ var p2 = points[i+1].p
+ var d = (p2.x-p1.x)/3.0
+ var yac = p1.y+d*points[i].rs
+ var ybc = p2.y-d*points[i+1].ls
+ var p = transform_point(p1)
+ var count : int = max(1, int((transform_point(p2).x-p.x/5.0)))
+
+ for tt in range(count):
+ var t = (tt+1.0)/count
+ var omt = (1.0 - t)
+ var omt2 = omt * omt
+ var omt3 = omt2 * omt
+ var t2 = t * t
+ var t3 = t2 * t
+ var x = p1.x+(p2.x-p1.x)*t
+ var np = transform_point(Vector2(x, p1.y*omt3 + yac*omt2*t*3.0 + ybc*omt*t2*3.0 + p2.y*t3))
+ draw_line(p, np, curve_color)
+ p = np
+
+func _on_resize() -> void:
+ update()
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn
new file mode 100644
index 0000000..ffae7ac
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn
@@ -0,0 +1,16 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.gd" type="Script" id=1]
+
+[node name="CurveView" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 4.0
+margin_top = 4.0
+margin_right = -4.0
+margin_bottom = -4.0
+mouse_filter = 2
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd b/game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd
new file mode 100644
index 0000000..bcbaa4e
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd
@@ -0,0 +1,49 @@
+tool
+extends Control
+
+export var distance : float
+
+var moving = false
+
+const OFFSET = -Vector2(0, 0)
+
+func _ready():
+ pass # Replace with function body.
+
+func _draw():
+# var current_theme : Theme = get_node("/root/MainWindow").theme
+# var color : Color = current_theme.get_color("font_color", "Label")
+
+ var color : Color = Color(1, 1, 1, 1)
+
+ draw_circle(Vector2(3.0, 3.0), 3.0, color)
+
+func _on_ControlPoint_gui_input(event):
+ if event is InputEventMouseButton:
+ if event.button_index == BUTTON_LEFT:
+ if event.pressed:
+ if event.doubleclick:
+ var parent = get_parent()
+ var vector : Vector2
+ if get_index() == 0:
+ vector = parent.rect_position-parent.get_parent().get_child(parent.get_index()-1).rect_position
+ else:
+ vector = parent.get_parent().get_child(parent.get_index()+1).rect_position-parent.rect_position
+ vector = distance*vector.normalized()
+ rect_position = vector-OFFSET
+ if event.control:
+ get_parent().get_child(1-get_index()).rect_position = -vector-OFFSET
+ get_parent().update_tangents()
+ else:
+ moving = true
+ else:
+ moving = false
+ elif moving and event is InputEventMouseMotion:
+ var vector = get_global_mouse_position()-get_parent().get_global_rect().position+OFFSET
+ vector *= sign(vector.x)
+ vector = distance*vector.normalized()
+ rect_position = vector-OFFSET
+ if event.control:
+ get_parent().get_child(1-get_index()).rect_position = -vector-OFFSET
+
+ get_parent().update_tangents()
diff --git a/game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd
new file mode 100644
index 0000000..cdb73e5
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd
@@ -0,0 +1,139 @@
+tool
+extends LineEdit
+
+export var value : float = 0.5 setget set_value
+export var min_value : float = 0.0 setget set_min_value
+export var max_value : float = 1.0 setget set_max_value
+export var step : float = 0.0 setget set_step
+export var float_only : bool = false
+
+var sliding : bool = false
+var start_position : float
+var last_position : float
+var start_value : float
+var modifiers : int
+var from_lower_bound : bool = false
+var from_upper_bound : bool = false
+
+onready var slider = $Slider
+onready var cursor = $Slider/Cursor
+
+signal value_changed(value)
+
+func _ready() -> void:
+ do_update()
+
+func set_value(v) -> void:
+ if v is float:
+ value = v
+ do_update()
+ $Slider.visible = true
+ elif v is String and !float_only:
+ text = v
+ $Slider.visible = false
+
+func set_min_value(v : float) -> void:
+ min_value = v
+ do_update()
+
+func set_max_value(v : float) -> void:
+ max_value = v
+ do_update()
+
+func set_step(v : float) -> void:
+ step = v
+ do_update()
+
+func do_update(update_text : bool = true) -> void:
+ if update_text and $Slider.visible:
+ text = str(value)
+ if cursor != null:
+ if max_value != min_value:
+ cursor.rect_position.x = (clamp(value, min_value, max_value)-min_value)*(slider.rect_size.x-cursor.rect_size.x)/(max_value-min_value)
+ else:
+ cursor.rect_position.x = 0
+
+func get_modifiers(event):
+ var new_modifiers = 0
+ if event.shift:
+ new_modifiers |= 1
+ if event.control:
+ new_modifiers |= 2
+ if event.alt:
+ new_modifiers |= 4
+ return new_modifiers
+
+func _on_LineEdit_gui_input(event : InputEvent) -> void:
+ if !$Slider.visible or !editable:
+ return
+ if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
+ if event.is_pressed():
+ last_position = event.position.x
+ start_position = last_position
+ start_value = value
+ sliding = true
+ from_lower_bound = value <= min_value
+ from_upper_bound = value >= max_value
+ modifiers = get_modifiers(event)
+ else:
+ sliding = false
+ elif sliding and event is InputEventMouseMotion and event.button_mask == BUTTON_MASK_LEFT:
+ var new_modifiers = get_modifiers(event)
+ if new_modifiers != modifiers:
+ start_position = last_position
+ start_value = value
+ modifiers = new_modifiers
+ else:
+ last_position = event.position.x
+ var delta : float = last_position-start_position
+ var current_step = step
+ if event.control:
+ delta *= 0.2
+ elif event.shift:
+ delta *= 5.0
+ if event.alt:
+ current_step *= 0.01
+ var v : float = start_value+sign(delta)*pow(abs(delta)*0.005, 2)*abs(max_value - min_value)
+ if current_step != 0:
+ v = min_value+floor((v - min_value)/current_step)*current_step
+ if !from_lower_bound and v < min_value:
+ v = min_value
+ if !from_upper_bound and v > max_value:
+ v = max_value
+ set_value(v)
+ select(0, 0)
+ emit_signal("value_changed", value)
+ release_focus()
+ elif event is InputEventKey and !event.echo:
+ match event.scancode:
+ KEY_SHIFT, KEY_CONTROL, KEY_ALT:
+ start_position = last_position
+ start_value = value
+ modifiers = get_modifiers(event)
+
+func _on_LineEdit_text_changed(new_text : String) -> void:
+ if new_text.is_valid_float():
+ value = new_text.to_float()
+ do_update(false)
+
+func _on_LineEdit_text_entered(new_text : String, release = true) -> void:
+ if new_text.is_valid_float():
+ value = new_text.to_float()
+ do_update()
+ emit_signal("value_changed", value)
+ $Slider.visible = true
+ elif float_only:
+ do_update()
+ emit_signal("value_changed", value)
+ $Slider.visible = true
+ else:
+ emit_signal("value_changed", new_text)
+ $Slider.visible = false
+ if release:
+ release_focus()
+
+func _on_FloatEdit_focus_entered():
+ select_all()
+
+func _on_LineEdit_focus_exited() -> void:
+ _on_LineEdit_text_entered(text, false)
diff --git a/game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn
new file mode 100644
index 0000000..7f13ead
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn
@@ -0,0 +1,46 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/float_edit/float_edit.gd" type="Script" id=1]
+
+[node name="FloatEdit" type="LineEdit"]
+anchor_left = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = -1280.0
+margin_right = -1222.0
+margin_bottom = -696.0
+focus_mode = 1
+text = "0.5"
+max_length = 100
+context_menu_enabled = false
+caret_blink = true
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Slider" type="ColorRect" parent="."]
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 2.0
+margin_top = -3.0
+margin_right = -2.0
+margin_bottom = -3.0
+rect_min_size = Vector2( 0, 2 )
+mouse_filter = 2
+color = Color( 0.501961, 0.501961, 0.501961, 1 )
+
+[node name="Cursor" type="ColorRect" parent="Slider"]
+margin_right = 3.0
+margin_bottom = 1.0
+rect_min_size = Vector2( 3, 2 )
+mouse_filter = 2
+
+[connection signal="focus_entered" from="." to="." method="_on_FloatEdit_focus_entered"]
+[connection signal="focus_exited" from="." to="." method="_on_LineEdit_focus_exited"]
+[connection signal="gui_input" from="." to="." method="_on_LineEdit_gui_input"]
+[connection signal="resized" from="." to="." method="do_update"]
+[connection signal="text_changed" from="." to="." method="_on_LineEdit_text_changed"]
+[connection signal="text_entered" from="." to="." method="_on_LineEdit_text_entered"]
+[connection signal="resized" from="Slider" to="." method="do_update"]
diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd
new file mode 100644
index 0000000..b12a420
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd
@@ -0,0 +1,223 @@
+tool
+extends Control
+
+class GradientCursor:
+ extends Control
+
+ var color : Color
+ var sliding : bool = false
+
+ onready var label : Label = get_parent().get_node("Value")
+
+ const WIDTH : int = 10
+
+ func _ready() -> void:
+ rect_position = Vector2(0, 15)
+ rect_size = Vector2(WIDTH, 15)
+
+ func _draw() -> void:
+# warning-ignore:integer_division
+ var polygon : PoolVector2Array = PoolVector2Array([Vector2(0, 5), Vector2(WIDTH/2, 0), Vector2(WIDTH, 5), Vector2(WIDTH, 15), Vector2(0, 15), Vector2(0, 5)])
+ var c = color
+ c.a = 1.0
+ draw_colored_polygon(polygon, c)
+ draw_polyline(polygon, Color(0.0, 0.0, 0.0) if color.v > 0.5 else Color(1.0, 1.0, 1.0))
+
+ func _gui_input(ev) -> void:
+ if ev is InputEventMouseButton:
+ if ev.button_index == BUTTON_LEFT:
+ if ev.doubleclick:
+ get_parent().select_color(self, ev.global_position)
+ elif ev.pressed:
+ sliding = true
+ label.visible = true
+ label.text = "%.03f" % get_cursor_position()
+ else:
+ sliding = false
+ label.visible = false
+ elif ev.button_index == BUTTON_RIGHT and get_parent().get_sorted_cursors().size() > 2:
+ var parent = get_parent()
+ parent.remove_child(self)
+ parent.update_value()
+ queue_free()
+ elif ev is InputEventMouseMotion and (ev.button_mask & BUTTON_MASK_LEFT) != 0 and sliding:
+ rect_position.x += get_local_mouse_position().x
+ if ev.control:
+ rect_position.x = round(get_cursor_position()*20.0)*0.05*(get_parent().rect_size.x - WIDTH)
+ rect_position.x = min(max(0, rect_position.x), get_parent().rect_size.x-rect_size.x)
+ get_parent().update_value()
+ label.text = "%.03f" % get_cursor_position()
+
+ func get_cursor_position() -> float:
+ return rect_position.x / (get_parent().rect_size.x - WIDTH)
+
+ func set_color(c) -> void:
+ color = c
+ get_parent().update_value()
+ update()
+
+ static func sort(a, b) -> bool:
+ return a.get_position() < b.get_position()
+
+ func can_drop_data(_position, data) -> bool:
+ return typeof(data) == TYPE_COLOR
+
+ func drop_data(_position, data) -> void:
+ set_color(data)
+
+
+var value = null setget set_value
+export var embedded : bool = true
+
+signal updated(value)
+
+func _init():
+ connect("resized", self, "on_resized")
+
+#func get_gradient_from_data(data):
+# if typeof(data) == TYPE_ARRAY:
+# return data
+# elif typeof(data) == TYPE_DICTIONARY:
+# if data.has("parameters") and data.parameters.has("gradient"):
+# return data.parameters.gradient
+# if data.has("type") and data.type == "Gradient":
+# return data
+# return null
+
+#func get_drag_data(_position : Vector2):
+# var data = 0#MMType.serialize_value(value)
+# var preview = ColorRect.new()
+# preview.rect_size = Vector2(64, 24)
+# preview.material = $Gradient.material
+# set_drag_preview(preview)
+# return data
+#
+#func can_drop_data(_position : Vector2, data) -> bool:
+# return get_gradient_from_data(data) != null
+#
+#func drop_data(_position : Vector2, data) -> void:
+# var gradient = get_gradient_from_data(data)
+# #if gradient != null:
+# #set_value(MMType.deserialize_value(gradient))
+
+func set_value(v) -> void:
+ value = v
+
+ update_preview()
+ call_deferred("update_cursors")
+
+func update_cursors() -> void:
+ for c in get_children():
+ if c is GradientCursor:
+ remove_child(c)
+ c.free()
+
+ var vs : int = value.get_point_count()
+
+ for i in range(vs):
+ add_cursor(value.get_point_value(i) * (rect_size.x-GradientCursor.WIDTH), value.get_point_color(i))
+
+ $Interpolation.selected = value.interpolation_type
+
+func update_value() -> void:
+ value.clear()
+
+ var sc : Array = get_sorted_cursors()
+
+ for c in sc:
+ value.add_point(c.rect_position.x/(rect_size.x-GradientCursor.WIDTH), c.color)
+
+ update_preview()
+
+func add_cursor(x, color) -> void:
+ var cursor = GradientCursor.new()
+ add_child(cursor)
+ cursor.rect_position.x = x
+ cursor.color = color
+
+func _gui_input(ev) -> void:
+ if ev is InputEventMouseButton and ev.button_index == 1 and ev.doubleclick:
+ if ev.position.y > 15:
+ var p = clamp(ev.position.x, 0, rect_size.x-GradientCursor.WIDTH)
+ add_cursor(p, get_gradient_color(p))
+ update_value()
+ elif embedded:
+ var popup = load("res://addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn").instance()
+ add_child(popup)
+ var popup_size = popup.rect_size
+ popup.popup(Rect2(ev.global_position, Vector2(0, 0)))
+ popup.set_global_position(ev.global_position-Vector2(popup_size.x / 2, popup_size.y))
+ popup.init(value)
+ popup.connect("updated", self, "set_value")
+ popup.connect("popup_hide", popup, "queue_free")
+
+# Showing a color picker popup to change a cursor's color
+
+var active_cursor
+
+func select_color(cursor, position) -> void:
+ active_cursor = cursor
+ var color_picker_popup = preload("res://addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn").instance()
+ add_child(color_picker_popup)
+ var color_picker = color_picker_popup.get_node("ColorPicker")
+ color_picker.color = cursor.color
+ color_picker.connect("color_changed", cursor, "set_color")
+ color_picker_popup.rect_position = position
+ color_picker_popup.connect("popup_hide", color_picker_popup, "queue_free")
+ color_picker_popup.popup()
+
+# Calculating a color from the gradient and generating the shader
+
+func get_sorted_cursors() -> Array:
+ var array = []
+ for c in get_children():
+ if c is GradientCursor:
+ array.append(c)
+ array.sort_custom(GradientCursor, "sort")
+ return array
+
+func generate_preview_image() -> void:
+ var tex : ImageTexture = $Gradient.texture
+
+ if !tex:
+ tex = ImageTexture.new()
+ $Gradient.texture = tex
+
+ var img : Image = tex.get_data()
+
+ var w : float = $Gradient.rect_size.x
+ var h : float = $Gradient.rect_size.y
+
+ if !img:
+ img = Image.new()
+
+ if img.get_size().x != w || img.get_size().y != h:
+ img.create(w, h, false, Image.FORMAT_RGBA8)
+
+ img.lock()
+
+ for i in range(w):
+ var x : float = float(i) / float(w)
+ var col : Color = value.get_gradient_color(x)
+
+ for j in range(h):
+ img.set_pixel(i, j, col)
+
+ img.unlock()
+
+ tex.create_from_image(img, 0)
+
+func get_gradient_color(x) -> Color:
+ return value.get_gradient_color(x / (rect_size.x - GradientCursor.WIDTH))
+
+func update_preview() -> void:
+ call_deferred("generate_preview_image")
+
+func _on_Interpolation_item_selected(ID) -> void:
+ value.interpolation_type = ID
+ update_preview()
+
+func on_resized() -> void:
+ if value:
+ update_preview()
+ call_deferred("update_cursors")
diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn
new file mode 100644
index 0000000..db3be48
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn
@@ -0,0 +1,96 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=2]
+
+[sub_resource type="Shader" id=1]
+code = "shader_type canvas_item;
+
+void fragment() {
+ COLOR = vec4(vec3(2.0*fract(0.5*(floor(0.12*FRAGCOORD.x)+floor(0.125*FRAGCOORD.y)))), 1.0);
+}"
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = SubResource( 1 )
+
+[sub_resource type="Theme" id=5]
+
+[sub_resource type="AtlasTexture" id=6]
+flags = 7
+atlas = ExtResource( 2 )
+region = Rect2( 96, 0, 32, 16 )
+
+[sub_resource type="AtlasTexture" id=7]
+flags = 7
+atlas = ExtResource( 2 )
+region = Rect2( 64, 0, 32, 16 )
+
+[sub_resource type="AtlasTexture" id=8]
+flags = 7
+atlas = ExtResource( 2 )
+region = Rect2( 64, 16, 32, 16 )
+
+[sub_resource type="AtlasTexture" id=9]
+flags = 7
+atlas = ExtResource( 2 )
+region = Rect2( 96, 16, 32, 16 )
+
+[node name="Control" type="Control"]
+margin_right = 120.0
+margin_bottom = 30.0
+rect_min_size = Vector2( 120, 32 )
+focus_mode = 1
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 2 )
+anchor_right = 1.0
+margin_left = 4.0
+margin_right = -4.0
+margin_bottom = 15.0
+rect_min_size = Vector2( 112, 17 )
+mouse_filter = 2
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Gradient" type="TextureRect" parent="."]
+anchor_right = 1.0
+margin_left = 4.0
+margin_right = -4.0
+margin_bottom = 15.0
+rect_min_size = Vector2( 112, 17 )
+mouse_filter = 2
+theme = SubResource( 5 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Interpolation" type="OptionButton" parent="."]
+margin_left = 0.418457
+margin_top = -2.90374
+margin_right = 73.4185
+margin_bottom = 19.0963
+rect_scale = Vector2( 0.5, 0.5 )
+icon = SubResource( 6 )
+items = [ "", SubResource( 7 ), false, 0, null, "", SubResource( 6 ), false, 1, null, "", SubResource( 8 ), false, 2, null, "", SubResource( 9 ), false, 3, null ]
+selected = 1
+
+[node name="Value" type="Label" parent="."]
+anchor_right = 1.0
+margin_top = -1.0
+margin_bottom = 14.0
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_colors/font_color_shadow = Color( 0, 0, 0, 1 )
+custom_constants/shadow_offset_x = 1
+custom_constants/shadow_offset_y = 1
+custom_constants/shadow_as_outline = 1
+align = 1
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[connection signal="item_selected" from="Interpolation" to="." method="_on_Interpolation_item_selected"]
diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd
new file mode 100644
index 0000000..d45a20c
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd
@@ -0,0 +1,13 @@
+tool
+extends Popup
+
+signal updated(value)
+
+func init(value) -> void:
+ $Panel/Control.set_value(value)
+
+func _on_Control_updated(value) -> void:
+ emit_signal("updated", value)
+
+func _on_GradientPopup_popup_hide() -> void:
+ queue_free()
diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn
new file mode 100644
index 0000000..1b9c5b1
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn" type="PackedScene" id=2]
+
+[sub_resource type="StyleBoxFlat" id=1]
+bg_color = Color( 0, 0, 0.25098, 0.752941 )
+
+[node name="GradientPopup" type="Popup"]
+margin_right = 632.0
+margin_bottom = 49.0
+size_flags_horizontal = 0
+size_flags_vertical = 0
+script = ExtResource( 1 )
+
+[node name="Panel" type="Panel" parent="."]
+margin_right = 632.0
+margin_bottom = 49.0
+custom_styles/panel = SubResource( 1 )
+
+[node name="Control" parent="Panel" instance=ExtResource( 2 )]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 10.0
+margin_top = 10.0
+margin_right = -10.0
+margin_bottom = -10.0
+embedded = false
+
+[connection signal="popup_hide" from="." to="." method="_on_GradientPopup_popup_hide"]
+[connection signal="updated" from="Panel/Control" to="." method="_on_Control_updated"]
diff --git a/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd
new file mode 100644
index 0000000..73072e1
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd
@@ -0,0 +1,46 @@
+tool
+extends TextureButton
+
+
+var image_path = ""
+
+
+signal on_file_selected(f)
+
+
+func _ready():
+ texture_normal = ImageTexture.new()
+
+func do_set_image_path(path) -> void:
+ if path == null:
+ return
+ image_path = path
+
+ texture_normal.load(image_path)
+
+func set_image_path(path) -> void:
+ do_set_image_path(path)
+ emit_signal("on_file_selected", path)
+
+func _on_ImagePicker_pressed():
+ var dialog = preload("res://addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn").instance()
+ add_child(dialog)
+ dialog.rect_min_size = Vector2(500, 500)
+ dialog.access = FileDialog.ACCESS_FILESYSTEM
+ dialog.mode = FileDialog.MODE_OPEN_FILE
+ dialog.add_filter("*.bmp;BMP Image")
+ dialog.add_filter("*.exr;EXR Image")
+ dialog.add_filter("*.hdr;Radiance HDR Image")
+ dialog.add_filter("*.jpg,*.jpeg;JPEG Image")
+ dialog.add_filter("*.png;PNG Image")
+ dialog.add_filter("*.svg;SVG Image")
+ dialog.add_filter("*.tga;TGA Image")
+ dialog.add_filter("*.webp;WebP Image")
+ var files = dialog.select_files()
+ while files is GDScriptFunctionState:
+ files = yield(files, "completed")
+ if files.size() > 0:
+ set_image_path(files[0])
+
+func on_drop_image_file(file_name : String) -> void:
+ set_image_path(file_name)
diff --git a/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn
new file mode 100644
index 0000000..e374a08
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd" type="Script" id=2]
+
+[sub_resource type="ImageTexture" id=1]
+
+[node name="ImagePicker" type="TextureButton"]
+margin_right = 64.0
+margin_bottom = 64.0
+rect_min_size = Vector2( 64, 64 )
+rect_clip_content = true
+texture_normal = SubResource( 1 )
+expand = true
+stretch_mode = 5
+script = ExtResource( 2 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[connection signal="pressed" from="." to="." method="_on_ImagePicker_pressed"]
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd
new file mode 100644
index 0000000..156957f
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd
@@ -0,0 +1,33 @@
+tool
+extends Control
+
+var moving : bool = false
+
+const OFFSET : Vector2 = Vector2(3, 3)
+
+signal moved(index)
+signal removed(index)
+
+func _draw():
+# var current_theme : Theme = get_node("/root/MainWindow").theme
+# var color : Color = current_theme.get_color("font_color", "Label")
+
+ var color : Color = Color(1, 1, 1, 1)
+ draw_rect(Rect2(0, 0, 7, 7), color)
+
+func initialize(p : Vector2) -> void:
+ rect_position = get_parent().transform_point(p) - OFFSET
+
+func _on_ControlPoint_gui_input(event):
+ if event is InputEventMouseButton:
+ if event.button_index == BUTTON_LEFT:
+ if event.pressed:
+ moving = true
+ else:
+ moving = false
+ get_parent().update_controls()
+ elif event.button_index == BUTTON_RIGHT and event.pressed:
+ emit_signal("removed", get_index())
+ elif moving and event is InputEventMouseMotion:
+ rect_position += event.relative
+ emit_signal("moved", get_index())
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn
new file mode 100644
index 0000000..2d445f3
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn
@@ -0,0 +1,15 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/control_point.gd" type="Script" id=1]
+
+[node name="ControlPoint" type="Control"]
+margin_left = 56.9864
+margin_top = 33.8615
+margin_right = 63.9864
+margin_bottom = 40.8615
+rect_min_size = Vector2( 7, 7 )
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+[connection signal="gui_input" from="." to="." method="_on_ControlPoint_gui_input"]
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd
new file mode 100644
index 0000000..da96c7a
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd
@@ -0,0 +1,46 @@
+tool
+extends WindowDialog
+
+export var closed : bool = true setget set_closed
+var previous_points : PoolVector2Array
+var polygon
+
+signal polygon_changed(polygon)
+
+func set_closed(c : bool = true):
+ closed = c
+ window_title = "Edit polygon" if closed else "Edit polyline"
+ $VBoxContainer/EditorContainer/PolygonEditor.set_closed(closed)
+
+func _on_CurveDialog_popup_hide():
+# emit_signal("return_polygon", null)
+ queue_free()
+ pass
+
+func _on_OK_pressed():
+ emit_signal("polygon_changed", polygon)
+ polygon.polygon_changed()
+
+ queue_free()
+
+func _on_Cancel_pressed():
+ polygon.set_points(previous_points)
+ emit_signal("polygon_changed", polygon)
+
+ queue_free()
+
+func edit_polygon(poly):
+ polygon = poly
+ previous_points = polygon.points
+
+ $VBoxContainer/EditorContainer/PolygonEditor.set_polygon(polygon)
+ popup_centered()
+
+ #var result = yield(self, "return_polygon")
+
+ #queue_free()
+
+ #return result
+
+func _on_PolygonEditor_value_changed(value):
+ emit_signal("polygon_changed", value)
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn
new file mode 100644
index 0000000..1bf6da5
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn
@@ -0,0 +1,81 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn" type="PackedScene" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd" type="Script" id=2]
+
+[node name="PolygonDialog" type="WindowDialog"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 307.0
+margin_top = 151.0
+margin_right = -508.0
+margin_bottom = -70.0
+window_title = "Edit polygon"
+script = ExtResource( 2 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 5.0
+margin_top = 5.0
+margin_right = -5.0
+margin_bottom = -5.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="EditorContainer" type="MarginContainer" parent="VBoxContainer"]
+margin_right = 455.0
+margin_bottom = 457.0
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 3
+custom_constants/margin_right = 4
+custom_constants/margin_top = 4
+custom_constants/margin_left = 4
+custom_constants/margin_bottom = 4
+
+[node name="PolygonEditor" parent="VBoxContainer/EditorContainer" instance=ExtResource( 1 )]
+anchor_right = 0.0
+anchor_bottom = 0.0
+margin_left = 4.0
+margin_top = 4.0
+margin_right = 451.0
+margin_bottom = 453.0
+
+[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
+margin_top = 461.0
+margin_right = 455.0
+margin_bottom = 465.0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
+margin_top = 469.0
+margin_right = 455.0
+margin_bottom = 489.0
+
+[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer"]
+margin_right = 327.0
+margin_bottom = 20.0
+size_flags_horizontal = 3
+
+[node name="OK" type="Button" parent="VBoxContainer/HBoxContainer"]
+margin_left = 331.0
+margin_right = 391.0
+margin_bottom = 20.0
+rect_min_size = Vector2( 60, 0 )
+text = "OK"
+
+[node name="Cancel" type="Button" parent="VBoxContainer/HBoxContainer"]
+margin_left = 395.0
+margin_right = 455.0
+margin_bottom = 20.0
+rect_min_size = Vector2( 60, 0 )
+text = "Cancel"
+
+[connection signal="popup_hide" from="." to="." method="_on_CurveDialog_popup_hide"]
+[connection signal="value_changed" from="VBoxContainer/EditorContainer/PolygonEditor" to="." method="_on_PolygonEditor_value_changed"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/OK" to="." method="_on_OK_pressed"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_Cancel_pressed"]
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd
new file mode 100644
index 0000000..e8febfd
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd
@@ -0,0 +1,34 @@
+tool
+extends Control
+
+var MMPolygon = preload("res://addons/mat_maker_gd/nodes/bases/polygon_base.gd")
+
+export var closed : bool = true setget set_closed
+var value = null setget set_value
+
+signal updated(polygon)
+
+func set_closed(c : bool = true):
+ closed = c
+ $PolygonView.set_closed(c)
+
+func set_value(v) -> void:
+ value = v
+ $PolygonView.set_polygon(value)
+ $PolygonView.update()
+
+func _on_PolygonEdit_pressed():
+ var dialog = preload("res://addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn").instance()
+ dialog.set_closed(closed)
+ add_child(dialog)
+
+ dialog.connect("polygon_changed", self, "on_value_changed")
+
+ dialog.edit_polygon(value)
+
+
+
+func on_value_changed(v) -> void:
+ #set_value(v)
+ emit_signal("updated", v)
+ $PolygonView.update()
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn
new file mode 100644
index 0000000..ccea5f9
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn" type="PackedScene" id=2]
+
+[node name="PolygonEdit" type="Button"]
+anchor_left = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = -1280.0
+margin_right = -1248.0
+margin_bottom = -688.0
+rect_min_size = Vector2( 32, 32 )
+focus_mode = 1
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="PolygonView" parent="." instance=ExtResource( 2 )]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_right = 0.0
+margin_bottom = 0.0
+
+[connection signal="pressed" from="." to="." method="_on_PolygonEdit_pressed"]
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd
new file mode 100644
index 0000000..90c9d01
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd
@@ -0,0 +1,57 @@
+tool
+extends "res://addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd"
+
+signal value_changed(value)
+
+func _ready():
+ update_controls()
+
+func set_polygon(p) -> void:
+ polygon = p
+ update()
+ update_controls()
+
+func update_controls() -> void:
+ for c in get_children():
+ c.queue_free()
+
+ if !polygon:
+ return
+
+ for i in polygon.points.size():
+ var p = polygon.points[i]
+ var control_point = preload("res://addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn").instance()
+ add_child(control_point)
+ control_point.initialize(p)
+ control_point.rect_position = transform_point(p)-control_point.OFFSET
+ control_point.connect("moved", self, "_on_ControlPoint_moved")
+ control_point.connect("removed", self, "_on_ControlPoint_removed")
+
+ emit_signal("value_changed", polygon)
+
+func _on_ControlPoint_moved(index):
+ var control_point = get_child(index)
+ polygon.points[index] = reverse_transform_point(control_point.rect_position+control_point.OFFSET)
+
+ update()
+
+ emit_signal("value_changed", polygon)
+
+func _on_ControlPoint_removed(index):
+ if polygon.remove_point(index):
+ update()
+ update_controls()
+
+func _on_PolygonEditor_gui_input(event):
+ if !polygon:
+ return
+
+ if event is InputEventMouseButton:
+ if event.button_index == BUTTON_LEFT and event.doubleclick:
+ var new_point_position = reverse_transform_point(get_local_mouse_position())
+ polygon.add_point(new_point_position.x, new_point_position.y, closed)
+ update_controls()
+
+func _on_resize() -> void:
+ ._on_resize()
+ update_controls()
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn
new file mode 100644
index 0000000..166b925
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn
@@ -0,0 +1,14 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn" type="PackedScene" id=1]
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd" type="Script" id=2]
+
+[node name="PolygonEditor" instance=ExtResource( 1 )]
+margin_left = 10.0
+margin_top = 10.0
+margin_right = -10.0
+margin_bottom = -10.0
+mouse_filter = 0
+script = ExtResource( 2 )
+
+[connection signal="gui_input" from="." to="." method="_on_PolygonEditor_gui_input"]
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd
new file mode 100644
index 0000000..cf64af9
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd
@@ -0,0 +1,58 @@
+tool
+extends Control
+
+var MMPolygon = preload("res://addons/mat_maker_gd/nodes/bases/polygon_base.gd")
+
+#: MMPolygon
+var polygon
+
+var draw_size : Vector2 = Vector2(1, 1)
+var draw_offset : Vector2 = Vector2(0, 0)
+var closed : bool = true
+
+func set_closed(c : bool = true):
+ closed = c
+ update()
+
+func _ready() -> void:
+# polygon = MMPolygon.new()
+ connect("resized", self, "_on_resize")
+ _on_resize()
+
+func transform_point(p : Vector2) -> Vector2:
+ return draw_offset+p*draw_size
+
+func reverse_transform_point(p : Vector2) -> Vector2:
+ return (p-draw_offset)/draw_size
+
+func set_polygon(val):
+ polygon = val
+
+ update()
+
+func _draw():
+ if !polygon:
+ return
+
+# var current_theme : Theme = get_node("/root/MainWindow").theme
+# var bg = current_theme.get_stylebox("panel", "Panel").bg_color
+# var fg = current_theme.get_color("font_color", "Label")
+# var axes_color : Color = bg.linear_interpolate(fg, 0.25)
+# var curve_color : Color = bg.linear_interpolate(fg, 0.75)
+
+ var axes_color : Color = Color(0.9, 0.9, 0.9, 1)
+ var curve_color : Color = Color(1, 1, 1, 1)
+
+ draw_rect(Rect2(draw_offset, draw_size), axes_color, false)
+ var tp : Vector2 = transform_point(polygon.points[polygon.points.size()-1 if closed else 0])
+
+ for p in polygon.points:
+ var tnp = transform_point(p)
+ draw_line(tp, tnp, curve_color)
+ tp = tnp
+
+func _on_resize() -> void:
+ var ds : float = min(rect_size.x, rect_size.y)
+ draw_size = Vector2(ds, ds)
+ draw_offset = 0.5*(rect_size-draw_size)
+ update()
diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn
new file mode 100644
index 0000000..0b9f2ee
--- /dev/null
+++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn
@@ -0,0 +1,12 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd" type="Script" id=1]
+
+[node name="PolygonView" type="Control"]
+margin_right = 64.0
+margin_bottom = 64.0
+mouse_filter = 2
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
diff --git a/game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn b/game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn
new file mode 100644
index 0000000..95d056c
--- /dev/null
+++ b/game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn
@@ -0,0 +1,17 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/icons/icons.svg" type="Texture" id=1]
+
+[sub_resource type="AtlasTexture" id=1]
+flags = 4
+atlas = ExtResource( 1 )
+region = Rect2( 80, 80, 16, 16 )
+
+[node name="FavButton" type="Button"]
+margin_right = 12.0
+margin_bottom = 20.0
+icon = SubResource( 1 )
+flat = true
+__meta__ = {
+"_edit_use_anchors_": false
+}
diff --git a/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd
new file mode 100644
index 0000000..f384b95
--- /dev/null
+++ b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd
@@ -0,0 +1,57 @@
+tool
+extends FileDialog
+
+
+var left_panel = null
+var volume_option = null
+
+
+signal return_paths(path_list)
+
+func _ready() -> void:
+ var vbox = get_child(3)
+ var hbox = HSplitContainer.new()
+ add_child(hbox)
+ remove_child(vbox)
+ left_panel = preload("res://addons/mat_maker_gd/windows/file_dialog/left_panel.tscn").instance()
+ hbox.add_child(left_panel)
+ left_panel.connect("open_directory", self, "set_current_dir")
+ hbox.add_child(vbox)
+ vbox.size_flags_horizontal = SIZE_EXPAND_FILL
+ var fav_button = preload("res://addons/mat_maker_gd/windows/file_dialog/fav_button.tscn").instance()
+ vbox.get_child(0).add_child(fav_button)
+ fav_button.connect("pressed", self, "add_favorite")
+ if OS.get_name() == "Windows":
+ volume_option = vbox.get_child(0).get_child(3)
+ if ! volume_option is OptionButton:
+ volume_option = null
+
+
+func get_full_current_dir() -> String:
+ var prefix = ""
+ if volume_option != null and volume_option.visible:
+ prefix = volume_option.get_item_text(volume_option.selected)
+ return prefix+get_current_dir()
+
+func _on_FileDialog_file_selected(path) -> void:
+ left_panel.add_recent(get_full_current_dir())
+ emit_signal("return_paths", [ path ])
+
+func _on_FileDialog_files_selected(paths) -> void:
+ left_panel.add_recent(get_full_current_dir())
+ emit_signal("return_paths", paths)
+
+func _on_FileDialog_dir_selected(dir) -> void:
+ emit_signal("return_paths", [ dir ])
+
+func _on_FileDialog_popup_hide() -> void:
+ emit_signal("return_paths", [ ])
+
+func select_files() -> Array:
+ popup_centered()
+ var result = yield(self, "return_paths")
+ queue_free()
+ return result
+
+func add_favorite():
+ left_panel.add_favorite(get_full_current_dir())
diff --git a/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn
new file mode 100644
index 0000000..a95bb78
--- /dev/null
+++ b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn
@@ -0,0 +1,15 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/windows/file_dialog/file_dialog.gd" type="Script" id=1]
+
+[node name="FileDialog" type="FileDialog"]
+margin_right = 360.0
+margin_bottom = 130.0
+window_title = "Enregistrer un fichier"
+resizable = true
+script = ExtResource( 1 )
+
+[connection signal="dir_selected" from="." to="." method="_on_FileDialog_dir_selected"]
+[connection signal="file_selected" from="." to="." method="_on_FileDialog_file_selected"]
+[connection signal="files_selected" from="." to="." method="_on_FileDialog_files_selected"]
+[connection signal="popup_hide" from="." to="." method="_on_FileDialog_popup_hide"]
diff --git a/game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd
new file mode 100644
index 0000000..5673e70
--- /dev/null
+++ b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd
@@ -0,0 +1,71 @@
+tool
+extends VBoxContainer
+
+var recents : Array = []
+var favorites : Array = []
+
+signal open_directory(dirpath)
+
+#func _ready():
+# if get_node("/root/MainWindow") != null:
+# var config_cache = get_node("/root/MainWindow").config_cache
+# if config_cache.has_section_key("file_dialog", "recents"):
+# var parse_result = JSON.parse(config_cache.get_value("file_dialog", "recents"))
+# if parse_result != null:
+# recents = parse_result.result
+# if config_cache.has_section_key("file_dialog", "favorites"):
+# var parse_result = JSON.parse(config_cache.get_value("file_dialog", "favorites"))
+# if parse_result != null:
+# favorites = parse_result.result
+# update_lists()
+
+#func _exit_tree():
+# if get_node("/root/MainWindow") != null:
+# var config_cache = get_node("/root/MainWindow").config_cache
+# config_cache.set_value("file_dialog", "recents", JSON.print(recents))
+# config_cache.set_value("file_dialog", "favorites", JSON.print(favorites))
+
+func add_recent(file_path : String):
+ if recents.find(file_path) != -1:
+ recents.erase(file_path)
+ recents.push_front(file_path)
+ update_lists()
+
+func add_favorite(file_path : String):
+ if favorites.find(file_path) == -1:
+ favorites.push_back(file_path)
+ update_lists()
+
+func my_basename(s : String) -> String:
+ var slash_pos : int = s.find_last("/")
+ if slash_pos == -1 or slash_pos+1 == s.length():
+ return s
+ return s.right(slash_pos+1)
+
+func update_lists():
+ $FavList.clear()
+ for d in favorites:
+ $FavList.add_item(my_basename(d))
+ $FavList.set_item_tooltip($FavList.get_item_count()-1, d)
+ $RecentList.clear()
+ for d in recents:
+ $RecentList.add_item(my_basename(d))
+ $RecentList.set_item_tooltip($RecentList.get_item_count()-1, d)
+
+func _on_FavList_item_activated(index):
+ emit_signal("open_directory", $FavList.get_item_tooltip(index))
+
+func _on_RecentList_item_activated(index):
+ emit_signal("open_directory", $RecentList.get_item_tooltip(index))
+
+func _on_FavList_gui_input(event):
+ if event is InputEventKey and event.pressed and event.scancode == KEY_DELETE:
+ if ! $FavList.get_selected_items().empty():
+ favorites.remove($FavList.get_selected_items()[0])
+ update_lists()
+
+func _on_RecentList_gui_input(event):
+ if event is InputEventKey and event.pressed and event.scancode == KEY_DELETE:
+ if ! $RecentList.get_selected_items().empty():
+ recents.remove($RecentList.get_selected_items()[0])
+ update_lists()
diff --git a/game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn
new file mode 100644
index 0000000..a5ad9b0
--- /dev/null
+++ b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn
@@ -0,0 +1,48 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/windows/file_dialog/left_panel.gd" type="Script" id=1]
+
+[node name="LeftPanel" type="VBoxContainer"]
+margin_right = 40.0
+margin_bottom = 40.0
+size_flags_vertical = 3
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="RecentLabel" type="Label" parent="."]
+margin_right = 100.0
+margin_bottom = 14.0
+text = "Recent"
+
+[node name="RecentList" type="ItemList" parent="."]
+margin_top = 18.0
+margin_right = 100.0
+margin_bottom = 18.0
+rect_min_size = Vector2( 100, 0 )
+size_flags_vertical = 3
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="FavLabel" type="Label" parent="."]
+margin_top = 22.0
+margin_right = 100.0
+margin_bottom = 36.0
+text = "Favorite"
+
+[node name="FavList" type="ItemList" parent="."]
+margin_top = 40.0
+margin_right = 100.0
+margin_bottom = 40.0
+rect_min_size = Vector2( 100, 0 )
+size_flags_vertical = 3
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[connection signal="gui_input" from="RecentList" to="." method="_on_RecentList_gui_input"]
+[connection signal="item_activated" from="RecentList" to="." method="_on_RecentList_item_activated"]
+[connection signal="gui_input" from="FavList" to="." method="_on_FavList_gui_input"]
+[connection signal="item_activated" from="FavList" to="." method="_on_FavList_item_activated"]
diff --git a/game/modules/planets/textures/dirt.tres b/game/modules/planets/textures/dirt.tres
new file mode 100644
index 0000000..3224135
--- /dev/null
+++ b/game/modules/planets/textures/dirt.tres
@@ -0,0 +1,470 @@
+[gd_resource type="Resource" load_steps=61 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/emboss.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=7]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=8]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/make_tileable.gd" type="Script" id=9]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_channel.gd" type="Script" id=10]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 3 )
+graph_position = Vector2( -480, -80 )
+image = SubResource( 1 )
+grid_size = 512
+density = 0.0
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=39]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 4 )
+graph_position = Vector2( -260, -80 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 0, 0.677966, 0.188235, 0.141176, 0.101961, 1, 1, 0.282353, 0.235294, 0.0901961, 1 )
+image = SubResource( 3 )
+input = SubResource( 39 )
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 3 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 5 )
+graph_position = Vector2( -40, -80 )
+image = SubResource( 5 )
+input = SubResource( 6 )
+angle = 47.9
+amount = 7.3
+width = 1.0
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=40]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 5 )
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 4 )
+graph_position = Vector2( 180, -80 )
+interpolation_type = 1
+points = PoolRealArray( 0.584746, 0, 0, 0, 0, 0.79661, 0.286275, 0.192157, 0.054902, 1, 1, 0.396078, 0.439216, 0.443137, 1 )
+image = SubResource( 8 )
+input = SubResource( 40 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 6 )
+graph_position = Vector2( -460, 340 )
+image = SubResource( 10 )
+type = 0
+scale = Vector2( 40, 40 )
+folds = 0
+iterations = 4
+persistence = 1.0
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=41]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 10 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 4 )
+graph_position = Vector2( -260, 360 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0.447059, 0.345098, 0.215686, 1, 0.245763, 0.529412, 0.423529, 0.301961, 1, 0.38983, 0.219608, 0.2, 0.14902, 1, 0.584746, 0.298039, 0.25098, 0.164706, 1, 0.745763, 0.447059, 0.333333, 0.223529, 1, 1, 0.662745, 0.478431, 0.207843, 1 )
+image = SubResource( 12 )
+input = SubResource( 41 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 8 )
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 12 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.76
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 8 )
+graph_position = Vector2( -20, 360 )
+image = SubResource( 14 )
+input1 = SubResource( 15 )
+input2 = SubResource( 16 )
+blend_type = 6
+opacity = SubResource( 17 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 14 )
+
+[sub_resource type="Resource" id=23]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=24]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 23 )
+
+[sub_resource type="Resource" id=25]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.6
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=26]
+script = ExtResource( 8 )
+graph_position = Vector2( 240, 520 )
+image = SubResource( 19 )
+input1 = SubResource( 20 )
+input2 = SubResource( 24 )
+blend_type = 0
+opacity = SubResource( 25 )
+
+[sub_resource type="Resource" id=27]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=28]
+script = ExtResource( 6 )
+graph_position = Vector2( 0, 1280 )
+image = SubResource( 27 )
+type = 0
+scale = Vector2( 15, 25 )
+folds = 0
+iterations = 3
+persistence = 0.5
+
+[sub_resource type="Resource" id=29]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=30]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+
+[sub_resource type="Resource" id=31]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 27 )
+
+[sub_resource type="Resource" id=32]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.5
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=33]
+script = ExtResource( 8 )
+graph_position = Vector2( 240, 1340 )
+image = SubResource( 29 )
+input1 = SubResource( 30 )
+input2 = SubResource( 31 )
+blend_type = 0
+opacity = SubResource( 32 )
+
+[sub_resource type="Resource" id=21]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=34]
+script = ExtResource( 6 )
+graph_position = Vector2( -460, 900 )
+image = SubResource( 21 )
+type = 1
+scale = Vector2( 100, 100 )
+folds = 0
+iterations = 10
+persistence = 0.2
+
+[sub_resource type="Resource" id=22]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=42]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 21 )
+
+[sub_resource type="Resource" id=35]
+script = ExtResource( 4 )
+graph_position = Vector2( -240, 940 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 0, 0.822034, 0, 0, 0, 0, 1, 1, 1, 1, 1 )
+image = SubResource( 22 )
+input = SubResource( 42 )
+
+[sub_resource type="Resource" id=43]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 22 )
+
+[sub_resource type="Resource" id=36]
+script = ExtResource( 4 )
+graph_position = Vector2( 0, 940 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 0, 0.59322, 0, 0, 0, 0, 0.635593, 0.0823529, 0.360784, 0.109804, 1, 0.745763, 0.458824, 0.682353, 0.0901961, 1, 0.872881, 0.227451, 0.462745, 0.25098, 1, 1, 0.494118, 0.839216, 0.6, 1 )
+image = SubResource( 23 )
+input = SubResource( 43 )
+
+[sub_resource type="Resource" id=53]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=38]
+script = ExtResource( 7 )
+graph_position = Vector2( 980, 540 )
+image = SubResource( 53 )
+postfix = "_albedo"
+
+[sub_resource type="Resource" id=45]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=49]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=46]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 49 )
+
+[sub_resource type="Resource" id=47]
+script = ExtResource( 9 )
+graph_position = Vector2( 760, 540 )
+image = SubResource( 45 )
+input = SubResource( 46 )
+width = 0.1
+
+[sub_resource type="Resource" id=50]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 19 )
+
+[sub_resource type="Resource" id=51]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=52]
+script = ExtResource( 10 )
+graph_position = Vector2( 520, 540 )
+image = SubResource( 49 )
+input = SubResource( 50 )
+value = SubResource( 51 )
+channel = 3
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 256, 256 )
+nodes = [ SubResource( 2 ), SubResource( 4 ), SubResource( 7 ), SubResource( 9 ), SubResource( 11 ), SubResource( 13 ), SubResource( 18 ), SubResource( 26 ), SubResource( 28 ), SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ), SubResource( 38 ), SubResource( 47 ), SubResource( 52 ) ]
diff --git a/game/modules/planets/textures/dirt_albedo.png b/game/modules/planets/textures/dirt_albedo.png
new file mode 100644
index 0000000..1c5e4fe
Binary files /dev/null and b/game/modules/planets/textures/dirt_albedo.png differ
diff --git a/game/modules/planets/textures/dirt_albedo.png.import b/game/modules/planets/textures/dirt_albedo.png.import
new file mode 100644
index 0000000..71cd7e6
--- /dev/null
+++ b/game/modules/planets/textures/dirt_albedo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/dirt_albedo.png-b12f2598fac748786b25d7fed2e8ceea.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://modules/planets/textures/dirt_albedo.png"
+dest_files=[ "res://.import/dirt_albedo.png-b12f2598fac748786b25d7fed2e8ceea.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/modules/planets/textures/grass.tres b/game/modules/planets/textures/grass.tres
new file mode 100644
index 0000000..5af0416
--- /dev/null
+++ b/game/modules/planets/textures/grass.tres
@@ -0,0 +1,289 @@
+[gd_resource type="Resource" load_steps=40 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=7]
+[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=8]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/make_tileable.gd" type="Script" id=9]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 4 )
+graph_position = Vector2( -500, -20 )
+out_nodes = SubResource( 3 )
+out_borders = SubResource( 1 )
+out_random_color = SubResource( 4 )
+out_fill = SubResource( 2 )
+scale = Vector2( 4, 4 )
+stretch = Vector2( 1, 1 )
+intensity = 1.0
+randomness = 0.79
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 6 )
+graph_position = Vector2( -260, 300 )
+image = SubResource( 6 )
+grid_size = 256
+density = 0.0
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 14 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 2 )
+graph_position = Vector2( 220, 40 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 0, 0.754237, 0.447059, 0.4, 0.2, 1, 1, 0.811765, 0.886275, 0.0980392, 1 )
+image = SubResource( 8 )
+input = SubResource( 9 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 19 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 2 )
+graph_position = Vector2( 220, 640 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0.227451, 0.286275, 0.215686, 1, 0.313559, 0.0901961, 0.113725, 0.0941176, 1, 0.669492, 0.14902, 0.223529, 0.14902, 1, 1, 0.376471, 0.521569, 0.329412, 1 )
+image = SubResource( 11 )
+input = SubResource( 12 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 3 )
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 6 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 0.22
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 7 )
+graph_position = Vector2( -20, 20 )
+image = SubResource( 14 )
+input1 = SubResource( 15 )
+input2 = SubResource( 16 )
+blend_type = 11
+opacity = SubResource( 17 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 5 )
+graph_position = Vector2( -20, 640 )
+image = SubResource( 19 )
+type = 0
+scale = Vector2( 30, 30 )
+folds = 0
+iterations = 6
+persistence = 0.8
+
+[sub_resource type="Resource" id=21]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=22]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 8 )
+
+[sub_resource type="Resource" id=23]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 11 )
+
+[sub_resource type="Resource" id=24]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 0.74
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=25]
+script = ExtResource( 7 )
+graph_position = Vector2( 440, 280 )
+image = SubResource( 21 )
+input1 = SubResource( 22 )
+input2 = SubResource( 23 )
+blend_type = 4
+opacity = SubResource( 24 )
+
+[sub_resource type="Resource" id=28]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=26]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 28 )
+
+[sub_resource type="Resource" id=27]
+script = ExtResource( 8 )
+graph_position = Vector2( 900, 340 )
+image = SubResource( 26 )
+postfix = "_albedo"
+
+[sub_resource type="Resource" id=29]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 21 )
+
+[sub_resource type="Resource" id=30]
+script = ExtResource( 9 )
+graph_position = Vector2( 680, 340 )
+image = SubResource( 28 )
+input = SubResource( 29 )
+width = 0.1
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 256, 256 )
+nodes = [ SubResource( 5 ), SubResource( 7 ), SubResource( 10 ), SubResource( 13 ), SubResource( 18 ), SubResource( 20 ), SubResource( 25 ), SubResource( 27 ), SubResource( 30 ) ]
diff --git a/game/modules/planets/textures/grass_albedo.png b/game/modules/planets/textures/grass_albedo.png
new file mode 100644
index 0000000..e5bac02
Binary files /dev/null and b/game/modules/planets/textures/grass_albedo.png differ
diff --git a/game/modules/planets/textures/grass_albedo.png.import b/game/modules/planets/textures/grass_albedo.png.import
new file mode 100644
index 0000000..5d3d67a
--- /dev/null
+++ b/game/modules/planets/textures/grass_albedo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass_albedo.png-0370b00eba0f4d6a0653d2cbbd6b27b8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://modules/planets/textures/grass_albedo.png"
+dest_files=[ "res://.import/grass_albedo.png-0370b00eba0f4d6a0653d2cbbd6b27b8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/modules/planets/textures/grass_mossy.tres b/game/modules/planets/textures/grass_mossy.tres
new file mode 100644
index 0000000..ff95b56
--- /dev/null
+++ b/game/modules/planets/textures/grass_mossy.tres
@@ -0,0 +1,288 @@
+[gd_resource type="Resource" load_steps=40 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=7]
+[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=8]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/make_tileable.gd" type="Script" id=9]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 4 )
+graph_position = Vector2( -500, -20 )
+out_nodes = SubResource( 3 )
+out_borders = SubResource( 1 )
+out_random_color = SubResource( 4 )
+out_fill = SubResource( 2 )
+scale = Vector2( 4, 4 )
+stretch = Vector2( 1, 1 )
+intensity = 1.0
+randomness = 0.79
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 6 )
+graph_position = Vector2( -260, 300 )
+image = SubResource( 6 )
+grid_size = 256
+density = 0.0
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 14 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 2 )
+graph_position = Vector2( 220, 40 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 0, 0.754237, 0.447059, 0.4, 0.2, 1, 1, 0.811765, 0.886275, 0.0980392, 1 )
+image = SubResource( 8 )
+input = SubResource( 9 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=28]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 28 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 2 )
+graph_position = Vector2( 220, 640 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0.227451, 0.286275, 0.215686, 1, 0.313559, 0.0901961, 0.113725, 0.0941176, 1, 0.669492, 0.14902, 0.223529, 0.14902, 1, 1, 0.376471, 0.521569, 0.329412, 1 )
+image = SubResource( 11 )
+input = SubResource( 12 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 3 )
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 6 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 0.22
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 7 )
+graph_position = Vector2( -20, 20 )
+image = SubResource( 14 )
+input1 = SubResource( 15 )
+input2 = SubResource( 16 )
+blend_type = 11
+opacity = SubResource( 17 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 5 )
+graph_position = Vector2( -220, 640 )
+image = SubResource( 19 )
+type = 0
+scale = Vector2( 30, 30 )
+folds = 0
+iterations = 6
+persistence = 0.8
+
+[sub_resource type="Resource" id=21]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=22]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 8 )
+
+[sub_resource type="Resource" id=23]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 11 )
+
+[sub_resource type="Resource" id=24]
+script = ExtResource( 3 )
+default_type = 1
+default_int = 0
+default_float = 0.74
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=25]
+script = ExtResource( 7 )
+graph_position = Vector2( 440, 280 )
+image = SubResource( 21 )
+input1 = SubResource( 22 )
+input2 = SubResource( 23 )
+blend_type = 4
+opacity = SubResource( 24 )
+
+[sub_resource type="Resource" id=31]
+script = ExtResource( 3 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=27]
+script = ExtResource( 8 )
+graph_position = Vector2( 660, 340 )
+image = SubResource( 31 )
+postfix = "_albedo"
+
+[sub_resource type="Resource" id=29]
+script = ExtResource( 3 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 19 )
+
+[sub_resource type="Resource" id=30]
+script = ExtResource( 9 )
+graph_position = Vector2( -20, 640 )
+image = SubResource( 28 )
+input = SubResource( 29 )
+width = 0.01
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 256, 256 )
+nodes = [ SubResource( 5 ), SubResource( 7 ), SubResource( 10 ), SubResource( 13 ), SubResource( 18 ), SubResource( 20 ), SubResource( 25 ), SubResource( 27 ), SubResource( 30 ) ]
diff --git a/game/modules/planets/textures/grass_mossy_albedo.png b/game/modules/planets/textures/grass_mossy_albedo.png
new file mode 100644
index 0000000..9949d88
Binary files /dev/null and b/game/modules/planets/textures/grass_mossy_albedo.png differ
diff --git a/game/modules/planets/textures/grass_mossy_albedo.png.import b/game/modules/planets/textures/grass_mossy_albedo.png.import
new file mode 100644
index 0000000..39b20c5
--- /dev/null
+++ b/game/modules/planets/textures/grass_mossy_albedo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass_mossy_albedo.png-89be3f7f64f99f8dc346761a8d10564a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://modules/planets/textures/grass_mossy_albedo.png"
+dest_files=[ "res://.import/grass_mossy_albedo.png-89be3f7f64f99f8dc346761a8d10564a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/modules/planets/textures/stone_1.tres b/game/modules/planets/textures/stone_1.tres
new file mode 100644
index 0000000..90b38a9
--- /dev/null
+++ b/game/modules/planets/textures/stone_1.tres
@@ -0,0 +1,198 @@
+[gd_resource type="Resource" load_steps=28 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=7]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 6 )
+graph_position = Vector2( 120, 0 )
+out_nodes = SubResource( 3 )
+out_borders = SubResource( 1 )
+out_random_color = SubResource( 4 )
+out_fill = SubResource( 2 )
+scale = Vector2( 14, 14 )
+stretch = Vector2( 1, 1 )
+intensity = 1.0
+randomness = 0.95
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 5 )
+graph_position = Vector2( 360, 320 )
+image = SubResource( 6 )
+type = 0
+scale = Vector2( 20, 20 )
+folds = 0
+iterations = 9
+persistence = 0.9
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 1 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 7 )
+graph_position = Vector2( 360, 20 )
+interpolation_type = 1
+points = PoolRealArray( 0.00635593, 0, 0, 0, 1, 0.53178, 1, 1, 1, 1, 1, 1, 1, 1, 1 )
+image = SubResource( 8 )
+input = SubResource( 9 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 8 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 6 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.63
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 3 )
+graph_position = Vector2( 620, 100 )
+image = SubResource( 11 )
+input1 = SubResource( 12 )
+input2 = SubResource( 13 )
+blend_type = 2
+opacity = SubResource( 14 )
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 11 )
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 7 )
+graph_position = Vector2( 860, 140 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 1, 0.0911017, 0, 0, 0, 1, 0.472458, 0.129412, 0.133333, 0.137255, 1, 0.735169, 0.121569, 0.12549, 0.12549, 1, 1, 0.156863, 0.152941, 0.152941, 1 )
+image = SubResource( 16 )
+input = SubResource( 17 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 16 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 4 )
+graph_position = Vector2( 1120, 100 )
+image = SubResource( 19 )
+postfix = "_albedo"
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 256, 256 )
+nodes = [ SubResource( 5 ), SubResource( 7 ), SubResource( 10 ), SubResource( 15 ), SubResource( 18 ), SubResource( 20 ) ]
diff --git a/game/modules/planets/textures/stone_1_albedo.png b/game/modules/planets/textures/stone_1_albedo.png
new file mode 100644
index 0000000..3bc5cb7
Binary files /dev/null and b/game/modules/planets/textures/stone_1_albedo.png differ
diff --git a/game/modules/planets/textures/stone_1_albedo.png.import b/game/modules/planets/textures/stone_1_albedo.png.import
new file mode 100644
index 0000000..4db30b7
--- /dev/null
+++ b/game/modules/planets/textures/stone_1_albedo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/stone_1_albedo.png-8d9d1359c7386fbe18c4eb3d578278b2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://modules/planets/textures/stone_1_albedo.png"
+dest_files=[ "res://.import/stone_1_albedo.png-8d9d1359c7386fbe18c4eb3d578278b2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/modules/planets/textures/stone_dungeon_1.tres b/game/modules/planets/textures/stone_dungeon_1.tres
new file mode 100644
index 0000000..1cfd719
--- /dev/null
+++ b/game/modules/planets/textures/stone_dungeon_1.tres
@@ -0,0 +1,264 @@
+[gd_resource type="Resource" load_steps=35 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=7]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 6 )
+graph_position = Vector2( 0, 0 )
+out_nodes = SubResource( 3 )
+out_borders = SubResource( 1 )
+out_random_color = SubResource( 4 )
+out_fill = SubResource( 2 )
+scale = Vector2( 12, 12 )
+stretch = Vector2( 1, 1 )
+intensity = 1.0
+randomness = 0.95
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 1 )
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 7 )
+graph_position = Vector2( 280, 20 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 1, 0.0423729, 1, 1, 1, 1, 1, 1, 1, 1, 1 )
+image = SubResource( 6 )
+input = SubResource( 7 )
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 6 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 14 )
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.5
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 3 )
+graph_position = Vector2( 540, 120 )
+image = SubResource( 9 )
+input1 = SubResource( 10 )
+input2 = SubResource( 11 )
+blend_type = 6
+opacity = SubResource( 12 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 5 )
+graph_position = Vector2( 280, 340 )
+image = SubResource( 14 )
+type = 0
+scale = Vector2( 10, 9 )
+folds = 0
+iterations = 3
+persistence = 0.5
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 5 )
+graph_position = Vector2( 560, 520 )
+image = SubResource( 16 )
+type = 0
+scale = Vector2( 32, 32 )
+folds = 0
+iterations = 9
+persistence = 0.95
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=23]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 23 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 7 )
+graph_position = Vector2( 1060, 340 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0.0823529, 0.0823529, 0.0823529, 1, 0.237288, 0.0823529, 0.0823529, 0.0823529, 1, 0.5, 0.196078, 0.266667, 0.290196, 1, 0.762712, 0.32549, 0.388235, 0.392157, 1, 1, 0.168627, 0.243137, 0.243137, 1 )
+image = SubResource( 18 )
+input = SubResource( 19 )
+
+[sub_resource type="Resource" id=21]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 18 )
+
+[sub_resource type="Resource" id=22]
+script = ExtResource( 4 )
+graph_position = Vector2( 1300, 340 )
+image = SubResource( 21 )
+postfix = "_albedo"
+
+[sub_resource type="Resource" id=24]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 9 )
+
+[sub_resource type="Resource" id=25]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 16 )
+
+[sub_resource type="Resource" id=26]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.98
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=27]
+script = ExtResource( 3 )
+graph_position = Vector2( 820, 340 )
+image = SubResource( 23 )
+input1 = SubResource( 24 )
+input2 = SubResource( 25 )
+blend_type = 2
+opacity = SubResource( 26 )
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 128, 128 )
+nodes = [ SubResource( 5 ), SubResource( 8 ), SubResource( 13 ), SubResource( 15 ), SubResource( 17 ), SubResource( 20 ), SubResource( 22 ), SubResource( 27 ) ]
diff --git a/game/modules/planets/textures/stone_dungeon_1_albedo.png b/game/modules/planets/textures/stone_dungeon_1_albedo.png
new file mode 100644
index 0000000..95fe79f
Binary files /dev/null and b/game/modules/planets/textures/stone_dungeon_1_albedo.png differ
diff --git a/game/modules/planets/textures/stone_dungeon_1_albedo.png.import b/game/modules/planets/textures/stone_dungeon_1_albedo.png.import
new file mode 100644
index 0000000..1d204e8
--- /dev/null
+++ b/game/modules/planets/textures/stone_dungeon_1_albedo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/stone_dungeon_1_albedo.png-a589b6e6212398a160eb6e1a4ab49807.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://modules/planets/textures/stone_dungeon_1_albedo.png"
+dest_files=[ "res://.import/stone_dungeon_1_albedo.png-a589b6e6212398a160eb6e1a4ab49807.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/modules/planets/textures/test.png.import b/game/modules/planets/textures/test.png.import
new file mode 100644
index 0000000..c58ee37
--- /dev/null
+++ b/game/modules/planets/textures/test.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/test.png-e87bdfc7eb0364f7afee143bf66dc9dd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://data/voxel_textures/test.png"
+dest_files=[ "res://.import/test.png-e87bdfc7eb0364f7afee143bf66dc9dd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/modules/planets/textures/test_brick.tres b/game/modules/planets/textures/test_brick.tres
new file mode 100644
index 0000000..3ee0bf0
--- /dev/null
+++ b/game/modules/planets/textures/test_brick.tres
@@ -0,0 +1,326 @@
+[gd_resource type="Resource" load_steps=42 format=2]
+
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
+[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2]
+[ext_resource path="res://addons/mat_maker_gd/nodes/pattern/bricks.gd" type="Script" id=3]
+[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=4]
+[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=5]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=6]
+[ext_resource path="res://addons/mat_maker_gd/nodes/pattern/scratches.gd" type="Script" id=7]
+[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=8]
+
+[sub_resource type="Resource" id=1]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=2]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.03
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=3]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=4]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=5]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=6]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=7]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=8]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=9]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=10]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=11]
+script = ExtResource( 3 )
+graph_position = Vector2( 0, 0 )
+out_bricks_pattern = SubResource( 4 )
+out_random_color = SubResource( 9 )
+out_position_x = SubResource( 7 )
+out_position_y = SubResource( 8 )
+out_brick_uv = SubResource( 3 )
+out_corner_uv = SubResource( 5 )
+out_direction = SubResource( 6 )
+type = 0
+repeat = 1
+col_row = Vector2( 3, 7 )
+offset = 0.5
+mortar = SubResource( 2 )
+bevel = SubResource( 1 )
+roundness = SubResource( 10 )
+corner = 0.3
+
+[sub_resource type="Resource" id=12]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=13]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 4 )
+
+[sub_resource type="Resource" id=14]
+script = ExtResource( 8 )
+graph_position = Vector2( 240, 200 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0.168627, 0.109804, 0.109804, 1, 1, 0.780392, 0.298039, 0.247059, 1 )
+image = SubResource( 12 )
+input = SubResource( 13 )
+
+[sub_resource type="Resource" id=15]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=22]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=16]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 22 )
+
+[sub_resource type="Resource" id=17]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 12 )
+
+[sub_resource type="Resource" id=18]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.52
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=19]
+script = ExtResource( 6 )
+graph_position = Vector2( 500, 20 )
+image = SubResource( 15 )
+input1 = SubResource( 16 )
+input2 = SubResource( 17 )
+blend_type = 0
+opacity = SubResource( 18 )
+
+[sub_resource type="Resource" id=20]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=21]
+script = ExtResource( 7 )
+graph_position = Vector2( 260, -340 )
+image = SubResource( 20 )
+size = Vector2( 0.23, 0.3 )
+layers = 2
+waviness = 0.05
+angle = 171
+randomness = 0.35
+
+[sub_resource type="Resource" id=23]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 1.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 20 )
+
+[sub_resource type="Resource" id=24]
+script = ExtResource( 8 )
+graph_position = Vector2( 500, -300 )
+interpolation_type = 1
+points = PoolRealArray( 0, 0, 0, 0, 0, 0.40678, 0, 0, 0, 1, 1, 0, 0, 0, 1 )
+image = SubResource( 22 )
+input = SubResource( 23 )
+
+[sub_resource type="Resource" id=25]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=26]
+script = ExtResource( 4 )
+graph_position = Vector2( 760, -320 )
+image = SubResource( 25 )
+type = 0
+scale = Vector2( 20, 20 )
+folds = 0
+iterations = 7
+persistence = 0.9
+
+[sub_resource type="Resource" id=27]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=28]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 25 )
+
+[sub_resource type="Resource" id=29]
+script = ExtResource( 2 )
+default_type = 4
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 1, 1, 1, 1 )
+input_property = SubResource( 15 )
+
+[sub_resource type="Resource" id=30]
+script = ExtResource( 2 )
+default_type = 1
+default_int = 0
+default_float = 0.61
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+
+[sub_resource type="Resource" id=31]
+script = ExtResource( 6 )
+graph_position = Vector2( 960, 20 )
+image = SubResource( 27 )
+input1 = SubResource( 28 )
+input2 = SubResource( 29 )
+blend_type = 11
+opacity = SubResource( 30 )
+
+[sub_resource type="Resource" id=34]
+script = ExtResource( 2 )
+default_type = 5
+default_int = 0
+default_float = 0.0
+default_vector2 = Vector2( 0, 0 )
+default_vector3 = Vector3( 0, 0, 0 )
+default_color = Color( 0, 0, 0, 1 )
+input_property = SubResource( 27 )
+
+[sub_resource type="Resource" id=33]
+script = ExtResource( 5 )
+graph_position = Vector2( 1200, 60 )
+image = SubResource( 34 )
+postfix = "_albedo"
+
+[resource]
+script = ExtResource( 1 )
+image_size = Vector2( 256, 256 )
+nodes = [ SubResource( 11 ), SubResource( 14 ), SubResource( 19 ), SubResource( 21 ), SubResource( 24 ), SubResource( 26 ), SubResource( 31 ), SubResource( 33 ) ]
diff --git a/game/modules/planets/textures/test_brick_albedo.png b/game/modules/planets/textures/test_brick_albedo.png
new file mode 100644
index 0000000..1242411
Binary files /dev/null and b/game/modules/planets/textures/test_brick_albedo.png differ
diff --git a/game/modules/planets/textures/test_brick_albedo.png.import b/game/modules/planets/textures/test_brick_albedo.png.import
new file mode 100644
index 0000000..5249cff
--- /dev/null
+++ b/game/modules/planets/textures/test_brick_albedo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/test_brick_albedo.png-95796f7bec59b800f32e9a35b47ac019.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://modules/planets/textures/test_brick_albedo.png"
+dest_files=[ "res://.import/test_brick_albedo.png-95796f7bec59b800f32e9a35b47ac019.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/game/project.godot b/game/project.godot
index 2d6e62a..dd77658 100644
--- a/game/project.godot
+++ b/game/project.godot
@@ -309,6 +309,21 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://texture_tools/LayeredTextureMaker.gd"
}, {
+"base": "Resource",
+"class": "MMMateial",
+"language": "GDScript",
+"path": "res://addons/mat_maker_gd/nodes/mm_material.gd"
+}, {
+"base": "Resource",
+"class": "MMNode",
+"language": "GDScript",
+"path": "res://addons/mat_maker_gd/nodes/mm_node.gd"
+}, {
+"base": "Resource",
+"class": "MMNodeUniversalProperty",
+"language": "GDScript",
+"path": "res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd"
+}, {
"base": "Node",
"class": "Main",
"language": "GDScript",
@@ -430,6 +445,9 @@ _global_script_class_icons={
"ItemVisual2D": "",
"ItemVisualEntry2D": "",
"LayeredTextureMaker": "",
+"MMMateial": "",
+"MMNode": "",
+"MMNodeUniversalProperty": "",
"Main": "",
"ManaResource": "",
"Menu": "",
@@ -485,7 +503,7 @@ window/size/ui_scale_touch=1.0
[editor_plugins]
-enabled=PoolStringArray( "res://addons/Godoxel/plugin.cfg" )
+enabled=PoolStringArray( "res://addons/Godoxel/plugin.cfg", "res://addons/mat_maker_gd/plugin.cfg" )
[ess]