diff --git a/Aircraft/Generic/Systems/Tests/FailureMgr/test_all.nas b/Aircraft/Generic/Systems/Tests/FailureMgr/test_all.nas
new file mode 100644
index 000000000..bcb22be47
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/FailureMgr/test_all.nas
@@ -0,0 +1,7 @@
+# Aggregation of all tests for the Failure Manager
+
+io.include("Aircraft/Generic/Systems/Tests/FailureMgr/test_cycle_counter.nas");
+io.include("Aircraft/Generic/Systems/Tests/FailureMgr/test_altitude_trigger.nas");
+io.include("Aircraft/Generic/Systems/Tests/FailureMgr/test_mcbf_trigger.nas");
+io.include("Aircraft/Generic/Systems/Tests/FailureMgr/test_mtbf_trigger.nas");
+io.include("Aircraft/Generic/Systems/Tests/FailureMgr/test_failure_mode.nas");
diff --git a/Aircraft/Generic/Systems/Tests/FailureMgr/test_altitude_trigger.nas b/Aircraft/Generic/Systems/Tests/FailureMgr/test_altitude_trigger.nas
new file mode 100644
index 000000000..f7cf9b0f3
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/FailureMgr/test_altitude_trigger.nas
@@ -0,0 +1,155 @@
+# AltitudeTrigger unit tests
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+io.include("Aircraft/Generic/Systems/Tests/test.nas");
+io.include("Aircraft/Generic/Systems/failures.nas");
+
+var TestAltitudeTrigger = {
+
+ parents: [TestSuite],
+
+ setup: func {
+ props.globals.initNode("/test");
+ },
+
+ cleanup: func {
+ me.trigger = nil;
+ props.globals.getNode("/test").remove();
+ },
+
+ test_binding: func {
+
+ setprop("/test/foreign-property", 25);
+
+ me.trigger = AltitudeTrigger.new(100, 200);
+ me.trigger.bind("/test/");
+
+ assert_prop_exists("/test/reset");
+ assert_prop_exists("/test/min-altitude-ft");
+ assert_prop_exists("/test/min-altitude-ft");
+
+ me.trigger.unbind();
+
+ fail_if_prop_exists("/test/reset");
+ fail_if_prop_exists("/test/min-altitude-ft");
+ fail_if_prop_exists("/test/min-altitude-ft");
+
+ assert_prop_exists("/test/foreign-property");
+ },
+
+ test_props_are_read_on_reset: func {
+
+ me.trigger = AltitudeTrigger.new(100, 200);
+ me.trigger.bind("/test/");
+
+ assert(me.trigger.params["min-altitude-ft"] == 100);
+ assert(me.trigger.params["max-altitude-ft"] == 200);
+
+ setprop("/test/min-altitude-ft", 1000);
+ setprop("/test/max-altitude-ft", 2000);
+
+ assert(me.trigger.params["min-altitude-ft"] == 100);
+ assert(me.trigger.params["max-altitude-ft"] == 200);
+
+ me.trigger.reset();
+
+ assert(me.trigger.params["min-altitude-ft"] == 1000);
+ assert(me.trigger.params["max-altitude-ft"] == 2000);
+ },
+
+ test_trigger_fires_within_min_and_max: func {
+
+ me.trigger = AltitudeTrigger.new(100, 200);
+
+ me.trigger._altitude_prop = "/test/fake-altitude-ft";
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 0);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 300);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 150);
+ assert(me.trigger.update() == 1);
+ assert(me.trigger.fired);
+ },
+
+ test_trigger_accepts_nil_max: func {
+
+ me.trigger = AltitudeTrigger.new(500, nil);
+ me.trigger._altitude_prop = "/test/fake-altitude-ft";
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", -250);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 0);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 250);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 750);
+ assert(me.trigger.update() == 1);
+ assert(me.trigger.fired);
+ },
+
+ test_trigger_accepts_nil_min: func {
+
+ me.trigger = AltitudeTrigger.new(nil, 500);
+ me.trigger._altitude_prop = "/test/fake-altitude-ft";
+ me.trigger.bind("/test/trigger/");
+
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 750);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 500);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-altitude-ft", 250);
+ assert(me.trigger.update() == 1);
+ assert(me.trigger.fired);
+
+ me.trigger.reset();
+
+ setprop("/test/fake-altitude-ft", -250);
+ assert(me.trigger.update() == 1);
+ assert(me.trigger.fired);
+ },
+
+ test_trigger_dies_if_both_params_are_nil: func {
+ call(AltitudeTrigger.new, [nil, nil], AltitudeTrigger, var err = []);
+ assert(size(err) > 0);
+ },
+
+ test_to_str: func {
+ me.trigger = AltitudeTrigger.new(100, 200);
+ call(me.trigger.to_str, [], me.trigger, var err = []);
+ assert(size(err) == 0);
+ }
+};
diff --git a/Aircraft/Generic/Systems/Tests/FailureMgr/test_cycle_counter.nas b/Aircraft/Generic/Systems/Tests/FailureMgr/test_cycle_counter.nas
new file mode 100644
index 000000000..30c0e4a8e
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/FailureMgr/test_cycle_counter.nas
@@ -0,0 +1,124 @@
+# CycleCounter unit tests
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+io.include("Aircraft/Generic/Systems/Tests/test.nas");
+io.include("Aircraft/Generic/Systems/failures.nas");
+
+var TestCycleCounter = {
+
+ parents: [TestSuite],
+
+ setup: func {
+ props.globals.initNode("/test");
+ },
+
+ cleanup: func {
+ props.globals.getNode("/test").remove();
+ me.counter = nil;
+ },
+
+ _shake_that_prop: func (pattern=nil) {
+
+ if (pattern == nil)
+ pattern = [0, -10, 10, -10, 10, -10, 10, 0];
+
+ setprop("/test/property", pattern[0]);
+ me.counter.reset();
+
+ var i = 0;
+ var value = pattern[0];
+ var target = pattern[1];
+ var delta = 0;
+
+ while(i < size(pattern) - 1) {
+
+ target = pattern[i+1];
+ delta = pattern[i+1] > pattern[i] ? 1 : -1;
+
+ while(value != target) {
+ value += delta;
+ setprop("/test/property", value);
+ }
+
+ i += 1;
+ }
+ },
+
+ test_cycles_dont_grow_while_disabled: func {
+ me.counter = CycleCounter.new("/test/property");
+ me._shake_that_prop();
+ assert(me.counter.cycles == 0);
+ },
+
+ test_cycles_grow_while_enabled: func {
+ me.counter = CycleCounter.new("/test/property");
+
+ me._shake_that_prop();
+ assert(me.counter.cycles == 0);
+
+ me.counter.enable();
+
+ me._shake_that_prop();
+ assert(me.counter.cycles == 3);
+ },
+
+ test_reset: func {
+ me.counter = CycleCounter.new("/test/property");
+ me.counter.enable();
+
+ me._shake_that_prop();
+ assert(me.counter.cycles > 0);
+
+ me.counter.reset();
+ assert(me.counter.cycles == 0);
+ },
+
+ test_callback_every_half_cycle: func {
+ var count = 0;
+
+ me.counter = CycleCounter.new(
+ property: "/test/property",
+ on_update: func (cycles) { count += 1 });
+
+ me.counter.enable();
+ me._shake_that_prop();
+
+ assert(count == 6);
+ },
+
+ test_callback_reports_cycle_count: func {
+ var count = 0;
+ var cb = func (cycles) {
+ count += 1;
+ assert(cycles == count * 0.5);
+ };
+
+ me.counter = CycleCounter.new(
+ property: "/test/property", on_update: cb);
+
+ me.counter.enable();
+ me._shake_that_prop();
+ },
+
+ test_counter_works_for_binary_props: func {
+ me.counter = CycleCounter.new("/test/property");
+ me.counter.enable();
+ me._shake_that_prop([0, 1, 0, 1, 0, 1]);
+ assert(me.counter.cycles == 2);
+ }
+};
diff --git a/Aircraft/Generic/Systems/Tests/FailureMgr/test_failure_mode.nas b/Aircraft/Generic/Systems/Tests/FailureMgr/test_failure_mode.nas
new file mode 100644
index 000000000..d6fd9bd71
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/FailureMgr/test_failure_mode.nas
@@ -0,0 +1,113 @@
+# AltitudeTrigger unit tests
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+io.include("Aircraft/Generic/Systems/Tests/test.nas");
+io.include("Aircraft/Generic/Systems/failures.nas");
+
+var TestFailureMode = {
+
+ parents: [TestSuite],
+
+ setup: func {
+ props.globals.initNode("/test");
+ },
+
+ cleanup: func {
+ me.mode = nil;
+ props.globals.getNode("/test").remove();
+ },
+
+ test_binding: func {
+ var actuator = { parents: [FailureMgr.FailureActuator] };
+ setprop("/test/foreign-property", 25);
+
+ me.mode = FailureMgr.FailureMode.new(
+ id: "instruments/compass",
+ description: "a description",
+ actuator: actuator);
+
+ me.mode.bind("/test/");
+ assert_prop_exists("/test/instruments/compass/failure-level");
+
+ me.mode.unbind();
+ fail_if_prop_exists("/test/instruments/compass/failure-level");
+ fail_if_prop_exists("/test/instruments/compass");
+ assert_prop_exists("/test/foreign-property");
+ },
+
+ test_set_failure_level_calls_actuator: func {
+ var level = 0;
+ var actuator = {
+ parents: [FailureMgr.FailureActuator],
+ set_failure_level: func (l) { level = l },
+ };
+
+ me.mode = FailureMgr.FailureMode.new(
+ id: "instruments/compass",
+ description: "a description",
+ actuator: actuator);
+ me.mode.bind("/test/");
+
+ me.mode.set_failure_level(1);
+ assert(level == 1);
+ },
+
+ test_actuator_gets_called_from_prop: func {
+ var level = 0;
+ var actuator = {
+ parents: [FailureMgr.FailureActuator],
+ set_failure_level: func (l) { level = l },
+ };
+
+ me.mode = FailureMgr.FailureMode.new(
+ id: "instruments/compass",
+ description: "a description",
+ actuator: actuator);
+
+ me.mode.bind("/test/");
+ setprop("/test/instruments/compass/failure-level", 1);
+ assert(level == 1);
+ },
+
+ test_setting_level_from_nasal_is_shown_in_prop: func {
+ var level = 0;
+ var actuator = {
+ parents: [FailureMgr.FailureActuator],
+ set_failure_level: func (l) { level = l },
+ };
+
+ me.mode = FailureMgr.FailureMode.new(
+ id: "instruments/compass",
+ description: "a description",
+ actuator: actuator);
+
+ me.mode.bind("/test/");
+
+ me.mode.set_failure_level(1);
+ assert(level == 1);
+
+ var prop_value = getprop("/test/instruments/compass/failure-level");
+ assert(prop_value == 1);
+
+ me.mode.set_failure_level(0.5);
+ assert(level == 0.5);
+
+ prop_value = getprop("/test/instruments/compass/failure-level");
+ assert(prop_value == 0.5);
+ }
+};
diff --git a/Aircraft/Generic/Systems/Tests/FailureMgr/test_mcbf_trigger.nas b/Aircraft/Generic/Systems/Tests/FailureMgr/test_mcbf_trigger.nas
new file mode 100644
index 000000000..14a7d511a
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/FailureMgr/test_mcbf_trigger.nas
@@ -0,0 +1,116 @@
+# McbfTrigger unit tests
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+io.include("Aircraft/Generic/Systems/Tests/test.nas");
+io.include("Aircraft/Generic/Systems/failures.nas");
+
+var TestMcbfTrigger = {
+
+ parents: [TestSuite],
+
+ setup: func {
+ props.globals.initNode("/test");
+ },
+
+ cleanup: func {
+ me.trigger = nil;
+ props.globals.getNode("/test").remove();
+ },
+
+ _do_one_cycle: func (prop) {
+ setprop(prop, 10);
+ setprop(prop, -10);
+ setprop(prop, 0);
+ },
+
+ test_binding: func {
+ setprop("/test/property", 0);
+
+ me.trigger = McbfTrigger.new("/test/property", 3);
+ me.trigger.bind("/test/");
+
+ assert_prop_exists("/test/reset");
+ assert_prop_exists("/test/mcbf");
+
+ me.trigger.unbind();
+ fail_if_prop_exists("/test/reset");
+ fail_if_prop_exists("/test/mcbf");
+ assert_prop_exists("/test/property");
+ },
+
+ test_trigger_fires_after_activation_cycles: func {
+ setprop("/test/property", 25);
+ me.trigger = McbfTrigger.new("/test/property", 3);
+ me.trigger.activation_cycles = 3;
+ me.trigger.enable();
+
+ assert(!me.trigger.fired);
+
+ for (var i = 1; i < 5; i += 1) {
+ me._do_one_cycle("/test/property");
+ assert(me.trigger.fired == (i > 3));
+ }
+ },
+
+ test_trigger_notifies_observer_once: func {
+ var observer_called = 0;
+ var on_fire = func observer_called += 1;
+
+ setprop("/test/property", 25);
+ me.trigger = McbfTrigger.new("/test/property", 3);
+ me.trigger.activation_cycles = 3;
+ me.trigger.on_fire = on_fire;
+ me.trigger.enable();
+
+ assert(!me.trigger.fired);
+
+ for (var i = 1; i < 5; i += 1)
+ me._do_one_cycle("/test/property");
+
+ assert(observer_called == 1);
+ },
+
+ test_reset: func {
+ setprop("/test/property", 25);
+ me.trigger = McbfTrigger.new("/test/property", 3);
+ me.trigger.activation_cycles = 3;
+ me.trigger.bind("/test");
+ me.trigger.enable();
+
+ for (var i = 1; i < 5; i += 1)
+ me._do_one_cycle("/test/property");
+
+ assert(me.trigger.fired);
+
+ me.trigger.reset();
+ me.trigger.activation_cycles = 3;
+
+ assert(!me.trigger.fired);
+
+ for (var i = 1; i < 5; i += 1) {
+ me._do_one_cycle("/test/property");
+ assert(me.trigger.fired == (i > 3));
+ }
+ },
+
+ test_to_str: func {
+ me.trigger = McbfTrigger.new("/test/property", 3);
+ call(me.trigger.to_str, [], me.trigger, var err = []);
+ assert(size(err) == 0);
+ }
+};
diff --git a/Aircraft/Generic/Systems/Tests/FailureMgr/test_mtbf_trigger.nas b/Aircraft/Generic/Systems/Tests/FailureMgr/test_mtbf_trigger.nas
new file mode 100644
index 000000000..dd54d2b81
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/FailureMgr/test_mtbf_trigger.nas
@@ -0,0 +1,87 @@
+# MtbfTrigger unit tests
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+io.include("Aircraft/Generic/Systems/Tests/test.nas");
+io.include("Aircraft/Generic/Systems/failures.nas");
+
+var TestMtbfTrigger = {
+
+ parents: [TestSuite],
+
+ setup: func {
+ props.globals.initNode("/test");
+ },
+
+ cleanup: func {
+ me.trigger = nil;
+ props.globals.getNode("/test").remove();
+ },
+
+ test_binding: func {
+
+ setprop("/test/foreign-property", 25);
+
+ me.trigger = MtbfTrigger.new(60);
+ me.trigger.bind("/test/");
+
+ assert_prop_exists("/test/reset");
+ assert_prop_exists("/test/mtbf");
+
+ me.trigger.unbind();
+
+ fail_if_prop_exists("/test/reset");
+ fail_if_prop_exists("/test/mtbf");
+
+ assert_prop_exists("/test/foreign-property");
+ },
+
+ test_props_are_read_on_reset: func {
+
+ me.trigger = MtbfTrigger.new(60);
+ me.trigger.bind("/test/");
+ assert(me.trigger.params["mtbf"] == 60);
+
+ setprop("/test/mtbf", 120);
+ assert(me.trigger.params["mtbf"] == 60);
+
+ me.trigger.reset();
+ assert(me.trigger.params["mtbf"] == 120);
+ },
+
+ test_trigger_fires_after_fire_time: func {
+
+ me.trigger = MtbfTrigger.new(60);
+ me.trigger._time_prop = "/test/fake-time-sec";
+ me.trigger.fire_time = 60;
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-time-sec", 50);
+ assert(me.trigger.update() == 0);
+ assert(!me.trigger.fired);
+
+ setprop("/test/fake-time-sec", 70);
+ assert(me.trigger.update() == 1);
+ assert(me.trigger.fired);
+ },
+
+ test_to_str: func {
+ me.trigger = MtbfTrigger.new(60);
+ call(me.trigger.to_str, [], me.trigger, var err = []);
+ assert(size(err) == 0);
+ }
+};
diff --git a/Aircraft/Generic/Systems/Tests/test.nas b/Aircraft/Generic/Systems/Tests/test.nas
new file mode 100644
index 000000000..0a13ca1e7
--- /dev/null
+++ b/Aircraft/Generic/Systems/Tests/test.nas
@@ -0,0 +1,139 @@
+# Minimalistic framework for automated testing in Nasal
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# TestSuite
+#
+# Tests are organized in test suites. Each test suite contains an arbitrary
+# number of tests, and two special methods "setup" and "cleanup". Setup is
+# called before every test, and cleanup is called after every test.
+#
+# In order to define a test suite, you have to create an object parented to
+# TestSuite. The testing framework will identify any method in your object whose
+# name starts with "test_" as a test case to be run.
+#
+# Important: The order in which test cases and test suites are executed
+# is undefined!
+#
+# Example:
+#
+# var MyTestSuite = {
+#
+# parents: [TestSuite],
+#
+# setup: func {
+# Stuff to do before every test...
+# This is optional. You don't need to provide it if you don't use it.
+# },
+#
+# cleanup: func {
+# Stuff to do after every test...
+# Also optional.
+# },
+#
+# my_auxiliary_function: func {
+# Methods that do not start with "test_" will not be executed by the
+# test runner. You can define as many auxiliary functions in the test
+# suite as you wish.
+# },
+#
+# test_trivial_test: func {
+# This is a real test (starts with "test_"), and it will be run by the
+# framework when test_run() is called.#
+# }
+# };
+
+var TestSuite = {
+ setup: func 0,
+ cleanup: func 0
+};
+
+# run_tests([namespace])
+#
+# Executes all test suites found in the given namespace. If no namespace is
+# specified, then the namespace where run_tests is defined is used by default.
+#
+# An effective way to work with the framework is to just include the framework
+# from your test files:
+#
+# io.include(".../test.nas");
+#
+# and then execute a script like this in the Nasal Console:
+#
+# delete(globals, "test");
+# io.load_nasal(".../my_test_suite.nas", "test");
+# test.run_tests();
+#
+# What this script does is: it empties the "test" namespace and then loads your
+# script into that namespace. The test framework will be loaded in there as
+# well if it was io.include'd in my_test_suite.nas. Finally, all test suites
+# in the "test" namespace are executed.
+
+var run_tests = func(namespace=nil) {
+
+ var ns = namespace != nil ? namespace : closure(run_tests, 1);
+
+ var passed = 0;
+ var failed = 0;
+ var err = [];
+
+ foreach(var suite_name; keys(ns)) {
+ var suite = ns[suite_name];
+
+ if (!isa(suite, TestSuite))
+ continue;
+
+ print("Running test suite ", suite_name);
+
+ foreach (var test_name; keys(suite)) {
+
+ if (find("test_", test_name) != 0)
+ continue;
+
+ # Run the test case
+ setsize(err, 0);
+ contains(suite, "setup") and call(suite.setup, [], suite, err);
+ size(err) == 0 and call(suite[test_name], [], suite, err);
+ size(err) == 0 and contains(suite, "cleanup") and call(suite.cleanup, [], suite, err);
+
+ if (size(err) == 0) {
+ passed += 1;
+ continue;
+ }
+
+ failed += 1;
+ print("Test ", test_name, " FAILED\n");
+ debug.printerror(err);
+ }
+ }
+
+ print(sprintf("\n%d tests run. %d passed, %d failed",
+ passed + failed, passed, failed));
+}
+
+
+var assert_prop_exists = func (prop) {
+ assert(props.globals.getNode(prop) != nil,
+ sprintf("Property %s does not exist", prop));
+}
+
+
+var fail_if_prop_exists = func (prop) {
+ assert(props.globals.getNode(prop) == nil,
+ sprintf("Property %s exists", prop));
+}
diff --git a/Aircraft/Generic/Systems/compat_failure_modes.nas b/Aircraft/Generic/Systems/compat_failure_modes.nas
new file mode 100644
index 000000000..1fdfe5645
--- /dev/null
+++ b/Aircraft/Generic/Systems/compat_failure_modes.nas
@@ -0,0 +1,210 @@
+# Compatibility failure modes
+#
+# Loads FailureMgr with the failure modes that where previously hardcoded,
+# emulating former behavior and allowing backward compatibility.
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+# Based on previous work by Stuart Buchanan, Erobo & John Denker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+io.include("Aircraft/Generic/Systems/failures.nas");
+
+
+MTBF = 0;
+MCBF = 1;
+
+SERV = 0;
+JAM = 1;
+ENG = 2;
+
+
+var compat_modes = [
+ # Instruments
+ { id: "instrumentation/adf", type: MTBF, failure: SERV, desc: "ADF" },
+ { id: "instrumentation/dme", type: MTBF, failure: SERV, desc: "DME" },
+ { id: "instrumentation/airspeed-indicator", type: MTBF, failure: SERV, desc: "ASI" },
+ { id: "instrumentation/altimeter", type: MTBF, failure: SERV, desc: "Altimeter" },
+ { id: "instrumentation/attitude-indicator", type: MTBF, failure: SERV, desc: "Attitude Indicator" },
+ { id: "instrumentation/heading-indicator", type: MTBF, failure: SERV, desc: "Heading Indicator" },
+ { id: "instrumentation/magnetic-compass", type: MTBF, failure: SERV, desc: "Magnetic Compass" },
+ { id: "instrumentation/nav/gs", type: MTBF, failure: SERV, desc: "Nav 1 Glideslope" },
+ { id: "instrumentation/nav/cdi", type: MTBF, failure: SERV, desc: "Nav 1 CDI" },
+ { id: "instrumentation/nav[1]/gs", type: MTBF, failure: SERV, desc: "Nav 2 Glideslope" },
+ { id: "instrumentation/nav[1]/cdi", type: MTBF, failure: SERV, desc: "Nav 2 CDI" },
+ { id: "instrumentation/slip-skid-ball", type: MTBF, failure: SERV, desc: "Slip/Skid Ball" },
+ { id: "instrumentation/turn-indicator", type: MTBF, failure: SERV, desc: "Turn Indicator" },
+ { id: "instrumentation/vertical-speed-indicator", type: MTBF, failure: SERV, desc: "VSI" },
+
+ # Systems
+ { id: "systems/electrical", type: MTBF, failure: SERV, desc: "Electrical system" },
+ { id: "systems/pitot", type: MTBF, failure: SERV, desc: "Pitot system" },
+ { id: "systems/static", type: MTBF, failure: SERV, desc: "Static system" },
+ { id: "systems/vacuum", type: MTBF, failure: SERV, desc: "Vacuum system" },
+
+ # Controls
+ { id: "controls/flight/aileron", type: MTBF, failure: JAM, desc: "Aileron" },
+ { id: "controls/flight/elevator", type: MTBF, failure: JAM, desc: "Elevator" },
+ { id: "controls/flight/rudder", type: MTBF, failure: JAM, desc: "Rudder" },
+ { id: "controls/flight/flaps", type: MCBF, failure: JAM, desc: "Flaps" },
+ { id: "controls/flight/speedbrake", type: MCBF, failure: JAM, desc: "Speed Brake" },
+ { id: "controls/gear", type: MCBF, failure: SERV, desc: "Gear", prop: "/gear", mcbf_prop: "/controls/gear/gear-down" }
+];
+
+
+##
+# Handles the old failures.nas property tree interface,
+# sending the appropriate commands to the new FailureMgr.
+
+var compat_listener = func(prop) {
+
+ var new_trigger = func {
+ if (name == "mtbf") {
+ MtbfTrigger.new(value);
+ }
+ else {
+ var control = id;
+
+ forindex(var i; compat_modes) {
+ var mode = compat_modes[i];
+ if (mode.id == id and contains(compat_modes[i], "mcbf_prop")) {
+ control = mode.mcbf_prop;
+ break;
+ }
+ }
+
+ McbfTrigger.new(control, value);
+ }
+ };
+
+ var name = prop.getName();
+ var value = prop.getValue();
+ var id = string.replace(io.dirname(prop.getPath()), FailureMgr.proproot, "");
+ id = string.trim(id, 0, func(c) c == `/`);
+
+ if (name == "serviceable") {
+ FailureMgr.set_failure_level(id, 1 - value);
+ return;
+ }
+
+ if (name == "failure-level") {
+ setprop(io.dirname(prop.getPath()) ~ "/serviceable", value ? 0 : 1);
+ return;
+ }
+
+ # mtbf and mcbf parameter handling
+ var trigger = FailureMgr.get_trigger(id);
+
+ if (value == 0) {
+ trigger != nil and FailureMgr.set_trigger(id, nil);
+ return;
+ }
+
+ if (trigger == nil) {
+ FailureMgr.set_trigger(id, new_trigger());
+ }
+ else {
+ trigger.set_param(name, value);
+ trigger.reset();
+ }
+}
+
+##
+# Called from the ramdom-failures dialog to set the global MCBF parameter
+
+var apply_global_mcbf = func(value) {
+ foreach (var mode; compat_modes) {
+ mode.type != MCBF and continue;
+ setprop(FailureMgr.proproot ~ mode.id ~ "/mcbf", value);
+ }
+}
+
+##
+# Called from the ramdom-failures dialog to set the global MTBF parameter
+
+var apply_global_mtbf = func(value) {
+ foreach (var mode; compat_modes) {
+ mode.type != MTBF and continue;
+ setprop(FailureMgr.proproot ~ mode.id ~ "/mtbf", value);
+ }
+}
+
+##
+# Discover aircraft engines dynamically and add a failure mode to the
+# compat_modes table for each engine.
+
+var populate_engine_data = func {
+
+ var engines = props.globals.getNode("/engines");
+ var engine_id = 0;
+
+ foreach (var e; engines.getChildren("engine")) {
+ var starter = e.getChild("starter");
+ var running = e.getChild("running");
+
+ (starter != nil and starter != "" and starter.getType() != "NONE")
+ or (running != nil and running != "" and running.getType() != "NONE")
+ or continue;
+
+ var id = "engines/engine";
+ if (engine_id > 0)
+ id = id ~ "[" ~ engine_id ~ "]";
+
+ var entry = {
+ id: id,
+ desc: "Engine " ~ (engine_id + 1),
+ type: MTBF,
+ failure: ENG
+ };
+
+ append(compat_modes, entry);
+ engine_id += 1;
+ }
+}
+
+##
+# Subscribes all failure modes that the old failures.nas module did,
+# and recreates the same property tree interface (more or less).
+
+var compat_setup = func {
+
+ removelistener(lsnr);
+ populate_engine_data();
+
+ foreach (var m; compat_modes) {
+ var control_prop = contains(m, "prop") ? m.prop : m.id;
+
+ FailureMgr.add_failure_mode(
+ id: m.id,
+ description: m.desc,
+ actuator: if (m.failure == SERV) set_unserviceable(control_prop)
+ elsif (m.failure == JAM) set_readonly(control_prop)
+ else fail_engine(io.basename(control_prop)));
+
+ # Recreate the prop tree interface
+ var prop = FailureMgr.proproot ~ m.id;
+ var n = props.globals.initNode(prop ~ "/serviceable", 1, "BOOL");
+
+ setlistener(n, compat_listener, 0, 0);
+ setlistener(prop ~ "/failure-level", compat_listener, 0, 0);
+
+ var trigger_type = (m.type == MTBF) ? "/mtbf" : "/mcbf";
+ setprop(prop ~ trigger_type, 0);
+ setlistener(prop ~ trigger_type, compat_listener, 0, 0);
+ }
+}
+
+
+var lsnr = setlistener("sim/signals/fdm-initialized", compat_setup);
diff --git a/Aircraft/Generic/Systems/failures.nas b/Aircraft/Generic/Systems/failures.nas
new file mode 100644
index 000000000..998539e9c
--- /dev/null
+++ b/Aircraft/Generic/Systems/failures.nas
@@ -0,0 +1,365 @@
+# Failure simulation library
+#
+# Collection of generic Triggers and FailureActuators for programming the
+# FailureMgr Nasal module.
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+# Based on previous work by Stuart Buchanan, Erobo & John Denker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+#
+# Functions for generating FailureActuators
+# ------------------------------------------
+
+##
+# Returns an actuator object that will set the serviceable property at
+# the given node to zero when the level of failure is > 0.
+
+var set_unserviceable = func(path) {
+
+ var prop = path ~ "/serviceable";
+
+ if (props.globals.getNode(prop) == nil)
+ props.globals.initNode(prop, 1, "BOOL");
+
+ return {
+ parents: [FailureMgr.FailureActuator],
+ set_failure_level: func(level) setprop(prop, level > 0 ? 0 : 1),
+ get_failure_level: func { getprop(prop) ? 0 : 1 }
+ }
+}
+
+##
+# Returns an actuator object that will make the given property read only.
+# This prevents any other system from updating it, and effectively jamming
+# whatever it is that is controlling.
+
+var set_readonly = func(property) {
+ return {
+ parents: [FailureMgr.FailureActuator],
+
+ set_failure_level: func(level) {
+ var pnode = props.globals.getNode(property);
+ pnode.setAttribute("writable", level > 0 ? 0 : 1);
+ },
+
+ get_failure_level: func {
+ var pnode = props.globals.getNode(property);
+ pnode.getAttribute("writable") ? 0 : 1;
+ }
+ }
+}
+
+##
+# Returns an an actuator object the manipulates engine controls (magnetos &
+# cutoff) to simulate an engine failure. Sets these properties to read only
+# while the system is failed.
+
+var fail_engine = func(engine) {
+ return {
+ parents: [FailureMgr.FailureActuator],
+ level: 0,
+ magnetos: props.globals.getNode("/controls/engines/" ~ engine ~ "/magnetos", 1),
+ cutoff: props.globals.getNode("/controls/engines/" ~ engine ~ "/cutoff", 1),
+
+ get_failure_level: func me.level,
+
+ set_failure_level: func(level) {
+ if (level) {
+ # Switch off the engine, and disable writing to it.
+ me.magnetos.setValue(0);
+ me.magnetos.setAttribute("writable", 0);
+ me.cutoff.setValue(1);
+ me.cutoff.setAttribute("writable", 0);
+ }
+ else {
+ # Enable the properties, but don't set the magnetos, as they may
+ # be off for a reason.
+ me.magnetos.setAttribute("writable", 1);
+ me.cutoff.setAttribute("writable", 1);
+ me.cutoff.setValue(0);
+ }
+ me.level = level;
+ }
+ }
+}
+
+
+#
+# Triggers
+# ---------
+
+##
+# Returns a random number from a Normal distribution with given mean and
+# standard deviation.
+
+var norm_rand = func(mean, std) {
+ var r = -2 * math.ln(1 - rand());
+ var a = 2 * math.pi * (1 - rand());
+ return mean + (math.sqrt(r) * math.sin(a) * std);
+};
+
+##
+# Trigger object that will fire when aircraft altitude is between
+# min and max, both specified in feet. One of min or max may be nil for
+# expressing "altitude > x" or "altitude < x" conditions.
+
+var AltitudeTrigger = {
+
+ parents: [FailureMgr.Trigger],
+ requires_polling: 1,
+
+ new: func(min, max) {
+ min != nil or max != nil or
+ die("AltitudeTrigger.new: either min or max must be specified");
+
+ var m = FailureMgr.Trigger.new();
+ m.parents = [AltitudeTrigger];
+ m.params["min-altitude-ft"] = min;
+ m.params["max-altitude-ft"] = max;
+ m._altitude_prop = "/position/altitude-ft";
+ return m;
+ },
+
+ to_str: func {
+ # TODO: Handle min or max == nil
+ sprintf("Altitude between %d and %d ft",
+ int(me.params["min-altitude-ft"]), int(me.params["max-altitude-ft"]))
+ },
+
+ update: func {
+ var alt = getprop(me._altitude_prop);
+
+ var min = me.params["min-altitude-ft"];
+ var max = me.params["max-altitude-ft"];
+
+ me.fired = min != nil ? min < alt : 1;
+ me.fired = max != nil ? me.fired and alt < max : me.fired;
+ }
+};
+
+##
+# Trigger object that fires when the aircraft's position is within a certain
+# distance of a given waypoint.
+
+var WaypointTrigger = {
+
+ parents: [FailureMgr.Trigger],
+ requires_polling: 1,
+
+ new: func(lat, lon, distance) {
+ var wp = geo.Coord.new();
+ wp.set_latlon(lat, lon);
+
+ var m = FailureMgr.Trigger.new();
+ m.parents = [WaypointTrigger];
+ m.params["latitude-deg"] = lat;
+ m.params["longitude-deg"] = lon;
+ m.params["distance-nm"] = distance;
+ m.waypoint = wp;
+ return m;
+ },
+
+ reset: func {
+ call(FailureMgr.Trigger.reset, [], me);
+ me.waypoint.set_latlon(me.params["latitude-deg"],
+ me.params["longitude-deg"]);
+ },
+
+ to_str: func {
+ sprintf("Within %.2f miles of %s", me.params["distance-nm"],
+ geo.format(me.waypoint.lat, me.waypoint.lon));
+ },
+
+ update: func {
+ var d = geo.aircraft_position().distance_to(me.waypoint) * M2NM;
+ me.fired = d < me.params["distance-nm"];
+ }
+};
+
+##
+# Trigger object that will fire on average after the specified time.
+
+var MtbfTrigger = {
+
+ parents: [FailureMgr.Trigger],
+ # TODO: make this trigger async
+ requires_polling: 1,
+
+ new: func(mtbf) {
+ var m = FailureMgr.Trigger.new();
+ m.parents = [MtbfTrigger];
+ m.params["mtbf"] = mtbf;
+ m.fire_time = 0;
+ m._time_prop = "/sim/time/elapsed-sec";
+ return m;
+ },
+
+ reset: func {
+ call(FailureMgr.Trigger.reset, [], me);
+ # TODO: use an elapsed time prop that accounts for speed-up and pause
+ me.fire_time = getprop(me._time_prop)
+ + norm_rand(me.params["mtbf"], me.params["mtbf"] / 10);
+ },
+
+ to_str: func {
+ sprintf("Mean time between failures: %f.1 mins", me.params["mtbf"] / 60);
+ },
+
+ update: func {
+ me.fired = getprop(me._time_prop) > me.fire_time;
+ }
+};
+
+##
+# Trigger object that will fire exactly after the given timeout.
+
+var TimeoutTrigger = {
+
+ parents: [FailureMgr.Trigger],
+ # TODO: make this trigger async
+ requires_polling: 1,
+
+ new: func(timeout) {
+ var m = FailureMgr.Trigger.new();
+ m.parents = [TimeoutTrigger];
+ m.params["timeout-sec"] = timeout;
+ fire_time = 0;
+ return m;
+ },
+
+ reset: func {
+ call(FailureMgr.Trigger.reset, [], me);
+ # TODO: use an elapsed time prop that accounts for speed-up and pause
+ me.fire_time = getprop("/sim/time/elapsed-sec")
+ + me.params["timeout-sec"];
+ },
+
+ to_str: func {
+ sprintf("Fixed delay: %d minutes", me.params["timeout-sec"] / 60);
+ },
+
+ update: func {
+ me.fired = getprop("/sim/time/elapsed-sec") > me.fire_time;
+ }
+};
+
+##
+# Simple approach to count usage cycles for a given property. Every time
+# the propery variation changes in direction, we count half a cycle.
+# If the property represents aileron angular position, for example, this
+# would count roughly the number of times the aileron has been actuated.
+
+var CycleCounter = {
+
+ new: func(property, on_update = nil) {
+ return {
+ parents: [CycleCounter],
+ cycles: 0,
+ _property: property,
+ _on_update: on_update,
+ _prev_value: getprop(property),
+ _prev_delta: 0,
+ _lsnr: nil
+ };
+ },
+
+ enable: func {
+ if (me._lsnr == nil)
+ me._lsnr = setlistener(me._property, func (p) me._on_prop_change(p), 0, 0);
+ },
+
+ disable: func {
+ if (me._lsnr != nil) removelistener(me._lsnr);
+ },
+
+ reset: func {
+ me.cycles = 0;
+ me._prev_value = getprop(me._property);
+ me._prev_delta = 0;
+ },
+
+ _on_prop_change: func(prop) {
+
+ # TODO: Implement a filter for avoiding spureous values.
+
+ var value = prop.getValue();
+ var delta = value - me._prev_value;
+ if (delta == 0) return;
+
+ if (delta * me._prev_delta < 0) {
+ # Property variation has changed direction
+ me.cycles += 0.5;
+ if (me._on_update != nil) me._on_update(me.cycles);
+ }
+
+ me._prev_delta = delta;
+ me._prev_value = value;
+ }
+};
+
+##
+# Trigger object that will fire on average after a property has gone through
+# mcbf (mean cycles between failures) cycles.
+
+var McbfTrigger = {
+
+ parents: [FailureMgr.Trigger],
+ requires_polling: 0,
+
+ new: func(property, mcbf) {
+ var m = FailureMgr.Trigger.new();
+ m.parents = [McbfTrigger];
+ m.params["mcbf"] = mcbf;
+ m.counter = CycleCounter.new(property, func(c) call(m._on_cycle, [c], m));
+ m.activation_cycles = 0;
+ m.enabled = 0;
+ return m;
+ },
+
+ enable: func {
+ me.counter.enable();
+ me.enabled = 1;
+ },
+
+ disable: func {
+ me.counter.disable();
+ me.enabled = 0;
+ },
+
+ reset: func {
+ call(FailureMgr.Trigger.reset, [], me);
+ me.counter.reset();
+ me.activation_cycles =
+ norm_rand(me.params["mcbf"], me.params["mcbf"] / 10);
+
+ me.enabled and me.counter.enable();
+ },
+
+ to_str: func {
+ sprintf("Mean cycles between failures: %.2f", me.params["mcbf"]);
+ },
+
+ _on_cycle: func(cycles) {
+ if (!me.fired and cycles > me.activation_cycles) {
+ # TODO: Why this doesn't work?
+ # me.counter.disable();
+ me.fired = 1;
+ me.on_fire();
+ }
+ }
+};
diff --git a/Aircraft/Instruments-3d/GPSmap196/pages/page-panel.svg b/Aircraft/Instruments-3d/GPSmap196/pages/page-panel.svg
index f440edc67..838bcff17 100644
--- a/Aircraft/Instruments-3d/GPSmap196/pages/page-panel.svg
+++ b/Aircraft/Instruments-3d/GPSmap196/pages/page-panel.svg
@@ -25,9 +25,6 @@
-
+ ft
- 0 0
+ 25 25
+ 50 50
+ 75 75
+ 100 100
+ 125 125
+ 150 150
+ 175 175
+
@@ -693,129 +648,69 @@
transform="matrix(-0.95282935,0.30350655,-0.30805757,-0.95136772,0,0)"
id="rect4476"
style="fill:#000000;fill-opacity:1;stroke:none" />
- 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 6
+ 7 7
+ 8 8
+ 9
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans">9
+
@@ -895,228 +790,121 @@
id="rect4643"
style="fill:#000000;fill-opacity:1;stroke:none" />
- 000 k t 000
+ k m h kmh
+ kt
+ waypoint waypoint
+ wpt-dist wpt-dist
+ 0000 0000
+ ft m m
+ 00:00 00:00
+ 0.00 0.00
+ n n
+ s
+ k k
+ s m n m
+ k k
+ m n
+ ETE m
+ ETE
+
@@ -1453,160 +1241,89 @@
transform="matrix(-0.03999549,-0.99919986,0.99919986,-0.03999549,0,0)"
id="rect3310"
style="fill:#000000;fill-opacity:1;stroke:none" />
- 20 20
+ 15 15
+ 10 10
+ 5 5
+ 0 0
+ 15 15
+ 10 10
+ 5
- 5
+
+ N N
+ S S
+ W W
+ E E
+
- 3 3
+ 6 6
+ 12 12
+ 15 15
+ 21 21
+ 24 24
+ 33 30
+ 30 12 33
+
+
diff --git a/Nasal/FailureMgr/private.nas b/Nasal/FailureMgr/private.nas
new file mode 100644
index 000000000..d124acf95
--- /dev/null
+++ b/Nasal/FailureMgr/private.nas
@@ -0,0 +1,327 @@
+# Failure Manager implementation
+#
+# Monitors trigger conditions periodically and fires failure modes when those
+# conditions are met. It also provides a central access point for publishing
+# failure modes to the user interface and the property tree.
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+##
+# Represents one way things can go wrong, for example "a blown tire".
+
+var FailureMode = {
+
+ ##
+ # id: Unique identifier for this failure mode.
+ # eg: "engine/carburetor-ice"
+ #
+ # description: Short text description, suitable for printing to the user.
+ # eg: "Ice in the carburetor"
+ #
+ # actuator: Object implementing the FailureActuator interface.
+ # Used by the failure manager to apply a certain level of
+ # failure to the failure mode.
+
+ new: func(id, description, actuator) {
+ return {
+ parents: [FailureMode],
+ id: id,
+ description: description,
+ actuator: actuator,
+ _path: nil
+ };
+ },
+
+ ##
+ # Applies a certain level of failure to this failure mode.
+ # level: Floating point number in the range [0, 1] zero being no failure
+ # and 1 total failure.
+
+ set_failure_level: func(level) {
+ me._path != nil or
+ die("FailureMode.set_failure_level: Unbound failure mode");
+
+ setprop(me._path ~ me.id ~ "/failure-level", level);
+ },
+
+ ##
+ # Internal version that actually does the job.
+
+ _set_failure_level: func(level) {
+ me.actuator.set_failure_level(level);
+ me._log_failure(sprintf("%s failure level %d%%",
+ me.description, level*100));
+ },
+
+ ##
+ # Returns the level of failure currently being simulated.
+
+ get_failure_level: func me.actuator.get_failure_level(),
+
+ ##
+ # Creates an interface for this failure mode in the property tree at the
+ # given location. Currently the interface is just:
+ #
+ # path/failure-level (double, rw)
+
+ bind: func(path) {
+ me._path == nil or die("FailureMode.bind: mode already bound");
+
+ var prop = path ~ me.id ~ "/failure-level";
+ props.globals.initNode(prop, me.actuator.get_failure_level(), "DOUBLE");
+ setlistener(prop, func (p) me._set_failure_level(p.getValue()), 0, 0);
+ me._path = path;
+ },
+
+ ##
+ # Remove bound properties from the property tree.
+
+ unbind: func {
+ me._path != nil and props.globals.getNode(me._path ~ me.id).remove();
+ me._path = nil;
+ },
+
+ ##
+ # Send a message to the logging facilities, currently the screen and
+ # the console.
+
+ _log_failure: func(message) {
+ print(getprop("/sim/time/gmt-string") ~ " : " ~ message);
+ if (getprop(proproot ~ "/display-on-screen"))
+ screen.log.write(message, 1.0, 0.0, 0.0);
+ },
+};
+
+##
+# Implements the FailureMgr functionality.
+#
+# It is wrapped into an object to leave the door open to several evolution
+# approaches, for example moving the implementation down to the C++ engine,
+# or supporting several independent instances of the failure manager.
+# Additionally, it also serves to isolate low level implementation details
+# into its own namespace.
+
+var _failmgr = {
+
+ timer: nil,
+ update_period: 10, # 0.1 Hz
+ failure_modes: {},
+ pollable_trigger_count: 0,
+
+ init: func {
+ me.timer = maketimer(me.update_period, func me._update());
+ setlistener("sim/signals/reinit", func me._on_reinit());
+
+ props.globals.initNode(proproot ~ "display-on-screen", 1, "BOOL");
+ props.globals.initNode(proproot ~ "enabled", 1, "BOOL");
+ setlistener(proproot ~ "enabled",
+ func (n) { n.getValue() ? me._enable() : me._disable() });
+ },
+
+ ##
+ # Subscribe a new failure mode to the system.
+ # mode: FailureMode object.
+
+ add_failure_mode: func(mode) {
+ contains(me.failure_modes, mode.id) and
+ die("add_failure_mode: failure mode already exists: " ~ id);
+
+ me.failure_modes[mode.id] = { mode: mode, trigger: nil };
+ mode.bind(proproot);
+ },
+
+ ##
+ # Remove a failure mode from the system.
+ # id: FailureMode id string, e.g. "systems/pitot"
+
+ remove_failure_mode: func(id) {
+ contains(me.failure_modes, id) or
+ die("remove_failure_mode: failure mode does not exist: " ~ mode_id);
+
+ var trigger = me.failure_modes[id].trigger;
+ if (trigger != nil)
+ me._discard_trigger(trigger);
+
+ me.failure_modes[id].unbind();
+ props.globals.getNode(proproot ~ id).remove();
+ delete(me.failure_modes, id);
+ },
+
+ ##
+ # Removes all failure modes from the system.
+
+ remove_all: func {
+ foreach(var id; keys(me.failure_modes))
+ me.remove_failure_mode(id);
+ },
+
+ ##
+ # Attach a trigger to the given failure mode. Discards the current trigger
+ # if any.
+ #
+ # mode_id: FailureMode id string, e.g. "systems/pitot"
+ # trigger: Trigger object or nil.
+
+ set_trigger: func(mode_id, trigger) {
+ contains(me.failure_modes, mode_id) or
+ die("set_trigger: failure mode does not exist: " ~ mode_id);
+
+ var mode = me.failure_modes[mode_id];
+
+ if (mode.trigger != nil)
+ me._discard_trigger(mode.trigger);
+
+ mode.trigger = trigger;
+ if (trigger == nil) return;
+
+ trigger.bind(proproot ~ mode_id);
+ trigger.on_fire = func _failmgr.on_trigger_activated(trigger);
+ trigger.reset();
+
+ if (trigger.requires_polling) {
+ me.pollable_trigger_count += 1;
+
+ if (me.enabled() and !me.timer.isRunning)
+ me.timer.start();
+ }
+
+ trigger.enable();
+ },
+
+ ##
+ # Returns the trigger object attached to the given failure mode.
+ # mode_id: FailureMode id string, e.g. "systems/pitot"
+
+ get_trigger: func(mode_id) {
+ contains(me.failure_modes, mode_id) or
+ die("get_trigger: failure mode does not exist: " ~ mode_id);
+
+ return me.failure_modes[mode_id].trigger;
+ },
+
+ ##
+ # Observer interface. Called from asynchronous triggers when they fire.
+ # trigger: Reference to the calling trigger.
+
+ on_trigger_activated: func(trigger) {
+ var found = 0;
+
+ foreach (var id; keys(me.failure_modes)) {
+ if (me.failure_modes[id].trigger == trigger) {
+ me.failure_modes[id].mode.set_failure_level(1);
+ found = 1;
+ break;
+ }
+ }
+
+ found or die("FailureMgr.on_trigger_activated: trigger not found");
+ },
+
+ ##
+ # Enable the failure manager.
+
+ _enable: func {
+ foreach(var id; keys(me.failure_modes)) {
+ var trigger = me.failure_modes[id].trigger;
+ trigger != nil and trigger.enable();
+ }
+
+ if (me.pollable_trigger_count > 0)
+ me.timer.start();
+ },
+
+ ##
+ # Suspends failure manager activity. Pollable triggers will not be updated
+ # and all triggers will be disabled.
+
+ _disable: func {
+ me.timer.stop();
+
+ foreach(var id; keys(me.failure_modes)) {
+ var trigger = me.failure_modes[id].trigger;
+ trigger != nil and trigger.disable();
+ }
+
+ },
+
+ ##
+ # Returns enabled status.
+
+ enabled: func {
+ getprop(proproot ~ "enabled");
+ },
+
+ ##
+ # Poll loop. Updates pollable triggers and applies a failure level
+ # when they fire.
+
+ _update: func {
+ foreach (var id; keys(me.failure_modes)) {
+ var failure = me.failure_modes[id];
+
+ if (failure.trigger != nil and !failure.trigger.fired) {
+ var level = failure.trigger.update();
+ if (level > 0 and level != failure.mode.get_failure_level())
+ failure.mode.set_failure_level(level);
+ }
+ }
+ },
+
+ ##
+ # Detaches a trigger from the system.
+
+ _discard_trigger: func(trigger) {
+ trigger.disable();
+ trigger.unbind();
+
+ if (trigger.requires_polling) {
+ me.pollable_trigger_count -= 1;
+ me.pollable_trigger_count == 0 and me.timer.stop();
+ }
+ },
+
+ ##
+ # Reinit listener. Sets all failure modes to "working fine".
+
+ _on_reinit: func {
+ foreach (var id; keys(me.failure_modes)) {
+ var failure = me.failure_modes[id];
+
+ failure.mode.set_failure_level(0);
+
+ if (failure.trigger != nil) {
+ me._discard_trigger(failure.trigger);
+ failure.trigger = nil;
+ }
+ }
+ }
+};
+
+##
+# Module initialization
+
+var _init = func {
+ removelistener(lsnr);
+ _failmgr.init();
+
+ # Load legacy failure modes for backwards compatibility
+ io.load_nasal(getprop("/sim/fg-root") ~
+ "/Aircraft/Generic/Systems/compat_failure_modes.nas");
+}
+
+var lsnr = setlistener("/nasal/FailureMgr/loaded", _init);
diff --git a/Nasal/FailureMgr/public.nas b/Nasal/FailureMgr/public.nas
new file mode 100644
index 000000000..957bb54a5
--- /dev/null
+++ b/Nasal/FailureMgr/public.nas
@@ -0,0 +1,229 @@
+# Failure Manager public interface
+#
+# Copyright (C) 2014 Anton Gomez Alvedro
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+var proproot = "sim/failure-manager/";
+
+
+##
+# Subscribe a new failure mode to the system.
+#
+# id: Unique identifier for this failure mode.
+# eg: "engine/carburetor-ice"
+#
+# description: Short text description, suitable for printing to the user.
+# eg: "Ice in the carburetor"
+#
+# actuator: Object implementing the FailureActuator interface.
+# Used by the failure manager to apply a certain level of
+# failure to the failure mode.
+
+var add_failure_mode = func(id, description, actuator) {
+ _failmgr.add_failure_mode(
+ FailureMode.new(id, description, actuator));
+}
+
+##
+# Remove a failure mode from the system.
+# id: FailureMode id string, e.g. "systems/pitot"
+
+var remove_failure_mode = func(id) {
+ _failmgr.remove_failure_mode(id);
+}
+
+##
+# Removes all failure modes from the failure manager.
+
+var remove_all = func {
+ _failmgr.remove_all();
+}
+
+##
+# Attaches a trigger to the given failure mode. Discards the current trigger
+# if any.
+#
+# mode_id: FailureMode id string, e.g. "systems/pitot"
+# trigger: Trigger object or nil. Nil will just detach the current trigger
+
+var set_trigger = func(mode_id, trigger) {
+ _failmgr.set_trigger(mode_id, trigger);
+}
+
+##
+# Returns the trigger object attached to the given failure mode.
+# mode_id: FailureMode id string, e.g. "systems/pitot"
+
+var get_trigger = func(mode_id) {
+ _failmgr.get_trigger(mode_id);
+}
+
+##
+# Applies a certain level of failure to this failure mode.
+#
+# mode_id: Failure mode id string.
+# level: Floating point number in the range [0, 1]
+# Zero represents no failure and one means total failure.
+
+var set_failure_level = func (mode_id, level) {
+ setprop(proproot ~ mode_id ~ "/failure-level", level);
+}
+
+##
+# Allows applications to disable the failure manager and restore it later on.
+# While disabled, no failure modes will be activated from the failure manager.
+
+var enable = func setprop(proproot ~ "enabled", 1);
+var disable = func setprop(proproot ~ "enabled", 0);
+
+##
+# Encapsulates a condition that when met, will make the failure manager to
+# apply a certain level of failure to the failure mode it is bound to.
+#
+# Two types of triggers are supported: pollable and asynchronous.
+#
+# Pollable triggers require periodic check for trigger conditions. For example,
+# an altitude trigger will need to poll current altitude until the fire
+# condition is reached.
+#
+# Asynchronous trigger do not require periodic updates. They can detect
+# the firing condition by themselves by using timers or listeners.
+# Async triggers must call the inherited method on_fire() to let the Failure
+# Manager know about the fired condition.
+#
+# See Aircraft/Generic/Systems/failures.nas for concrete examples of triggers.
+
+var Trigger = {
+
+ # 1 for pollable triggers, 0 for async triggers.
+ requires_polling: 0,
+
+ new: func {
+ return {
+ parents: [Trigger],
+ params: {},
+ fired: 0,
+
+ ##
+ # Async triggers shall call the on_fire() callback when their fire
+ # conditions are met to notify the failure manager.
+ on_fire: func 0,
+
+ _path: nil
+ };
+ },
+
+ ##
+ # Enables/disables the trigger. While a trigger is disabled, any timer
+ # or listener that could potentially own shall be disabled.
+
+ enable: func,
+ disable: func,
+
+ ##
+ # Forces a check of the firing conditions. Returns 1 if the trigger fired,
+ # 0 otherwise.
+
+ update: func 0,
+
+ ##
+ # Returns a printable string describing the trigger condition.
+
+ to_str: func "undefined trigger",
+
+ ##
+ # Modify a trigger parameter. Parameters will take effect after the next
+ # call to reset()
+
+ set_param: func(param, value) {
+ contains(me.params, param) or
+ die("Trigger.set_param: undefined param: " ~ param);
+
+ me._path != nil or
+ die("Trigger.set_param: Unbound trigger");
+
+ setprop(sprintf("%s/%s",me._path, param), value);
+ },
+
+ ##
+ # Reload trigger parameters and reset internal state, i.e. start from
+ # scratch. If the trigger was fired, the trigger is set to not fired.
+
+ reset: func {
+ me._path or die("Trigger.reset: unbound trigger");
+
+ foreach (var p; keys(me.params))
+ me.params[p] = getprop(sprintf("%s/%s", me._path, p));
+
+ me.fired = 0;
+ me._path != nil and setprop(me._path ~ "/reset", 0);
+ },
+
+ ##
+ # Creates an interface for the trigger in the property tree.
+ # Every parameter in the params hash will be exposed, in addition to
+ # a path/reset property for resetting the trigger from the prop tree.
+
+ bind: func(path) {
+ me._path == nil or
+ die("Trigger.bind(): attempt to bind an already bound trigger");
+
+ me._path = path;
+ props.globals.getNode(path) != nil or props.globals.initNode(path);
+ props.globals.getNode(path).setValues(me.params);
+
+ var reset_prop = path ~ "/reset";
+ props.globals.initNode(reset_prop, 0, "BOOL");
+ setlistener(reset_prop, func me.reset(), 0, 0);
+ },
+
+ ##
+ # Removes this trigger's interface from the property tree.
+
+ unbind: func {
+ props.globals.getNode(me._path ~ "/reset").remove();
+ foreach (var p; keys(me.params))
+ props.globals.getNode(me._path ~ "/" ~ p).remove();
+
+ me._path = nil;
+ }
+};
+
+##
+# FailureActuators encapsulate the actions required for activating the actual
+# failure simulation.
+#
+# Traditionally this action was just manipulating a "serviceable" property
+# somewhere, but the FailureActuator gives you more flexibility, allowing you
+# to touch several properties at once or call other Nasal scripts, for example.
+#
+# See Aircraft/Generic/Systems/failure.nas and
+# Aircraft/Generic/Systems/compat_failures.nas for some examples of actuators.
+
+var FailureActuator = {
+
+ ##
+ # Called from the failure manager to activate a certain level of failure.
+ # level: Target level of failure [0 to 1].
+
+ set_failure_level: func(level) 0,
+
+ ##
+ # Returns the level of failure that is currently being simulated.
+
+ get_failure_level: func 0,
+};
diff --git a/Nasal/atc-chatter/atc-chatter.nas b/Nasal/atc-chatter/atc-chatter.nas
deleted file mode 100644
index 7819633b3..000000000
--- a/Nasal/atc-chatter/atc-chatter.nas
+++ /dev/null
@@ -1,115 +0,0 @@
-#############################################################################
-#
-# Simple sequenced ATC background chatter function
-#
-# Written by Curtis Olson
-# Started 8 Jan 2006.
-#
-#############################################################################
-
-#############################################################################
-# Global shared variables
-#############################################################################
-
-var fg_root = nil;
-var chatter = "UK";
-var chatter_dir = "";
-
-var chatter_min_interval = 20.0;
-var chatter_max_interval = 40.0;
-var next_interval = nil;
-
-var chatter_index = 0;
-var chatter_size = 0;
-var chatter_list = 0;
-
-
-#############################################################################
-# Chatter is initialized only when actually enabled. See listener connected
-# to /sim/sound/chatter/enabled.
-#############################################################################
-
-var chatter_init = func {
- # default values
- fg_root = getprop("/sim/fg-root");
- chatter_dir = sprintf("%s/ATC/Chatter/%s", fg_root, chatter);
- chatter_list = directory( chatter_dir );
- chatter_size = size(chatter_list);
- # seed the random number generator (with time) so we don't start in
- # same place in the sequence each run.
- srand();
- chatter_index = int( chatter_size * rand() );
-}
-
-
-#############################################################################
-# main update function to be called each frame
-#############################################################################
-
-var chatter_update = func {
- if ( chatter_index >= chatter_size ) {
- chatter_index = 0;
- }
-
- if ( substr(chatter_list[chatter_index],
- size(chatter_list[chatter_index]) - 4) == ".wav" )
- {
- var vol =getprop("/sim/sound/chatter/volume");
- if(vol == nil){vol = 0.5;}
- tmpl = { path : chatter_dir, file : chatter_list[chatter_index] , volume : vol};
- if ( getprop("/sim/sound/chatter/enabled") ) {
- # go through the motions, but only schedule the message to play
- # if atc-chatter is enabled.
- printlog("info", "update atc chatter ", chatter_list[chatter_index] );
- fgcommand("play-audio-sample", props.Node.new(tmpl) );
- }
- } else {
- # skip non-wav file found in directory
- }
-
- chatter_index = chatter_index + 1;
- nextChatter();
-}
-
-
-#############################################################################
-# Use the nasal timer to update every 10 seconds
-#############################################################################
-
-var nextChatter = func {
- if (!getprop("/sim/sound/chatter/enabled"))
- {
- next_interval = nil;
- return;
- }
-
- # schedule next message in next min-max interval seconds so we have a bit
- # of a random pacing
- next_interval = chatter_min_interval
- + int(rand() * (chatter_max_interval - chatter_min_interval));
-
- # printlog("info", "next chatter in ", next_interval, " seconds");
-
- settimer(chatter_update, next_interval );
-}
-
-#############################################################################
-# Start chatter processing. Also connected to chatter/enabled property as a
-# listener.
-#############################################################################
-
-var startChatter = func {
- if ( getprop("/sim/sound/chatter/enabled") ) {
- if (fg_root == nil)
- chatter_init();
- if (next_interval == nil)
- nextChatter();
- }
-}
-
-# connect listener
-_setlistener("/sim/sound/chatter/enabled", startChatter);
-
-# start chatter immediately, if enable is already set.
-settimer(startChatter, 0);
-
diff --git a/Nasal/canvas/MapStructure.nas b/Nasal/canvas/MapStructure.nas
index 1bc20fe01..bc87c2d2c 100644
--- a/Nasal/canvas/MapStructure.nas
+++ b/Nasal/canvas/MapStructure.nas
@@ -2,29 +2,94 @@
## MapStructure mapping/charting framework for Nasal/Canvas, by Philosopher
## See: http://wiki.flightgear.org/MapStructure
###############################################################################
+
+
+#######
+## Dev Notes:
+##
+## - consider adding two types of SymbolLayers (sub-classes): Static (fixed positions, navaids/fixes) Dynamic (frequently updated, TFC/WXR, regardless of aircraft position)
+## - FLT should be managed by aircraftpos.controller probably (interestign corner case actually)
+## - consider adding an Overlay, i.e. for things like compass rose, lat/lon coordinate grid, but also tiled map data fetched on line
+## - consider patching svg.nas to allow elements to be styled via the options hash by rewriting attributes, could even support animations that way
+## - style handling/defaults should be moved to symbol files probably
+## - consider pre-populating layer environments via bind() by providing APIs and fields for sane defaults:
+## - parents
+## - __self__
+## - del (managing all listeners and timers)
+## - searchCmd -> filtering
+##
+## APIs to be wrapped for each layer:
+## printlog(), die(), debug.bt(), benchmark()
+
var _MP_dbg_lvl = "info";
#var _MP_dbg_lvl = "alert";
-var dump_obj = func(m) {
- var h = {};
- foreach (var k; keys(m))
- if (k != "parents")
- h[k] = m[k];
- debug.dump(h);
-};
+var makedie = func(prefix) func(msg) globals.die(prefix~" "~msg);
+
+var __die = makedie("MapStructure");
##
-# for LOD handling (i.e. airports/taxiways/runways)
-var RangeAware = {
- new: func {
- return {parents:[RangeAware] };
- },
- del: func,
- notifyRangeChange: func die("RangeAware.notifyRangeChange() must be provided by sub-class"),
-};
+# Try to call a method on an object with no arguments. Should
+# work for both ghosts and hashes; catches the error only when
+# the method doesn't exist -- errors raised during the call
+# are re-thrown.
+#
+var try_aux_method = func(obj, method_name) {
+ var name = "";
+ call(compile("obj."~method_name~"()", name), nil, var err=[]); # try...
+ #debug.dump(err);
+ if (size(err)) # ... and either leave caght or rethrow
+ if (err[1] != name)
+ die(err[0]);
+}
-## wrapper for each cached element
-## i.e. keeps the canvas and texture map coordinates for the corresponding raster image
+##
+# Combine a specific hash with a default hash, e.g. for
+# options/df_options and style/df_style in a SymbolLayer.
+#
+var default_hash = func(opt, df) {
+ if (opt != nil and typeof(opt)=='hash') {
+ if (df != nil and opt != df and !isa(opt, df)) {
+ if (contains(opt, "parents"))
+ opt.parents ~= [df];
+ else
+ opt.parents = [df];
+ }
+ return opt;
+ } else return df;
+}
+
+##
+# to be used for prototyping, performance & stress testing (especially with multiple instance driven by AI traffic)
+#
+
+var MapStructure_selfTest = func() {
+ var temp = {};
+ temp.dlg = canvas.Window.new([600,400],"dialog");
+ temp.canvas = temp.dlg.createCanvas().setColorBackground(1,1,1,0.5);
+ temp.root = temp.canvas.createGroup();
+ var TestMap = temp.root.createChild("map");
+ TestMap.setController("Aircraft position");
+ TestMap.setRange(25); # TODO: implement zooming/panning via mouse/wheel here, for lack of buttons :-/
+ TestMap.setTranslation(
+ temp.canvas.get("view[0]")/2,
+ temp.canvas.get("view[1]")/2
+ );
+ var r = func(name,vis=1,zindex=nil) return caller(0)[0];
+ # TODO: we'll need some z-indexing here, right now it's just random
+ # TODO: use foreach/keys to show all layers in this case by traversing SymbolLayer.registry direclty ?
+ # maybe encode implicit z-indexing for each lcontroller ctor call ? - i.e. preferred above/below order ?
+ foreach(var type; [r('TFC',0),r('APT'),r('DME'),r('VOR'),r('NDB'),r('FIX',0),r('RTE'),r('WPT'),r('FLT'),r('WXR'),r('APS'), ] )
+ TestMap.addLayer(factory: canvas.SymbolLayer, type_arg: type.name,
+ visible: type.vis, priority: type.zindex,
+ );
+}; # MapStructure_selfTest
+
+
+##
+# wrapper for each cached element: keeps the canvas and
+# texture map coordinates for the corresponding raster image.
+#
var CachedElement = {
new: func(canvas_path, name, source, size, offset) {
var m = {parents:[CachedElement] };
@@ -37,19 +102,18 @@ var CachedElement = {
m.size = size;
m.offset = offset;
return m;
- }, # new()
-
+ },
+
render: func(group, trans0=0, trans1=0) {
# create a raster image child in the render target/group
- var n = group.createChild("image", me.name)
- .setFile( me.canvas_src )
- # TODO: fix .setSourceRect() to accept a single vector for texture map coordinates ...
- .setSourceRect(left:me.source[0],top:me.source[1],right:me.source[2],bottom:me.source[3], normalized:0)
+ var n = group.createChild("image", me.name)
+ .setFile(me.canvas_src)
+ .setSourceRect(me.source, 0)
.setSize(me.size)
.setTranslation(trans0,trans1);
n.createTransform().setTranslation(me.offset);
return n;
- }, # render()
+ },
}; # of CachedElement
var SymbolCache = {
@@ -98,25 +162,34 @@ var SymbolCache = {
m.path = m.canvas_texture.getPath();
m.root = m.canvas_texture.createGroup("entries");
+ # TODO: register a reset/re-init listener to optionally purge/rebuild the cache ?
+
return m;
},
+ ##
+ # Add a cached symbol based on a drawing callback.
+ # @note this assumes that the object added by callback
+ # fits into the dimensions provided to the constructor,
+ # and any larger dimensionalities are liable to be cut off.
+ #
add: func(name, callback, draw_mode=0) {
if (typeof(draw_mode) == 'scalar')
var draw_mode0 = var draw_mode1 = draw_mode;
else var (draw_mode0,draw_mode1) = draw_mode;
+
# get canvas texture that we use as cache
# get next free spot in texture (column/row)
- # run the draw callback and render into a group
+ # run the draw callback and render into a new group
var gr = me.root.createChild("group",name);
- gr.setTranslation( me.next_free[0] + me.image_sz[0]*draw_mode0,
- me.next_free[1] + me.image_sz[1]*draw_mode1);
- #settimer(func debug.dump ( gr.getTransformedBounds() ), 0); # XXX: these are only updated when rendered
- #debug.dump ( gr.getTransformedBounds() );
- gr.update(); # apparently this doesn't result in sane output from .getTransformedBounds() either
- #debug.dump ( gr.getTransformedBounds() );
- # draw the symbol
+ # draw the symbol into the group
callback(gr);
- # get the bounding box, i.e. coordinates for texture map, or use the .setTranslation() params
+
+ gr.update(); # if we need sane output from getTransformedBounds()
+ #debug.dump ( gr.getTransformedBounds() );
+ gr.setTranslation( me.next_free[0] + me.image_sz[0]*draw_mode0,
+ me.next_free[1] + me.image_sz[1]*draw_mode1);
+
+ # get assumed the bounding box, i.e. coordinates for texture map
var coords = me.next_free~me.next_free;
foreach (var i; [0,1])
coords[i+1] += me.image_sz[i];
@@ -130,7 +203,9 @@ var SymbolCache = {
if (me.next_free[0] >= me.canvas_sz[0])
{ me.next_free[0] = 0; me.next_free[1] += me.image_sz[1] }
if (me.next_free[1] >= me.canvas_sz[1])
- die("SymbolCache: ran out of space after adding '"~name~"'");
+ __die("SymbolCache: ran out of space after adding '"~name~"'");
+
+ if (contains(me.dict, name)) print("MapStructure/SymbolCache Warning: Overwriting existing cache entry named:", name);
# store texture map coordinates in lookup map using the name as identifier
return me.dict[name] = CachedElement.new(
@@ -142,11 +217,172 @@ var SymbolCache = {
);
}, # add()
get: func(name) {
- if(!contains(me.dict,name)) die("No SymbolCache entry for key:"~ name);
return me.dict[name];
}, # get()
};
+# Excerpt from gen module
+var denied_symbols = [
+ "", "func", "if", "else", "var",
+ "elsif", "foreach", "for",
+ "forindex", "while", "nil",
+ "return", "break", "continue",
+];
+var issym = func(string) {
+ foreach (var d; denied_symbols)
+ if (string == d) return 0;
+ var sz = size(string);
+ var s = string[0];
+ if ((s < `a` or s > `z`) and
+ (s < `A` or s > `Z`) and
+ (s != `_`)) return 0;
+ for (var i=1; i `z`) and
+ (s < `A` or s > `Z`) and
+ (s < `0` or s > `9`)) return 0;
+ return 1;
+};
+var internsymbol = func(symbol) {
+ #assert("argument not a symbol", issym, symbol);
+ if (!issym(symbol)) die("argument not a symbol");
+ var get_interned = compile("""
+ keys({"~symbol~":})[0]
+ """);
+ return get_interned();
+};
+var tryintern = func(symbol) issym(symbol) ? internsymbol(symbol) : symbol;
+
+# End excerpt
+
+# Helpers for below
+var unescape = func(s) string.replace(s~"", "'", "\\'");
+var hashdup = func(_,rkeys=nil) {
+ var h={}; var k=rkeys!=nil?rkeys:members(_);
+ foreach (var k;k) h[tryintern(k)]=member(_,k); h
+}
+var member = func(h,k) {
+ if (contains(h, k)) return h[k];
+ if (contains(h, "parents")) {
+ var _=h.parents;
+ for (var i=0;i(); ... }
+# The style is passed as (essentially) their local namespace/variables,
+# while the group is a regular argument.
+var call_draw = func(draw, style, arg=nil, relevant_keys=nil) {
+ return call(draw, arg, nil, hashdup(style,relevant_keys));
+}
+
+# Serialize a style into a string.
+var style_string = func(style, relevant_keys=nil) {
+ if (relevant_keys == nil) relevant_keys = members(style);
+ relevant_keys = sort(relevant_keys, cmp);
+ var str = "";
+ foreach (var k; relevant_keys) {
+ var m = member(style,k);
+ if (m == nil) continue;
+ if (str) str ~= ";";
+ str ~= k ~ ":";
+ str ~= serialize(m);
+ }
+ return str;
+}
+
+##
+# A class to mix styling and caching. Using the above helpers it
+# serializes style hashes.
+#
+var StyleableCacheable = {
+ ##
+ # Construct an object.
+ # @param name Prefix to use for entries in the cache
+ # @param draw_func Function for the cache that will draw the
+ # symbol onto a group using the style parameters.
+ # @param cache The #SymbolCache to use for these symbols.
+ # @param draw_mode See #SymbolCache
+ # @param relevant_keys A list of keys for the style used by the
+ # draw_func. Although it defaults to all
+ # available keys, it is highly recommended
+ # that it be specified.
+ #
+ new: func(name, draw_func, cache, draw_mode=0, relevant_keys=nil) {
+ return {
+ parents: [StyleableCacheable],
+ _name: name,
+ _draw_func: draw_func,
+ _cache: cache,
+ _draw_mode: draw_mode,
+ relevant_keys: relevant_keys,
+ };
+ },
+ # Note: configuration like active/inactive needs
+ # to also use the passed style hash, unless it is
+ # chosen not to cache symbols that are, e.g., active.
+ request: func(style) {
+ var s = style_string(style, me.relevant_keys);
+ #debug.dump(style, s);
+ var s1 = me._name~s;
+ var c = me._cache.get(s1);
+ if (c != nil) return c;
+ return me.draw(style,s1);
+ },
+ render: func(element, style) {
+ var c = me.request(style);
+ c.render(element);
+ },
+ draw: func(style,s1) {
+ var fn = func call_draw(me._draw_func, style, arg, me.relevant_keys);
+ me._cache.add(s1, fn, me._draw_mode);
+ },
+};
+
+##
+# A base class for Symbols placed on a map.
+#
+# Note: for the derived objects, the element is stored as obj.element.
+# This is also part of the object's parents vector, which allows
+# callers to use obj.setVisible() et al. However, for code that
+# manipulates the element's path (if it is a Canvas Path), it is best
+# to use obj.element.addSegmentGeo() et al. for consistency.
+#
var Symbol = {
# Static/singleton:
registry: {},
@@ -154,7 +390,7 @@ var Symbol = {
me.registry[type] = class,
get: func(type)
if ((var class = me.registry[type]) == nil)
- die("unknown type '"~type~"'");
+ __die("Symbol.get():unknown type '"~type~"'");
else return class,
# Calls corresonding symbol constructor
# @param group #Canvas.Group to place this on.
@@ -164,15 +400,40 @@ var Symbol = {
ret.element.set("symbol-type", type);
return ret;
},
+ # Private constructor:
+ _new: func(m) {
+ m.style = m.layer.style;
+ m.options = m.layer.options;
+ if (m.controller != nil) {
+ temp = m.controller.new(m,m.model);
+ if (temp != nil)
+ m.controller = temp;
+ }
+ else __die("Symbol._new(): default controller not found");
+ },
# Non-static:
- df_controller: nil, # default controller
+ df_controller: nil, # default controller -- Symbol.Controller by default, see below
# Update the drawing of this object (position and others).
update: func()
- die("update() not implemented for this symbol type!"),
- draw: func(group, model, lod)
- die("draw() not implemented for this symbol type!"),
- del: func()
- die("del() not implemented for this symbol type!"),
+ __die("Abstract Symbol.update(): not implemented for this symbol type!"),
+ draw: func() ,
+ del: func() {
+ if (me.controller != nil)
+ me.controller.del(me, me.model);
+ try_aux_method(me.model, "del");
+ },
+
+ # Add a text element with styling
+ newText: func(text=nil, color=nil) {
+ var t = me.element.createChild("text")
+ .setDrawMode( canvas.Text.TEXT )
+ .setText(text)
+ .setFont(me.layer.style.font)
+ .setFontSize(me.layer.style.font_size);
+ if (color != nil)
+ t.setColor(color);
+ return t;
+ },
}; # of Symbol
@@ -183,24 +444,24 @@ Symbol.Controller = {
me.registry[type] = class,
get: func(type)
if ((var class = me.registry[type]) == nil)
- die("unknown type '"~type~"'");
+ __die("Symbol.Controller.get(): unknown type '"~type~"'");
else return class,
- # Calls corresonding symbol constructor
- # @param model Model to place this on.
- new: func(type, model, arg...)
- return call((var class = me.get(type)).new, [model]~arg, class),
+ # Calls corresonding symbol controller constructor
+ # @param model Model to control this object (position and other attributes).
+ new: func(type, symbol, model, arg...)
+ return call((var class = me.get(type)).new, [symbol, model]~arg, class),
# Non-static:
# Update anything related to a particular model. Returns whether the object needs updating:
- update: func(model) return 1,
- # Initialize a controller to an object (or initialize the controller itself):
- init: func(model) ,
+ update: func(symbol, model) return 1,
# Delete an object from this controller (or delete the controller itself):
- del: func(model) ,
- # Return whether this symbol/object is visible:
+ del: func(symbol, model) ,
+ # Return whether this model/symbol is (should be) visible:
isVisible: func(model) return 1,
# Get the position of this symbol/object:
getpos: func(model) , # default provided below
}; # of Symbol.Controller
+# Add this to Symbol as the default controller, but replace the Static .new() method with a blank
+Symbol.df_controller = { parents:[Symbol.Controller], new: func nil };
var getpos_fromghost = func(positioned_g)
return [positioned_g.lat, positioned_g.lon];
@@ -215,10 +476,12 @@ var is_positioned_ghost = func(obj) {
return 0; # not a known/supported ghost
};
+var register_supported_ghost = func(name) append(supported_ghosts, name);
+
# Generic getpos: get lat/lon from any object:
# (geo.Coord and positioned ghost currently)
Symbol.Controller.getpos = func(obj, p=nil) {
- if (obj == nil) die("Symbol.Controller.getpos received nil");
+ if (obj == nil) __die("Symbol.Controller.getpos(): received nil");
if (p == nil) {
var ret = Symbol.Controller.getpos(obj, obj);
if (ret != nil) return ret;
@@ -229,13 +492,13 @@ Symbol.Controller.getpos = func(obj, p=nil) {
}
}
debug.dump(obj);
- die("no suitable getpos() found! Of type: "~typeof(obj));
+ __die("Symbol.Controller.getpos(): no suitable getpos() found! Of type: "~typeof(obj));
} else {
if (typeof(p) == 'ghost')
if ( is_positioned_ghost(p) )
return getpos_fromghost(obj);
else
- die("bad/unsupported ghost of type '"~ghosttype(obj)~"' (see MapStructure.nas Symbol.Controller.getpos() to add new ghosts)");
+ __die("Symbol.Controller.getpos(): bad/unsupported ghost of type '"~ghosttype(obj)~"' (see MapStructure.nas Symbol.Controller.getpos() to add new ghosts)");
if (typeof(p) == 'hash')
if (p == geo.Coord)
return subvec(obj.latlon(), 0, 2);
@@ -261,14 +524,14 @@ Symbol.Controller.equals = func(l, r, p=nil) {
if (ret != nil) return ret;
}
}
- debug.dump(obj);
- die("no suitable equals() found! Of type: "~typeof(obj));
+ debug.dump(l);
+ __die("Symbol.Controller: no suitable equals() found! Of type: "~typeof(l));
} else {
if (typeof(p) == 'ghost')
if ( is_positioned_ghost(p) )
return l.id == r.id;
else
- die("bad/unsupported ghost of type '"~ghosttype(l)~"' (see MapStructure.nas Symbol.Controller.getpos() to add new ghosts)");
+ __die("Symbol.Controller: bad/unsupported ghost of type '"~ghosttype(l)~"' (see MapStructure.nas Symbol.Controller.getpos() to add new ghosts)");
if (typeof(p) == 'hash')
# Somewhat arbitrary convention:
# * l.equals(r) -- instance method, i.e. uses "me" and "arg[0]"
@@ -278,25 +541,28 @@ Symbol.Controller.equals = func(l, r, p=nil) {
if (contains(p, "_equals"))
return p._equals(l,r);
}
- return nil;
+ return nil; # scio correctum est
};
var assert_m = func(hash, member)
if (!contains(hash, member))
- die("required field not found: '"~member~"'");
+ __die("assert_m: required field not found: '"~member~"'");
var assert_ms = func(hash, members...)
foreach (var m; members)
if (m != nil) assert_m(hash, m);
-
+##
+# Implementation for a particular type of symbol (for the *.symbol files)
+# to handle details.
+#
var DotSym = {
- parents: [Symbol], # TODO: use StyleableSymbol here to support styling and caching
+ parents: [Symbol],
element_id: nil,
# Static/singleton:
makeinstance: func(name, hash) {
if (!isa(hash, DotSym))
- die("OOP error");
+ __die("DotSym: OOP error");
return Symbol.add(name, hash);
},
# For the instances returned from makeinstance:
@@ -308,24 +574,20 @@ var DotSym = {
# @param controller Optional controller "glue". Each method
# is called with the model as the only argument.
new: func(group, layer, model, controller=nil) {
- if (me == nil) die();
+ if (me == nil) __die();
var m = {
parents: [me],
group: group,
layer: layer,
model: model,
+ map: layer.map,
controller: controller == nil ? me.df_controller : controller,
element: group.createChild(
me.element_type, me.element_id
),
};
- if (m.controller != nil) {
- temp = m.controller.new(m.model,m);
- if (temp != nil)
- m.controller = temp;
- m.controller.init(model);
- }
- else die("default controller not found");
+ append(m.parents, m.element);
+ Symbol._new(m);
m.init();
return m;
@@ -333,11 +595,7 @@ var DotSym = {
del: func() {
printlog(_MP_dbg_lvl, "DotSym.del()");
me.deinit();
- if (me.controller != nil)
- me.controller.del(me.model);
- call(func me.model.del(), nil, var err=[]); # try...
- if (size(err) and err[0] != "No such member: del") # ... and either catch or rethrow
- die(err[0]);
+ call(Symbol.del, nil, me);
me.element.del();
},
# Default wrappers:
@@ -345,7 +603,7 @@ var DotSym = {
deinit: func(),
update: func() {
if (me.controller != nil) {
- if (!me.controller.update(me.model)) return;
+ if (!me.controller.update(me, me.model)) return;
elsif (!me.controller.isVisible(me.model)) {
me.element.hide();
return;
@@ -358,7 +616,7 @@ var DotSym = {
pos~=[nil]; # fall through
if (size(pos) == 3)
var (lat,lon,rotation) = pos;
- else die("bad position: "~debug.dump(pos));
+ else __die("DotSym.update(): bad position: "~debug.dump(pos));
# print(me.model.id, ": Position lat/lon: ", lat, "/", lon);
me.element.setGeoPosition(lat,lon);
if (rotation != nil)
@@ -366,146 +624,179 @@ var DotSym = {
},
}; # of DotSym
-# A layer that manages a list of symbols (using delta positioned handling).
-var SymbolLayer = {
+##
+# Small wrapper for DotSym: parse a SVG on init().
+#
+var SVGSymbol = {
+ parents:[DotSym],
+ element_type: "group",
+ cacheable: 0,
+ init: func() {
+ if (!me.cacheable) {
+ canvas.parsesvg(me.element, me.svg_path);
+ # hack:
+ if (var scale = me.layer.style['scale_factor'])
+ me.element.setScale(scale);
+ } else {
+ __die("cacheable not implemented yet!");
+ }
+ me.draw();
+ },
+ draw: func,
+}; # of SVGSymbol
+
+
+##
+# wrapper for symbols based on raster images (i.e. PNGs)
+# TODO: generalize this and port WXR.symbol accordingly
+#
+var RasterSymbol = {
+ parents:[DotSym],
+ element_type: "group",
+ cacheable: 0,
+ size: [32,32], scale: 1,
+ init: func() {
+ if (!me.cacheable) {
+ me.element.createChild("image", me.name)
+ .setFile(me.file_path)
+ .setSize(me.size)
+ .setScale(me.scale);
+ } else {
+ __die("cacheable not implemented yet!");
+ }
+ me.draw();
+ },
+ draw: func,
+
+}; # of RasterSymbol
+
+
+
+var LineSymbol = {
+ parents:[Symbol],
+ element_id: nil,
+ needs_update: 1,
# Static/singleton:
- registry: {},
- add: func(type, class)
- me.registry[type] = class,
- get: func(type)
- if ((var class = me.registry[type]) == nil)
- die("unknown type '"~type~"'");
- else return class,
+ makeinstance: func(name, hash) {
+ if (!isa(hash, LineSymbol))
+ __die("LineSymbol: OOP error");
+ return Symbol.add(name, hash);
+ },
+# For the instances returned from makeinstance:
+ new: func(group, layer, model, controller=nil) {
+ if (me == nil) __die("Need me reference for LineSymbol.new()");
+ if (typeof(model) != 'vector') __die("LineSymbol.new(): need a vector of points");
+ var m = {
+ parents: [me],
+ group: group,
+ layer: layer,
+ model: model,
+ controller: controller == nil ? me.df_controller : controller,
+ element: group.createChild(
+ "path", me.element_id
+ ),
+ };
+ append(m.parents, m.element);
+ Symbol._new(m);
+
+ m.init();
+ return m;
+ },
+# Non-static:
+ draw: func() {
+ if (!me.needs_update) return;
+ printlog(_MP_dbg_lvl, "redrawing a LineSymbol "~me.layer.type);
+ me.element.reset();
+ var cmds = [];
+ var coords = [];
+ var cmd = canvas.Path.VG_MOVE_TO;
+ foreach (var m; me.model) {
+ var (lat,lon) = me.controller.getpos(m);
+ append(coords,"N"~lat);
+ append(coords,"E"~lon);
+ append(cmds,cmd); cmd = canvas.Path.VG_LINE_TO;
+ }
+ me.element.setDataGeo(cmds, coords);
+ me.element.update(); # this doesn't help with flickering, it seems
+ },
+ del: func() {
+ printlog(_MP_dbg_lvl, "LineSymbol.del()");
+ me.deinit();
+ call(Symbol.del, nil, me);
+ me.element.del();
+ },
+# Default wrappers:
+ init: func() me.draw(),
+ deinit: func(),
+ update: func() {
+ if (me.controller != nil) {
+ if (!me.controller.update(me, me.model)) return;
+ elsif (!me.controller.isVisible(me.model)) {
+ me.element.hide();
+ return;
+ }
+ } else
+ me.element.show();
+ me.draw();
+ },
+}; # of LineSymbol
+
+##
+# Base class for a SymbolLayer, e.g. MultiSymbolLayer or SingleSymbolLayer.
+#
+var SymbolLayer = {
# Default implementations/values:
df_controller: nil, # default controller
df_priority: nil, # default priority for display sorting
df_style: nil,
+ df_options: nil,
type: nil, # type of #Symbol to add (MANDATORY)
id: nil, # id of the group #canvas.Element (OPTIONAL)
- # @param group A group to place this on.
+# Static/singleton:
+ registry: {},
+ add: func(type, class)
+ me.registry[type] = class,
+ get: func(type) {
+ foreach(var invalid; var invalid_types = [nil,'vector','hash'])
+ if ( (var t=typeof(type)) == invalid) __die(" invalid SymbolLayer type (non-scalar) of type:"~t);
+ if ((var class = me.registry[type]) == nil)
+ __die("SymbolLayer.get(): unknown type '"~type~"'");
+ else return class;
+ },
+ # Calls corresonding layer constructor
+ # @param group #Canvas.Group to place this on.
# @param map The #Canvas.Map this is a member of.
- # @param controller A controller object (parents=[SymbolLayer.Controller])
- # or implementation (parents[0].parents=[SymbolLayer.Controller]).
- new: func(group, map, controller=nil, style=nil, options=nil) {
- #print("Creating new Layer instance");
- if (me == nil) die();
- var m = {
- parents: [me],
- map: map,
- group: group.createChild("group", me.type), # TODO: the id is not properly set, but would be useful for debugging purposes (VOR, FIXES, NDB etc)
- list: [],
- options: options,
- };
- m.setVisible();
-
- # print("Layer setup options:", m.options!=nil);
- # do no overwrite the default style if style is nil:
- if (style != nil and typeof(style)=='hash') {
- #print("Setting up a custom style!");
- m.style = style;
- } else m.style = me.df_style;
-
- # debug.dump(m.style);
- m.searcher = geo.PositionedSearch.new(me.searchCmd, me.onAdded, me.onRemoved, m);
- # FIXME: hack to expose type of layer:
- if (caller(1)[1] == Map.addLayer) {
- var this_type = caller(1)[0].type_arg;
- if (this_type != nil)
- m.group.set("symbol-layer-type", this_type);
- }
+ # @param controller A controller object.
+ # @param style An alternate style.
+ # @param options Extra options/configurations.
+ # @param visible Initially set it up as visible or invisible.
+ new: func(type, group, map, controller=nil, style=nil, options=nil, visible=1, arg...) {
+ # XXX: Extra named arguments are (obviously) not preserved well...
+ var ret = call((var class = me.get(type)).new, [group, map, controller, style, options, visible]~arg, class);
+ ret.group.set("layer-type", type);
+ return ret;
+ },
+ # Private constructor:
+ _new: func(m, style, controller, options) {
+ # print("SymbolLayer setup options:", m.options!=nil);
+ m.style = default_hash(style, m.df_style);
+ m.options = default_hash(options, m.df_options);
+
if (controller == nil)
- #controller = SymbolLayer.Controller.new(me.type, m);
- controller = me.df_controller;
+ controller = m.df_controller;
assert_m(controller, "parents");
if (controller.parents[0] == SymbolLayer.Controller)
controller = controller.new(m);
assert_m(controller, "parents");
assert_m(controller.parents[0], "parents");
if (controller.parents[0].parents[0] != SymbolLayer.Controller)
- die("OOP error");
+ __die("MultiSymbolLayer: OOP error");
m.controller = controller;
- m.update();
- return m;
},
- update: func() {
- if (!me.getVisible()) {
- return;
- }
- # TODO: add options hash processing here
- var updater = func {
- me.searcher.update();
- foreach (var e; me.list)
- e.update();
- }
-
- if (me.options != nil and me.options['update_wrapper'] !=nil) {
- me.options.update_wrapper( me, updater ); # call external wrapper (usually for profiling purposes)
- # print("calling update_wrapper!");
- }
- else {
- # print("not using wrapper");
- updater();
- # debug.dump(me.options);
- }
- #var start=systime();
- #var end=systime();
- # print(me.type, " layer update:", end-start);
- # HACK: hard-coded ...
- #setprop("/gui/navdisplay/layers/"~me.type~"/delay-ms", (end-start)*1000 );
- },
- ##
- # useful to support checkboxes in dialogs (e.g. Map dialog)
- # so that we can show/hide layers directly by registering a listener
- # TODO: should also allow us to update the navdisplay logic WRT to visibility
- hide: func me.group.hide(),
- show: func me.group.show(),
- getVisible: func me.group.getVisible(),
- setVisible: func(visible = 1) me.group.setVisible(visible),
- del: func() {
- printlog(_MP_dbg_lvl, "SymbolLayer.del()");
- me.controller.del();
- foreach (var e; me.list)
- e.del();
- },
- findsym: func(model, del=0) {
- forindex (var i; me.list) {
- var e = me.list[i];
- if (Symbol.Controller.equals(e.model, model)) {
- if (del) {
- # Remove this element from the list
- # TODO: maybe C function for this? extend pop() to accept index?
- var prev = subvec(me.list, 0, i);
- var next = subvec(me.list, i+1);
- me.list = prev~next;
- }
- return e;
- }
- }
- return nil;
- },
- searchCmd: func() {
- var result = me.controller.searchCmd();
- # some hardening TODO: don't do this always - only do it once during initialization, i.e. layer creation ?
- var type=typeof(result);
- if(type != 'nil' and type != 'vector')
- die("MapStructure: searchCmd() method MUST return a vector of valid objects or nil! (was:"~type~")");
- return result;
- },
- # Adds a symbol.
- onAdded: func(model) {
- printlog(_MP_dbg_lvl, "Adding symbol of type "~me.type);
- if (model == nil) die("Model was nil for "~debug.string(me.type));
- append(me.list, Symbol.new(me.type, me.group, me, model));
- },
- # Removes a symbol.
- onRemoved: func(model) {
- printlog(_MP_dbg_lvl, "Deleting symbol of type "~me.type);
- if (me.findsym(model, 1) == nil) die("model not found");
- call(func model.del(), nil, var err = []); # try...
- if (size(err) and err[0] != "No such member: del") # ... and either catch or rethrow
- die(err[0]);
- },
-}; # of SymbolLayer
+# For instances:
+ del: func() if (me.controller != nil) { me.controller.del(); me.controller = nil },
+ update: func() __die("Abstract SymbolLayer.update() not implemented for this Layer"),
+};
# Class to manage controlling a #SymbolLayer.
# Currently handles:
@@ -518,33 +809,210 @@ SymbolLayer.Controller = {
me.registry[type] = class,
get: func(type)
if ((var class = me.registry[type]) == nil)
- die("unknown type '"~type~"'");
+ __die("unknown type '"~type~"'");
else return class,
# Calls corresonding controller constructor
# @param layer The #SymbolLayer this controller is responsible for.
new: func(type, layer, arg...)
return call((var class = me.get(type)).new, [layer]~arg, class),
-# Default implementations:
- run_update: func() me.layer.update(),
+# Default implementations for derived classes:
# @return List of positioned objects.
searchCmd: func()
- die("searchCmd() not implemented for this SymbolLayer.Controller type!"),
+ __die("Abstract method searchCmd() not implemented for this SymbolLayer.Controller type!"),
+ addVisibilityListener: func() {
+ var m = me;
+ append(m.listeners, setlistener(
+ m.layer._node.getNode("visible"),
+ func m.layer.update(),
+ #compile("m.layer.update()", ""),
+ 0,0
+ ));
+ },
+# Default implementations for derived objects:
+ # For SingleSymbolLayer: retreive the model object
+ getModel: func me._model, # assume they store it here - otherwise they can override this
}; # of SymbolLayer.Controller
-var AnimatedLayer = {
-};
+##
+# A layer that manages a list of symbols (using delta positioned handling
+# with a searchCmd to retreive placements).
+#
+var MultiSymbolLayer = {
+ parents: [SymbolLayer],
+# Default implementations/values:
+ # @param group A group to place this on.
+ # @param map The #Canvas.Map this is a member of.
+ # @param controller A controller object (parents=[SymbolLayer.Controller])
+ # or implementation (parents[0].parents=[SymbolLayer.Controller]).
+ # @param style An alternate style.
+ # @param options Extra options/configurations.
+ # @param visible Initially set it up as visible or invisible.
+ new: func(group, map, controller=nil, style=nil, options=nil, visible=1) {
+ #print("Creating new SymbolLayer instance");
+ if (me == nil) __die("MultiSymbolLayer constructor needs to know its parent class");
+ var m = {
+ parents: [me],
+ map: map,
+ group: group.createChild("group", me.type),
+ list: [],
+ };
+ append(m.parents, m.group);
+ m.setVisible(visible);
+ # N.B.: this has to be here for the controller
+ m.searcher = geo.PositionedSearch.new(me.searchCmd, me.onAdded, me.onRemoved, m);
+ SymbolLayer._new(m, style, controller, options);
+
+ m.update();
+ return m;
+ },
+ update: func() {
+ if (!me.getVisible())
+ return;
+ #debug.warn("update traceback for "~me.type);
+
+ var updater = func {
+ me.searcher.update();
+ foreach (var e; me.list)
+ e.update();
+ }
+
+ if (me.options != nil and me.options['update_wrapper'] !=nil) {
+ me.options.update_wrapper( me, updater ); # call external wrapper (usually for profiling purposes)
+ } else {
+ updater();
+ }
+ },
+ del: func() {
+ printlog(_MP_dbg_lvl, "MultiSymbolLayer.del()");
+ foreach (var e; me.list)
+ e.del();
+ call(SymbolLayer.del, nil, me);
+ },
+ delsym: func(model) {
+ forindex (var i; me.list) {
+ var e = me.list[i];
+ if (Symbol.Controller.equals(e.model, model)) {
+ # Remove this element from the list
+ # TODO: maybe C function for this? extend pop() to accept index?
+ var prev = subvec(me.list, 0, i);
+ var next = subvec(me.list, i+1);
+ me.list = prev~next;
+ e.del();
+ return 1;
+ }
+ }
+ return 0;
+ },
+ searchCmd: func() {
+ if (me.map.getPosCoord() == nil or me.map.getRange() == nil) {
+ print("Map not yet initialized, returning empty result set!");
+ return []; # handle maps not yet fully initialized
+ }
+ var result = me.controller.searchCmd();
+ # some hardening
+ var type=typeof(result);
+ if(type != 'nil' and type != 'vector')
+ __die("MultiSymbolLayer: searchCmd() method MUST return a vector of valid positioned ghosts/Geo.Coord objects or nil! (was:"~type~")");
+ return result;
+ },
+ # Adds a symbol.
+ onAdded: func(model) {
+ printlog(_MP_dbg_lvl, "Adding symbol of type "~me.type);
+ if (model == nil) __die("MultiSymbolLayer: Model was nil for layer:"~debug.string(me.type)~ " Hint:check your equality check method!");
+ append(me.list, Symbol.new(me.type, me.group, me, model));
+ },
+ # Removes a symbol.
+ onRemoved: func(model) {
+ printlog(_MP_dbg_lvl, "Deleting symbol of type "~me.type);
+ if (!me.delsym(model)) __die("model not found");
+ try_aux_method(model, "del");
+ #call(func model.del(), nil, var err = []); # try...
+ #if (size(err) and err[0] != "No such member: del") # ... and either catch or rethrow
+ # die(err[0]);
+ },
+}; # of MultiSymbolLayer
+
+##
+# A layer that manages a list of statically-positioned navaid symbols (using delta positioned handling
+# with a searchCmd to retrieve placements).
+# This is not yet supposed to work properly, it's just there to help get rid of all the identical boilerplate code
+# in lcontroller files, so needs some reviewing and customizing still
+#
+var NavaidSymbolLayer = {
+ parents: [MultiSymbolLayer],
+# static generator/functor maker:
+ make: func(query) {
+ #print("Creating searchCmd() for NavaidSymbolLayer:", query);
+ return func {
+ printlog(_MP_dbg_lvl, "Running query:", query);
+ var range = me.map.getRange();
+ if (range == nil) return;
+ return positioned.findWithinRange(me.map.getPosCoord(), range, query);
+ };
+ },
+}; # of NavaidSymbolLayer
-var CompassLayer = {
-};
-var AltitudeArcLayer = {
-};
###
-# set up a cache for 32x32 symbols
-var SymbolCache32x32 = nil;#SymbolCache.new(1024,32);
+## TODO: wrappers for Horizontal vs. Vertical layers ?
+##
+
+var SingleSymbolLayer = {
+ parents: [SymbolLayer],
+# Default implementations/values:
+ # @param group A group to place this on.
+ # @param map The #Canvas.Map this is a member of.
+ # @param controller A controller object (parents=[SymbolLayer.Controller])
+ # or implementation (parents[0].parents=[SymbolLayer.Controller]).
+ # @param style An alternate style.
+ # @param options Extra options/configurations.
+ # @param visible Initially set it up as visible or invisible.
+ new: func(group, map, controller=nil, style=nil, options=nil, visible=1) {
+ #print("Creating new SymbolLayer instance");
+ if (me == nil) __die("SingleSymbolLayer constructor needs to know its parent class");
+ var m = {
+ parents: [me],
+ map: map,
+ group: group.createChild("group", me.type),
+ };
+ append(m.parents, m.group);
+ m.setVisible(visible);
+ SymbolLayer._new(m, style, controller, options);
+
+ m.symbol = Symbol.new(m.type, m.group, m, m.controller.getModel());
+ m.update();
+ return m;
+ },
+ update: func() {
+ if (!me.getVisible())
+ return;
+
+ var updater = func {
+ if (typeof(me.symbol.model) == 'hash') try_aux_method(me.symbol.model, "update");
+ me.symbol.update();
+ }
+
+ if (me.options != nil and me.options['update_wrapper'] != nil) {
+ me.options.update_wrapper( me, updater ); # call external wrapper (usually for profiling purposes)
+ } else {
+ updater();
+ }
+ },
+ del: func() {
+ printlog(_MP_dbg_lvl, "SymbolLayer.del()");
+ me.symbol.del();
+ call(SymbolLayer.del, nil, me);
+ },
+}; # of SingleSymbolLayer
+
+###
+# set up a cache for 32x32 symbols (initialized below in load_MapStructure)
+var SymbolCache32x32 = nil;
var load_MapStructure = func {
+ canvas.load_MapStructure = func; # disable any subsequent attempt to load
+
Map.Controller = {
# Static/singleton:
registry: {},
@@ -552,7 +1020,7 @@ var load_MapStructure = func {
me.registry[type] = class,
get: func(type)
if ((var class = me.registry[type]) == nil)
- die("unknown type '"~type~"'");
+ __die("unknown type '"~type~"'");
else return class,
# Calls corresonding controller constructor
# @param map The #SymbolMap this controller is responsible for.
@@ -560,12 +1028,11 @@ var load_MapStructure = func {
var m = call((var class = me.get(type)).new, [map]~arg, class);
if (!contains(m, "map"))
m.map = map;
- # FIXME: fails on no member
elsif (m.map != map and !isa(m.map, map) and (
- m.get_position != Map.Controller.get_position
+ m.get_position != Map.Controller.get_position
or m.query_range != Map.Controller.query_range
or m.in_range != Map.Controller.in_range))
- { die("m must store the map handle as .map if it uses the default method(s)"); }
+ { __die("m must store the map handle as .map if it uses the default method(s)"); }
},
# Default implementations:
get_position: func() {
@@ -578,9 +1045,9 @@ var load_MapStructure = func {
},
in_range: func(lat, lon, alt=0) {
var range = me.map.getRange();
- if(range == nil) die("in_range: Invalid query range!");
+ if(range == nil) __die("in_range: Invalid query range!");
# print("Query Range is:", range );
- if (lat == nil or lon == nil) die("in_range: lat/lon invalid");
+ if (lat == nil or lon == nil) __die("in_range: lat/lon invalid");
var pos = geo.Coord.new();
pos.set_latlon(lat, lon, alt or 0);
var map_pos = me.map.getPosCoord();
@@ -594,23 +1061,14 @@ var load_MapStructure = func {
};
####### LOAD FILES #######
- #print("loading files");
(func {
var FG_ROOT = getprop("/sim/fg-root");
var load = func(file, name) {
- #print(file);
if (name == nil)
var name = split("/", file)[-1];
- if (substr(name, size(name)-4) == ".draw") # we don't need this anylonger, right ?
- name = substr(name, 0, size(name)-5);
- #print("reading file");
var code = io.readfile(file);
- #print("compiling file");
- # This segfaults for some reason:
- #var code = call(compile, [code], var err=[]);
var code = call(func compile(code, file), [code], var err=[]);
if (size(err)) {
- #print("handling error");
if (substr(err[0], 0, 12) == "Parse error:") { # hack around Nasal feature
var e = split(" at line ", err[0]);
if (size(e) == 2)
@@ -621,25 +1079,23 @@ var load_MapStructure = func {
debug.printerror(err);
return;
}
- #print("calling code");
-
+ #code=bind(
call(code, nil, nil, var hash = {});
-
-
- # validate
+ # validate
var url = ' http://wiki.flightgear.org/MapStructure#';
# TODO: these rules should be extended for all main files lcontroller/scontroller and symbol
- # TODO move this out of here, so that we can use these checks in other places (i.e. searchCmd validation)
var checks = [
{ extension:'symbol', symbol:'update', type:'func', error:' update() must not be overridden:', id:300},
- { extension:'symbol', symbol:'draw', type:'func', required:1, error:' symbol files need to export a draw() routine:', id:301},
- { extension:'lcontroller', symbol:'searchCmd', type:'func', required:1, error:' lcontroller without searchCmd method:', id:100},
+ # Sorry, this one doesn't work with the new LineSymbol
+# { extension:'symbol', symbol:'draw', type:'func', required:1, error:' symbol files need to export a draw() routine:', id:301},
+ # Sorry, this one doesn't work with the new SingleSymbolLayer
+# { extension:'lcontroller', symbol:'searchCmd', type:'func', required:1, error:' lcontroller without searchCmd method:', id:100},
];
- var makeurl = func(scope, id) url ~ scope ~ ':' ~ id;
- var bailout = func(file, message, scope, id) die(file~message~"\n"~makeurl(scope,id) );
+ var makeurl = func(scope, id) url ~ scope ~ ':' ~ id;
+ var bailout = func(file, message, scope, id) __die(file~message~"\n"~makeurl(scope,id) );
var current_ext = split('.', file)[-1];
foreach(var check; checks) {
@@ -660,78 +1116,40 @@ var load_MapStructure = func {
}
}
}
- if(file==FG_ROOT~'/Nasal/canvas/map/DME.scontroller') {
- # var test = hash.new(nil);
- # debug.dump( id(hash.new) );
- }
- # TODO: call self tests/sanity checks here
- # and consider calling .symbol::draw() to ensure that certain APIs are NOT used, such as setGeoPosition() and setColor() etc (styling)
return hash;
};
# sets up a shared symbol cache, which will be used by all MapStructure maps and layers
- # TODO: need to encode styling information as part of the keys/hash lookup, name - so that
- # different maps/layers do not overwrite symbols accidentally
- #
canvas.SymbolCache32x32 = SymbolCache.new(1024,32);
- var load_deps = func(name) {
- load(FG_ROOT~"/Nasal/canvas/map/"~name~".lcontroller", name);
- load(FG_ROOT~"/Nasal/canvas/map/"~name~".symbol", name);
- load(FG_ROOT~"/Nasal/canvas/map/"~name~".scontroller", name);
+ # Find files and load them:
+ var contents_dir = FG_ROOT~"/Nasal/canvas/map/";
+ var dep_names = [
+ # With these extensions, in this order:
+ "lcontroller",
+ "symbol",
+ "scontroller",
+ "controller",
+ ];
+ var deps = {};
+ foreach (var d; dep_names) deps[d] = [];
+ foreach (var f; directory(contents_dir)) {
+ var ext = size(var s=split(".", f)) > 1 ? s[-1] : nil;
+ foreach (var d; dep_names) {
+ if (ext == d) {
+ append(deps[d], f);
+ break
+ }
+ }
}
-
- # add your own MapStructure layers here, see the wiki for details: http://wiki.flightgear.org/MapStructure
- foreach( var name; ['APT','VOR','FIX','NDB','DME','WPT','TFC','APS',] )
- load_deps( name );
- load(FG_ROOT~"/Nasal/canvas/map/aircraftpos.controller", name);
-
- # disable this for now
- if(0) {
- var drawVOR = func(color, width=3) return func(group) {
- # print("drawing vor");
- var bbox = group.createChild("path")
- .moveTo(-15,0)
- .lineTo(-7.5,12.5)
- .lineTo(7.5,12.5)
- .lineTo(15,0)
- .lineTo(7.5,-12.5)
- .lineTo(-7.5,-12.5)
- .close()
- .setStrokeLineWidth(width)
- .setColor( color );
- # debug.dump( bbox.getBoundingBox() );
- };
-
- var cachedVOR1 = SymbolCache32x32.add( "VOR-BLUE", drawVOR( color:[0, 0.6, 0.85], width:3), SymbolCache.DRAW_CENTERED );
- var cachedVOR2 = SymbolCache32x32.add( "VOR-RED" , drawVOR( color:[1.0, 0, 0], width: 3), SymbolCache.DRAW_CENTERED );
- var cachedVOR3 = SymbolCache32x32.add( "VOR-GREEN" , drawVOR( color:[0, 1, 0], width: 3), SymbolCache.DRAW_CENTERED );
- var cachedVOR4 = SymbolCache32x32.add( "VOR-WHITE" , drawVOR( color:[1, 1, 1], width: 3), SymbolCache.DRAW_CENTERED );
-
- # visually verify VORs were placed:
- # var dlg2 = canvas.Window.new([1024,1024], "dialog");
- # dlg2.setCanvas(SymbolCache32x32.canvas_texture);
-
- # use one:
- # var dlg = canvas.Window.new([120,120],"dialog");
- # var my_canvas = dlg.createCanvas().setColorBackground(1,1,1,1);
- # var root = my_canvas.createGroup();
-
- # SymbolCache32x32.get(name:"VOR-RED").render( group: root ).setTranslation(60,60);
+ foreach (var d; dep_names) {
+ foreach (var f; deps[d]) {
+ var name = split(".", f)[0];
+ load(contents_dir~f, name);
+ }
}
-
- # STRESS TEST
- if (0) {
- #for(var i=0;i <= 1024/32*4 - 4; i+=1)
- # SymbolCache32x32.add( "VOR-YELLOW"~i , drawVOR( color:[1, 1, 0], width: 3) );
- }
-
})();
- #print("finished loading files");
- ####### TEST SYMBOL #######
-
- canvas.load_MapStructure = func; # @Philosopher: is this intended/needed ??
}; # load_MapStructure
diff --git a/Nasal/canvas/PropertyElement.nas b/Nasal/canvas/PropertyElement.nas
index edca7ba56..722c7f542 100644
--- a/Nasal/canvas/PropertyElement.nas
+++ b/Nasal/canvas/PropertyElement.nas
@@ -65,5 +65,13 @@ var PropertyElement = {
{
me._node.getNode(key, 1).getBoolValue();
},
-
+ # Trigger an update of the element
+ #
+ # Elements are automatically updated once a frame, with a delay of one frame.
+ # If you wan't to get an element updated in the current frame you have to use
+ # this method.
+ update: func
+ {
+ me.setBool("update", 1);
+ }
};
diff --git a/Nasal/canvas/api.nas b/Nasal/canvas/api.nas
index 815980ce5..18487e38e 100644
--- a/Nasal/canvas/api.nas
+++ b/Nasal/canvas/api.nas
@@ -161,6 +161,11 @@ var Element = {
return factory(parent_ghost);
},
+ # Get the canvas this element is placed on
+ getCanvas: func()
+ {
+ wrapCanvas(me._getCanvas());
+ },
# Check if elements represent same instance
#
# @param el Other Element or element ghost
@@ -168,15 +173,6 @@ var Element = {
{
return me._node.equals(el._node_ghost);
},
- # Trigger an update of the element
- #
- # Elements are automatically updated once a frame, with a delay of one frame.
- # If you wan't to get an element updated in the current frame you have to use
- # this method.
- update: func()
- {
- me.setInt("update", 1);
- },
# Hide/Show element
#
# @param visible Whether the element should be visible
@@ -416,6 +412,7 @@ var Group = {
# ==============================================================================
# Class for a group element on a canvas with possibly geopgraphic positions
# which automatically get projected according to the specified projection.
+# Each map consists of an arbitrary number of layers (canvas groups)
#
var Map = {
df_controller: nil,
@@ -436,7 +433,7 @@ var Map = {
me.parents = subvec(me.parents,1);
me.del();
},
- setController: func(controller=nil)
+ setController: func(controller=nil, arg...)
{
if (me.controller != nil) me.controller.del(me);
if (controller == nil)
@@ -449,7 +446,7 @@ var Map = {
} else {
if (!isa(controller, Map.Controller))
die("OOP error: controller needs to inherit from Map.Controller");
- me.controller = call(func controller.new(me), nil, var err=[]); # try...
+ me.controller = call(controller.new, [me]~arg, controller, var err=[]); # try...
if (size(err)) {
if (err[0] != "No such member: new") # ... and either catch or rethrow
die(err[0]);
@@ -463,25 +460,29 @@ var Map = {
return me;
},
- addLayer: func(factory, type_arg=nil, priority=nil, style=nil, options=nil)
+ addLayer: func(factory, type_arg=nil, priority=nil, style=nil, options=nil, visible=1)
{
if(contains(me.layers, type_arg))
printlog("warn", "addLayer() warning: overwriting existing layer:", type_arg);
- # print("addLayer():", type_arg);
-
# Argument handling
- if (type_arg != nil)
+ if (type_arg != nil) {
+ var layer = factory.new(type:type_arg, group:me, map:me, style:style, options:options, visible:visible);
var type = factory.get(type_arg);
- else var type = factory;
+ var key = type_arg;
+ } else {
+ var layer = factory.new(group:me, map:me, style:style, options:options, visible:visible);
+ var type = factory;
+ var key = factory.type;
+ }
+ me.layers[type_arg] = layer;
- me.layers[type_arg] = type.new(group:me, map:me, style:style,options:options);
if (priority == nil)
priority = type.df_priority;
if (priority != nil)
- me.layers[type_arg].group.setInt("z-index", priority);
+ layer.group.setInt("z-index", priority);
- return me;
+ return layer; # return new layer to caller() so that we can directly work with it, i.e. to register event handlers (panning/zooming)
},
getLayer: func(type_arg) me.layers[type_arg],
@@ -490,6 +491,7 @@ var Map = {
setPos: func(lat, lon, hdg=nil, range=nil, alt=nil)
{
+ # TODO: also propage setPos events to layers and symbols (e.g. for offset maps)
me.set("ref-lat", lat);
me.set("ref-lon", lon);
if (hdg != nil)
@@ -497,7 +499,7 @@ var Map = {
if (range != nil)
me.setRange(range);
if (alt != nil)
- me.set("altitude", hdg);
+ me.set("altitude", alt);
},
getPos: func
{
@@ -513,6 +515,10 @@ var Map = {
getAlt: func me.get("altitude"),
getRange: func me.get("range"),
getLatLon: func [me.get("ref-lat"), me.get("ref-lon")],
+ # N.B.: This always returns the same geo.Coord object,
+ # so its values can and will change at any time (call
+ # update() on the coord to ensure it is up-to-date,
+ # which basically calls this method again).
getPosCoord: func
{
var (lat, lon) = (me.get("ref-lat"),
@@ -526,6 +532,8 @@ var Map = {
}
if (!contains(me, "coord")) {
me.coord = geo.Coord.new();
+ var m = me;
+ me.coord.update = func m.getPosCoord();
}
me.coord.set_latlon(lat,lon,alt or 0);
return me.coord;
@@ -534,12 +542,14 @@ var Map = {
# me.controller.
update: func(predicate=nil)
{
+ var t = systime();
foreach (var l; keys(me.layers)) {
var layer = me.layers[l];
# Only update if the predicate allows
if (predicate == nil or predicate(layer))
- call(layer.update, arg, layer);
+ layer.update();
}
+ printlog(_MP_dbg_lvl, "Took "~((systime()-t)*1000)~"ms to update map()");
return me;
},
};
@@ -745,6 +755,24 @@ var Path = {
return me;
},
+ addSegmentGeo: func(cmd, coords...)
+ {
+ var coords = _arg2valarray(coords);
+ var num_coords = me.num_coords[cmd];
+ if( size(coords) != num_coords )
+ debug.warn
+ (
+ "Invalid number of arguments (expected " ~ num_coords ~ ")"
+ );
+ else
+ {
+ me.setInt("cmd[" ~ (me._last_cmd += 1) ~ "]", cmd);
+ for(var i = 0; i < num_coords; i += 1)
+ me.set("coord-geo[" ~ (me._last_coord += 1) ~ "]", coords[i]);
+ }
+
+ return me;
+ },
# Remove first segment
pop_front: func me._removeSegment(1),
# Remove last segment
@@ -981,8 +1009,22 @@ var Image = {
# @param bottom Rectangle maximum y coordinate
# @param normalized Whether to use normalized ([0,1]) or image
# ([0, image_width]/[0, image_height]) coordinates
- setSourceRect: func(left, top, right, bottom, normalized = 1)
+ setSourceRect: func
{
+ # Work with both positional arguments and named arguments.
+ # Support first argument being a vector instead of four separate ones.
+ if (size(arg) == 1)
+ arg = arg[0];
+ elsif (size(arg) and size(arg) < 4 and typeof(arg[0]) == 'vector')
+ arg = arg[0]~arg[1:];
+ if (!contains(caller(0)[0], "normalized")) {
+ if (size(arg) > 4)
+ var normalized = arg[4];
+ else var normalized = 1;
+ }
+ if (size(arg) >= 3)
+ var (left,top,right,bottom) = arg;
+
me._node.getNode("source", 1).setValues({
left: left,
top: top,
@@ -1033,7 +1075,7 @@ var Canvas = {
# given every texture of the model will be replaced.
addPlacement: func(vals)
{
- var placement = me.texture.addChild("placement", 0, 0);
+ var placement = me._node.addChild("placement", 0, 0);
placement.setValues(vals);
return placement;
},
@@ -1052,31 +1094,32 @@ var Canvas = {
# Set the background color
#
# @param color Vector of 3 or 4 values in [0, 1]
- setColorBackground: func () { me.texture.getNode('background', 1).setValue(_getColor(arg)); me; },
- getColorBackground: func me.texture.get('background'),
+ setColorBackground: func me.set('background', _getColor(arg)),
+ getColorBackground: func me.get('background'),
# Get path of canvas to be used eg. in Image::setFile
getPath: func()
{
- return "canvas://by-index/texture[" ~ me.texture.getIndex() ~ "]";
+ return "canvas://by-index/texture[" ~ me._node.getIndex() ~ "]";
},
# Destructor
#
# releases associated canvas and makes this object unusable
del: func
{
- me.texture.remove();
+ me._node.remove();
me.parents = nil; # ensure all ghosts get destroyed
}
};
-var wrapCanvas = func(canvas_ghost)
+# @param g Canvas ghost
+var wrapCanvas = func(g)
{
- var m = {
- parents: [PropertyElement, Canvas, canvas_ghost],
- texture: props.wrapNode(canvas_ghost._node_ghost)
- };
- m._node = m.texture;
- return m;
+ if( g != nil and g._impl == nil )
+ g._impl = {
+ parents: [PropertyElement, Canvas],
+ _node: props.wrapNode(g._node_ghost)
+ };
+ return g;
}
# Create a new canvas. Pass parameters as hash, eg:
@@ -1090,7 +1133,7 @@ var wrapCanvas = func(canvas_ghost)
var new = func(vals)
{
var m = wrapCanvas(_newCanvasGhost());
- m.texture.setValues(vals);
+ m._node.setValues(vals);
return m;
};
@@ -1108,11 +1151,7 @@ var get = func(arg)
else
die("canvas.new: Invalid argument.");
- var canvas_ghost = _getCanvasGhost(node._g);
- if( canvas_ghost == nil )
- return nil;
-
- return wrapCanvas(canvas_ghost);
+ return wrapCanvas(_getCanvasGhost(node._g));
};
var getDesktop = func()
diff --git a/Nasal/canvas/design.txt b/Nasal/canvas/design.txt
deleted file mode 100644
index 7db8f4919..000000000
--- a/Nasal/canvas/design.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Nothing set in stone yet, we'll document things once the API becomes more stable and once it has been used in several dialogs and instruments
-
-At the moment, this implements the notion of a "LayeredMap", a LayeredMap is a conventional Canvas Map which has support for easily managing "Layers",
-which are internally mapped to Canvas Groups. Each Group's "visible" property is managed by the LayeredMap, so that layers can be easily
-toggled on/off, i.e. via checkboxes.
-
-Basically, the idea is this, we'll have a MVC (Model/View/Controller) setup, where:
- - the Model is mapped to the drawable's meta information (i.e. position)
- - the View is mapped to a conventional canvas group
- - the Controller is mapped to a bunch of property/timer callbacks to control the Model/View
-
-
-
-
-Model = PositionedSource
-View = Canvas
-Controller = control properties (zoom, range etc)
-
-LayerElement = callback to create a canvas group
-Layer = canvas.Group
-
-Map -> LayeredMap -> GenericMap -> AirportMap
-
diff --git a/Nasal/canvas/gui.nas b/Nasal/canvas/gui.nas
index 16b6c985f..06de098c7 100644
--- a/Nasal/canvas/gui.nas
+++ b/Nasal/canvas/gui.nas
@@ -7,12 +7,14 @@ var gui = {
var gui_dir = getprop("/sim/fg-root") ~ "/Nasal/canvas/gui/";
var loadGUIFile = func(file) io.load_nasal(gui_dir ~ file, "canvas");
var loadWidget = func(name) loadGUIFile("widgets/" ~ name ~ ".nas");
+var loadDialog = func(name) loadGUIFile("dialogs/" ~ name ~ ".nas");
loadGUIFile("Config.nas");
loadGUIFile("Style.nas");
loadGUIFile("Widget.nas");
loadGUIFile("styles/DefaultStyle.nas");
loadWidget("Button");
+loadWidget("Label");
loadWidget("ScrollArea");
var style = DefaultStyle.new("AmbianceClassic");
@@ -24,23 +26,24 @@ var WindowButton = {
_name: name
};
m._focus_policy = m.NoFocus;
- m._setRoot( parent.createChild("image", "WindowButton-" ~ name) );
+ m._setView({_root: parent.createChild("image", "WindowButton-" ~ name)});
return m;
},
# protected:
_onStateChange: func
{
var file = style._dir_decoration ~ "/" ~ me._name;
- file ~= me._window._focused ? "_focused" : "_unfocused";
+ var window_focus = me._windowFocus();
+ file ~= window_focus ? "_focused" : "_unfocused";
- if( me._active )
+ if( me._down )
file ~= "_pressed";
else if( me._hover )
file ~= "_prelight";
- else if( me._window._focused )
+ else if( window_focus )
file ~= "_normal";
- me._root.set("src", file ~ ".png");
+ me._view._root.set("src", file ~ ".png");
}
};
@@ -53,6 +56,7 @@ var Window = {
var ghost = _newWindowGhost(id);
var m = {
parents: [Window, PropertyElement, ghost],
+ _ghost: ghost,
_node: props.wrapNode(ghost._node_ghost),
_focused: 0,
_focused_widget: nil,
@@ -80,7 +84,7 @@ var Window = {
if( me["_canvas"] != nil )
{
- var placements = me._canvas.texture.getChildren("placement");
+ var placements = me._canvas._node.getChildren("placement");
# Do not remove canvas if other placements exist
if( size(placements) > 1 )
foreach(var p; placements)
@@ -108,7 +112,7 @@ var Window = {
];
me._canvas = new({
- size: [2 * size[0], 2 * size[1]],
+ size: [size[0], size[1]],
view: size,
placement: {
type: "window",
@@ -124,7 +128,10 @@ var Window = {
"blend-destination-alpha": "one"
});
+ me._canvas._focused_widget = nil;
+ me._canvas.data("focused", me._focused);
me._canvas.addEventListener("mousedown", func me.raise());
+
return me._canvas;
},
# Set an existing canvas to be used for this Window
@@ -135,26 +142,30 @@ var Window = {
canvas_.addPlacement({type: "window", "id": me.get("id")});
me['_canvas'] = canvas_;
+ canvas_.data("focused", me._focused);
# prevent resizing if canvas is placed from somewhere else
me.onResize = nil;
},
# Get the displayed canvas
- getCanvas: func()
+ getCanvas: func(create = 0)
{
+ if( me['_canvas'] == nil and create )
+ me.createCanvas();
+
return me['_canvas'];
},
getCanvasDecoration: func()
{
return wrapCanvas(me._getCanvasDecoration());
},
- addWidget: func(w)
+ setLayout: func(l)
{
- append(me._widgets, w);
- w._window = me;
- if( size(me._widgets) == 2 )
- w.setFocus();
- w._onStateChange();
+ if( me['_canvas'] == nil )
+ me.createCanvas();
+
+ me._canvas.update(); # Ensure placement is applied
+ me._ghost.setLayout(l);
return me;
},
#
@@ -223,6 +234,8 @@ var Window = {
# protected:
_onStateChange: func
{
+ var event = canvas.CustomEvent.new("wm.focus-" ~ (me._focused ? "in" : "out"));
+
if( me._getCanvasDecoration() != nil )
{
# Stronger shadow for focused windows
@@ -233,10 +246,16 @@ var Window = {
me._title_bar_bg.set("fill", style.getColor("title" ~ suffix));
me._title.set( "fill", style.getColor("title-text" ~ suffix));
me._top_line.set( "stroke", style.getColor("title-highlight" ~ suffix));
+
+ me.getCanvasDecoration()
+ .data("focused", me._focused)
+ .dispatchEvent(event);
}
- foreach(var w; me._widgets)
- w._onStateChange();
+ if( me.getCanvas() != nil )
+ me.getCanvas()
+ .data("focused", me._focused)
+ .dispatchEvent(event);
},
# private:
_propCallback: func(child, mode)
@@ -387,8 +406,7 @@ var Window = {
var button_close = WindowButton.new(title_bar, "close")
.move(x, y);
- button_close.onClick = func me.del();
- me.addWidget(button_close);
+ button_close.listen("clicked", func me.del());
# title
me._title = title_bar.createChild("text", "title")
@@ -453,11 +471,10 @@ var initDemo = func
{
debug.dump( props.wrapNode(event.target._node_ghost) );
});
- my_canvas.addEventListener("click", func
+ my_canvas.addEventListener("click", func(e)
{
var dlg = canvas.Window.new([400,300], "dialog")
.set("resize", 1);
-
var my_canvas = dlg.createCanvas()
.set("background", style.getColor("bg_color"));
@@ -466,8 +483,8 @@ var initDemo = func
my_canvas.addEventListener("drag", func(e) { printf("drag: screen(%.1f|%.1f) client(%.1f|%.1f) local(%.1f|%.1f) delta(%.1f|%.1f)", e.screenX, e.screenY, e.clientX, e.clientY, e.localX, e.localY, e.deltaX, e.deltaY); });
my_canvas.addEventListener("wheel", func(e) { printf("wheel: screen(%.1f|%.1f) client(%.1f|%.1f) %.1f", e.screenX, e.screenY, e.clientX, e.clientY, e.deltaY); });
var root = my_canvas.createGroup();
-root.createChild("image")
- .set("src", "http://wiki.flightgear.org/skins/common/images/icons-fg-135.png");
+ root.createChild("image")
+ .set("src", "http://wiki.flightgear.org/skins/common/images/icons-fg-135.png");
var text =
root.createChild("text")
.setText("This could be used for building an 'Aircraft Help' dialog.\nYou can also #use it to play around with the new Canvas system :). β")
@@ -492,22 +509,25 @@ root.createChild("image")
text.addEventListener("mousemove", func(e) { printf("move: screen(%.1f|%.1f) client(%.1f|%.1f) local(%.1f|%.1f) delta(%.1f|%.1f)", e.screenX, e.screenY, e.clientX, e.clientY, e.localX, e.localY, e.deltaX, e.deltaY); });
text.set("fill", style.getColor("text_color"));
- dlg.addWidget( gui.widgets.Button.new(root, style, {size: [64, 26]})
- .setText("Ok")
- .move(20, 250) );
- dlg.addWidget( gui.widgets.Button.new(root, style, {size: [64, 26]})
- .setText("Apply")
- .move(100, 250) );
- dlg.addWidget( gui.widgets.Button.new(root, style, {size: [64, 64]})
- .setText("Cancel")
- .move(180, 200) );
+ gui.widgets.Button.new(root, style, {})
+ .setText("Ok")
+ .move(20, 250)
+ .setSize(64, 26);
+ gui.widgets.Button.new(root, style, {})
+ .setText("Apply")
+ .move(100, 250)
+ .setSize(64, 26);
+ gui.widgets.Button.new(root, style, {})
+ .setText("Cancel")
+ .move(180, 200)
+ .setSize(64, 64);
- var scroll = gui.widgets.ScrollArea.new(root, style, {size: [96, 128]})
- .move(20, 100);
+ var scroll = gui.widgets.ScrollArea.new(root, style, {})
+ .move(20, 100)
+ .setSize(96, 128);
var txt = scroll.getContent().createChild("text")
.set("text", "01hallo\n02asdasd\n03\n04\n05asdasd06\n07ß\n08\n09asdasd\n10\n11");
scroll.update();
- dlg.addWidget(scroll);
txt.addEventListener("mouseover", func txt.set("fill", "red"));
txt.addEventListener("mouseout", func txt.set("fill", "green"));
diff --git a/Nasal/canvas/gui/Config.nas b/Nasal/canvas/gui/Config.nas
index b8bdfe183..24f516a00 100644
--- a/Nasal/canvas/gui/Config.nas
+++ b/Nasal/canvas/gui/Config.nas
@@ -17,5 +17,10 @@ var Config = {
return val;
return default;
+ },
+ set: func(key, value)
+ {
+ me._cfg[key] = value;
+ return me;
}
};
diff --git a/Nasal/canvas/gui/Widget.nas b/Nasal/canvas/gui/Widget.nas
index ec3f35e06..44f8c8b8a 100644
--- a/Nasal/canvas/gui/Widget.nas
+++ b/Nasal/canvas/gui/Widget.nas
@@ -8,19 +8,50 @@ gui.Widget = {
#
new: func(derived)
{
- return {
+ var m = canvas.Widget.new({
parents: [derived, gui.Widget],
_focused: 0,
_focus_policy: gui.Widget.NoFocus,
_hover: 0,
- _root: nil,
- _size: [64, 64]
- };
+ _enabled: 1,
+ _view: nil,
+ _pos: [0, 0],
+ _size: [32, 32]
+ });
+
+ m.setMinimumSize([16, 16]);
+ m.setSizeHint([32, 32]);
+ m.setMaximumSize([m._MAX_SIZE, m._MAX_SIZE]);
+
+ m.setSetGeometryFunc(m._impl.setGeometry);
+
+ return m;
+ },
+ setFixedSize: func(x, y)
+ {
+ me.setMinimumSize([x, y]);
+ me.setSizeHint([x, y]);
+ me.setMaximumSize([x, y]);
+ },
+ setEnabled: func(enabled)
+ {
+ if( me._enabled == enabled )
+ return me;
+
+ me._enabled = enabled;
+ me.clearFocus();
+
+ me._onStateChange();
+ return me;
},
# Move the widget to the given position (relative to its parent)
move: func(x, y)
{
- me._root.setTranslation(x, y);
+ me._pos[0] = x;
+ me._pos[1] = y;
+
+ if( me._view != nil )
+ me._view._root.setTranslation(x, y);
return me;
},
#
@@ -28,6 +59,20 @@ gui.Widget = {
{
me._size[0] = w;
me._size[1] = h;
+
+ if( me._view != nil )
+ me._view.setSize(me, w, h);
+ return me;
+ },
+ # Set geometry of widget (usually used by layouting system)
+ #
+ # @param geom [, , , ]
+ setGeometry: func(geom)
+ {
+ me.move(geom[0], geom[1]);
+ me.setSize(geom[2], geom[3]);
+ me._onStateChange();
+ return me;
},
#
setFocus: func
@@ -35,13 +80,17 @@ gui.Widget = {
if( me._focused )
return me;
- if( me._window._focused_widget != nil )
- me._window._focused_widget.clearFocus();
+ var canvas = me.getCanvas();
+ if( canvas._focused_widget != nil )
+ canvas._focused_widget.clearFocus();
+
+ if( !me._enabled )
+ return me;
me._focused = 1;
- me._window._focused_widget = me;
+ canvas._focused_widget = me;
- me.onFocusIn();
+ me._trigger("focus-in");
me._onStateChange();
return me;
@@ -53,38 +102,61 @@ gui.Widget = {
return me;
me._focused = 0;
- me._window._focused_widget = nil;
+ me.getCanvas()._focused_widget = nil;
- me.onFocusOut();
+ me._trigger("focus-out");
me._onStateChange();
return me;
},
- onFocusIn: func {},
- onFocusOut: func {},
- onMouseEnter: func {},
- onMouseLeave: func {},
-# protected:
- _onStateChange: func {},
- _setRoot: func(el)
+ listen: func(type, cb)
{
- me._root = el;
- el.addEventListener("mouseenter", func {
+ me._view._root.addEventListener("cb." ~ type, cb);
+ return me;
+ },
+# protected:
+ _MAX_SIZE: 32768, # size for "no size-limit"
+ _onStateChange: func {},
+ _setView: func(view)
+ {
+ me._view = view;
+
+ var root = view._root;
+ var canvas = root.getCanvas();
+ me.setCanvas(canvas);
+
+ canvas.addEventListener("wm.focus-in", func {
+ me._onStateChange();
+ });
+ canvas.addEventListener("wm.focus-out", func {
+ me._onStateChange();
+ });
+
+ root.addEventListener("mouseenter", func {
me._hover = 1;
- me.onMouseEnter();
+ me._trigger("mouse-enter");
me._onStateChange();
});
- el.addEventListener("mousedown", func {
+ root.addEventListener("mousedown", func {
if( bits.test(me._focus_policy, me.ClickFocus / 2) )
- {
me.setFocus();
- me._window.setFocus();
- }
});
- el.addEventListener("mouseleave", func {
+ root.addEventListener("mouseleave", func {
me._hover = 0;
- me.onMouseLeave();
+ me._trigger("mouse-leave");
me._onStateChange();
});
+ },
+ _trigger: func(type, data = nil)
+ {
+ me._view._root.dispatchEvent(
+ canvas.CustomEvent.new("cb." ~ type, {detail: data})
+ );
+ return me;
+ },
+ _windowFocus: func
+ {
+ var canvas = me.getCanvas();
+ return canvas != nil ? canvas.data("focused") : 0;
}
};
diff --git a/Nasal/canvas/gui/dialogs/AircraftCenter.nas b/Nasal/canvas/gui/dialogs/AircraftCenter.nas
new file mode 100644
index 000000000..875db5d25
--- /dev/null
+++ b/Nasal/canvas/gui/dialogs/AircraftCenter.nas
@@ -0,0 +1,124 @@
+var AircraftCenter = {
+ show: func
+ {
+ var dlg = canvas.Window.new([550,500], "dialog")
+ .set("title", "Aircraft Center")
+ .set("resize", 1);
+ dlg.getCanvas(1)
+ .set("background", canvas.style.getColor("bg_color"));
+ var root = dlg.getCanvas().createGroup();
+
+ var vbox = VBoxLayout.new();
+ dlg.setLayout(vbox);
+
+ var packages = pkg.root.search({
+ 'rating-FDM': 2,
+ 'rating-cockpit': 2,
+ 'rating-model': 2,
+ 'rating-systems': 1
+ });
+
+ var info_text =
+ "Install/remove aircrafts (Showing " ~ size(packages) ~ " aircrafts)";
+
+ vbox.addItem(
+ gui.widgets.Label.new(root, style, {wordWrap: 1})
+ .setText(info_text)
+ );
+
+ var scroll = gui.widgets.ScrollArea.new(root, style, {size: [96, 128]})
+ .move(20, 100);
+ vbox.addItem(scroll, 1);
+
+ var content = scroll.getContent()
+ .set("font", "LiberationFonts/LiberationSans-Bold.ttf")
+ .set("character-size", 16)
+ .set("alignment", "left-center");
+
+ var list = VBoxLayout.new();
+ scroll.setLayout(list);
+
+ foreach(var package; packages)
+ {
+ var row = HBoxLayout.new();
+ list.addItem(row);
+
+ var image_label = gui.widgets.Label.new(content, style, {});
+ image_label.setFixedSize(171, 128);
+ row.addItem(image_label);
+
+ var thumbs = package.thumbnails;
+ if( size(thumbs) > 0 )
+ image_label.setImage(thumbs[0]);
+ else
+ image_label.setText("No thumbnail available");
+
+ var detail_box = VBoxLayout.new();
+ row.addItem(detail_box);
+ row.addSpacing(5);
+
+ var title_box = HBoxLayout.new();
+ detail_box.addItem(title_box);
+
+ title_box.addItem(
+ gui.widgets.Label.new(content, style, {})
+ .setText(package.name)
+ );
+ title_box.addStretch(1);
+ (func {
+ var p = package;
+ var b = gui.widgets.Button.new(content, style, {});
+ var installed = p.installed;
+ var install_text = sprintf("Install (%.1fMB)", p.fileSize/1024/1024);
+
+ if( installed )
+ b.setText("Remove");
+ else
+ b.setText(install_text);
+
+ b.listen("clicked", func
+ {
+ if( installed )
+ {
+ p.uninstall();
+ installed = 0;
+ b.setText(install_text);
+ }
+ else
+ {
+ b.setEnabled(0)
+ .setText("Wait...");
+ p.install()
+ .progress(func(i, cur, total)
+ b.setText(sprintf("%.1f%%", (cur / total) * 100))
+ )
+ .fail(func b.setText('Failed'))
+ .done(func {
+ installed = 1;
+ b.setText("Remove")
+ .setEnabled(1);
+ });
+ }
+ });
+
+ title_box.addItem(b);
+ })();
+
+ var description = package.description;
+ if( size(description) <= 0 )
+ {
+ foreach(var cat; ["FDM", "systems", "cockpit", "model"])
+ description ~= cat ~ ": " ~ package.lprop("rating/" ~ cat) ~ "\n";
+ }
+
+ detail_box.addItem(
+ gui.widgets.Label.new(content, style, {wordWrap: 1})
+ .setText(description)
+ );
+
+ detail_box.addStretch(1);
+ }
+ }
+};
+
+AircraftCenter.show();
diff --git a/Nasal/canvas/gui/styles/DefaultStyle.nas b/Nasal/canvas/gui/styles/DefaultStyle.nas
index ea720ff92..ec177e4a0 100644
--- a/Nasal/canvas/gui/styles/DefaultStyle.nas
+++ b/Nasal/canvas/gui/styles/DefaultStyle.nas
@@ -27,32 +27,40 @@ DefaultStyle.widgets.button = {
padding: [6, 8, 6, 8],
new: func(parent, cfg)
{
- me.element = parent.createChild("group", "button");
- me.size = cfg.get("size", [26, 26]);
-
+ me._root = parent.createChild("group", "button");
me._bg =
- me.element.rect( 3,
- 3,
- me.size[0] - 6,
- me.size[1] - 6,
- {"border-radius": 5} );
+ me._root.createChild("path");
me._border =
- me.element.createChild("image", "button")
- .set("slice", "10 12") #"7")
- .setSize(me.size);
+ me._root.createChild("image", "button")
+ .set("slice", "10 12"); #"7")
me._label =
- me.element.createChild("text")
- .setFont("LiberationFonts/LiberationSans-Regular.ttf")
- .set("character-size", 14)
- .set("alignment", "center-baseline");
+ me._root.createChild("text")
+ .set("font", "LiberationFonts/LiberationSans-Regular.ttf")
+ .set("character-size", 14)
+ .set("alignment", "center-baseline");
},
- setText: func(text)
+ setSize: func(model, w, h)
+ {
+ me._bg.reset()
+ .rect(3, 3, w - 6, h - 6, {"border-radius": 5});
+ me._border.setSize(w, h);
+ },
+ setText: func(model, text)
{
me._label.set("text", text);
+
+ # TODO get real font metrics
+ model.setMinimumSize([size(text) * 5 + 6, 16]);
+ model.setSizeHint([size(text) * 8 + 16, 32]);
+
+ return me;
},
- update: func(active, focused, hover, backdrop)
+ update: func(model)
{
+ var backdrop = !model._windowFocus();
+ var (w, h) = model._size;
var file = me._style._dir_widgets ~ "/";
+
if( backdrop )
{
file ~= "backdrop-";
@@ -62,42 +70,159 @@ DefaultStyle.widgets.button = {
me._label.set("fill", me._style.getColor("fg_color"));
file ~= "button";
- if( active )
+ if( model._down )
{
file ~= "-active";
- me._label.setTranslation(me.size[0] / 2 + 1, me.size[1] / 2 + 6);
+ me._label.setTranslation(w / 2 + 1, h / 2 + 6);
}
else
- me._label.setTranslation(me.size[0] / 2, me.size[1] / 2 + 5);
+ me._label.setTranslation(w / 2, h / 2 + 5);
- if( focused and !backdrop )
- file ~= "-focused";
-
- if( hover and !active )
+ if( model._enabled )
{
- file ~= "-hover";
- me._bg.set("fill", me._style.getColor("button_bg_color_hover"));
+ if( model._focused and !backdrop )
+ file ~= "-focused";
+
+ if( model._hover and !model._down )
+ {
+ file ~= "-hover";
+ me._bg.set("fill", me._style.getColor("button_bg_color_hover"));
+ }
+ else
+ me._bg.set("fill", me._style.getColor("button_bg_color"));
}
else
- me._bg.set("fill", me._style.getColor("button_bg_color"));
+ {
+ file ~= "-disabled";
+ me._bg.set("fill", me._style.getColor("button_bg_color_insensitive"));
+ }
me._border.set("src", file ~ ".png");
}
};
+# A label
+DefaultStyle.widgets.label = {
+ new: func(parent, cfg)
+ {
+ me._root = parent.createChild("group", "label");
+ },
+ setSize: func(model, w, h)
+ {
+ if( me['_bg'] != nil )
+ me._bg.reset().rect(0, 0, w, h);
+ if( me['_img'] != nil )
+ me._img.set("size[0]", w)
+ .set("size[1]", h);
+ if( me['_text'] != nil )
+ {
+ # TODO different alignment
+ me._text.setTranslation(2, 2 + h / 2);
+ me._text.set(
+ "max-width",
+ model._cfg.get("wordWrap", 0) ? (w - 4) : 0
+ );
+ }
+ return me;
+ },
+ setText: func(model, text)
+ {
+ if( text == nil or size(text) == 0 )
+ {
+ model.setHeightForWidthFunc(nil);
+ return me._deleteElement('text');
+ }
+
+ me._createElement("text", "text")
+ .set("text", text)
+ .set("fill", "black");
+
+ if( model._cfg.get("wordWrap", 0) )
+ {
+ var m = me;
+ model.setHeightForWidthFunc(func(w) m.heightForWidth(w));
+ }
+ else
+ {
+ # TODO get real font metrics
+ model.setMinimumSize([size(text) * 5 + 4, 14]);
+ model.setSizeHint([size(text) * 5 + 14, 24]);
+ }
+
+ return me;
+ },
+ setImage: func(model, img)
+ {
+ if( img == nil or size(img) == 0 )
+ return me._deleteElement('img');
+
+ me._createElement("img", "image")
+ .set("src", img)
+ .set("preserveAspectRatio", "xMidYMid slice");
+
+ return me;
+ },
+ # @param bg CSS color or 'none'
+ setBackground: func(model, bg)
+ {
+ if( bg == nil or bg == "none" )
+ return me._deleteElement("bg");
+
+ me._createElement("bg", "path")
+ .set("fill", bg);
+
+ me.setSize(model, model._size[0], model._size[1]);
+ return me;
+ },
+ heightForWidth: func(w)
+ {
+ if( me['_text'] == nil )
+ return -1;
+
+ return math.max(14, me._text.heightForWidth(w - 4));
+ },
+# protected:
+ _createElement: func(name, type)
+ {
+ var mem = '_' ~ name;
+ if( me[ mem ] == nil )
+ {
+ me[ mem ] = me._root.createChild(type, "label-" ~ name);
+
+ if( type == "text" )
+ {
+ me[ mem ].set("font", "LiberationFonts/LiberationSans-Regular.ttf")
+ .set("character-size", 14)
+ .set("alignment", "left-center");
+ }
+ }
+ return me[ mem ];
+ },
+ _deleteElement: func(name)
+ {
+ name = '_' ~ name;
+ if( me[ name ] != nil )
+ {
+ me[ name ].del();
+ me[ name ] = nil;
+ }
+ return me;
+ }
+};
+
# ScrollArea
DefaultStyle.widgets["scroll-area"] = {
new: func(parent, cfg)
{
- me.element = parent.createChild("group", "scroll-area");
+ me._root = parent.createChild("group", "scroll-area");
- me._bg = me.element.createChild("path", "background")
- .set("fill", "#e0e0e0");
- me.content = me.element.createChild("group", "scroll-content")
- .set("clip-frame", Element.PARENT);
- me.vert = me._newScroll(me.element, "vert");
- me.horiz = me._newScroll(me.element, "horiz");
+ me._bg = me._root.createChild("path", "background")
+ .set("fill", "#e0e0e0");
+ me.content = me._root.createChild("group", "scroll-content")
+ .set("clip-frame", Element.PARENT);
+ me.vert = me._newScroll(me._root, "vert");
+ me.horiz = me._newScroll(me._root, "horiz");
},
setColorBackground: func
{
@@ -105,25 +230,25 @@ DefaultStyle.widgets["scroll-area"] = {
var arg = arg[0];
me._bg.setColorFill(arg);
},
- update: func(widget)
+ update: func(model)
{
me.horiz.reset();
- if( widget._max_scroll[0] > 1 )
+ if( model._max_scroll[0] > 1 )
# only show scroll bar if horizontally scrollable
- me.horiz.moveTo(widget._pos[0], widget._size[1] - 2)
- .horiz(widget._size[0] - widget._max_scroll[0]);
+ me.horiz.moveTo(model._scroll_pos[0], model._size[1] - 2)
+ .horiz(model._size[0] - model._max_scroll[0]);
me.vert.reset();
- if( widget._max_scroll[1] > 1 )
+ if( model._max_scroll[1] > 1 )
# only show scroll bar if vertically scrollable
- me.vert.moveTo(widget._size[0] - 2, widget._pos[1])
- .vert(widget._size[1] - widget._max_scroll[1]);
+ me.vert.moveTo(model._size[0] - 2, model._scroll_pos[1])
+ .vert(model._size[1] - model._max_scroll[1]);
me._bg.reset()
- .rect(0, 0, widget._size[0], widget._size[1]);
+ .rect(0, 0, model._size[0], model._size[1]);
me.content.set(
"clip",
- "rect(0, " ~ widget._size[0] ~ ", " ~ widget._size[1] ~ ", 0)"
+ "rect(0, " ~ model._size[0] ~ ", " ~ model._size[1] ~ ", 0)"
);
},
# private:
diff --git a/Nasal/canvas/gui/widgets/Button.nas b/Nasal/canvas/gui/widgets/Button.nas
index 1f23d04bf..769ec43ac 100644
--- a/Nasal/canvas/gui/widgets/Button.nas
+++ b/Nasal/canvas/gui/widgets/Button.nas
@@ -4,59 +4,71 @@ gui.widgets.Button = {
var cfg = Config.new(cfg);
var m = gui.Widget.new(gui.widgets.Button);
m._focus_policy = m.StrongFocus;
- m._active = 0;
+ m._down = 0;
+ m._checkable = 0;
m._flat = cfg.get("flat", 0);
if( style != nil and !m._flat )
- {
- m._button = style.createWidget(parent, "button", cfg);
- m._setRoot(m._button.element);
- }
+ m._setView( style.createWidget(parent, "button", cfg) );
return m;
},
setText: func(text)
{
- me._button.setText(text);
+ me._view.setText(me, text);
return me;
},
- setActive: func
+ setCheckable: func(checkable)
{
- if( me._active )
+ me._checkable = checkable;
+ return me;
+ },
+ setChecked: func(checked = 1)
+ {
+ if( !me._checkable or me._down == checked )
return me;
- me._active = 1;
+ me._trigger("clicked", {checked: checked});
+ me._trigger("toggled", {checked: checked});
+
+ me._down = checked;
me._onStateChange();
return me;
},
- clearActive: func
+ setDown: func(down = 1)
{
- if( !me._active )
+ if( me._checkable or me._down == down )
return me;
- me._active = 0;
+ me._down = down;
me._onStateChange();
return me;
},
- onClick: func {},
+ toggle: func
+ {
+ if( !me._checkable )
+ me._trigger("clicked", {checked: 0});
+ else
+ me.setChecked(!me._down);
+
+ return me;
+ },
# protected:
_onStateChange: func
{
- if( me._button != nil )
- me._button.update(me._active, me._focused, me._hover, !me._window._focused);
+ if( me._view != nil )
+ me._view.update(me);
},
- _setRoot: func(el)
+ _setView: func(view)
{
- el.addEventListener("mousedown", func me.setActive());
- el.addEventListener("mouseup", func me.clearActive());
+ var el = view._root;
+ el.addEventListener("mousedown", func if( me._enabled ) me.setDown(1));
+ el.addEventListener("mouseup", func if( me._enabled ) me.setDown(0));
+ el.addEventListener("click", func if( me._enabled ) me.toggle());
- # Use 'call' to ensure 'me' is not set and can be used in the closure of
- # custom callbacks. TODO pass 'me' as argument?
- el.addEventListener("click", func call(me.onClick));
-
- el.addEventListener("mouseleave",func me.clearActive());
+ el.addEventListener("mouseleave",func me.setDown(0));
el.addEventListener("drag", func(e) e.stopPropagation());
- call(gui.Widget._setRoot, [el], me);
+ call(gui.Widget._setView, [view], me);
}
};
diff --git a/Nasal/canvas/gui/widgets/Label.nas b/Nasal/canvas/gui/widgets/Label.nas
new file mode 100644
index 000000000..a648e1bec
--- /dev/null
+++ b/Nasal/canvas/gui/widgets/Label.nas
@@ -0,0 +1,26 @@
+gui.widgets.Label = {
+ new: func(parent, style, cfg)
+ {
+ var m = gui.Widget.new(gui.widgets.Label);
+ m._cfg = Config.new(cfg);
+ m._focus_policy = m.NoFocus;
+ m._setView( style.createWidget(parent, "label", m._cfg) );
+
+ return m;
+ },
+ setText: func(text)
+ {
+ me._view.setText(me, text);
+ return me;
+ },
+ setImage: func(img)
+ {
+ me._view.setImage(me, img);
+ return me;
+ },
+ setBackground: func(bg)
+ {
+ me._view.setBackground(me, bg);
+ return me;
+ }
+};
diff --git a/Nasal/canvas/gui/widgets/ScrollArea.nas b/Nasal/canvas/gui/widgets/ScrollArea.nas
index 4be78e877..191bc1c4c 100644
--- a/Nasal/canvas/gui/widgets/ScrollArea.nas
+++ b/Nasal/canvas/gui/widgets/ScrollArea.nas
@@ -3,38 +3,28 @@ gui.widgets.ScrollArea = {
{
var cfg = Config.new(cfg);
var m = gui.Widget.new(gui.widgets.ScrollArea);
- m._focus_policy = m.StrongFocus;
- m._active = 0;
- m._pos = [0,0];
- m._size = cfg.get("size", m._size);
+ m._focus_policy = m.NoFocus;
+ m._scroll_pos = [0,0];
m._max_scroll = [0, 0];
m._content_size = [0, 0];
+ m._layout = nil;
if( style != nil )
- {
- m._scroll = style.createWidget(parent, "scroll-area", cfg);
- m._setRoot(m._scroll.element);
+ m._setView( style.createWidget(parent, "scroll-area", cfg) );
- m._scroll.vert.addEventListener("mousedown", func(e) m._dragStart(e));
- m._scroll.horiz.addEventListener("mousedown", func(e) m._dragStart(e));
-
- m._scroll.vert.addEventListener
- (
- "drag",
- func(e) m.moveTo(m._pos[0], m._drag_offsetY + e.clientY)
- );
- m._scroll.horiz.addEventListener
- (
- "drag",
- func(e) m.moveTo(m._drag_offsetX + e.clientX, m._pos[1])
- );
- }
+ m.setMinimumSize([32, 32]);
return m;
},
+ setLayout: func(l)
+ {
+ me._layout = l;
+ l.setParent(me);
+ return me.update();
+ },
getContent: func()
{
- return me._scroll.content;
+ return me._view.content;
},
# Set the background color for the content area.
#
@@ -43,7 +33,7 @@ gui.widgets.ScrollArea = {
{
if( size(arg) == 1 )
var arg = arg[0];
- me._scroll.setColorBackground(arg);
+ me._view.setColorBackground(arg);
},
# Reset the size of the content area, e.g. on window resize.
#
@@ -56,7 +46,7 @@ gui.widgets.ScrollArea = {
me._size = [x,y];
me.update();
},
- # Move the scrollable area to the coordinates x,y (or as far as possible) and
+ # Move the scrollbars to the coordinates x,y (or as far as possible) and
# update.
#
# @param x The x coordinate (positive is right)
@@ -65,15 +55,15 @@ gui.widgets.ScrollArea = {
{
var bb = me._updateBB();
- me._pos[0] = math.max(0, math.min(x, me._max_scroll[0]));
- me._pos[1] = math.max(0, math.min(y, me._max_scroll[1]));
+ me._scroll_pos[0] = math.max(0, math.min(x, me._max_scroll[0]));
+ me._scroll_pos[1] = math.max(0, math.min(y, me._max_scroll[1]));
me.update(bb);
},
# Move the scrollable area to the top-most position and update.
moveToTop: func()
{
- me._pos[1] = 0;
+ me._scroll_pos[1] = 0;
me.update();
},
@@ -82,14 +72,14 @@ gui.widgets.ScrollArea = {
{
var bb = me._updateBB();
- me._pos[1] = me._max_scroll[1];
+ me._scroll_pos[1] = me._max_scroll[1];
me.update(bb);
},
# Move the scrollable area to the left-most position and update.
moveToLeft: func()
{
- me._pos[0] = 0;
+ me._scroll_pos[0] = 0;
me.update();
},
@@ -98,10 +88,32 @@ gui.widgets.ScrollArea = {
{
var bb = me._updateBB();
- me._pos[0] = me._max_scroll[0];
+ me._scroll_pos[0] = me._max_scroll[0];
me.update(bb);
},
+ # Get position of scrollable content
+ getContentPosition: func()
+ {
+ var pos = [0, 0];
+
+ if( me._max_scroll[0] > 1 )
+ pos[0] = (me._scroll_pos[0] / me._max_scroll[0])
+ * (me._content_size[0] - me._size[0]);
+ if( me._max_scroll[1] > 1 )
+ pos[1] = (me._scroll_pos[1] / me._max_scroll[1])
+ * (me._content_size[1] - me._size[1]);
+
+ return pos;
+ },
+ # Move content to the given position
+ moveContentTo: func(x, y)
+ {
+ var scroll_x = x / (me._content_size[0] - me._size[0]) * me._max_scroll[0];
+ var scroll_y = y / (me._content_size[1] - me._size[1]) * me._max_scroll[1];
+
+ return me.moveTo(scroll_x, scroll_y);
+ },
# Update scroll bar and content area.
#
# Needs to be called when the size of the content changes.
@@ -110,55 +122,136 @@ gui.widgets.ScrollArea = {
if (bb == nil) bb = me._updateBB();
if (bb == nil) return me;
- var offset = [ me._content_offset[0],
- me._content_offset[1] ];
-
- if( me._max_scroll[0] > 1 )
- offset[0] -= (me._pos[0] / me._max_scroll[0])
- * (me._content_size[0] - me._size[0]);
- if( me._max_scroll[1] > 1 )
- offset[1] -= (me._pos[1] / me._max_scroll[1])
- * (me._content_size[1] - me._size[1]);
-
+ var pos = me.getContentPosition();
+ var offset = [ me._content_offset[0] - pos[0],
+ me._content_offset[1] - pos[1] ];
me.getContent().setTranslation(offset);
- me._scroll.update(me);
+ me._view.update(me);
me.getContent().update();
return me;
},
# protected:
- _setRoot: func(el)
+ _setView: func(view)
{
- el.addEventListener("wheel", func(e) me.moveTo(me._pos[0], me._pos[1] - e.deltaY));
+ view.vert.addEventListener("mousedown", func(e) me._dragStart(e));
+ view.horiz.addEventListener("mousedown", func(e) me._dragStart(e));
+ view._root.addEventListener("mousedown", func(e)
+ {
+ var pos = me.getContentPosition();
+ me._drag_offsetX = pos[0] + e.clientX;
+ me._drag_offsetY = pos[1] + e.clientY;
+ });
- call(gui.Widget._setRoot, [el], me);
+ view.vert.addEventListener
+ (
+ "drag",
+ func(e)
+ {
+ if( !me._enabled )
+ return;
+
+ me.moveTo(me._scroll_pos[0], me._drag_offsetY + e.clientY);
+ e.stopPropagation();
+ }
+ );
+ view.horiz.addEventListener
+ (
+ "drag",
+ func(e)
+ {
+ if( !me._enabled )
+ return;
+
+ me.moveTo(me._drag_offsetX + e.clientX, me._scroll_pos[1]);
+ e.stopPropagation();
+ }
+ );
+
+ view._root.addEventListener
+ (
+ "drag",
+ func(e)
+ {
+ if( !me._enabled )
+ return;
+
+ me.moveContentTo( me._drag_offsetX - e.clientX,
+ me._drag_offsetY - e.clientY );
+ e.stopPropagation();
+ }
+ );
+ view._root.addEventListener
+ (
+ "wheel",
+ func(e)
+ {
+ if( !me._enabled )
+ return;
+
+ me.moveTo(me._scroll_pos[0], me._scroll_pos[1] - e.deltaY);
+ e.stopPropagation();
+ }
+ );
+
+ call(gui.Widget._setView, [view], me);
},
_dragStart: func(e)
{
- me._drag_offsetX = me._pos[0] - e.clientX;
- me._drag_offsetY = me._pos[1] - e.clientY;
+ me._drag_offsetX = me._scroll_pos[0] - e.clientX;
+ me._drag_offsetY = me._scroll_pos[1] - e.clientY;
+ e.stopPropagation();
},
- _updateBB: func() {
+ _updateBB: func()
+ {
# TODO only update on content resize
- var bb = me.getContent().getTightBoundingBox();
+ if( me._layout == nil )
+ {
+ var bb = me.getContent().getTightBoundingBox();
- if( bb[2] < bb[0] or bb[3] < bb[1] )
- return nil;
- var w = bb[2] - bb[0];
- var h = bb[3] - bb[1];
+ if( bb[2] < bb[0] or bb[3] < bb[1] )
+ return nil;
+ var w = bb[2] - bb[0];
+ var h = bb[3] - bb[1];
+
+ var cur_offset = me.getContent().getTranslation();
+ me._content_offset = [cur_offset[0] - bb[0], cur_offset[1] - bb[1]];
+ }
+ else
+ {
+ var min_size = me._layout.minimumSize();
+ var max_size = me._layout.maximumSize();
+ var size_hint = me._layout.sizeHint();
+ var w = math.min(max_size[0], math.max(size_hint[0], me._size[0]));
+ var h = math.max(
+ math.min(max_size[1], math.max(size_hint[1], me._size[1])),
+ me._layout.heightForWidth(w)
+ );
+
+ me._layout.setGeometry([0, 0, w, h]);
+
+ # Layout always has the origin at (0, 0)
+ me._content_offset = [0, 0];
+ }
if( w > me._size[0] )
- me._max_scroll[0] = me._size[0] * (1 - me._size[0] / w);
- else me._max_scroll[0] = 0;
+ {
+ var scroller_size = math.max(12, me._size[0] * (me._size[0] / w));
+ me._max_scroll[0] = me._size[0] - scroller_size;
+ }
+ else
+ me._max_scroll[0] = 0;
+
if( h > me._size[1] )
- me._max_scroll[1] = me._size[1] * (1 - me._size[1] / h);
- else me._max_scroll[1] = 0;
+ {
+ var scroller_size = math.max(12, me._size[1] * (me._size[1] / h));
+ me._max_scroll[1] = me._size[1] - scroller_size;
+ }
+ else
+ me._max_scroll[1] = 0;
me._content_size[0] = w;
me._content_size[1] = h;
-
- var cur_offset = me.getContent().getTranslation();
- me._content_offset = [cur_offset[0] - bb[0], cur_offset[1] - bb[1]];
- },
+ }
};
diff --git a/Nasal/canvas/map/ALT-profile.lcontroller b/Nasal/canvas/map/ALT-profile.lcontroller
new file mode 100644
index 000000000..47446bcae
--- /dev/null
+++ b/Nasal/canvas/map/ALT-profile.lcontroller
@@ -0,0 +1,46 @@
+# See: http://wiki.flightgear.org/MapStructure
+# Class things:
+var name = 'ALT-profile';
+var parents = [SymbolLayer.Controller];
+var __self__ = caller(0)[0];
+SymbolLayer.Controller.add(name, __self__);
+SymbolLayer.add(name, {
+ parents: [MultiSymbolLayer],
+ type: name, # Symbol type
+ df_controller: __self__, # controller to use by default -- this one
+ df_options: { # default configuration options
+ active_node: "/autopilot/route-manager/active",
+ vnav_node: "/autopilot/route-manager/vnav/",
+ types: ["tc", "td", "sc", "ed"],
+ }
+});
+var new = func(layer) {
+ var m = {
+ parents: [__self__],
+ layer: layer,
+ map: layer.map,
+ listeners: [],
+ };
+ layer.searcher._equals = func(a,b) a.getName() == b.getName();
+ append(m.listeners, setlistener(layer.options.active_node, func m.layer.update() ));
+ m.addVisibilityListener();
+
+ return m;
+};
+var del = func() {
+ foreach (var l; me.listeners)
+ removelistener(l);
+};
+
+var searchCmd = func {
+ var results = [];
+ var symNode = props.globals.getNode(me.layer.options.vnav_node);
+ if (symNode != nil)
+ foreach (var t; me.layer.options.types) {
+ var n = symNode.getNode(t);
+ if (n != nil)
+ append(results, n);
+ }
+ return results;
+}
+
diff --git a/Nasal/canvas/map/ALT-profile.symbol b/Nasal/canvas/map/ALT-profile.symbol
new file mode 100644
index 000000000..f9e64dd96
--- /dev/null
+++ b/Nasal/canvas/map/ALT-profile.symbol
@@ -0,0 +1,32 @@
+# See: http://wiki.flightgear.org/MapStructure
+# Class things:
+var name = 'ALT-profile';
+var parents = [DotSym];
+var __self__ = caller(0)[0];
+DotSym.makeinstance( name, __self__ );
+
+SymbolLayer.get(name).df_style = {
+ radius: 13,
+};
+
+var element_type = "group";
+
+var init = func {
+ var name = me.model.getName();
+ var disptext = chr(string.toupper(name[0]))~"/"~chr(string.toupper(name[1]));
+ var radius = me.style.radius;
+ me.element.createChild("path")
+ .setStrokeLineWidth(5)
+ .moveTo(-radius, 0)
+ .arcLargeCW(radius, radius, 0, 2 * radius, 0)
+ .arcLargeCW(radius, radius, 0, -2 * radius, 0)
+ .setColor(0.195,0.96,0.097);
+ me.element.createChild("text")
+ .setDrawMode( canvas.Text.TEXT )
+ .setText(disptext)
+ .setFont("LiberationFonts/LiberationSans-Regular.ttf")
+ .setFontSize(28)
+ .setTranslation(25,35)
+ .setColor(0.195,0.96,0.097);
+}
+
diff --git a/Nasal/canvas/map/APS.lcontroller b/Nasal/canvas/map/APS.lcontroller
index f39224be7..fb772e77b 100644
--- a/Nasal/canvas/map/APS.lcontroller
+++ b/Nasal/canvas/map/APS.lcontroller
@@ -5,23 +5,18 @@ var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
- parents: [SymbolLayer],
+ parents: [SingleSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
+ df_style: {},
});
+# N.B.: if used, this SymbolLayer should be updated every frame
+# by the Map Controller, or as often as the position is changed.
var new = func(layer) {
- layer.searcher._equals = func(a,b) {
- a == b;
- }
return {
parents: [__self__],
- map: layer.map,
+ _model: layer.map.getPosCoord(),
};
};
var del = func;
-var searchCmd = func {
- var c = me.map.getPosCoord();
- return [c];
-};
-
diff --git a/Nasal/canvas/map/APS.scontroller b/Nasal/canvas/map/APS.scontroller
deleted file mode 100644
index 733e26db7..000000000
--- a/Nasal/canvas/map/APS.scontroller
+++ /dev/null
@@ -1,9 +0,0 @@
-# See: http://wiki.flightgear.org/MapStructure
-# Class things:
-var name = 'APS';
-var parents = [Symbol.Controller];
-var __self__ = caller(0)[0];
-Symbol.Controller.add(name, __self__);
-Symbol.registry[ name ].df_controller = __self__;
-var new = func(model) ; # this controller doesn't need an instance
-
diff --git a/Nasal/canvas/map/APS.symbol b/Nasal/canvas/map/APS.symbol
index c54749973..e54f4639d 100644
--- a/Nasal/canvas/map/APS.symbol
+++ b/Nasal/canvas/map/APS.symbol
@@ -1,16 +1,19 @@
# See: http://wiki.flightgear.org/MapStructure
# Class things:
var name = 'APS';
-var parents = [DotSym];
+var parents = [SVGSymbol];
var __self__ = caller(0)[0];
DotSym.makeinstance( name, __self__ );
-var element_type = "group";
+var svg_path = "Nasal/canvas/map/Images/boeingAirplane.svg";
var element_id = "airplane";
-var init = func {
- canvas.parsesvg(me.element, "Nasal/canvas/map/boeingAirplane.svg");
- me.draw();
+# Rotate with the main aircraft.
+# Will have to be adapted if intended for use with other aircraft
+# (but one could simply copy the layer for that).
+var draw = func {
+ var rot = getprop("/orientation/heading-deg");
+ rot -= me.layer.map.getHdg();
+ me.element.setRotation(rot*D2R);
};
-var draw = func me.element.setRotation(me.layer.map.getHdg());
diff --git a/Nasal/canvas/map/APT.lcontroller b/Nasal/canvas/map/APT.lcontroller
index 643cdb484..dae7c5d65 100644
--- a/Nasal/canvas/map/APT.lcontroller
+++ b/Nasal/canvas/map/APT.lcontroller
@@ -5,9 +5,18 @@ var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
- parents: [SymbolLayer],
+ parents: [MultiSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
+ df_style: {
+ line_width: 3,
+ scale_factor: 1,
+ debug: 1,
+ color_default: [0,0.6,0.85],
+ label_font_color:[0,0.6,0.85],
+ label_font_size: 28,
+ },
+
});
var a_instance = nil;
var new = func(layer) {
@@ -17,7 +26,8 @@ var new = func(layer) {
map: layer.map,
listeners: [],
};
- __self__.a_instance = m;
+ m.addVisibilityListener();
+
return m;
};
var del = func() {
diff --git a/Nasal/canvas/map/APT.scontroller b/Nasal/canvas/map/APT.scontroller
deleted file mode 100644
index 4269dadbc..000000000
--- a/Nasal/canvas/map/APT.scontroller
+++ /dev/null
@@ -1,13 +0,0 @@
-# See: http://wiki.flightgear.org/MapStructure
-# Class things:
-var name = 'APT';
-var parents = [Symbol.Controller];
-var __self__ = caller(0)[0];
-Symbol.Controller.add(name, __self__);
-Symbol.registry[ name ].df_controller = __self__;
-var new = func(model) ; # this controller doesn't need an instance
-var LayerController = SymbolLayer.Controller.registry[ name ];
-var isActive = func(model) LayerController.a_instance.isActive(model);
-var query_range = func()
- die( name~".scontroller.query_range /MUST/ be provided by implementation" );
-
diff --git a/Nasal/canvas/map/APT.symbol b/Nasal/canvas/map/APT.symbol
index 751d159d7..e9c1fb1ff 100644
--- a/Nasal/canvas/map/APT.symbol
+++ b/Nasal/canvas/map/APT.symbol
@@ -6,47 +6,28 @@ var __self__ = caller(0)[0];
DotSym.makeinstance( name, __self__ );
var element_type = "group"; # we want a group, becomes "me.element"
-var icon_fix = nil;
-var text_fix = nil;
+var icon_apt = nil;
+var text_apt = nil;
# add the draw routine from airports-nd.draw here
-var draw = func {
- if (me.icon_fix != nil) return;
- var icon_apt = me.element.createChild("path", name ~ " icon" )
- .moveTo(-17,0)
- .arcSmallCW(17,17,0,34,0)
- .arcSmallCW(17,17,0,-34,0)
- .close()
- .setColor(0,0.6,0.85)
- .setStrokeLineWidth(3);
- var text_apt = me.element.createChild("text", name ~ " label")
- .setDrawMode( canvas.Text.TEXT )
- .setTranslation(17,35)
- .setText(me.model.id)
- .setFont("LiberationFonts/LiberationSans-Regular.ttf")
- .setColor(0,0.6,0.85)
- .setFontSize(28);
- #me.element.setGeoPosition(lat, lon)
- # .set("z-index",1); # FIXME: this needs to be configurable!!
-
-# disabled:
-if(0) {
- # the fix symbol
- me.icon_fix = me.element.createChild("path")
- .moveTo(-15,15)
- .lineTo(0,-15)
- .lineTo(15,15)
+var init = func {
+ var icon_apt = me.element.createChild("path", name ~ " icon" )
+ .moveTo(-17,0)
+ .arcSmallCW(17,17,0,34,0)
+ .arcSmallCW(17,17,0,-34,0)
.close()
- .setStrokeLineWidth(3)
- .setColor(0,0.6,0.85)
- .setScale(0.5,0.5); # FIXME: do proper LOD handling here - we need to scale according to current texture dimensions vs. original/design dimensions
- # the fix label
- me.text_fix = me.element.createChild("text")
+ .setColor(me.layer.style.color_default)
+ .setStrokeLineWidth(me.layer.style.line_width);
+ var text_apt = me.element.createChild("text", name ~ " label")
.setDrawMode( canvas.Text.TEXT )
+ .setTranslation(17,35)
.setText(me.model.id)
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
- .setFontSize(28)
- .setTranslation(5,25);
- }
-};
+ .setColor(me.layer.style.label_font_color)
+ .setFontSize(me.layer.style.label_font_size);
+
+ # FIXME: this applies scale to the whole group, better do this separately for each element?
+ me.element.setScale(me.layer.style.scale_factor);
+};
+var draw = func;
diff --git a/Nasal/canvas/map/DME.lcontroller b/Nasal/canvas/map/DME.lcontroller
index 0994a71b6..9898db9cf 100644
--- a/Nasal/canvas/map/DME.lcontroller
+++ b/Nasal/canvas/map/DME.lcontroller
@@ -5,7 +5,7 @@ var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
- parents: [SymbolLayer],
+ parents: [NavaidSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
df_style: {
@@ -25,33 +25,16 @@ var new = func(layer) {
listeners: [],
query_type:'dme',
};
- ##
- # default styling parameters - can be overridden via addLayer( style:{key:value, ...} )
-
- if (contains(m.layer,'style')) return m; # we already have a proper style
-
- # otherwise, set up a default style:
- m.layer.style={};
- m.layer.style.debug = 0; # HACK: setting this enables benchmarking and printlog statements
- m.layer.style.animation_test = 0;
-
- # these are used by the draw() routines, see DME.symbol
- m.layer.style.scale_factor = 1.0 ; # applied to the whole group for now
- m.layer.style.line_width = 3.0;
- m.layer.style.color_tuned = [0,1,0];
- m.layer.style.color_default = [0,0.6,0.85];
+ m.addVisibilityListener();
return m;
};
+
+## TODO: also move this to generator helper
var del = func() {
foreach (var l; me.listeners)
removelistener(l);
};
-var searchCmd = func {
- printlog(_MP_dbg_lvl, "Running query:", me.query_type);
- var range = me.map.getRange();
- if (range == nil) return;
- return positioned.findWithinRange(me.map.getPosCoord(), range, me.query_type);
-};
+var searchCmd = NavaidSymbolLayer.make(query:'dme');
diff --git a/Nasal/canvas/map/DME.scontroller b/Nasal/canvas/map/DME.scontroller
deleted file mode 100644
index a565d51b1..000000000
--- a/Nasal/canvas/map/DME.scontroller
+++ /dev/null
@@ -1,9 +0,0 @@
-# See: http://wiki.flightgear.org/MapStructure
-# Class things:
-var name = 'DME';
-var parents = [Symbol.Controller];
-var __self__ = caller(0)[0];
-Symbol.Controller.add(name, __self__);
-Symbol.registry[ name ].df_controller = __self__;
-var new = func(model, symbol) ; # this controller doesn't need an instance
-
diff --git a/Nasal/canvas/map/DME.symbol b/Nasal/canvas/map/DME.symbol
index 5e685a0ff..f552b5752 100644
--- a/Nasal/canvas/map/DME.symbol
+++ b/Nasal/canvas/map/DME.symbol
@@ -49,11 +49,6 @@ var del = func {
# var DMEIcon = StyleableElement.new( [{color:IconColor}, ] );
-###
-# helper to tell if the symbol is already initialized or not
-# TODO: encapsulate API-wise (this is a very common thing to do...)
-var is_initialized = func me.icon_dme != nil;
-
###
# FIXME: these should probably be part of MapStructure itself
# TODO: Need to come up with a StyleableElement class for this sort of stuff
@@ -64,7 +59,7 @@ var apply_styling = func {
var current_color = me.icon_dme.getColor();
var required_color = nil;
- if (typeof(me.layer.map.controller["is_tuned"]) == 'func' and me.layer.map.controller.is_tuned(me.model.frequency/100))
+ if (typeof(me.map.controller["is_tuned"]) == 'func' and me.map.controller.is_tuned(me.model.frequency/100))
#TODO: once we support caching/instancing, we cannot just change the symbol like this - we need to use a different symbol from the cache instead
# which is why these things need to be done ONCE during init to set up a cache entry for each symbol variation to come up with a corresponding raster image
# TODO: API-wise it would make sense to maintain a vector of required keys, so that the style hash can be validated in the ctor of the layer
@@ -90,7 +85,6 @@ var apply_styling = func {
# TODO: also needs to be aware of current range, so that proper LOD handling can be implemented
var apply_scale = func {
# add all symbols here that need scaling
- # print("Scaling:", me.layer.style.scale_factor);
me.icon_dme.setScale( me.layer.style.scale_factor );
}
@@ -106,52 +100,39 @@ var init_cache = func {
##
# init is done separately to prepare support for caching (instanced symbols)
-# NOTE: People should not be "hard-coding" things like color/size here
-# these need to be encapsulated via a Hash lookup, so that things can be
-# easily customized
#
-var init_symbols = func {
- # debug.dump(me.layer.style);
- me.icon_dme = me.element.createChild("path")
- .moveTo(-15,0)
- .line(-12.5,-7.5)
- .line(7.5,-12.5)
- .line(12.5,7.5)
- .lineTo(7.5,-12.5)
- .line(12.5,-7.5)
- .line(7.5,12.5)
- .line(-12.5,7.5)
- .lineTo(15,0)
- .lineTo(7.5,12.5)
- .vert(14.5)
- .horiz(-14.5)
- .vert(-14.5)
- .close()
- .setStrokeLineWidth( me.layer.style.line_width ); #TODO: this should be style-able
+var init = func {
+ # debug.dump(me.layer.style);
+ me.icon_dme = me.element.createChild("path")
+ .moveTo(-15,0)
+ .line(-12.5,-7.5)
+ .line(7.5,-12.5)
+ .line(12.5,7.5)
+ .lineTo(7.5,-12.5)
+ .line(12.5,-7.5)
+ .line(7.5,12.5)
+ .line(-12.5,7.5)
+ .lineTo(15,0)
+ .lineTo(7.5,12.5)
+ .vert(14.5)
+ .horiz(-14.5)
+ .vert(-14.5)
+ .close()
+ .setStrokeLineWidth( me.layer.style.line_width );
- # finally scale the symbol as requested, this is done last so that people can override this when creating the layer
- me.apply_scale();
+ # finally scale the symbol as requested, this is done last so that people can override this when creating the layer
+ me.apply_scale();
if (me.layer.style.animation_test) {
-
me.timer = maketimer(0.33, func me.animate() );
me.timer.start();
}
-}
-
-var updateRun = func {
- # check if the current station is tuned or not - and style the symbol accordingly (color)
- me.apply_styling();
+ me.draw();
}
##
-# this method is REQUIRED (basically, the entry point for drawing - most others are just helpers)
+# this method is REQUIRED
+# check if the current station is tuned or not - and style the symbol accordingly (color)
var draw = func {
- # print("DME:draw()");
- # Init: will set up the symbol if it isn't already
- if ( !me.is_initialized() )
- me.init_symbols();
-
- # wrapper for custom styling, based on tuned/default colors (see lookup hash above)
- me.updateRun();
+ me.apply_styling();
};
diff --git a/Nasal/canvas/map/FIX.lcontroller b/Nasal/canvas/map/FIX.lcontroller
index e549446ad..316690c85 100644
--- a/Nasal/canvas/map/FIX.lcontroller
+++ b/Nasal/canvas/map/FIX.lcontroller
@@ -5,17 +5,9 @@ var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
- parents: [SymbolLayer],
+ parents: [NavaidSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
-
- df_style: {
- line_width: 3,
- scale_factor: 0.5,
- debug: 1,
- color_default: [0, 0.6, 0.85],
- }
-
});
var new = func(layer) {
var m = {
@@ -25,6 +17,8 @@ var new = func(layer) {
listeners: [],
query_type:'fix',
};
+ m.addVisibilityListener();
+
return m;
};
var del = func() {
@@ -33,10 +27,5 @@ var del = func() {
removelistener(l);
};
-var searchCmd = func {
- printlog(_MP_dbg_lvl, "Running query:", me.query_type);
- var range = me.map.getRange();
- if (range == nil) return;
- return positioned.findWithinRange(me.map.getPosCoord(), range, me.query_type);
-};
+var searchCmd = NavaidSymbolLayer.make('fix');
diff --git a/Nasal/canvas/map/FIX.scontroller b/Nasal/canvas/map/FIX.scontroller
deleted file mode 100644
index 0e54a5d98..000000000
--- a/Nasal/canvas/map/FIX.scontroller
+++ /dev/null
@@ -1,9 +0,0 @@
-# See: http://wiki.flightgear.org/MapStructure
-# Class things:
-var name = 'FIX';
-var parents = [Symbol.Controller];
-var __self__ = caller(0)[0];
-Symbol.Controller.add(name, __self__);
-Symbol.registry[ name ].df_controller = __self__;
-var new = func(model) ; # this controller doesn't need an instance
-
diff --git a/Nasal/canvas/map/FIX.symbol b/Nasal/canvas/map/FIX.symbol
index afb34099c..62fe8bd39 100644
--- a/Nasal/canvas/map/FIX.symbol
+++ b/Nasal/canvas/map/FIX.symbol
@@ -5,45 +5,45 @@ var parents = [DotSym];
var __self__ = caller(0)[0];
DotSym.makeinstance( name, __self__ );
+SymbolLayer.get(name).df_style = {
+ line_width: 3,
+ scale_factor: 1,
+ font: "LiberationFonts/LiberationSans-Regular.ttf",
+ font_color: [0,0,0],
+ font_size: 28,
+ color: [0, 0.6, 0.85],
+ show_labels: 1,
+};
+
+
var element_type = "group"; # we want a group, becomes "me.element"
-var icon_fix = nil;
-var text_fix = nil;
##
# used during initialization to populate the symbol cache with a FIX symbol
#
-var drawFIX = func(color, width) func(group) {
-
- var symbol = group.createChild("path")
+var drawFIX = func(group) {
+ group.createChild("path")
.moveTo(-15,15)
.lineTo(0,-15)
.lineTo(15,15)
.close()
- .setStrokeLineWidth(width)
- .setColor(color)
- .setScale(0.5,0.5); # FIXME: do proper LOD handling here - we need to scale according to current texture dimensions vs. original/design dimensions
- return symbol;
+ .setStrokeLineWidth(line_width)
+ .setColor(color);
}
-var icon_fix_cached = [
- SymbolCache32x32.add(
- name: "FIX",
- callback: drawFIX( color:[0, 0.6, 0.85], width:3 ), # TODO: use the style hash to encapsulate styling stuff
- draw_mode: SymbolCache.DRAW_CENTERED
- )
-];
+var cache = StyleableCacheable.new(
+ name:name, draw_func: drawFIX,
+ cache: SymbolCache32x32,
+ draw_mode: SymbolCache.DRAW_CENTERED,
+ relevant_keys: ["line_width", "color"],
+);
-var draw = func {
- if (me.icon_fix != nil) return; # fix icon already initialized
- # initialize the fix symbol
- me.icon_fix = icon_fix_cached[0].render(me.element);
+var init = func {
+ # initialize the cached fix symbol
+ cache.render(me.element, me.style).setScale(me.style.scale_factor);
- # non-cached stuff:
- # FIXME: labels need to be LOD-aware (i.e. aware of MapController range, so that we can hide/show them)
- me.text_fix = me.element.createChild("text")
- .setDrawMode( canvas.Text.TEXT )
- .setText(me.model.id)
- .setFont("LiberationFonts/LiberationSans-Regular.ttf") # TODO: encapsulate styling stuff
- .setFontSize(28) # TODO: encapsulate styling stuff
- .setTranslation(5,25);
+ # non-cached stuff:
+ if (me.style.show_labels)
+ me.text_fix = me.newText(me.model.id).setScale(me.style.scale_factor);
}
+var draw = func;
diff --git a/Nasal/canvas/map/FLT.lcontroller b/Nasal/canvas/map/FLT.lcontroller
new file mode 100644
index 000000000..6e6be70d8
--- /dev/null
+++ b/Nasal/canvas/map/FLT.lcontroller
@@ -0,0 +1,58 @@
+# See: http://wiki.flightgear.org/MapStructure
+# Class things:
+var name = 'FLT';
+var parents = [SymbolLayer.Controller];
+var __self__ = caller(0)[0];
+SymbolLayer.Controller.add(name, __self__);
+SymbolLayer.add(name, {
+ parents: [MultiSymbolLayer],
+ append: func(idx, item, model) {
+ while (size(me.list) <= idx) {
+ append(me.list, nil);
+ } if (me.list[idx] == nil) {
+ me.list[idx] = me.add_sym(model);
+ }
+ append(model, item);
+ var pos = me.controller.getpos(item);
+ var cmd = me.list[idx].element._last_cmd == -1 ? canvas.Path.VG_MOVE_TO : canvas.Path.VG_LINE_TO;
+ me.list[idx].element.addSegmentGeo(cmd, ["N"~pos[0],"E"~pos[1]]);
+ #props.dump(me.list[idx].element._node);
+ },
+ type: name, # Symbol type
+ df_controller: __self__, # controller to use by default -- this one
+ add_sym: func(model) {
+ return Symbol.new(me.type, me.group, me, model);
+ },
+});
+var new = func(layer) {
+ var m = {
+ parents: [__self__],
+ layer: layer,
+ listeners: [],
+ models: [],
+ active_path: 0,
+ };
+ layer.searcher._equals = func(a,b) a == b;
+ m.addVisibilityListener();
+
+ return m;
+};
+var del = func() {
+ foreach (var l; me.listeners)
+ removelistener(l);
+};
+
+var searchCmd = func() {
+ printlog(_MP_dbg_lvl, "Running query: FLT");
+ var hist = aircraft.history();
+ var path = hist.pathForHistory(1000);
+ printlog(_MP_dbg_lvl, "FLT size: "~size(path));
+ while (size(me.models) <= me.active_path) append(me.models, []);
+ for (var i=size(me.models[me.active_path]); i
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2006-03-23T16:36:42Z
+ 2006-03-24T15:10:52Z
+ Illustrator
+
+
+
+ JPEG
+ 208
+ 256
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FUDrWuaPoemzanq95FY2EArLcTsEUeA36k9gNzk8eOUzURZV4J5i/5yh1bWdS
+bQ/yv0CXV7xqhL6eKR6qBQulslGCjrykYU7rm6xdkRgOLNLhHd+1KDT8rf8AnJfzipm80ea/0Jbz
+bPYxzlTx7AwWQSEj/Wevjk/zmjxbQhxfjz3VXX/nDi0mJfUfN91dSnfmLZV3JqT8c0vXI/y4RygB
+8f2Ktf8A5xH1bTwZvLvni5tJ0r6SmB4uu9PUhnBX6Fx/lqMvrxg/j3LahLZ/85W/l9++iul84aXF
+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
+ZqUN4q7FXYq7FX//2Q==
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2006-03-23T16:36:42Z
+ 2006-03-24T15:24:10Z
+ Illustrator
+
+
+
+ JPEG
+ 208
+ 256
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FUDrWuaPoemzanq95FY2EArLcTsEUeA36k9gNzk8eOUzURZV4J5i/5yh1bWdS
bQ/yv0CXV7xqhL6eKR6qBQulslGCjrykYU7rm6xdkRgOLNLhHd+1KDT8rf8AnJfzipm80ea/0Jbz
bPYxzlTx7AwWQSEj/Wevjk/zmjxbQhxfjz3VXX/nDi0mJfUfN91dSnfmLZV3JqT8c0vXI/y4RygB
8f2Ktf8A5xH1bTwZvLvni5tJ0r6SmB4uu9PUhnBX6Fx/lqMvrxg/j3LahLZ/85W/l9++iul84aXF
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
ZqUN4q7FXYq7FX//2Q==
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Nasal/canvas/map/Images/HoldParallelEntry.svg b/Nasal/canvas/map/Images/HoldParallelEntry.svg
new file mode 100644
index 000000000..3af17b6ad
--- /dev/null
+++ b/Nasal/canvas/map/Images/HoldParallelEntry.svg
@@ -0,0 +1,6292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2006-03-23T16:36:42Z
+ 2006-03-24T15:09:47Z
+ Illustrator
+
+
+
+ JPEG
+ 116
+ 256
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAB0AwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq+dfyP8APt7D+eH5i+S9VuZJRe6ne3mlmZy7BraYxGNSa9bYIQOyx4q+isVeWfkZ+ddv
+Y2m3yX6Qad5gs7qZW0lZKyfVQQY5FDHk3ANwdgPtCtBUDFXqeKuxV2KuxV2KuxV2KuxV2KuxV2K
pN5xm8yw+VtUl8rxQz+YI7d202G4r6bSgVAO43P7NTStK7Yq/P1fMvnPyf8Am5H5j8wxyJ5msb9L
7VIW4I7makkqMI6IvqxSEEDpWmKvoj8zP+cobnUb6Hyl+U0LaprV+RCuqiPkFdx9m2jcUdh+1I44
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
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Nasal/canvas/map/Images/HoldTeardropEntry.svg b/Nasal/canvas/map/Images/HoldTeardropEntry.svg
new file mode 100644
index 000000000..7362e1a82
--- /dev/null
+++ b/Nasal/canvas/map/Images/HoldTeardropEntry.svg
@@ -0,0 +1,6289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2006-03-23T16:36:42Z
+ 2006-03-24T15:10:15Z
+ Illustrator
+
+
+
+ JPEG
+ 152
+ 256
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACYAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9CeefzG8n+RtPjv/ADNf
iyhnLLbKEeSSV1AJVEjDEnfFXzO35yeYfzd/OXynoWkTPpHl/T9UN3CY39KWdLdnl9WQEkB/qy8A
lSKlvGgVfXuKvnv89vzi1z/Guhflt5EuzDr1xfWp1O+j39JmkVorf5ftzV24/CdiwxV9CYq7FXYq
7FXYq7FXYq7FXYq7FXYq7FXYq7FXYql+teXtB121W01vTbXVLRHEq295DHcRhwCobhIGWoDHtirw
P/nJL8l9OtPLVt5z8iabBoureWn+s3KaXDHalrdSHM4EKp+8t2UOD/Ly8BiqXWX/ADl5aH8o57y4
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
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Nasal/canvas/map/Images/HoldTeardropEntry2.svg b/Nasal/canvas/map/Images/HoldTeardropEntry2.svg
new file mode 100644
index 000000000..d46bfa482
--- /dev/null
+++ b/Nasal/canvas/map/Images/HoldTeardropEntry2.svg
@@ -0,0 +1,6565 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2006-03-23T16:36:42Z
+ 2006-03-24T15:10:15Z
+ Illustrator
+
+
+
+ JPEG
+ 152
+ 256
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACYAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9CeefzG8n+RtPjv/ADNf
+iyhnLLbKEeSSV1AJVEjDEnfFXzO35yeYfzd/OXynoWkTPpHl/T9UN3CY39KWdLdnl9WQEkB/qy8A
+lSKlvGgVfXuKvnv89vzi1z/Guhflt5EuzDr1xfWp1O+j39JmkVorf5ftzV24/CdiwxV9CYq7FXYq
+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYql+teXtB121W01vTbXVLRHEq295DHcRhwCobhIGWoDHtirw
+P/nJL8l9OtPLVt5z8iabBoureWn+s3KaXDHalrdSHM4EKp+8t2UOD/Ly8BiqXWX/ADl5aH8o57y4
+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
+
+
+
+
+
+
+ image/svg+xml
+
+
+image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+KU2zaiOCWXPOXN3UA5vzClhP7T0K9xoLRxUGoRPsjAxDbldJ1dZTRtSBz2txb5FQ0u+cs7pVJBSu
+ElQWkK6RaTcGDMOh4JlUIeZ5QMEzymqRu9DJTS0NzGXNSMec7TUuN+ahPqknjcqNBbtMAWfhcocO
+Haird0aYiRWwGR9NwYPUBQ39JEJuI147WTmpZAcmn40B05sG4M6suFp7YHLqOBrIttCralsGMSBo
+zWRtEOtdAMw1xBwSlR2bbXKkrgJ/CT3Kk1aWk55ZsCtFOFOWS1rzAPSSmFGRznnTlTBihV7KLo5w
+ppB4hrKCbFwuOWhXD3XsT/psxcqgfHRKIGGl2UnWA42d8EzCsklZa8nwZ3P4+TjhEFB2AaoaMkUz
+BnDzpAzjvjEc8tBo2LDvMrltBo9RzbUaZD0go+rB2dnp5CxVPzv7Ck7C6dKAQyTSGQ88FYPMiNIj
+p5srRAL+UPVFqhFpXxFIB2pULHvWQuXmyWYE0ggQiqBuJY/zQ+9petQ77EcIWyJl/NYJK61zBlnL
+A4gG+WjWeqJ7R0w9e8rBoNuOwx84ezRA7Cq7PR0zaoo4AxmsnT10qkf7BLKG8oD0QhLOOqzB7AhX
+MRn7/brY4dTu/etw1uyTccGb/T6c2fy5tYjLnTqImI2hii+W4kEpxi/s9/uS+tN75s122qO/6q1Y
+TCgcIWTy84uZn1mOwvbFoKJf7Q8awdNSDPGxbu53Qj7V9/AxpuPH+Ad/jEDCL373cP+HVzf3b27u
+/3J6KmL+Ru0fXvzuG/qLG+RPn//pX39zc1uaefFz++fJv7z4+Z9/e/G7h5fX5Z8//YqF/3Ty88/f
+lDb+cvLTv9/d3pe/ndJ/0ef+p5Ofvej/9dvL27f8Z3fy83+7f7P845vvvuG//fwXr15dfrf70us/
+vn315dvb6/ur6x/g1Z/Vv199fXP78tX1Pf/9VzdXb24e7i9f7fZPWnhnv3765rERWB/999bH5qGy
+Ol7dfPn2zfVreqz8wVpsxvHq+vXb2zdPGck2xoD+Lkfx5eXr69+8uv7vt2Wyv3tsMATW2sZgdrq9
+HNP927vfX725/JaefveA/DZG03Z4OZTXb27eXH39x5vbx8dy//A5P7yNIS06/rN3PfqzndPr/OHu
+m4fXN282eXjd3D/2GT5/ePvq6vpfX11+8/XN1Ta+xc397rK6uV9b+Rs8uLizy/4/fHP96vLNw2NX
+6/rn+oGHUPv7yFZ47wX590fP7J9sYwr+vvsNH79tNtLzvfvlbzcv36wds9Z7N2yl/9rd5Ri+vr75
+y9ePai/bGQT6u3OOvXxsBL/4ty9+cfvN15dfuG2Mg3r8s46R8B/3N28eveIfvvyv66s3v3x4e/+y
+PPTLh7XN/wOPaTGCdx5wP//V9Vcnnx0Npu/dYPrq1WVRIG9/93Dz+mgybctk2sjB8z1ZTNM2RnO0
+mI4W0z/ylj5aTEeL6ceegqPF9GP1/2gxkcW0kav+aDFt0GL618u3r1/fXN7/8vbtD/Hy9z7kn2Zp
+fLne+01YGk/VnXi/bmMg+5rT6zcvf3X97c0l/f4DsS6WXX4vXfz3X331+vqxhbfhLfHA/X/Htv5A
+NsZ2tvb+jnj5qCK3kX3wck+Re/mo9ryVrv/9PTfu599cX729vXx1QVpT6f0PfqX+4eHm/s3FE3TM
+H+X0ePS7n4ZhGLbx7d/fcDotavtWer+35/7n0d777fT+f75/g/1pF9frsn9//3btseOt9T3ocd/d
+PhqHuNXT8/Tq4fbh1b/87et1r+QPrtNx93fG9PbVV5dX159fXT4+tI0gn5Zd3hmO3mG//vs3D/fX
+909wVmxkTHv97o/r/OH+9ZvLJ4xrW8Oq3f543Pqf0KG8qUE8KzKxQS/BpxOg+Og29e3Nmz9c3qye
+wh/Irv5Yoo4bO52eva8vX928+fru+s1WPka7v9vx/HXNwVGjcNsYAHV0p+tretHmuu72uj5+IDof
+dXSn649u4a103b/nXfbb61d/+SHusc5b6X9u8QZ9/N7ZmoP95n0jHB/4/G9Le3nC7B/6jn8ERObU
+bwXl8Axf72b6/kyYzLSV/h8Ck9nMIA6Ayfzy+tvr28+/vnz58LdtpRd8eHiS3z68+ubrh9uHvzy2
+fTdsF2/Et/IRQ0meaku+vLm93ErcYc2OfPyE2cpn2MPfvbp8efP2UeidO9tIdjW6+35a7kdwIG0E
+jf7cA2kr6/8TP4Y2soo+zWPoQ4cTfrkRvfjZgIxtdL8TGXh8325k6vc37uP4x9OtoAi/e8/9eswk
+3lIm8ZdbOfq/jzzijYzle8oj3gia6uPPI37P+24rl8ZzLryN7JBHfXC7l8avbl5/c3t5dX13ff/m
+t5ffbPHmeOJ5uxal3cR5+0Gv/seBIJtZ/vsYkCfs3Y2snH1l9bvzry/v769vP7++vb56gtH/i20M
+ZL/by2H9/T2H9e/bGNZ+t3du7acguTey1l4Dwv0eV8U5wep/e1keeixGu1kD4+5dvf9wTIuNWKjP
+vuo2sgmepehtZO73LwvuwKP2wnCC/3ey90+3+Oc2xolRvddJ9QMzBLQvv7y/uVt3vP+oB+RXN7e3
+j3tgrq//ZyO+F+nv8tvaQ7/jHj8CT348+/8HHtJO93fW7auHuw8ErildXXb/zcMH4nehju44hR89
+Jn4a1k7WH9or/HZP7yyq3NVvHx7FRP709ub++nIjyM/a5539fXX19u7tO0KXjePrfiPnVNvnndG8
+fHnz5ubbR8fy6pp9MBsZjnV6Tzd9c/nqcSTS7d8uv9vIZrEu7zi/qYTGo4rSRsagnf1xEtu/3MiR
+/WxLYyva+nMsjY3M/b6l8T6sShtRWD5hVqWrjXyCTxAGsZWpfxYMIm2j70cYxAY+wvN9lVcbiQwd
+K1B17uaN+PiOQIiNXhvPufI2st8/XSDE1UaiK8/V9za8+h8HQmxm+T8HCLGVlXMEQqwM62MCQmzE
+vDgCIX70T3CAcbER996zr7qtHLjPUfQ2MvffGxDCHYEQW9VoN2J2P3ubb2WrPGebb2TuP/UoxJHv
+6hl8S5tZvM/62h/uvG8mdPmJzfumWAsOxyt8v4iHJ1SR+Mk25u8ZvGKbobR6Jq+Y20r/P3VesfOH
+h9tfbggEfKzAd2RM+97vyQ+Cf/tjYvp5Gl3ORrxhTyTLef91+ZTz91f8Nb/YyFQcKR2PB9TxgLKR
+zNsYxBYOqI1MxfGAOh5QBx9Q168eVj0+H9T5tBGt4Uc9n35NH/OoPx2Pp+PxtLXjaSM6wwaOp43M
+xId6PG0d1vA+oemNYAPeKzT9j9ka7Vf9YiPTctwhP/4OidtYClvbIRuZlg9zh3zgND2vru8eVmkl
+NkDT8zQIpjtxn/nhxIXy38NJ+c9n5d/l/35W/nCyjcFV1OWzWYhkff/76nRsiYLoCUQ4bivEGAcw
+4bz+hrhwtjGMIxPO8mA7MuEcmXD6YzAmnOW3+Ob68s2vHj+3bu5fXn91c79e/fwH/yLW8U8Q0v/l
+ZmrQfsQl657AMbSZz3AYvn8jttAB+P7zh7tvHl6vn04fwJ6+whB+/3YjFY6fTTm0nW3xnCT0TUY/
+9vLRnxr+WP1cP2Ls49Pd2BvJpHp2Kt7mzqgDdvimlI9n7+/LVzdvvr67frOVo2otxvnXtZBENZS2
+MQDq6E7X13bt5rru9rq+huTYWm4ndXSn649u46103b/nnXZMRn1OMur2btFtJuo9KRT2h5u/X9/+
+4fbyuy+2Mpcff6LS/uDWoxqVOH84CRu5XZo+HyOW3+PZ9+lELHkxU8zSD59taGEfo5R7mtVWghbH
+eh3HKOU/eDjHKOXJMUr5D/sixyjlNr7DMUq5hd5/4lHKX9189dXb19cXRC9ShnE0gWxqPhkT6Lvr
+29uHv332l1fX1/eflZ15/Vm5s27+8vDZtzcPt9dvPnt1/fKzh1eX96sOwg/PNrrV5X56RcS/2xjW
+wQbSsaDh0UA6GkhHA+loIP0oBtKvbsqXvH9z8QRiuR9Fobm+LW94ilI7b8QH2nR458z6n5u7t0+g
+IEwbGYj19/tOMXuazftSVPxtzMVHCeB71N7d1CfomLxvX31VLvfPn1LlYyNEwMsu7yjLMtvnD/d8
+In8gmI29Xu/pNmXjPOkTbWRAix4vB/Mk+2vHQN3GoHZ7/l4qwuffXF8VLfzV0dvy6Xpb1Lci3hZ1
+vbDT5ehtOXpbjt6WvYV29Lb86MM5eltOjt6Wo7flvRSax23C23d0/Ue3CI/Ooh/ttP1xnUWv1UTZ
+TDbVx+gweh9/i/sAHC5YNL/++zdFCXuCx2UrY9rrd39cT/YkbeQM2e/3Ie6XYpFuY1gH+V4+gqzd
+j+Zs3txAPvmU3WNK/o+9uW9v3vzh8mb1jvlAdvYmiSqesbe3FbA7puJvJ5/9Gan4G4nHPScVfyuz
+/oxU/K10/X1T8T+iu2wjC/+5l9m2ruRn3WMb1LSPd9lmjqYjrcwHcpdtpetHWpkfgFZmY7fnR0Ep
+s7bDfvRA25FS5uRIKfM9nn3HNO1t2A4bdA7vDuJ9Ep03cn4ekOj8+6++en29SajI07bEA/eftvWr
+65cbWlcfY3z+5WNFMrdS4406utP1Na1gc13/+9GW+MfbEls9NZ5gVHxU32GzcbEP0q77/OvLlw9/
+O/KE/uPGtGPUHe2gox10tIO2U/D6aAdtTqP5NO2gtI2uP8cO2krXj3bQ0Q462kGb/gQ/gh306PF1
+6sJPtjGBf989ex+9NbbT97174283L5+QLDYNG+m/dnc5hq+vn5AV+VM3bmUQ6O/Pnu0J2Eh44ugJ
+2KAn4I9vX3359vb6fjWd/ki30l2PW6dbeS8Kki8vX1//5tX1f78t62DtetoSA8lXrw==
+
+
+ Hu4eheKdbSSNUjq7HMCbh8e7vxH2bOrqjvH4OI/Ckf7lex3Gkf5lefQe6V9+QPqXT4A85b01BOns
+u6fjq1eXV28ub3/3cLOVTDlr8b3dylcbMSH6buSnqC/b0wt2er0c0v3bu9+X1fPt4+DQrbAqtD3e
+jSDdvLn6+o83t48P5v7hc354G0NadPx9IxdXW4m/7ydGPeo62Mp2F4/Be/h/N50d+IQ1s5V5PxI+
+bGMITyZ8eP/F+CT/4ZvLzeQTHr2Hn7r38B+ipb95bAQfjI5OI9nGGL4XLX34uNT0jeApPn4t/dPR
+Frez4Y/64kevLz6KuNhKuPz98RZb6fkz0RbDVvp/CNpiM4M4AG1RleEv1tg2jjbT0Wb68G2mjymy
+sR0l6nuxmjaSvvo9GU0bGc3RaDoaTUejaW0UR6PpaDQdjaaj0XSw0bQRh+/RaNqg0XRMWP8hjI0P
+OEPt/Q6e7XyITrnp90i434iBdEy431zq7MeYcP/4vn5412r60Xf2kThtg4QBv7l9eHhsXW34/NlQ
+0eiVI+dxtOl2htC7jb97vArhV7SGpO7av3x5e3n1189ORPTwzeXVzZvv/mUzjlkdzsfj8fs0b+kt
+bZnnuDG3+j0+Mm/m+53Dr5kt4HxDS+t94f+/krpkF1oJ8wf3UnwkZbe3koVwrLvtxo04RX/kutub
+Kjj4aZrWm/oEHT39PYqGb2RPvatmuM72k0trb2NEe73uIXKeVtd9GwNa9Hg5mPerEv63rzeTFn9Q
+nfDPtWLeUcU6TMXaxlI4alhHDQvG39ZKYX6MWtZHpqRgzfz679883F8/QUvZyJmx3+/+uD4w7Wu/
+20eN5aPwXn80Z/PmBnLE4G7Qa/1pbe5tlVH/uHFhj+/tbXm5jtXgt1NS/RnV4DeiFz6nGvxWZn3c
+6/qjW3grXX/favDHu2wjd9m2RvGsa2yDivbxKtvMyfSMq2wrXX/GVbaVW/gZV9lWuv6+V9mxCNcz
+MpO3i4l7ztf/cL/DFq//wyNC7/H9jgQlWyIoefRrbEKrfi+ako+N23Erca2Pn6fkOU7JD/kqZTD2
+by/LQ4/lX232LL57V+8/mFP4X0sPXr8jbL+JQ/jxHbG1y2TfucEdePzEPRn0//X+ZZJtDBJDeq+d
+/3EQHmzPmjkswLWhgXTQRUfigA9oa/x+o+b+czfI9kayv0MeT8A/3Yhl8pwM/NONbOr3TsH/CCJf
+NATaAX/cDL3gc/fxxjTdZ4W/tnq2frpArY9DnW13+UaSZJ+7zbd3YB2m0LqtlHU8QKXle5AA6X98
+dXn/+qsfgWbvN2/vr/59i/vzKZ6mN5dfbuXW6jmauHt/epJ7w59sxKO86PP70SqVlfSvx5X0Y6+k
+s3gynGxkJAetpV8e19KPvpbch3gs/QNVwT+XK/o3N6828nU/KoPv0/MeiIP5w19O29sYByR5bSyh
+5VP1HhzxhM/AsW3xUPm+0Gzvf8Tyx/zF7e025qEert/vXDweI3BbqRnx/iVHttP3ZxYdCVvp/yFF
+RzYziAOKjvzvh4eXf3l1uZVb8Vhx5OSzFz/5xb+54Ytf37+0yiMkCiT54ncP938oI2IOiFMR//L6
+Lzf37R9e/O4bbYP/9Pl3d18+3Jav/eryy+vX/12G/mI4+UX5z5//9uJt+T+/fzGcTaObToaz4OJc
+/k8q/xnjHE7++qKCif78Xfkf/6v847+K6G8n08lvT/7P/x1OXlJD//7iNOZhOgvTmE/SPPrSYA4n
+dyxOZ2POE4nDWfQ+npAwn6UpzSJ0PpDMuTM3jIFk09mQppNzbdXlMJLUnc1p5kcHdxZn/rmfz2IM
+08l/8rPhLM0Dv2o4y35M+qoYYpJuRRqnvCu5mZ8cz6Z5yPIyN5aXSQP+zM/zzM+WHvgpSA9CGDGA
+cQ6eepDOwujGkyvt7RQSPevD2eS842eHs7l0l4Re+nIaU85nIXsWjmXePP8+5dLYkFg6nY0+4fdD
+mrO8a54G7tX+bF+9+IqbmMuLB6/TOITMn4Fa9s7x8+nMhXlEJ6a4FNLrchp5EuLZXDrJc0PPZv1g
+cUzy89LmwKMtfXCzjCueTX7QzuahNGm/ToN+3NGX8dKbyq8Gmdl45qfS6T/xJI5ns5t5BPPZPKeM
+8cboRFjGF7SBYfT8JCYwl+9W1lh5fSzfxfsTmZJ5GmeZ1SHFzMLygUavwrIWR21gOvPeRRGnskhP
+RFgWDn/WfObSOJ90JxpfwNkqou8Vg34Bd+bHODZiFaZhXzh6XlwQnqOBJFMQzvLEK1laHXXNp5Ag
+HMOo/R1poaOBFL02MGWdHPp0IejLxjnyR0i5rEoaE4t5kcg8TNOgSyP7gMlx45RkLyXq95U2EENO
+shBimvCyafKTzG6MeTxZzBeE3EAqS2aUvVSfTaWPZR0vWy1CP81utwcpluEOToaQ5ijP0sbNbm/C
+d76YfspUjsYhe12h5R/8JZM7y5HXSJnHQaY8lXMsTbN8h8lFls040UpnaaPwV0ijnX1lreXAM1ua
+nPKoLyr9m+QrJH9WJnLGBpVPnibbdqXZmbcCvT/HIS5Wo0zNMMdpuXITtRX9co2XzuYp+d39kGi7
+86pt9k4ZQjlL3HKXlbkadVz6AWIsB34Osmd9+UT0WEzyiWR354zfLuf5XOY/lqMzT6N82RBn/QBF
+HPVzh3IKnajIxyDCeQgBwklmtQh9WQv8BeJYeur0Shic9cuHoAcXnX/SrZm+L98zYzlD9Pflu4ZR
+76ToZ/l9+aeTe2aSo5+/YKQvKGdcOKODkWQTzsgiG8Mgvy+rdZyXB7qsAF4jevj7Wee/NBIW1wQ9
+yUd5e5+UZRWH4JZXT6S9K0e0XVI0J4Ob550LLc1lqQxyUZbrNww8LXM5ZAPunnHQ8e99KtpD//y2
+WP2/opbKNTrkEOWtMx3g/CldWRnRB1lKtBOpLV+OsnJ3yKrFGinj8uM8Sg9ph3EH+cPIsi2qwDDx
+78sWDOUelXfl5LnXpf3sok5aUP2CXuVdjjpDc5hPLrhb5WYceeV4VSro2emsaDJOhGOWjV+6xRoI
+dyBM5fKWfnnZhdxb7wc+EFySdVu64rJsZqebgNt0Meqwymz5JO+nD8dPFk0l824qncOsl+d0pI42
+alm28vNyC8t1W3SiPGd+Ox1Cnnta7s00BRaW/cZvZSHJeFZYVQv0AcplnILspvJd88wqRNHpXJT7
+vvx+yDP/fpaDizsw5rOhLALpQJxli01lZflpklbzPPJmCOVwT3yHlyueTwbuwVwG5kZut7zBx1H3
+aDkgWFjWRVn4uu6n7LSBaRhxcNFxxad/GVh5q9ONI5u03ExnWWaAjt5yr5JsOqPTFKd0Jr2wSMu6
+SsHjjIx08vLPaY/KjeIcnQaBlZwIRaLcq+NIX6Zoq1NkvZeUDq+D9TJbokZN5UPKtMTgs97WZXMO
+Ip7PhuhGvUBzYKWjzICj21quLz26HbXqm+tejh6IVTix3klC0adJyFuvCq9wU81uXD4bSSnkw68s
+3WI3zEuhL/oIjtlWyCcab61YNtTAX5aepeHK6VlOGNWRpxD4a83lbJj5TuO9P2i3Qvn2U1J9wWm3
+5nKDyOIs+2jIjpfGTJ+WVZOyN/lEwdqaRaP3MxRqOr90cdKOjzxZ1FXVo/RMO8f1M/BHKBvZuyTv
+8naARvkcfP4XcVG0sqpiQdotHYCqMCbtaha1Wq4fOnCudLJmJ7pR2agzbqooKh+fPXJV0dYQ/cOT
+6eJ0I8diaAU+v4s44Pou0zYEDEsvUFoDYcqNUJZxOZWzXz7L9teYR2k1z5MIS2f8oCdpmJzZb4NL
+qma7kEXxL2OxUXFnyc4qa2yaws4MlCP7bNR7kY5qPjRyOQGHWTpAJoz0qhzlag34JMezGHV0HUdt
+1xWjSXtQDS1H99p/qgGo26usjGnmL1vWUrk4HM5tskzkZXHKem/5cojIy+jmcsG+14BnU5LFXc4y
+ulZEWF9VrGS5sXPZE+WFto7FhuU7wAWs+Cz2ctFCPGvz7e4g03bO84gvrh8sSVu858ykKleD7o6y
+T+grnr/YFZf2L5ZCurCiy2opjp6NlzJvQwxQ8ct9oAcM2/vnalfp9V8OLk8XpiwuHyc94ljpUHM5
+ZD3PQ1RtnsRRtF42fSf0QBctCT1vBRKWgz/phVCuLB0X+Q/cLOJYLHK1IMPs9aIc0INy0048hQOd
+16pMZacGFl9JfNHI4ij2wiyXoppE2c+irPNgs/NYHEHvFJqaslJHfXacJpqYslDLZuYh8JqavEx3
+LPayLo5y5s+ylGn5yeoayT8RdYuXNc4TU+5fr5uxLKjBq39iKntUtUkHjbycVWVJjE5fxhpYnsrv
+R17H9BWTavQszrOK2cQUYbGOeVh0ueQZDcyseRZhWZyyDHIo55mP+qzqEJmOziBTQAeiHCdzOXgm
+rwpAnlWvKjYObRboGzKFdNFMvEHLN3Y6A0WhLbPCF3hkdU9+TjeC12ud9QN6VSIriG/wILoACWfS
+/bOoBVnVzbKxSlfJeiGp8/L7ciGNfNEGMnrJRJeRxpmMUhIG2nwyg2VYA7kdSCw+E/pYIQ5JH5VD
+OrOzySV5E/9e1lDUBUvicRhw8olqSw3MbCPwaVgUQZJ5UZFlESc1HUImJVk+FhnYA62AkJLosHIa
+Bl3wJB5FYaTz2JM+V9v9VtuV04j6VdRnWdvF0EpjkollNVNGkIMoUcGsYpIWWzOqFOdeEbpJH4XT
+h+wENupY6GYMDFdCYMeME9dZ2X6D6GaR76SF06isFlhKfDoEvpL4cguT3nM+jiosnw7nUxKHJvmv
+6Ig/fwExm+okxkU36KhEaA628o1zI8RNm0fesvRauNjKDLKyRBpn48OYaDA81GRKe/keM5v1NFjW
+k0WLDFmWEX04UVnLz/Ksa9hMjvKC8pssKyPL3cfvn2Rplq01ixZNP5uw3tXUE3FyTr8Wi1WtYL8j
+vX/IQ1KVOweva5Ovo3P4VfhKNHFHCBkrvCKb7edzFJW9rMwxw9gNc+A1XA5tlY0yFJY5UjtFVyr7
+nJ1TJDaztkxVlm08lFGX3fDtC+hgsto8thEpW25wujW4gyqMYl6QclGOxCtVzMplodtbnUBFJrYU
+fVf2eqtfgpVgmkA+Zq7UB1EuDLU6zLL3cNaQE1ct+9l87XSzUquiBEfcO0UM1xJp3IN8mGzDInV5
+DLoGpzhBi/ZyDXPH3FB2xAW082GYZRWIb6ochcOQcZSpEhrKDRbjqGYXeZO4VRYPAeJyIXOrU9kp
+5T4RMTvsSTjbWVj2QVnV8m0muPi4v+qlLJccjqJZ7IP/fKHiONlh5LVnuCMmmUXW5HkUM76YunJC
+OS8TL69MLgHxr5WZKTcDNmKcVJUmsVNhcpjaYmYnme8y8UF6NQc7IWjRidOnfDD+Inw+jEM1GwKb
+F3RsTQMsFG86VDGn1P6nazLVA0ZUsJjFgceTxX4zLM80yBmRoHWTO0z8XnyayhnNbg==
+
+
+ v9HhMKKDH5sxDHIYZLMdk4c3afDQ++lJmQMyf6cyL1e6wdTvRcrWqFNQZts5XP56QBTLb9B5oUtG
+L0r6MpPooaTuqQMmzAgGFaGfxHEZJjiaydlB3rQrXYlBDDpyl0jIgvwa4mqmeRmT+lDIEB5iIxQf
+yCTOveWz5dM6UTgHc+KPNHMRl8+kthP5tjxfy3JRsOVCHp95ZrWfdPJBPFOODHjRxMvRO+iB7EiT
+Fr8AqWjiQXf0YUa18wZWITu+OfLdDey4I204jexI8YNsPYnrlS+oNuAAfymtFXH4FvWS7vilXSky
+uJV9HvPiyURhD/F5DeILlYUYxbePt5/DMT/zumd9RM5q8oEnUVqTORHKUczbvQpx2zkxk+qzNFTn
+xOFBrYb5pDt+cU6T3hziwmtyp+Jh4i9MDhK5BfJEMxz1U6jnivS+cgJmadlHWHDjZI5KuojFpBgp
+OsrGR2lAnYdkD4zSNReq6yuTB1d8Z8Uu0ygm2b58iLOSngcIeW+z4l1VGXpX5ihNEfNiUTMjigVY
+jmhRJDJ5D0NUzT1DyS/S0eNdeK70RY1CmNAU0uDrkoQT6QMyfPoyeDaQ70CEw8T2uqthYA5CST+d
+eFvPtQG5WlksrkMSlnNb+zRoFHckLx7b4CSMZuWQPTJoA3pQlouXzBh9dixtqekUEjuISIhAG1tU
+U1RxDHy7t0K6CDyEO2tIIk80NswrX853KpzlGxRjkx20Mohp5HaHiGgOLa1yI3scn4OaLxPp/CIm
+JTlLH0ZTiMuBoxboRMao2MBRbm9pYCarTNtldVVsmpwHte35BJaRaayQjqFZ1fzJ1jatIgnqlVNQ
+72Z+VGJyNNZygDk1CrObbW1FCYI63TOYLK+tapRrbwZ1YgMFQYNqEhzo5qkNXo8uFpPGJ8JyNrEm
+EPR/q4ZI2kJR3WVS6FYhYIFYJGrTlpkexfwKtof4uh/V+mRHsBiVRY/JQfW+qGOiIEsaVYng4JiY
+ry4kva1zRgOk94m7gFwysIo9gsBk8QQBXkQOF2e56/gckh7gWuN1McoXKFpIcFkXVtTTcK6tajxK
+pkDjwbwEkmy5MNJi00+AI3aiFeIzvrW6ZGm1pFFuwCTeMLWVR7mtixY+ymedaObF3R9Ej4JnY5Cd
+SGEEUd5puReTZlLvjrNNH92srfKhd6ULK8RRdwFbJyQsF3MQz0Iyp9M4y8Wt3p2ctQESM1KFxOo7
+JOGM4cJfQDGTAecruQNlZZcrUTyK9Kho/5ngKSnq1pDoFh3PvAFopskilLcP5sjKduSU+2FyQYWs
+TOuhH50Kp2nUM4sujdnp19Y3eWoqQYcSk5RejzCQF5UTw4etXrEk5QsOfN7wLlBvw/4O1AuVgpmz
+GLClsdHroTeoC5vaiHqdlSksX0PdBXD50CU7jWjYUD0U/Te7VCIDNK9QT8k1qpfMIE4G1bCzLi3y
+QqhlX6xhJ9uTIgcSsKBVFOU0J4VtcojOOI0XkG8ksCuGN5IeenTjiGO8rE04V4ZRDxx61UCnxrl6
+Hv0gNnBGkJP8v9m0Ttxoe1PIQdj/ePEfL37yxc9/8erNArX2ky/+/P+X//rnt+W/TnuYpjv9wyGo
+JmrhQFyTdOIAHBlG8TQkmTx9EJaMmzgMTfaTL74q/6HguczgHlzpTv9wEGAJX+cAbJg08Xx0mP3+
+Sfgw+TjPRYjhXQdgxOS7nPZgS/pFDgMuSRMHQZfQvQPgZtbE8wFnaOJpkDN5+iDQGZo4AHZmH3cf
+DYWP+1w8FP/6IESUvP/52DP5/VPRZ/L0QfgzaeIgBFr9IEt0053NxgH4Jm7iMISTfNUD4GjSwCGA
+NGnhqZA0efoQUBo+x3NhafJJB1xs5IznWRVnfDkM7uof4mx/GFdc9//ZPF2b8fZ0qk/XJpYvPNc+
+vW0v3B5eTf5wCGKNWzgIsyYtdFBr0rmDcGvS9gHINczcs7Fr0sAh6DVu4TD8mjRxEIJNjpaDMGyy
+zw5AseG8PwDHJlfqQUg2016fj2UzTeL5aDa7+56LZ8P1vYdokz8chGnjJg5DtWG9PR/XZjfZk5Bt
+8r4DsG2Ytuej26SFg/BtsrAOQbjBsjwA4ya24kEoN2niqTg3GKcHIN24icOwbtLEQWg3GchBeDfY
++juItx3xczBvMM4PQL1JLw7CvUkTByHfZJYPwr7Jtz4I/SZNHIR/4yYOQsBJCwdh4LiJw1Bw3MQh
+ODhp4BAkHLdwGBZO5vIQNJwsiUPwcLK0n4qIk6efiolD289HxWF8B+DipBMHIOPs/Hg+Ng6n2LPR
+ced2Tx+Aj4Mm+2yEHDylB2DkcCUcgJIzH9BzcXJooNxnk67XaTCkXOIeF7s4eHHr9I1l+UOx+pP+
+QS5H0ucEa8FNSLytg6CD9ncQhg7q3/NRdHCcHICjEzX4ICQdNOk9LJ1ZBc9F00kDHTwd/+HJiDp5
++qmYOnn6iag66eEBuLo6fU9B1smzB2Hr4D47AF1ndsvz8XXYxM9H2GEDHoCxk493EMoOK/QAnJ34
+ag5C2sEn93ysnXitDkHbLZ2iXcyd/OH5qDuEL56Pu5MWDkLe4RY9AHuHkEAXf4c/HIDA4yYOw+CJ
+5nYICk86cQgOT1p4PhJPfn8QFg9NHIDGk+95EB4PS+IARJ4tuX1UHsQH4PKkgwch86SJQ7B50sJB
+6Dyboefi82yaexg9+cNzUXry60NwemLyHoTUE7v7IKye9OIgtJ5MxSF4PeyoAxB78MUcgNnDcjsA
+tSdNHILbkxaej9yT3x+E3bPL5tnoPUzDAfg927odDB/GeACKDzfJ83F85kx5PpIPHp0DsHzwpT4f
+zScTTXC+fPLTfzr58/8u//rnFXTfoPx2xAV3ckXk0G/vX568/vrym+uTO2Zz/Vl56rPyn/L///z/
+lf/iZ90fLt+8uX51//u3b25v7q9/8/Dq829eXX53/ap53l5uXHXCMtfhnfvl7dvrk98+vPrm64cF
+85xSwzABnXLMvQ/fHJmkg2cHVLn45mJGCqHMlMRDwOIwz6wiT1kc7SzUe4MMDzGky6VWthUyl0gs
+IdfJXN0kdBKdm8g5EiH0jj3aEwUGp9pA+X7aQFYlPZDyw4r7RFdngnAMvMfxpDQwkqpKB/Gk4BQS
+UmemsXnZrpBbPdccvHGM2rEpOK+GXWTreZ5GM1DLVSJe0XI5yK0puX1Z8Bss5girxDPHge8HUshE
+GWyFTnRiUGRw1IzFZdKDPqvnJ+kUMrH0oOCGJjI+HLhDHBAxk8YvRcjhZxYOUSxFvmgFlUPg0xit
+AQUhFLHZ6ANirKSAklNgT1j7PwuwgJ9Ua34A4oGEoisI0mdWiBSjlowjJM8KZZt0xdEAxlmRUxzY
+EGE5/APen5INoKggivaLCCkTSEe6pSred5q5Wm55xW/lGOTLkBdYYX36v8uqdPqQRyYViR2G75ys
+qyL0NijnETQeBeLCBgDyWKOE6LjVQe5aMh75ImWgU+MLqcIhDkgULJsoTwoxCtEDGgATI1gD2SP8
+6oK4HJH2zNo1h5CSOjNJGDmwSIFOcQllCm7x53MEBADTEIck2LfBMVFx9uVRbmhulIOeu0Jenmgg
+C66WxGr4k1C0f2ogQxRMVHl+Jgm/yc8VNUWoXif6RxBDRoRB9Y8g7mvkXStqksRksdyqmM0iFgMw
+w0IJXs1ipu0KHdKpyS3oJlelKkvenkz4OXA8eoFKt2Yz6INobyLkjSt9Lf9UtsEZ2GwY0SJUcF8R
+AmeYFdkgiyB5dJbAO+OEtTHiZWXjTM2CEWFyDC5arqJWbBNThVM5D6zVKuTguvVAgiS8OHS6qbdB
+n1U3AuOwBY7FC9bS9+twJwlPizCnSVsFMpBiBCnq4jZqCHKrDEPUjcDeZdJCZnEHC1oNsd9Z9Psq
+FAqDVjwPTgDrox05M5B+GVMn54ORtdJCi4IZz7JQTjnGP4hhMtGyj4jxp4EdExMBUh3YLSjUyM7Z
+KVikiQClE0/4lMV3K8rgPM96dY5IOxZvA+vBdNFrnJohmHwYjAosFaHevYQgJhyDpLGUs8l7Ra3D
+ghkZXDqK0HwYjAFRJD+vdGnAYykTEnBS74jXMArNLPIf6GfitKGYObYzWwOyRQi+qvYI6fLJqc9Q
+dQoOhyevyQsMRzpXlhjAUVS8K3QCHG6FBPC2VKAsi53FXnVcwvP4qCAXDcyQMAvgiyC7AUQ3IykF
+0q7Ga3S4in1R9Ks0MIdRE0YcsskIAzM6hPSzvWuao4KvYCVRr3JQ3yfPOxpQpYB8seLS5M7KSnbN
+R7BhObX/0cDAdkVzdNC8KBoWZ8S3Ol1lIQHD4AXpQ+abIPrI+6dOsiL0YsYWoTdWHcb3zoqMQGoL
+2yrAu6kCkxloM6qjrnQbvECKXGMxvm2Aa9Mpck6EwwBh1HxjsTLUGQcABbk99eAZzHgUcJva0Nxl
+WS9k1iZ1Jig0j6Lck8A9irCci9+9UKFP6o0aFLdCQicRmaz/e8xRnRa8vM61m3q8DQnBRY7Tu6DO
+sCALhSDlkvxSDjRGxGCYejiRM01D8XSsB7X94K1iKJJXEExKSfclg8lnBcwAaER29zSrOR3GAVb6
+bPYnRzTwmcu5iCDTJLaqJw0+qjHI+q8IJfcmcK6Kkrm14mQuHjrB3aBCwwJQ7o3TcCf7qZDjJ0ex
+iWVcCEoqrvRUwTqIECePHEVaVF7aNUhjZoSchIKzwAdFyJcF4yRqpqr3cIslUmDljiJhYuxDms9m
+HQHjtlgWxP0BejTPl2RI9OVPxCIfQuI3eYG4nTIiQw6AkJzcsUISRJcCxBGgvFlXNQnZvSjCIXEk
+NJGHetaTiVRENkHKPWb3C2G7JC5J8Wj1bZB/d4p4lUcDw6zeW+otgPrllhfVnDwbdCGxMKgZGVi1
+ALMmuy4H9Tay/SqqpexAXgQKKmb4zGAxWyj8BFcYsYo8EvecpGNVfI0IGaAgaCAyI6UBMsOGpdeG
+04Jmp/jjpOkDGUYvt2r8iSTOo0Z8WREn4WC9nYAmJKFkTbFwcND2BtXkacnyzJ1yTonYwozj0Ykp
+wphlYgZZkGJ0UOJVUszPCNgIYQQYS1LWsZ6DlIkVdcER7gvaXiIb3I8qBi57Qm9pzWoeHQnJ483C
+6KD1p0kPPRIDEU/A1SCLYxIY5amglrPsJFUspYFRvBssngVFxDhZWRxkVmlmQRG6mV8Vxdd7/mJX
+iiQEs+ZIOExq4UZF3tOaj26E4ejl2xVxWb6JsWIUSJdQDXWAkVCnjIVge4+3gsu5UrxyHJjFbAuI
+cJgFheIrgJigZI4bGCUMJQ2Mqq/Ss0D5N8JJvP8iFIwgNTCb1TCXQ2pkXAnNN2E4ROg4KkSn0aBW
+PmGus2WSzGBomQnwMytmBlb+DDcHn3F5lDmgbLAY5TzkBEdpoBVPSf1KQfA3gsTnAYRycIkxRgGC
+BCbrECW+LkgEgXZxsN47vag0yEjC5qYzWsZ5EP1fQgmK7Z8tm48PMXFg2ajo+gXFKw==
+
+
+ OZoEDUv3+axerSCKs2ge+lkYAphVnWF4uzRAlw9AoUC9h0mWg6C9NV0vTLL9qv4JX5ka+lUtZaGG
+jefag1GPAgE3Z9D8jOKJEaNH0VsUChErgBTvyYRTlvzZQT4hGmAYthgHAqRMwculwdYF409P2TGY
+grNs5aESDTEOhcWIv5NVI99gTAJYOmV4jubsjKo+cQOT3pDsF/OakTSRj1wMJH+GX2s652Qper+h
+5HCCHTBikop/EMycIOZcEISX/19Vc1OsCAy2OxU7PgdJjAt137j77kWrEpAYXnJWCNCACUltmn0j
+hJ5ZPuD+s1VoaMpWyEGkc+3BKKnaEO92yxrwknhUhVc6XI1uts+WlRlZMS3zqrxzpCl5yUOdGj5+
+ViI9WzYQ7z5bFBgINXwAIRpQNP7y2SpselCF7JaBie1HGVnTAzqhQ9xptZwIg9duMf4dxkZZ2bkR
+ixZavriuLV3DjOMWhx1a3e2BLo/lHCxm1glYYfLVU8Jau+R30NJ2qkSSpeniO4RjAFkIGasSCyQU
+XArhZClsFgcB5pNrhLtfoXm2ztcIBaSdAx0sbIFxxoRb0MnseQI3iHFEVq/YkbTL52ogK4ypSMPJ
+roRszD+pIa5nXtOip+T5nVdzWNBPzda62vl93XEju+H98lNV6x5CeALQrmXtkY9Fo5htqyOFOvJJ
+jS6cv1g+q5/qVsWT3DHNF6RgoMZNLEDRPulEMYWbBrPgxPu5HG6DbDEfRxFy0AAjwyw4AwM1X2Ew
+S7hpYGh9FDZjY4YWTEIxxjiaQdiP714smmA+gOSX30ECF6et44UAGs1H0GGp517G7zTqENWQGhX7
+w6Kx8+NomUlNf8zr37hSKJacjH7FXDwQLyZqnC3ZoZmRWbLPMFEY1GzgiObZICjyZbdUuLNbls/q
+xloKMQQVYgjdZ7utdntQh1DJSxZDABXIooERlPVtA5MBx5pvGMQGXn7FqfKFLsXez3jW5z0R2lTh
++Yv2yRFxq2Zr1yBPu3692MdXy80C8XJMCyEmRaNEu5tl8bJHhMwYs99AmOPudlkI0VcVnu9sQW13
+ubYXQslRNyEaqGLrbSvk4WK/Yx2qeLkKVfjti90+NM9C2MxtK2To/dXO6vbijFp2zMJyjQMUwvOd
+3mq772gVe6ac0HAItB1zhiVaE6LVhimzbdchqaL9kE0DdYG6yl28FHs7jnDyDRpDbNscrIjM8klV
+aBayIYWlzOda6aPZSUWsCPhmI5IruQqRb2slGpqbszQ0JIfDPMaclt+veXKSiNrV8jJtzxGmN5l2
+Tidy4+Ao5mNbGqAgrZwPcnOILKUZEXRZ7DPFT/VyY7S1/Doiube9CIuCNLJdxwAAg43m7FuwgTTA
+wabcXPEiVHDn5MXkF2GO49yoaNwA3cvsB1ioRPXZqtI2QlK88Hq8iWS3KhtdVsULQMXmwdkSZovQ
+BTbMp1kYctBoFc+9Z5lpYFdo9WfauYqG52qE+qwIy+y5plU0gAhb8zICPshUrwgXPYB40QO8bCHc
+CeZJA7ZeKKHEzdNyCVZ0TavNKThmV8mLiMwvhdyDb3eebabGbs2lsDNY267LJyFsBtsKm8Gi1Qg/
+0CMiAxy1dsMMkqXWylITYd+EZ5ZfQj+6E3WZkuuorNDG8idXp1BzsVuU/OtSBI+sHfHkJ2HKOOU8
+AN6rC98Z0VUIaDeFSiVKYs7iWzgwySkujlnyhSbllfGaMGFC8YC2Ynj6KOWNQ2Hm6dsVsv9QeuAk
+J3vhP+T8BhEZZQcl60xRHZVQ4EksJGskDpXegyM+EjdQKqjqa4VwxwWbBgROSDhlmQHCkc1w4Rbr
+LTR+3asXu+KhPrt094pMOF3sQfl9lHWwdBcTmJ1BmW0HWiGDYDACbReu4VMGCgmOeOFEnpDQExWT
+Kw1MyklnYhHyjbUuZMewNDBKLJjFQ0PwL0mErdADpr1swCNOg5dJlSqnV8KiDwOiVxToQVYg2//V
+jS5+1azENPgI3Ohc5luy6OqnoexBdmDS2mBKJ/GYM9y/rjhptRUnwY6TUPyPO8IwD6ERooHus3DP
+1zU/B1GZqpBXzByAjE+VQmUmJ4kETkZkxJPLXWDVOy73SdOGSYw4UePfX/js0YDu+qsXu2KEeRZO
+fxwbC6Fd9iT2edTjKAwzOE4YD8wHF4BNjXDH6S+hcRPvCoHimsmPOYxNeODqxa5Y7/al0KIGVZgk
+bfp8r4HOs1ECKyKcw9wK0QDCGQnp2Oz213hMjUUshNmiRwuxJra30ZAkr/1OYwxJAo7ts1VYs+UW
+Qr5qEKSQ2AWJJ5rli2XshBOLIxhzJPhhAb+l0AmWAtGLxAg5EnMMzipYMJYsgPlIhJIfyKnUGmEN
+dL45TfKu5PSBGAU42pRprc16pIQk8T/JYpawTpJYjGTneo0dEGPeoDh3JsJAq1XM8YulcDLwYiDo
+yNwKESwKM29+QqBpWMciSA0koBUq/uDqxa4YTIxNZGownGqICKoMDBnZ6QATSUlu6kIWNHzTyqJ6
+vuuoWiosm0ASZqQaY6IJee/BUFw/C6fBAtidAF4kRq8qxJOThLWuXrSf28RLYdNAK2Qcm4XLBEBK
+ibHCH1uXGwnVh1CXJmfBwFJbitVlU/cBZx9oqGgh5MyNK90zNbtXTb26mXeEiPfNAgtZnhwmXgqj
+QJjbE5GE9b61Y4oTKNy0PH5XhEmcjPsNpIiIJWSJmSuWnRIZfi0HIkmVDqsZP0OVdkVV4Wq+VYYf
+tgnCUpqmMOnQtgiK0fQCNJQV0Iot3tkKFRVFwkkytCBEA5ob4LzdnyEgYEpgM1Wlm4irglcRca1i
+hq/uCkfxYLSttnDnoJhAhvtawLQKU815MKHXrHo0oMB0wuyRu0COxwk4eA6+KQ9AkJNqGd6tTxJe
+dMb2rBFiyq0UrGyYkK5M4KesU1OfVOKic22AKS5YHIku4kIDvEnRjNnoxOqz6giSB5Xdi9xEztcI
+MxD2rp5RnvIy1T2mPjMSzkvPoTRAAdzW98rhZUldgZP3lLNJlOaJbGTKBkN4eYzwEqvvmRJiFEtf
+vfqUOiOoGMQJeFYoWVQOePLJiFZAprcH/heyBFQyJSzUn7ePBr26KU9QibT1XhWh0raN2UA5lJoj
+AIVpED0UrdZn2Wck7c5Kg9FEdTpx70Vv4d250sEK5ImsZrXIiowT5SwEJzKO6rPJPVrNoIUYmh0z
+SQ1L1wBnJAlAoMUvLxtQ/0q/AzaDRVYVuzrbFvAjmaJDFzKdP5XtzGoN7dL0MfarjQ13sQSnDDrQ
+rJcmRYg6Pfq0912xApgn3DpQpWqPUsKV0CUsZDqknZWqH8/ckM3k10ATCTVlpA2ycOaXgDnh8rxQ
+saZ5Vfdok+RFzk8/QiiQKNqBhvlbinlj7gptC7dCi740eWLL7V4B7HYw1DNAhWhAk4ObhJzgkSVW
+AwckdHFs/cbnL5bP6nF10Z5M5uFvj7DFYVeFFQcYvALAzJmP8xYZXfC7N49WF3lzsMJFjvO2kizy
+Mb58trkH6smuN8buRTJXnbheDgH5uK2Q2HXgFlmIQUK+EDZXWRfV1N6FwHPWq4wJRvQj2pPEdZHT
+7u/bO7r+npIgA4QgS421BFRzR1OejtrDzbMLLQFP+hpfX6okg4u7eoqXlM1vX+yKxwoYq0LTlKpQ
+oWXnew2YArXSwAoMrQtZq0JlmGj1L9f4RUJNNRrMi9NYQY22WA2OLO41aJYwDbK54holnq5UIBEX
+ODx4FMTyXurEeDBWJGUrZKQmfr+j7J/u2Aoa4G67NNcI+eqzFXPYFfKrYJhUsYabOqBFOBS6AEcI
+qxHT6OuhKZ7ZTHa1mMzCN+G3O1ZjzUJrLMzGZiO3olBJL6zGaqI2ViPsdjMQTxcWrpqSMJuruPus
+GbOtsDF8LUu4NZJ70NF9mClWtxoojZFuK5450nJeWjLD0J7I2DTCN20sUfKscJ4lDAssjUFqfOx6
+HhrfRzTANx1MyS32nJBSzvYN4CYhFOi4+FzMPTnqaVaFvjVZWvGk7HoLobmEsL1NuOsS6vqUnNER
+LoRushFUcZnZmHacXVRzRIXVqwXPGnYo46R2HW5VaNR1LSbZIlxLcePG28cv72Odl4fMjteyi6De
+QVtLA11kdhfDvYL3XsGGd1HkK4jz6tTueLqbBibh8auO8it1f0uyMSerKG36TJlFKTTe/tMeaP5K
+QwgdgD0lKUSF7Y8RPG7MQ8sBjIRcYSIxHBla3gZskAFPQhiDlKsuWT2IoVxpuESwxoH4IgWMRbEZ
+TZaJ0fjXLIechCl5NBAEBLZ8GWoJLIR7eQcIWnVzFAJ9zyYyU0NWOik7Ia86VU0Uq5XVKFr9dStV
+P1M/kWI3CIefd9IzsiKg2y8as6VPaWhQIpZIlm+ji4lCuNkvl09SgnpeaEyggJDnPIyt+HQRHm3i
+oF6Sg+oCRtB1YgOz3QFpFDBP3S2nO/HdGr9JdF15FSNPupvMspb4Mimi1sLJIpQ8vDaoQweCENXg
+vJAeEN81J1Y1sR4ixpMcrjZyXYWh5ju2DVTA/n6r3+mzXB2BxeMY8GwNkye5u6mpEEITQJJ3zaI9
+L+JKCyEiUI2Q1Ptkv3fJzctYE3VlCjunNjfl2/APGkhj2IneLJ7NtYHRyyrIoPQ65bQqjq0sLh4K
+O00gXR6dLqPVZC1toLn6Fq3i6tuHKgjCIRWTt0lqIGLEQcEN9fPo6O5UrFHldtCzRBEl3qTBmiqs
+r1w+60wbTVobi4XZEtTqRDCvACYtTAhjZY3VMK+x07Q3pZ5vZKqwyO+z+mdIXE7BvPd7aDz0AbVA
+SBvDWoiZrFwaEOjKjhCvUuH5Tg8CENqUuMcMy8loapdCTTPEEKI1ABKbRqj0EssG5pqJT2JBbDKH
+rCaoseqB9EnE9anVCIZsZsGxSZyRRWvVr+y45mJ22mqd2SbflivBRbAOK18993aalK7WeB7aIdQe
+0IJnE7TVkSm9UbXphVDqnpnw/MWuGHyfBlkgvlwUgRvU9We5xegA+pWkK8teWcrxsqt1CqjdFLUB
+I0exa4xocXVim67u9ADR2GRnZT6LSq0Mjtvm123Ikk4X9vCQGCVK6PWyu3MtwWOzSqYLU3Bfvdht
+16rPaUnIpdBpOUsTYg3ABHV2AVDdmgFhywBaD7RqJp30wCEQRDSAGtFmflcYoMBscBKv2HmTMMrJ
+J/Ag8yHWs1oIMKg9p5vARK3llwdAFimVPeLdTq1yZ46VZvqc1rralfqa6GuyIe3+Wo1JW73a88Gi
+SnR2DeBKNAJ1Dx4ICDH0WZxTzNQ81bzonJYdMG4hlV3pz5XqhSi/kek8qrJLQnv/CLYmDEAaGBF7
+aV5VH7UoOOEEnG8M7PMXu9I44e21xSqrLcap5nlD6us2N6ofotYdjNUHQo2sS+cnsHYOqt+dcvr5
+oI6esS7nKtxpQOuOEaeyanUsRLUs3OZNA1MT+FqIrYHRFsUoXpjTlpqJaPeowBTmAA==
+
+
+ HNDLBoyeWktUsHDp/cEHhJgITma3M9+hVp1qheyUwhLCwqpuqUpZRbXFQAJQn1RHE5ZwCOAWNBak
+VuhrA1XIQ0ADg6IpmgYcQkrMDVlLe+pcMTgBe5DvztRiFugKEeM0R6sR16gyswR+5RY1payBnVRd
+ERiXpbDFraTZcDMV40KkCtEBVKr+5cbomWoWG4m1shnEFzu2UIWiMS9EnHcskWoLKZLsXBtgu3Zp
+iXhjnrDqHq2BtAOBreJKpQ2NNOK03tdSKXP3UeQuzXfy6nRiY56VW/pkQeazfHDVDekmd8JDUpVs
+uogj/EsMvJI1neHOa7R/KnOQgPKamyLCKlSXz/mL3WcBP1sItQRw4qIMfmqEaECSmxusG9eTFt9h
+dSVlPqOBijMMH4lVCUuzVsvgiiZ+mlurTOqWzKEx3+TnDv5EVvQl+rxsQG3IzPdmUstUOcSWwgEL
+itjdtcpCMhYzLtTEJR0bwGPmonuhXdJX3ADYq5olzdWSBYtaIdHCrC52yyiXuDQwKUEQiZFCyeWk
+ZLJGXPgknAMAomy5ooEqnuuzaGAhFOL0hYOBqm6NzquHAnmVxMzqd0CyJMzKsNL4SLjkmbrYzMlC
+BcHUxWbIW6JtGRRRnBFJYS4XgdhW7xLX/VZXFhxEXHo8pRbljN/jUXG78cogDiV10CWNzxBpLFfu
+Wsi8UvlBxlNCUTHzWfGrLlTMkbnq8yKR1lox/xRR1nC1rcUwidWNE+Sb37bPGS3tqKx2JsTPc8SE
+2LOTUoHuCOFGXDRQbh11ZBnInOjjouLxDQ/P7Dwze/bw6WVOKDwwtu5REfoU/E4De6/aGUKzTKhk
++66Drpn+ZQP2/aovjuukCZNPzQlolgqE5y92xRgCBQVn4x3SVqk+vMK2G/R9s1aXDVSh9SBpNYfl
+JIK5uzZwuye2PrRNNMKQFr290gbUwGo71j7bdKy6vhmQjgZQSMgbuT8z5s9LNzkJgSf3TUrYQtw0
+8IiQPaLn2oCwVzaO0vbEWRHO9SRtxepUbYXN8VpfpcLdISyerfEDO0mV8H33KK7iRQNV6GoDwoy3
+cxnUL9YMoa6DyoXYLNAmX6FdzItnsUCbA74V8qfBAq0vs2dTk5rQdAsLaTEHdSE1c1CfbS7Edg5m
+uKuX84Vqf81XUH/3ty+WC3TRLr7u/2PszXElSZZk0RWcPVy6gVPweaCj8ahk3wWaPsCnqsh3gdr9
+Dx1ERdQiorJRQKJS0kLd3NwGNR1Ey+ekLcW07eRgF476GQIIilLAA7EK8ozwBF2BYHnIvLhlkrYl
++JOn7zVN10vbFxebgqLSdrh6q2AGjuijdoaXGuzcpWNbgsjFnLZKuRDzvmogooVR2aC+Zzxj15je
+oSpQ2NH//Or60pG2W8XKDN/BigxUqaKcKujG+b/zWWu47lS7pWpXNntTA+HrrYtBVxnL5O6lg4rJ
+LAvdiyKKHIqfrxHO24CBcRMsU/W3Kshmvjp3LJspqnnSi/2tWvMn0E366AHh9I13qeDEpIaPlugB
+zKzlcZcrgvjxefG4s9Zv3HIsVAFlDuY0u1nhlD3rY+LaaoUJw4GMC+7jq9+oMpShg7zL8pqFLBAI
+iAAmr9AG28MHEN1ysunHV++WPOoAf2F/gTVWIi7uEBABawWHgDCJfQR9BH7y/ukEuN1Qvaf9x63P
+MB4TTIsy7D+Ek/DSwKSNU/PvXqSGt1IiKzyB1nALGpcWjWLfOM3MzX6ssBc87AIamDx/ACHgyiQl
+1hc0yu/kRWwC+Cjajxu88xUooEDYwEpqtwMObQmWBVuNmF4xDgKyFqoOIuyQmjckPThI2tlhWIDK
+6Ng8ORzZPVwy3Q6o4T9er2cZV8KekaYI9MHvMWUyIStmZxpq7irx/cZkEh7E2aYhPYjrU6VND6I7
+cVqy0V8DLFZqrD5NYapV0q23RzHrMTxLmqaVU1+55xoJLAL2Mr7SHs3F2+YdnzWBf4IbzVtwEIBd
+rWbTCCJqrIEnifF/05ZvgD0RWN8+1fcAy1UTqaA8/i6/S2ubrHr1eB4q7hCwkwQHEOF6/7Jn6bq7
+JZTOXU/oAPslA4hTSQTwAGl7D2HZPilAnHe3xOId3H8VTiZxsf7BVfn3cFwmS+GfwyGWcIBLRFd1
+ENMoQfQhWVmxp/Q+yDHGHlTx8vF0nVPpUJ3hfqdIeML/qypTmshb9aTsf1BPoMoQTqrXrkxlyY43
+GtY/aGO0FVYARAfJit9gt+OOimqG43Wd+DjKpraNAXkBIuE4jKBvdXLo1IQz5OZ/AbrBFdeKqL+j
++vvLBSIuO8zulluFXoyk7RuQF6MEx4tRa8t7TUYd9ZZu8P0ZeiDXElRnaMZhGgl2Ju51uO5ANBLI
+GCooY8ibKMeQHeC1hhfOvKrg+YiTlBuMtgWnvghtFyu21Wfx+ewTHhQYPgC+izyJH0BuSpxCEn7a
+4bpAKYgC7Q0kxYvY0eUCtSKCVq8kZZ1HEPBwLaPGIWsT8Te9ZagxwzJGpA3cDtg1SiXXDUqUNh40
+4Wbuu7xEd9eu69XdLZXx7+FMXKLafD+SGYoup2+6DX++RniHMxKXoubNpALV3KG41TTHJfUqxvM3
+8KokrwYLATtBVOtmoZeWQi2KUQr49QK/FSElbLKITsvtFo1PRgFKapMKdfYfOiYCAOZ4/edrhPfX
+jjGrQbo1uObpxq+21DlFqoIX3dIK14d8EfD3Vx+F1jGCi74ZYaRbtN4KiGFMcNS86fCWoVm1QBG+
+bmreP+3erIwAMsezLbQmrp3S6H+zyhYS11GVamr+GdtDF3Aie6uHSOj9pXqgYL3uy03nd9GVTC9A
+FOJfCVvOYSpPWcqOjCJK3EH6kpbLoHDqMx3M7VlJURqjCNlaJBlifj0LNOcgTw0fdqGGkbwHpiJ8
+ACUZYpGTq/himHVQccFPjCoCY5BbU1cnfiWMXIRSKDqI4liSoKAhCU84CsNqeLbVlo3aDBLfLVxC
+YnG3XITFCBzUySLER8o7dGWBss6K9YSPiBhUQqTKZoAH7PsU7qVGStXauhcwhuauiiLCtlWMThqR
+P2XU0MC2ZYr6dgxtyRNFti3FTv5+Flco0gyMDG6eRwwpFuWwVUoryXowwmM4hpGOwFwM+XUWgBVf
+s2FXfD/puVJ3MYe/wWwa5QBb2sKOOiQA4/FH8Hf0tk9lZUIeB4QeWchw4ClTuEZeQRGaiSTqqzXY
+ElEF/ghW0kkXUEknvW1w9LcZpS2zyu8oFxO49cDBf7/0tuR+eIW3r1s5Ntq2vrcOYtGydWa6omVT
+FjuC8goKMlFF5MrHWcOOMoIItW8CtK0/7NfX2Lr6UMugg9tyn/IKkEsYu4s8rPzV+qhs+SqgWP9q
+dSpoFKwIECjftvDQSQqYFQFdp7tvkLLhKAfbE/Yidl0ANzIm9siW17bouwIayinawSJm4w67oZR6
+37mFg+3KOpbtlCG7Xd6Qx0OitUVqW4Ku0B1HhUlIWwWRiv4EzwVeQnmYwgcFEEQOT5NKUpDWsWr7
+AeR7yWFNNr7WAyT4wXyiB21ckeP5RIVwTsFSIPbgUbia81HJ/KQtn99A+OE1C+lTW4KVuqngUXwC
+rWPVlnmPMAgowWCjzHvqKNdgrNK2om8pKIR1FJDK3a9B3RFFkHyGol4+N7oVqbJVL1L5DJmHRN1K
+k3WrJYx7j6+xbXpVRbtTAaUJQkOGJpm+cZgtO0iPB3VZeAQhADC9K1SGJfuG2nRzz1DztntWMlsw
+sVfcn0wBRksIAExfUAPhaWwgfa0kDtS2RRsoVuYiKngRgJtKGrW/Nb1aXJUCpv3cBQiXIM3qwiT4
+AVyOgwnea3nvYLARqcK4x4yS9FdAwB4VxpWIj0wHCf4n24LrQJL3SVpXDpOGVWKCcCJECsOfiZ6V
+rgB6P8X2YsA4W1rDz4tMtzj17jcQnc8rLzoFngV2n0yI9L4KGUDmNP2033tMO1hfyNnImSnJ/I1f
+kWyQuY5+DR8WlaBlCjCP7vWybNfrb7kqGjWIa0h/tXVv8HouuEGG+bvRiCxpkQbn3SN/nyXa+++z
+BLD+HhtPpyypHVE5T+qoMXBaVxSAi1PFSFO8EG4/VQruAhoYx0eB/WAc2hKsC6iCFeXH7b9g3ZGb
+gBoYK5KKOEMZbyGO4cgK8wy/IkBsfclcKNQ1pHOxgGAoaMW8AkYd7FyASQjYQBEQE6zAn7ZzaVtu
+JkozWBvPnBFKj77xAG6L9BPoaW996/PC7Glz4C5hla9Tx+R21CkJi1NHOQ0pgNW/uUlYXfXS8Bq8
+Z/Z3A0FpSOwYt523rYQ9qShfAMajwXiivy8el/koKl+yuHj54o2kqkkyNJ8gf+9tkaEhLS/Jz5aH
+XZXlKmATQPB61wOmeJLDdb5CXeot7/DnjT24SwWigGVCNXMZQ1BH4vMl8w6IJttHsGpwWXtdWi7K
+2Fu8N4DbIKK4dftcoAEbvuKyl64hr5Dg3328WIpb2yanZQdP1TXYsZNqRfH5fAI9kRe9JVxMmSpV
+QPbAweGTg0DzWxmBquKJsJh2SkzCpHgrZi2UMQE5WDJ2VWUWYeZiuZcO+hHy89XhpbIY5VkNzBJ0
+Wpymw0VzxxcQ+k62lNpF+jAh31OwGKTY1yw9NL6C0P8VM6qyEhYZGxgMQ0DRwaGwVoBgMH3eP5Mk
+XyhMs7BXCLB0EdT7QsKw8PQV6ZhQ+gUxaPycpIJkgNxRHLiYPQ0srsVt1gqXd7y3FmZTrkwmUW9W
+hxQlHg/UodO2WfjlV8Kg+2zUoGgrhJfKwTnhWtt+L035exGKlqukEJJcdSNz7ycwyVlRvQMCCL9t
+CyN+A6ukZYezlKGyowpIblGphahMpK0tQWRBNpCELo3LdU9jozBhyozj7Gr8mpyIVchMuB2VHpPT
+O1fo42uEa4UqWCtUpVZtL11Lsh2syf7QqDC5FNuGWNSKssuxKTdJxVB/Sn9tt7y8d5BmWSgz7cLi
+Gphu3GyZ3JiPFAD65itCYn/1DVnPiSJb1OOLYJ5/kEsY3CZNQB2KfNQhpBbcOxfTygcG66e64NVn
+24bcNR5SawdnZmDg4N5r0VIt6Aovtau1Nh4BRWNWkDRiohwlD+avQZESxkqqjXnxaGoMriijKj/R
+zcbLhNn909D4cqd8PC+b//X/vuZ//Xd6EKK6j31kem6fsJvHAzaPUoLB77uQT+Tcs463z5KqHW9O
+iLiKWtvk0LHSLsGo8ARhSi3HQk1KuDYwT8jjajb5uHAtV+nA5RVwcLkh4Hk5W53R4rksnrMgasNY
+YbY1QcS1lk2+rbUy37PWG83/TeaaiYut2Bv9B7lW40H3fvaFfs6ZTFn7xCN9iNN0pj51zjP42/Jy
+a4pLzt2zappZbbu6cz9hj2nwtiAiNDN/zLF1QQU2+mFbtUCDI+1RCst1EDpSA5dtpnsW8FFbEO+m
+1gMYMQkmP/BPv/FiaL7F2CcbKFlNoVHC+Z8LgvXyPoJrERQ3AYDxCeXxU2TXt+djWg==
+
+
+ dGOlzpZPYEptAvY7eNxjY76KSHGvh1XJ8rqa23o9TlaBSK5UW4XTjMt5bh4Ctpa8gfDLyGWDHLDP
+3fper2FgcAOBAMI4RERAA/NrtxtIg6W3vwF9DBBAseU+cHBbfE6oWInLWnRHtEwuEtbrxow5qJvn
+ogPbLxiUnuB0HzRlHAAn2ivPWImLF5UE+2d4yg1EFAzNJrjJYhoAFpLosnr0W2/aR9ASPRguw6NU
+cN6I1KzNMNhdVADv6EtxrfK+uFQ8Y3/+zeenicfr1a1Dnywcsl4/rUZe5Xufh2+1VWC49D4v8uPj
+k7x7BOWrwpSQjxpMP/owvqoIKAsHWlYPgrXIOgbz9lNVWbekBEdgnD3KmQgHnvDixldO8bNOONNA
+T1gC0s64rHHwwhKQRVJiZHvL9gJZNqUPocL1/Av8UDh4e0s9jW2yXHtue3WLhSfZT+OtjE/oqRQ/
+jRFYc4u8rnSbnOG2C0sENLwzQ9thnsDviS4sX/QbkKbHs4obSPEXY3tDlVjoYXyBrvlf6X1zW8ZS
+BkSCRS2sAngc+sj6ddMP76v8NmXgkNMgjdW4EmEj25w/1KvC2nrONTOd2fbm1HTjaIAToums7XKh
+LYyFV7KSmtRS6O8Mgh/qG9x1optZd4KtlyB/v2UxESMHvVlXaY9dE/0KMKgr4g3KxxWksC50lg64
+VSHaRjZGtIWJpu4pZQP3HlzSg305Bcbp69VIOqivIAKOvEGu3HYt2wgDix3qmJKV0AUcYJw8WOZl
+i0EOEEaiLfwX7ZjFLbrO9OzBU3fPIk5UCp5tdWSr0IzrH5hHh3Pe+sOW2s6P2M209kWpJQAxj57z
+G73lnJNpgIuZXTSmvIZfkyzGiyUx5nL3BVepg/TrRSyeCygae193S13v6xJ3OW1nrKV1GXaDNBmg
+B1OtkIVc7Wxb8+DI9JuqxYy77bagmnfNxCMrjforpK5iN9YZ82Cp6GNre2KRQ5PeLflkzcmxnmWB
+zCm7xfRGB+a4YK2ZSB9gUgja75P1157kcZbDYj5gKbMXQ6WNE2HKUoZFhkCqSes+lzbIPNRyS2fB
+oufnyltsFnwZP2IST8ezMA8vFMGRB0k9ajmqpDgRT8VPoIcr1rEerHNq7tS2uGO1HjiIIcTAiEWM
+wy0C9lqfTUDBalv9LThXpVGbHM42UHBOjdD6P4HF3OGz0+Md/WE42I8qDzTRJVdLZjOqz0Xm8Q65
+oNW2h8UetSW5axuYbY70Yc7DsKLOoD61lei88G5HxhvUR0D5cC5lV+S2hdVOjmSvdpvzdFahNE/3
+8Zb7zBIoQTVusFdADjDVwydYGtMOVbZZVhs8s6zbb0BaVuXjSlt+WprNuZk8wYsCaiKKbVc+GK3L
+TzAINrp9u7WtynQEN7W14VFZgx09yEOYpdkVTFv4CNLy/6ktXrdJZQ/WtV6BE7zqwOuAi4Atahfy
+vWCdzTsJ5AaYd4cOJtci3An4jBFq7T3Yyra5ecyqgXVY1kmz7fZ/o477bArGhP2CGpH1wfUTora9
+q+JxSJjbA3txhs3EUzJ/w8AIR0FBsp++F257cJO1vfA9eEjooSuiM4qfUTGK8OIBzBCNVpPNrCVx
+9LB6mulFcUXajmD8CjDC/npJtWPOgEKMaWBnPp9z4liex/Cxjl/PUkW8Irj6iCx4Z15SACyWxwIT
+joFnmTqslNqNz5dHj1kqwrJsbZkCE0GOfQIKzCXQQKxMeVddxWYci0uOrfikZjySmDzAdLrbGOYY
+rJEhA90yPZgbS415D/YsFueGmW+1rWHHQQ/yTEbHviVGsb1XVQ1tq9jg2iEz49sHvNxcrkp/a/RO
+K213rBnA7+OVHg4L/wnLjnULVYtWlIbbVqmI9YQje9O3DGQ9Lck87g9bKmVor9qEvGxb26gVZvBU
+6UFpEJZ9RLrVxmC17KwTb1ZtUxe3bh0oifLsH3yNpu7h90dNg6rntIK2dmO2W8WvdmdlVT/R86ii
+gOvo+daIMRypIcCO+jWP1AWL2fKF3TpkYBICe8j1nFLd9QMBSalsbfMycNgxuWXbGtiKGNuWXr88
+rTPPVyjj83ODjWzKjaGXFUVcLwsBRzgrTQHY0TTvrw3L6Lr+8zWTg0xZKev5nmT9Bta4Iui8u9KP
+A1cnwAnGjc4EwJ57gPv4CdonxghCrbL9Mg6TgyfMFHUtA0wTAhS7EKAwciV+D1K1rGQy1WMrJUF1
+U7oaIBUeiOtFk678BwOPzAF5gsGnWYo4nChBlakKfpXWsRsG7DCVltGLopoXZhcwZYbhca1ab5bp
+kY+/hNrF4QVCl7gjVlaIg3n37aA+HvYxPmtJNlS/IMGx5XUqdoAgxX/CV4RjWPHONHwa6IVCDESW
+gri2pFCn+NAqcqRhcPg/Qbf/9QteJchJnc+Gyc8Jnnx4pOUMLQlSZNpR28PLrSe3U/oaOxhZRf33
+yM/TJ73HUsUZfk00lRFztca2vqZOGCBu7Fn1F+7TSNDTSCABGUpUOXsFPlKA5wGlOSY5r6dyC9+V
+ovPqQnbS6vAvi7MpPSZ/DfBdvOJiLZoqO0s8W7eUa3D/y5musaoJd+PgdHNwhYdeTjZefYYAOBA0
+DF+eEwLTjAkQNjzAUgT7RjTxUqmXZp1NoZcGRliUUxjur6praJ1Py//FuqMvw/d4jm1KDu8JvLN/
+vcB1mb4kMq4iZK4oC5DgThPvPVe5aligriywYqBo4dKDTbw1AucJ0cGj8iOGV/jJd6urBMJJ/gKc
+/oq91EgDYzNysK48UfbIwfLIf2yb02OPrQE9OCqgRf1YvWO/6muk0gn/8V8vcMV53GUknFlQ+Eru
+fAfb18hzwaoLrTWp1h1Ohyx347NvS6eFm+XKdRhqkLXFnfbOkkoehpCEaq+vIDMt3fhzHDI10yL+
+Tt0Zd9kUn+CxF5hmujkmdk2UCgPdy2Y+RWUDw9bq2dCBR+RLuJtjzmAOj3z46xXeaxtZKvCDE5CY
+e5qqY3FhsqYHl8CKyA8UNLI1xLrE+1X3UN97Al3L6Z7lzZ/gyo8Gz+bQAcJSLhKT92ao+csIPGoJ
+YXfL4C4soSNmybJX/b4dLLkOzhdXAFpOVoOqbvkZvWB5duU0Xne0rYhk+lcz6mz0JCc89vYtmGSV
+eDd8tjPKa9T2EPfBJyyOLPT3ZEFSdi3B6toGuTcj/I/a6qdzRdeO6879282bELDdiGSa8d0uCa6T
+wRlege+W/CWIW6wp7UmsDsOQdped+HlxyMQ7WcZr0DZUDENYIw2e6nSb7hIAI+lLD7gP5FUPTkV0
+7UjFd42IrTy0PZ3Y45uRZnHjXtxDKm/cPtbUuAK8yzuCck4Wo3LBO7JvslxSFVhXuqG1txU5/vIK
+slyiTBPU/1ou6QO8KzvTwAwXvavc8l50R+Y1OC8eGHigqTE89/YjbyU7/W8Z+YBbSR0A650P89DP
+lLqgt1dNM3hsbw0dAbO3N51uHDbwd7YNbhiCh5zGa14v3YyMsUniKLs00tuGGOOZ89RWADwEcjRd
+YbHItuhEOsW2mV61lw5g/6clcon0dvQsA+/k5uwRGEtefK+ltpj1wB3br1IctD1v2c9Nu9TICGg0
+kDrUCS+DOBSu5D9z20MVIc4Lmpge6Osy28W17xIpcG3yXk336OAwAlysOXNhXavFep9prinPUAN5
+6MIau0asQOkTzi9SZr/+vmvV2ZSuqX1Phnyhi/SCKrClmSwHJ701We8IAjIweltUTc4riI0uQpVf
+xuBlcNYj+DP+GmBxRypY7kg6y9Udqeh5VCf2Y80bn8QWZJDP2g6gG+b/9WQSKwMOTlGTMk9zeD42
+m9ZVhIKcatdPyyfA2mwSPlhl+ipX+xHX5PziOxy6pFzb7zItHFqmer2WbLtNFbYyfALdbUIR3mPf
+5uF+ZBJMhRxcWYzRQORvegzYlNdZX/JYU4SlhjcF1Nn10gN0rQK+4Ab/K+E7TRdbGUttC7kRzMBa
+8qk12EWbWUNWQwNiYbD2AAc458/yIeNQNUfQLnFReNK2LohkODIPZ9PdZui/nH5hbDUrzyan37VH
+9MfFWIAra/UaiEJ7cpMzHapm0zXDdoTajzYGB+xMd52dqTY5JlF76eUxMxtyIy94Q8ygxV18bla2
++n1eqa4gEMLzN6Qt8WMN728D81//t+ZNJJcm7QP2iowitiyEzNQyh0KEtcx3hWRahfIwmcxWfHRj
+PvGxRY6uRWUtSF5OG7/lBcwTspTThWlgFZ41y3uo/vPyR+V055XMIFin06zuYCVSmkuGiQkMDEZa
+gpVVr9WbKbuZcTvc8pFe+63xRsxwlVzkSMFADFNGG2veK5OGj/hKffyNOmR/Cemcz/Lr8TieLbLj
+XAapp9CEyHtJLivfqk1Z9CATXMceSN4r85NFqrbM+2su8UqG9fO+t711C8Z9JVNeaoIHR7dmwpQe
+6GCpCbh0DQIIS+YtHzZvZZ4YVkGqYKfZLa6MSaQZysjHwhUquQPXlEX7NHD9mqB82A12AmeBwROv
+5ns23WdcoZMEzWQm4qcCfgwQAfYCwbZnj1jwCBoWjZzKCw+3thYPduV9DfpF1T3vEe9V66/gj+AC
+W1sXoDBujPKwoxi6q8R6T5uqIuse8Z45ytcaoSmfQfd1QkBu8pLkbDSBcY4vewXrVo32Cq0OAQpX
+1UeUbtc062vDudwCpqui+yCAbU+AKMde4D8IQDl2jSSv2u9IMovfK5o6fPs5sajY2H99lAGSBlMj
+OT5nhPyvcXQ6+VF87CmoaUPAWVbJhL+lGPtH0Nf2z9cIw4Z0VYAjFvz/ZNs0Ps631l1PW/pMG3fV
++q48u+gtqmIXX8C31BDX3bi1JEmmcXZGYqJs5/Kwt2CeBxBAGAeKPKyBeNQh4Suf2r6VSvAA6XUX
+kHQoVW5cTzSjj4pwCj0Rqyx3/zm7mh57ERlnLB4OmeShEJENjDrfBT6+RhgBeyzWPFs40tRLYneF
+QB7Gtq2z6IGOX449pxrf3a6P0zliUXe2PsdjmL45yr++2mRH618vrX0C/coVmxv0c2bDW25bnhf5
+84WBHWvBbbev2CWpGNvi5D5YKTKy5+qOoSjyJRsYSRsN8i3sZ/g5cznkeGggDpIEx0Nna6+ax55s
+uAvi2ptht8Fg5mpgnRkKklmjwXXooCDvAE53uXfKq9ZgXLUFzCMytrwMIHV4TTPENdeef1DAFHcS
+P439Nz8pANlLJ193DjOqg2ABr1rFlS33SAFnOgSYRFeVipueoaDr6qOWU4ms1MYq5fQKOxw1sfDu
+nghZFQWtgUjubKAnd/68CEA0UPGkalB88aSK0XVsC6fkeVbWxgeQiRRnUReY2TdvUOdVgRTPbl1R
+nPhVSX04n/Vtt2nP+F2Nz3q+D/BZnwcWPvSivxLOcIjlKDYRvogpVpmkKWBO/J/qMzwluDScd7I2
++9K/F0w75FqvXswEyukVMf8L7erXhk9syjkmzYZJM6dt7CfVmjT526l+pHIMgmc/qQ==
+
+
+ MxfxuU9mV+dTz8kT6fe2T0aVQ68SHjYqUwvSf/N6fOOokjM1LYhWSTqCrawtamkTbNu9Xbdwd0Q6
+pfUglvl8cvt+Ob5HXeGqBBojpsy9kpbRF9UQY0g1MHdlKqFvFctBtc0oNtVMl+Rt9l0mbbC2+YVB
+z9J/NzDm+o40pf8XYdnnjVw8S/eOipJ9jV3lDBKYzN02CzOIZSriTQMPuDLJQGjTMGyCFlKRJcCt
+W9n2Ktfgc++C2zT3rp9h82vXIWzVcu/R/Vt2zwUu7OUo+4sdwbVqM/bBj7slvYjkQrMan3WZQUyr
+F72cc82B0q6fweaBwWmVMRXPrwii1KuCV215Z5ipkQrvILzwtKT6iuGlcMfigfGG6/mq27tcpiMf
+EVuJZ9L4N4DZ8Pllo7KRMpEYmJE8SXc0zoJs+ythZFEtYa34Fvpp30Ez+VFAZUEquu6C24bawSAG
+rzPkkQJgTVxh47PIpQg3XvcKmiiy8wKjA5sYZGt6K2XTnTSnRW0+vAHDpORsA9V2OzH5WnliPr5G
+2M/M8W0FRPCVUiecB7LLLQM0A0XPJDe9lA5ButXoI/ZyEc7srU31JXNFi7ya8WNNQbAIdJBC4FBb
+4QKziYTwsYzljYYoZeUBfecB33IaGM80YMaRnVn3Fk54YL7wAmsEGDmNaFY/Kxzfch8ZvhfU+t7y
+Rhi2sfBXSuRScZZXLBpzDuThc84gaYHBH28ANy3DjSTQ8Ih36WBOqEcKYLQdcgxPMhs1EAGIg4D0
+gFkP+BFAK3KQFJyg0oFJtOJeUetFd/4R9JnzgICMONwrd+Bca9XYqlzRA0RL7pJneVpMALxHcESc
+WxZfd0Iy7CZczJojKLGVzCeU90rvUYDJzTLEUc6Z8MuIy7mCC8jobdOlhtBr6IWlmnnEeyVRGV97
+FEhZU20IASByyYhLTMNknBH2tTaNBGRoqvvvMAuSUGw9i5n2zNHzUIN8yo4eedg5Hp5x+D5QtYig
+Dp9l7mlRueUmkKXVRm8/X0e0sL0ciraEIpXCup4cNMK2c4YGP4J70dGdc/HVnGWWeIJJHSdBxajk
+ASx+Dl59d+xM1/CZFEOScPz6kQ8Hsc71B4O3KXE9wd5/hLtevF8NTJoaE5hJ8Vc4ZUaJGri9RwzZ
+epZn8pyiIMilvuQWjb5W5PtdW8dVWUMtRh0FYiXEXb1nx40MtTUDz74j9j5J0cwCj5SIYMKvwJVY
+NwpX6D2KBAxghl21zFbPVEDky03O99wNLFEgd89jB+mgxZfcxcW/Y5Vb24y4s4SXTHMjv6BkqyQY
+AjbQXG7kZjg2hM16DuoCAWfFwnix25+vDi/gyTyrWOh6F8WjfRgG5FTwzzlVNORNVoC7IvXvSkxt
+6Qtr1SJ5zWoYQeQ/yNTQHrS2+GBsi2yN3CcrMYTpxYR7BgZjlT6nZdQ8LLh4l01j3rIHuDFXCYue
+XvyaGtJByY153gYzDmaOk/WRAnImW9vUegyMa7DlJ4M1X1NTLqaxFGyvgIl4Vgrgc+teMz+JeTCz
+2JqecBJ02fRK3rCj+Eg8/upe+1rqr3AUoeMcEasBZry6J04dWGDM0fJkqJ+vEZ6usCQ6fTYSl4oW
+fEVIrKVNLbgzGzN5rPyN5k2rRxAbrD0s3a3k50KWGBzWhKt2wZSFLr3tzOCYDPvRoCo6ohGrFWCy
+UynIR7XtoIi7sMi/1eWNLzY+innqTtxx5vSoSJqMwHNwy+og5pxeML9ZaNniczLvddIA+KQuNAEv
+zPlYYRgDcCPIwptK8bkjE+67xTKlKLwCslLuitW0MTiRJFX5jjVaSJLyHux3cZpcZbw5eASeERcQ
+XwE0CnImWyboiWgoKd02LUgeOntVi65PVAUMTQn6BCIKSDWaBp/zS8tUR0jZ3zq/CItF/RhXqvZs
+hmet8uurnrNmKKelilYkGVJm2nMm7TvsCAe30rUuoEekgQRIVfbQlMSkejCt9axKH7hmHVXrydKL
+kxfpiFMO8+/MMOaDydBT3YuPKu7S4sPWCJD+HmLJJMQtkyJx9fjW+A6A4wpobedwzNoFknFkGUwC
+6hpMYHRsq9QdIdphXpWsAL0R2dBcuNdWHZm5ltAePrecw3yvWkI232oMkMe7oGak3CplXidYayCD
+B6UteZ83hg6tRVXU+IOMCzU+2BbFRVPADhAGTNZSAJ/1TwpA3PlWoQiyYte4pHdQP4LsDeQBZua4
+kO8I26P6Dg41RFRbK26xpgDYqGQjVBORfcXcYJeKIzNwnfJh81VJbZgwaSKq4yjvwHNYEnMaRECO
+5Quh/tNcjDpT+INrJkcqsiWUoFLTcy2diKaZ7irxAFdVUkFgLZFLdUmKVwvMOsDQWkcM81GUXLLB
+EkP2G1DI5T8QUYIb8ioOCyHYbNSOyvgIM7IkDB5KA4VkkkYwzKE5lLvsLQhmwkEAYUzlBiJWR8Yg
+QQhAUMyu+0luie4mmqBVbJnxuNNv7DkRkeByVMQ9uRWWveIWGrhUThtXiDt+52WYR1uFqnAmwxv8
+M3zFDAGqajhx2pjcl3oZnUYQPJLqkRbCv76aYuE+wZX5bHnTs7icsrwcZexb8pTFYXEkOK3zcNoY
+veW2MmkGr2CWOMQc73H1WKZgLvgewuNoAyW8tOS7JObuYX+IXGz1Mm5QfM33u5oxt54VAC8tWjZj
+Wze564E7cHqpTUBSoqzwm863lAOwUmZZ9eb8Q/hnY8bOF0KbufcicBKPZ+hkKfhLzJKMtBiK5/Yo
+zQYj/9EP1vB3nqpFIM40wUHrFwF7se1p8CiL2yQ4zO4n7O48SEV9lCUD9SX6Vcu2WG9PBPZcay3Q
+ZKKyIJSplKY87y2OZVp4WuZ1e6bPWL73wYEhqDVvHF5mgXGIzxlfI4rnghigCzVE7KwMu6oRpnPF
+ILhGKvncSBOek2kG3wChPEIGwhmz6lsBXAZClQtllmADNqvPCmb0G7PgQLDG3IikL/jt57T0fYfJ
+MAxfJiCvY7TBgoS9vCGhuM5STHQHIYrUlGK0AwjbEe2QeVhSauq0hEDEa3tCeLRMJ2QXUAYHFXAH
+8V+87rq/giwmanGtcXUD/B2hAzcedsBxX2GWKPcFn22aXcEkn+8VGovVFsvaCcZyEGHs0x1ZSeVQ
+Wd3EPGXu+XfauLy308XSe1dk5Du4lMvUqnaGp2i6KrzmOQ9Q4P4MMpzYt5JTBSC2syMGfDpoC1oR
+/T8dtCywPNreVd81e7DTkGKZUFE6bydTC+uzHXElKDtIVmhLuW8fNoL7frMHKNF2xFka75UGTAVR
+CLNAmEXTCThx8/MiqW7VnEQLqZppADGIhIWdKO3NkznWTgwM+rrH98JyPk9fC9PGEp8r/JjTVlyO
+Vc/cQGdIxhgQRqyaDLjwZCl46QUk2QEBfwRZOy9BnEuEF9zkM/nCWnJDy4vKtEXCBXbkzNx9witI
+8EvHndZyKjVwP+dVtvSY9MLFVIfKtPIqX1sqwEedzDHca3DkZLciI2HaWDKgrmB4hTKEhG70FFBc
+ZXUyTwtt9qWkT8mqWsp/bL8TyVZdZZuyYqSklaSRDjUsh0vgNMO6Lt8lKk722WIu9nJwrLCjP18A
+ruRjh1+OVSzl94H9fI1oppOSDEuKbbLIIApz4vFpNplMg6+qq1HP/r7fFUK91C/JUqwJ51GdBV5v
+3p2w5VS90fqAfts1AS/GVy9Zel/XAJ4SwOJsdfuRbaEZLalbWlvcneqrFPjzNcKlx5muP6dUfBUW
+yc0OYAgJly1xzcAgb7ttfTf3lnX38o0oqnOelUAvZXrPSo4WMKvG4kDK4ue3qLJbUg60gros6Zvg
+z9cIIzuzpobVEZXjIHanoaSvwuVG2GKeOzjxmMMYZClSjEG4nlqF0jX9oSagLubILjNwXWmNWnwz
+t9+f99GXnIMgX1PQn4TjJLx3rQNbOkK8lOqOb3Bnp1atcW5RdngvmUURLmQlVst1xxFIcPwGrS1B
+aIwNXIuMWubhQn5EzpgGojJ0E6DwVTtR1tH+gPnPMQuD57U96shSWfFd1sSyOvmdSw+/j7Q/H0Hs
+2lXe+16pKil4H3x8goxntEddmBbg72Up9nvzmNYHPMX5Vkw9OO7ksbYFh3cyXTEqodsqvCqodkrf
+kq1YkAudrAl9FV2ihSms2N40yCHiqhyFDrukSlV7zreEQ/Sd0GKd3PZpcMWLLRko63vDhSCZiJP1
+JxVppunLXkLJt+IDwSCRS+rlqxGvhjihqmnNF1i3Xv+6Qky00HXRrFXp48dXh/fyDFhEiMdoeqnt
+G2EmEabR90GDlwtwGrwshCH3i6PiRBAV0V/guDP6yDc3FJS56oBaaQQ7a2PIqkbwkGLPXegQPqVe
+ejGBIi6hQHhIrzvkziQ+hd/VwbOuJmsM6xy0RuhAUBW24u4Id6i2vQNZ3L064PEWrS0XjEhFtPZH
+AVMFcUsPplANWg+utKY9+isA7q8r9emvGpdW4B5OdX8FnBpIevcxzCTVctWbAOe+xzQAbAXukyf2
+zjzn+uIBRlxC7WSP3Am2CzsZ6sxYuFDOY5oMbSJOoWYs/mmxk4RdxzpQheTBabJfl04NDNYleWzH
+lTwUBvtSj84+l88dYN0M7oxidwGHBGxFZMN+sTa5mS/c4/O8RkZdohTgcT+7xaNPdcW1aJ0G53vF
+vuV3+73APfq6qbWmhhbwCBYrr4LkIreAohyarWoFnZ6PEj9P7pIKryqZD+wlsy97i59H0ONT13Sb
+o40A4g9si/a8BwPN51IRg+HbsSFEFr6Frsbq8G+Q2/kWCofPeCfHCQFHkJjENLxuhNLvdcpV0BwS
+S2rj/UlbzeZXC60lX3Yd22PBcVKpLb3AfEVsF9zBvewUDWSOgcV2L1Nu6H5p+xbTlAtAST4FqZha
+bPe1Hl2JtbDma0rNFtb7JsBBCAgrcWuLZCQ7flaMLMEjbj0YRMJbBrv9HiS/nAz4UUQxMuAfQOaT
+mYCjTtAsiXKCUM/PeoQV3xnZYaDEQFtsBy5Ox1wh/kfuMUdd8ix7w0v7DGOgcE0kgjKyCpKw0GyB
+dRc5+bBwztvsqtP+yjiUYR4ojDJnDi4zBFz4Cuu67TI9ISCCoP3WALbZMzkpbEtGBs55ZrBoqdyY
+SPgKqZ5XmkLeE+e6plUwvIGVf0ZwCiKpGJo9q5f40YiEGQsAv/IYnwuLcOc6Q/H7yKO0zYNUrmFG
+s10GBJNW9NJ9+74f3bg4VdlLazsbS+GvhKO6j7deK9Ehl7OlX6EYJBhid88hR00Skxu63HUiRtM2
+utAFr5PRoAi43j3Z/OLvZ6eNtl0Vt8+KrXYwtx5iGUWN7RcnowRXL3IAIYJNwFVizc6ljsstUgBS
+Q3Xnp7Udg6jr91BmAW9Br55g3JOfvcI6QNC8NZz5fIUrvUpBHIAV815H5WMQsBdzbjH/6rEqnzBj
+WB/D1NjJsqugSAVouUsbg94x5bLtr5yyeVG0rChENO+RWhavC9cGe7uGSvSTAva4qA==
+
+
+ AM6XSHVyZiYq8lr2a1EvhqnZMbuX4L+JpRwxXT5jjjoq8gw12oRDkp5SuzngezzhU3Ys/cTmWvES
+Va4bVGYR2IN8yqfd1dKr1lAjkEmXFiRbgZVudePqaLwGSYtijCTuM/StJc3mlgTsYZG+M9UNwTOZ
+lzSf5NZiWWhrnVzbhMxNnJxpr4vfpzJF+FuS0+KEOZcBvOISGwLW2rWvOjsvxEPHNRlYpI27Ye+A
+76MSx13stiIdPfXV+6p4vMolH96AME2W15JcewMYqeD1Bo8UgLPkYo78Ind6rMyiWxleYcmIAB+u
+zJ2xD1NSURWv0g59sNaVeYuRtOfDlS4sS9U9oO5loINNl9QMNZ0CrjlXHpKN1OZL3qkvZt4jabxb
+fa8pyUSH0Qrvpg03/JCVYTkIQD6mwdKDNyBHQM3G0lamIR/2AWTYUZP7XB3X8MHvYr4j+4CZyIt8
+u2ZMwSrgI7jsB6kWkp8X8DjgoK0W8I5gFAxiEBobDNeBta3ZjYoVxTFUID5j+OCGtljg8m3BRvQy
+D6ZjhiHrrlT/ZYd2PS+Yh9AL89NiH8192FYS8mouMZ0v93hraRavq55/VmjNmbnfMbunF5X/krrC
+55mVcn3RMZN+SwvxVXVu5X6hQ2gCamCEwICTHhNZbmOXkC2aEpsjc4cBMnubFogrkkjbWdIm8pmk
+eDGRkz3rvOqaaBkXEwRE4G1NeerWHqwwTZUecoNcdppI8X+Dizk9XdDtMw50mosi154fHFnTzHS1
+ZPWhB6x2o3ThscSZpSVHNc+JRf0EXIdE9Gq73Sf244yjMZ9tlqfwYwZub+oTV4UXTXsZmU3nCY5q
+c6eH+kWWJXiSYyXv5UPcyvkAs0E6YpNgYC/HfXqSf1JAxmlPW7F6G/NB8ClMLG9pamMQkdi4rJUG
+viHgxNyr4CfZYzjptI2W+FzqyRV4IXlDcleoG5JMKOqGtC0uYmtsEmRuiex75ZtkHn1i+HmGsExW
+Zupe6ukx2Es5pcgp1ryoxhRWHl+sIgNrvqL7xUXTur/l2Wco0mhMQQ7ao4nxQiRdaF7ka0duzURP
+Ezm17KuS+4qgW/mjB1VUd2IRZnIESSgA2YemXapgmj0pwrwB58NmOJfhUyKnV58B+rAFPSj6I+1B
+EVdYkEUFIxj3xXVkD9ZMYrkuxERKlAaJllpMiVFXTTHdjhikbyd0ythDCx/J2FqSP01ncF+7ALtt
+5zS6oovfygg1nWWTF1A8MOSJst8P3F3TVWR/fP9L8hrkrerX/FYF8UM79Bi+vkWbhmHSdpVgv7OO
+g4eC808STG1XiIjvqXI/nlgopP6KuS9f8Ic5aOs0fn8gFXe6ihvXLhgR9DhdcUXv724BmvnzIuwN
+sE+cK3NMLpzr1mqpDM+r0tIsdCutOPbzIPF4gsgmIhGLtTwXUsEk5/nEvDa3WsTbG/tivvsZteb8
+QcUBsiO30B+Foc/UAhM5F/Hg23g0XFwNRsljYfdKrvERnMp1LRRjE+k+yEUmIBljEsS6WYIaZJ7K
+WG+rfB0j/fgJAKIHgJe6kLuJZs4QRFzIr4zno9/bCP4iNVvCFw2MUJlZtu5i9DAC2cpnsykZavC8
+VIUg+yhxpFtIImhN6vCcF+VQqSVhHLIWZfsr4eTCAdy/YQNz2wD4+BpheAsauO4lICkaAOJQypIE
+8xrM4VDXEGyJo47UKBaaagZvqFZThjjTZeTehIhC3XlPvCS2dZrP42VqrbqEsxjQvOieDtrAJoAz
+bi09TgiRWMlRWm5SPu46KmbW6Ayms8ar6Glhrygtbr4jlHJQ7uY7MsQTjOIQErxOItUWvG7xokFX
+ArkBgpZKWCVLN0GYOK6amfo7X2WIs1tS8IrM5J8mTRF60K3fzoGFzazKp8+MWLV79b2h5Skq9rnh
+dXE1tytVpAl7+PyNu0+mcbZBNM0/X+GuRAyq40bNCT9MgS2F4Jor+PqmMjtlzI0RiVYOOaXOcSmF
+ko86LjO9YdXbZdbrW6q9yxK3r7KZXcsm8Lfb8bY1HkaKHnKmKTMhaW+CLQuWyKQQEbJAsnoI2yB5
+KVrWivn+kihpV16RJCw3AkCEIWygDDACqAt8mwbHPHICqAN29twSDYTpFzbW6gEEgLGLNWusB8Gk
+JnyHZnY9QPrmIIy0SeC9VLla60BSHDM9kaXgWuqRwXFSWeoRnQ2pyhmvYcbhljm4kpS6B0Jzl9rD
+3oIfejCRSYbMXHcZyvENwn0AO3lGYC5HsYOa+2FColYRX+jzPYIblnoRixidYrIRXkXy46AlepCr
+S/LHyGQjWWnMC2glg0jcs2QJi18JM+MOl+hzARGM1YLLHZkEKwDhA8k6gV5LDv5yZJWd9OkWmwk4
+0+BET0K+5ayYBWMauUFiXS9WJCd4McQhZLC/tSXxStJUeBrfCfYkUN+dci2y6J9czEcFxZ9TfbCL
+3GJF3bJcYmSz+IaIlF9IfmERYEEKJe9lLZOtOnsAAWDPO+I+GqBv2S61YqRv6DcAHykAy+bWSAiw
+v94MVyyaDNTxQg9A/DBFZmhKDZoKf9gFPgrsXHcMTAgwh+GUDyuKBsvEQqW3ZOkXYhXnsxyCkpzS
+r+Jx8vQSEjGpkzo7WU28P8J8nIRsK7oXyCTDHOk0Gg3aUSWCnDXuwLOWE9XcUBJceqUUdR59tCbt
+nPusew+kiG8xZ7CW4Aifa5FkUECBCHQq8JEC8pyx6laIqiKhR51+DXPXM94AI0NG1E8gRnuVCoAN
+ruG6i5yNjjxhSmmZyndxy0hFboJkuGsgh8CpiNbkWQXFgG29UerCZjw8cTwSczN7fI0w7Dnu0L1z
+GVQcBQ/7BLtHtnaIfqrSl/LK2+qlSM0hfBnFq1lXvJTwnkyvtyVPb1fSL/kk/yvh41iTeicTqe/F
+9Isz2YdyA1VwDjf8z9cIZ3xCgFeSvmQRqtsK6QUVMcBHCvCCfp/b5vWst1xBc2rw87w4XtqiW0X6
+oi0TfLwIyAy7/wXYXsEJIforbGEX/wwe4Irtb5b58AZO2/BWa9XhmmKR4OeTgr1LH8BrXV5ef0r9
+rD+I2Dkvibk7N36eJeqCECm0GwPX61ik7Qju+fEU44OIRWBcfwq7viLNWt9yBZuUiFxQgyQxPJwt
+93/9+RUts/CO1eIO5uF7mcGQZXwycU820AOFriCoqvGYpEJeBjXccyVDrxeOWANTrVwv3mjvORlR
+L6dEi4Cde64T0qhOwlZgYJbKNFIU2BUMnuLsB2xgFUTv4Jo1r5qAHVdH4z+JdOzb6O6LUjKLKN6z
+ZWVtSVDhbKghYKuaqRvKiRsI1ogPoKt9P18jnKXautQC2YM1WHGjB2uRCa6oD6yg9CCr3lMqBCx5
+8Ox4lIXK7+cLuAXxrx07GwaAKLIaOnaOEheU8+7tMmO5g2swQRqYtVYB/qSAtD33tgRFKsF6voUE
+Q0epnxOcw6MZIMqKzUEO8pMC0lKzzqh5bWBWyUDbEfT4DPTgN21LqpGS3Qq+Cnjbg7zFKZg1hkMA
+5U6wrBmYTGQdZI3hqt7XYa/ONoLpQjEQVYMn3is+tiU4vfRguZm6eU9ZwMjhZP4XUARMleMOEALS
+ZwC5rS31oQ76uv35GmFfuQFupeoLCAKKBNEDwOYg2EYBV7jaAkQVmItK5W0ulXBQAg4wIiqdYyVM
+57e5NfYqSGDqfgg4q+rNCfe9CjhwXzBwmlHmwNnFIOAq0vwkHetgXC0MA9n6UVcTQ5OqJ9ERy5tN
+B9vj37bFS6lQPH73KxR+TjSqUxmWdd6i5nhiuK5Gu/j1UST+O7iWtOkWBoxoeU6o6lH1oQ3eg7ML
+cG+7g1bVQNKcOwgBmXRvNCzLeg1tt2DuG1t6Ma2YwpkQzrZ/DnJXxL9a2yRrNBL9KId9m7M1LTpJ
+pB4dUzjphzqY/jgDUa9kCVsEBCRzgFkr0XYtqnWzSefaWqssx8QqJAYfaRKawin55yB3+mPb7uVf
+Y9vMHxW5Vu/vwtFvgRNlDU9P90dwnmNuptQQsIS0sDBHqIK0nW84XhW83NqGFyOKDYoyL6RqGHik
+Y8mrVNfjk98r0RGjSGJ8uKJZH6E/SEB2yUE8Hgb61pZSpfsZUjB0n6g0pVABB6EQ0EdlxDKMXcEz
+cpDGFzhREUx7JeBc/B1NwAzioiecsS5dwFvQpf58jXAmUplUjzt1MBO+DYSP5QjHCnqAtgdqh2hv
+P4AXElU7fAQbUX+YgFnSEyB6QDgD7+6JPC47Ci910EN8ogcKZxSvgfDYFil8B73lIwWAJ6mCiwyE
+88cI8c5RwBYeFAiIYNGCR1AEEKwsO4NR7aXaXvddfqYPoD/KrSkN9qK6o1QB2YMZiYIdfttW3msY
+g5+XQZS2BEUqwdaDjI/S8eLkkG/LKbcz41ZX4w6znm49AnKLPsLUju0cu/yBSHIDz/Ac6FSuk2PO
+5D0cVGuYt+czfD5xVLIMTjql7FBdThBTyWIyssxrlW0iNYMDBUyzOICBcIdfYTCFAJJz4TZrYPIf
+XSB+c4WlaqWeMLC7yhJmAtuTqa9tQUfrGzV0mwx0NHKxM4PPbuf2ufPwSuZQA8VjioG9q4jLFAY+
+KNJpUliySFeA2dmlwifsLpD1wZc0OuFGBtVk4W1kCao111fSx2BgEtwvUuXCbsPJyO76Sig88wqa
+dwN5x04WaVNitiTTMRjeqgUugts8JvEwi4vYQ9kwTb3q/R7gJzP4vJZF4ACTnMTiF8J3bybN/b4z
+pECsfLdRJSWc2f8GztN5D6BKdfKjx9cIZ8mtDyCl6mpuMFZ+A7FHiFTdU+12dS5335QF3BGee7tZ
++dBjYRTQ2mJgeK7IIOa6/0kB57EufeXbBXVH6eJM273dP4ND1EEX4JV9Tj3w/nyBcbqaM2c6z5eH
+EfSWkAv4RLiEgcEjoWqHPErVDoGp4zQwlSF5MdWb5FnUsaRXCf49dPZGRNdtRokoaSSaN6UuST88
+PMwsk2dsafwMciXgB7OwCDDCdBgC+M2tbqttOH/3eQ8RXcACF6kKWMOZ8NNXHu5Af/bJCLiDK/0R
+CrrPGi/BxyVBpHYsb0N9aPK+hmEk/KbthhwPmQgAf4bv0Nrm11XQ8jTX+0WAwrxfNhG4+LY+OPj3
+V1vqvKPLJysDA/fV5WD1eR3EE/kFOgZ1xzdT3H0mVhYCswYu+9yeZLa85DmlzaOBfLxIPeH51GGl
+1aWBJ2LzO3xPsQHLWmogxjrBcS3RRrR6ck268mBkkqG6Ik96HEFatOSrEBSpauaS0b7rbGwgDG0N
+LJo3gcXYKO91I79VJlYz9cl40dTXwBKg4A6qOx1b6S2/bYL//qe2g9y3Pfj5p97yYQJi0qlplG3F
+tsq2OogKVrmoDsMS3KQKmC/bzMPtO5xBZKggDdQiIE3ZP8MrZNs/h45l6z/7Ku2tLR52X//VzORN
+BIzvTQAN9a0X+768Cvj8GsPE6z0gKD0g2Hrwpq0OZEmt9YCW+BJ5nItjg6tX3kvAJQ==
+
+
+ Eut+vkY4qfp1RTYwN3CAjxcBYdmisivOGm7qHgxxj0qlOKW4JWXT/pj1j7IjckvqP88D+5PMqp+k
+AuiUk0HdQJqoX0V9hTIzNtCt6vjR2ShSs+rkoLmtVYxSu/UWPIIvbth/WWlOpR7IbtAepGN07AH9
+pZ9APsqljoPIh8kH+wCyB/Jxstpl7wF9xvIVsmW9wnQA5tViPq+sbpHEUj43zwPV2yxTC/czVOQ8
+Ea3kOkeWUbmCgDfA9ZjS7V3szbdHyp0JZ0Bk9OAAeJaKh+l5kdBHNL/eFgNTZXx1uNXx3uCMiu1g
+RkHrZ0xw0EV6W8yZEwyk2vIkpYPuZnT9y35KC8o6J89PgYM61ttil/4AFimFwhXDpFLlvbhuzZSR
+YdT6CgmPAyMgBibB4YbY2wK8QQrRQY+0GAVkXEaf9jfoWTrowZ/jkXAjJlSkSlwI5wFiX4aJ5HEl
+Y8MMaeFjWjCPPIixQPL7DL4aQQYT8a0kcomfUMEF0ZQtHopqgcROeSVUP5IUrFm4LaSC73Dm2XXQ
+Kzf+3SfcVoXMZb6oAA6M2XXmbTw+IbediuhYO0DxKNh1ntfzJeQmaYzsMU8wq9fIDrNtsUkOGsBW
+lFk6B7baUBs4I3tCYT7s96DnjQ0n2FYk83283oLFiffbttnbPmsTHCfdClI9/bYNxDxor8D5Ja9b
+W592i2AbRIVrwDntG4gebGIrFwGVKdFfV0xunAdO6zcYVbat7OptcsjBmqdSewXaOfqkY1uRipYb
+83g6vL4YCLtULJAEcQhjiUhbgiK1VNQ2DwRuAghiHrRl52CpAfs2v7QlKFIBDj1g2zWo628L6jgj
+xlEEnChohpYhQNuKgGvCwnsLyo5kFQvPpW9pInUBgYz2IPcuCJi3Kg2ItkfkkfFhAfq/E4xBPECG
+3tsClG4p6KIeX12ubKq/BX2r/nkRUBuwPkzA7cbBwjPkVe44MAIOI/vzT18BX6x9BYLtK9zHtg29
+NXvYnZG6sBZZXtO6okSl+ZosGvu//t/X/K///rL0wucONIXihKDsUCEiMnvLmmZO/GZKRERm70WP
+tFSgzJJuQOdcynrKBj4vk0kRVzVxPGR2Dz50YzBfEHMKxuvnuJ9ht51Rfqex1Q7wcVzVdk5u4uxA
+w7xy3gO/n0GMuyPg7ha2XZg2DZzufFIxG1ok7Jzc7wbHXjDfBS6gBbSgW5CnWCWEulMoPK95/yBo
+mUoRQNTAA0mBBkfFRSFl9QjfpFGceS2asjx88L8ijI/wVflFFmN8L6DGXfNKIC1v3Q8VPnPCTsHM
+4c9K9tUIMQYBLcNpLIhmBd9u1nHyWZBUMXMZWC3Lcz2TE7D4vKyzkTgQDGOMfZ6P5MRL9lWPO76C
+NU2YWg0Gr2wR5VnkcWRImVREjTeQEeZWuOcC/2mSJhkYnm0b2KyaZWBSK17JaBAC9mJjO5EMZWBy
+6F4X+FcNjIBBAyuF0WOfg8fxQj1o86nuSb11gPbB/a/zksTZk1nT4/dTfQTkCnrwbjE8Z0EzDwje
+Yi+YonTMTz4/8uxsCHG5trYXGHCDVsd9ujOY+ngxrYhcZxBE+DkKNgV/7Q0wGCr8a9/lvp2yvLGN
+oASe7jENjcN3TmhNBl+nB6jXD9dDoDkDpihYEx8lbUQNvMDV6DGyN7geEQMwo7KgcxCnm8HAdckP
+WBwQHjSaM+sKQpAAo4iwM1vmfd8IJpJSMGNlIWAOnljA3+7Dv49i3LwzEiNjBDoNp8tNfihLENgh
+AGzcExI7PWg1KeUnccE32JXOBOe7zgNEorr7MHj5yrph8Io1fxxrtV2wlR15qzNwrparCiCcK87p
+PGI3nsGCFOAGEPlRETe7Jhf1cmx4g0jAdP7/qIfjcadJSp/7NsYwqIGcKX1FHEUEsxgdKzJNrMBR
+PumUrcx4lor/reLY9qBkCIqw4J41EJTqQgrXYehVDUxjs2PHyAlncK7D+460rQCn5GK9I9ns28Nm
+UPRFKN28bRaMKko3A7Pi4jRVaoeH2AS5ipDKdViHYC4BmAU7MgKnSYxkVrkpIopMbvoLbWBTq7iD
+PELB4RUORI1ME2hLra3TGXwCg8qpfwOWw1Gs/ZzPr4I0Hk8UCSMWSBURHxbPG6EwVk4nTxj5BHN4
+LGMSreBgsAjKDBkxoqNIhLaAqXmuEM/kg1nD5hIdWJAPb3DoJJOVLAZlEs5IA8n5xKD2D20znsmD
+gK8T4HyAy2uuwH6LLr5R6eg+0Bbcaxuo+jx87IrCVlbyQt4ANEhV19Yi0EB9tjEzIMm6CIaAWajL
+TgrIuva2TBBSVUQcNsvrQDA4q3h5fHtCUTYUpFEBZt6XMkl5FKAvOS0D5oyMSxZNA8WYL/8zq4g5
+p4gJuIykMOoQ21a1BaeMk97tSRqVJEkitNiY9PFGD7i9/vqtSOGhqpK2BmfVkLsSrq0WXJY2NjDK
+pqJAHASgW1VMzroVBUrYf8WEisrgzDc2mqcl47FnZOMZmDZWW1BRCH26qBFYuGLkgU80tdu8jHqd
+LnTBygouXxBpPXIR5qXRz4QFa8CpDB3c19zJOQOTFCpW8YZ0OMA5r6c9mZqu8EA0zH1hP3iBMJ0C
+Hp/l/FE5rcOshHKCGAEWFCwBS5YUGMDsgWlHFKCwvG12i8UPpVuW7XTjfsseAP4owPydQWYjpRo7
+nHysXYCACMFM8PH1D23fgC+PGnswlb/ENrVpvQHu+wCmAEwD1CctEitPuYhKcKYiH0vXCIYebBVz
+uqBy7e378n0Nr1ATGS0xk9F2AdW0HD2ozpnH/AwBRQIlJzpZpLRt0SppX9e4dj6GMVjrNtpA16VG
+cCqn0wTO8YJxeE/HIJVjkOAPBGSJ09wC8G1B23UfK3IGgrfewbqfTSjX4z04w1RjYKT2eS5nRexj
+JrYxILyV24urcbbLVArgKxgTeelVa9XfreJOrhXEjsyCtJ5ME+wDFn1dPiOrROhGBRcwVfbQ4Yys
+9rD7zryZUou0+q3O2nEKHH+sK36aXCN21b4r6WSXlIsslel6UtTl7GBWurSIyv1cSqe6q60z3xl4
+RnmEDMmc7gJnRHOjtJXBSZYBOMCs9umGoFwFZ8WeX2JzrcuJVGDmXc4Dr9N9MN0oAQoGK1wx4zLo
+oddTzFffGM8MfUQexlxnF5imQsCCD2jRkxlRbrM0dg3LCcPFtWhDFy/byQjppHFZK9xqruqLlpGf
+Ss28FReOM03BRLBlve+1EofmDco6Ko4HmItlyaqij0HABh4afVQDc2kDxABkjV2zb20rDCKZjLPM
+XFggcK7vghsuivQW6ZrH2a+oAi7gUtH7bhXHNMTsLNqdPrlranFxSA1rXUMy560K4DRL21yumQZy
+iKFC4NYWu3nVf+xgFQKPC96deUqIFrAtPuL/rZL4ceI4YCnyqvXo8LmCTO7Mm8guKRBrmr1lM0gQ
+AgjXIB5VH12WF0d2+Apsm9R3+mnkMx7gGFI6u/7Jk1BPNgMLjz7LeJCr3syk087sbWYr1KpbKv51
+JQGC1QqIIMk9IouxFv1iFXmj+zLXWjgOgLXCsGqEtq3DtRa4Go/4Yt9hhgz6QfCQQQDyMJoAgsm6
+1h/l/Gyvyxlm8gZufC/uB7Kck1rO5cIuUhZaIR1zborJCUgs3qeMHT5XY5tLK1O03U+kdAuYFAwA
+H2k4BsnNVcnLdmhm1igDuwRMdrCfNBwjVfmsiPgZZRidpWcKla9M142erPc2CXkMHNh/4mWXBdn2
+NLfI0Nylg4iAOwwT/VG3pEDPR+XN3ODoNpA8QTWIe1Z39PjoA8rZbNPyRG/zqm128qN42+CZMeMU
+OMecJO7na4S3IO42MMpWCsWaTs9siZmI+SVzhgdLUdrpwZisRhCAhbcXmcZa3AI7e7WAGUoZDPVk
+LgbD2zln47iVk20GYRXOy8fX2DYrf3pO1YpEgxMW6SsnbPs5VYsVPJi0dPtpCe2odBNLnlpKN8yQ
+aMIBujunbXLUeAA++slqaSRp6qcqZlllyCfl5t3M3wceZvA6IQ0weRVtTYFdoS7xUDFLxS84CULF
+wKUgFex2shqzGjKPRADuf0ds5N/tAmmupVcNP9ARg4qs2HYzJZgy5em4H8jTeS1vKjZh0SzYfQH5
+qAQfwwA2ARgU0ZA5gO1cX7PclGsWHOx9njNt6rpWXHFwQ7lI0tfhgw/DFaeBWfZdeW5VgOgAvP8K
+SJUrFcThrmzu2q0upamzqWJQ2pUlR07lQFC48qoJyjpQqQ6WAT+ViJmqHBfSSvO5gsUSa3BaKcn9
+SteOp9uc+3B5USpP3QsOuhC4b/Cga6Dv56UcFWUmlvJc9jw9UXj7uYLaErsh4BslaDpYB52CW4Ws
+G493GDWN2DE9UeDm9pB7Uc/WSGMHMyPUs0wJJjejtjUOxfkV3OmP3bKauMMIjUBRO+dsysBTHnQW
+Cm+qNw7FnOGAU5Wbj2ybRJwOhjK7buH4wLGcR7hH00/wPodb3sP209lv29WEHjiPMxSDZG/VHijo
+ta5H0Fl7B+1qNX8g+MCipKgNAXyE5b+vDnS3vlArin5IyklR75Q1UzQewE1p7GAqV13ABXLlNX3x
+vQdF5ql9nZi7Jv3yqq29T8Ev2nS4xAbNDsGXTbNbp3LJq2JHN9SrvjeqiwVSj26aYXG327PWBTEc
+UQ3dQGyGMk7x9j85evt+CBrYmYtQsSjK6+k8VxGsKVzKuX4Rb9sflC0h4KwFXwL4Ug1MZu0uAPEq
+7fNr29oaEMhUrKsQcAU5kuwYFfGjE7Cig2quu4AnnCzW5De93c4xZUJO8pDeflpcL4vYwmh2MMoV
+7yPBhaSGFJA9+PkaYWRvCsgxMFtV7pk6BhbdEyetU9cmzeUCLoh1YdDrDLfj2APAK2jm9WFblDHq
+3drEF2fjlcSEG9NcLCxpTaY+pOS0kfWNDD0AvJUjxOwB+cmfx/ux4zMma8SqzkQjQIo71mp3naTa
+NA8jMpDqBfCgpHXHz9N6ve6obGRzK91ea9peMA9jy93jPPz5wpwNcsgDxLO3a07IvYEXQ/aXI4q9
+DtfU9SA5H3e3o0IFec8FiM2I8AXKPwo4K4dNHnVGZhoEoGMnuA25QZ4kHFSwvHmyv19wyctCvlAs
+U1fsHbMVXyC9gavF+eyYAPOVNJwgD6hgOs/XMHUaM2gKmjij98RkmUGuibZtDgPEKjqCw8/IWvdM
+Ad6MiCqjQq8oV2RRndsyZ1CpO2ZCwI5af5ZdkV/bWdOC83Sp/C0BU2oIeCovxzUPD7MSuXNyyO5L
+Doypo3Omh/jSCgFr1pkrOMCseNHBqN9XLwsB7rTvY6Ag3GMCTnEBhIAI3So4RtYjLEfQjX2jAKsR
+dufHySprBkZhQM/bAVj7E0DMo5weNmdyIcqBcJN1lOeUhZm9HslnWCBzg/QaiD5n0xUnu2ZO5J98
+gz145VZehpwI4c50JJiA5CNMLLRzR5UKENXmqrEvnnrpHYGnfRrkYP3kPHpeT8aPsA==
+
+
+ o24JHhYtI5hqmEdWHGxLGOwHVmXiAkEy8kFlKeTs/BmWgkzaD+C53buA6MFT+UbbDAYycJ9yeh97
+ruYdh8Q2S3a3GxaPXCH7ulfselwZbHqvFbq+HLlA3Yobb2BB1Bci2u9ciwfSGw1MF5nxIxzHLeAj
+BTxPt4QzOMJMaseev4cNyGsWAIQv05IKbnwYhGF4vseekfO4Ljjd/3rJrhP9V7j2HYKywSh4XIek
+odSqv4pcZDrPQ8Y6wfnSfTM6YBmi+zlsJXaKFNF4OsrtXa9Vp2sNQcGIzTWz6IwlI2AEwRYIAdux
+gv86TXbBDIplAFVHpU5cR7YtzOdwpBj3/nkMPeDL5kJ8pIAk6dTNzMonxAbTpKYA7FoQsK9+Ihic
+9nuTGv6p9a5UNZO6LHn8rdqB/ULGZOoEnqR7oSlYybUDvrohAJ3lCW7z8Foy6TPDbpYb3hbdTO1W
+M8070RFLRaFhkhBHcKocynU5D9VRntCxr9egjqymOpyD5mIXoqhWxl/PKL63RrxU/FrRNw3T6tTk
+6aPZR+hcXGVrxWXJOJ4Sl+WrbMmmlSBzIZGlg/g6KaDmbSUQr2smmJgrck3tzivBtYkPpRMCpvXO
+FPnKmjlBJ28a7l65OBlF+ATd9vPzNcJIbhCw6gXJKjcdm9u3BeqdqWUj7cTSie4tVf9lWYftd92F
+DaXBb9u+BeVGYCGmy/XSg2W9zxdwOncFcQLd83KI3HbcaQ8IbhHJCAF5tgLuoPSgzvb+CgvqXtjV
+tuoRzAeuKbV9YqzzoodviLlBO5RsiXIpNEq+65KWj34CvBfwAfSDrU6AvRgosJAsUSPYBBqI76IW
+PnkzudvbPN70Ft526mZjtAU2zbBdYquzep1FmAJmjSPr2LeiMDq9acniEYK2vQd54a8TYIGFBQYS
+HrmfwCKfli1iBk/0B4yP1187K+HlzOpTahFWL3BNkxvIqvhw1vTxtNcsYkBTkmzrsNiZnesGBz3N
+U7Kzt58TXIojjhiNS3IG0BAle7aA3Nw/Cnh9VpnXpP9iXbQX3e43g1d286UO5Jz+sC7WNr7uWf6p
+6Nmu0FoclKR4kIHfYpPg3BEjv7Sl51taqvOeXxVBAR08i/aaXxq+5MfXCMPD20DhuAOYDmYIyGNT
+PCWcQeKMdjfEliRmdLU0WAQQRBBHAxnEYeMV6aqmvCZrhT13wiDWCVuXqRZ/wFu9DriC8NU0kDEY
+3N1ZoE3OAXHe88hp4QMNftv2LUjvP084/WJ1buq3rW2w+au4DcqAcxuU8BiZXbtkkcqspfufen8H
+8SgpYNjh0qQVrB6UmgKwBBwIdpjS+eyVF0FZD2ePDIxGMCwsQLgVg4v1MW7wS1YIbicv/IvDgWxW
+qQPbSZ6xzle/jGBGCP0Mq5kRENTbBeR+BnBczQxP5GGSgZD9wxi9LO+06D+jJeQTLJUaW7fEFgAh
+Uqu4p4KM2JQNVT3HssvRcyyjwrAK21u345SWEHDvK+LXyKK5LEf6ue9itcm9RAuk+rNuMOCjKJLX
+TMxgjTNTzzjSKPGK32e3xM/OLVJC9fhZm/eeL2uunwym5WhJsCBXQRdgQSIIWCwii00YUsFizN2w
+BSBwj5NITmnL4ErucC2GglYkbVvKOgI22q7V4pztFpGkzQf5c/1yk7Eh8ATyftbCYOyDT0e+Qlkj
+nxvfsSUfd/lg6sLSorw55604c2YNy1dg8LmAUi/Ze3scyeF+7WVpXq9bMwPalG/B+m4CmDPaf51K
+M8g6uR5rj9npzJmBVSru4mk8G5pexQk217NIMYI30Fh9LlvtbK17SXiQiShVrx2OvDyrT405d1YA
++VJBedx2rOWObOjFSwisAT+7iJ13WlB3G2w58hWz8nd9xSUCZJbiJxVwrdRMEdA+Qp0T+rp1k9GB
+4UzWnA0RsNCcRwHMRWktmbdCG7xkD9EAbqk3qBFWIRRIpwlj+V6BP1OZdOejWOinsnIy3BGPCq9X
+efq1B+W0kvwlOq1a7k6DkWXTQKyPJvWq1BsGZ0qeD+M1VEBF+eJRGAMMjfSgAi4lJ6mBzOGy0Mhc
+TLOmPSBYbyrrQQPdS+qDaOnTwdCnWWRMphCwIpcAeg8EnssD7TV61pSKtSDR3pnHFj1gZPgUEZWt
+7UQ/hmWZVH6fg+hBZoQgwS5eIbLw62HfGjuF/LwQcEdsb8Bb7GjGuR/lTSZaOg3MjOTkNoEAZEPy
+YjU5G9T5IgA5xU8Qa8lefFpSbIVlT4jF8TpaF9Ip3BQ7JBM2uCrTKYhsRMaitiFg5KqkQzLCVQaW
+MV29B9pWBGQ4rfbArPf3Li1DQAXp6iskIU4XsCbvw/AKSRfl8IR4+UxUMaKFE1hGIyeGhZheK+cT
+uBBzcc6VZXulI2VGjQeAOBXvzMi1jOJ7uA5Yviz0M4DGTTCzvkHmSAVFyDRBwHoFkYLck3AouYDp
+osEqKnUYvF5bOd62aQ12hNJQ7bqwOmXCBo6P//M1/eu/fS4z6TzTkP9KGItMiqaV29sShrdKZd+j
+woptDRUrY8Gy+5lyESVhUbFxvk5S22NBvNPUMmPMlVRyEXo5o4CigQj+ZBpuy1meEZxk8D4hH3B1
+apgA16rKE9XtHbwYQpx1gw3OyB5LO4/UNwOPC+Vczthsx6zprEGOPStA5AdX3rfUg7FZVkTf9rDk
+LjirHtscNK4h9B6CmCET3wBrlywu9r0qGV3AYRbYFAnJwZZh89zTFP8CnBvjzhDYGWlLBiKL1Vj2
+1hQgBC1g0wkBlYyMPXiv9LXXHjy+/r+v//q/eSA/d6TUPzyt/K886BGoPZV2abeYDecZCrAw0Kvl
+WltK4I5d00+eX1+xF2TciBxdBGUjY9xI27NkM+H+1kARQJDbLqMbatNjGIX+vKI7dNdjeAf3RwYW
+hMT/+eoytWE6eS18eVteMF593/261Ed2fEm6sIR+Pr0goctKAb5gexkdKsxDuliRF4n9+2tE2UX0
+RzF2R+40fFD7jpD54eO2iZDBRnJ8yqRhBxTji1aMihx0FXbJYWIcbD86S5PWY/YQragO5Iol7od3
+6bwqoBLIVH2oLKWmwzGBS/S9BooAguRj+H1bl/o/X2/7MPa2QOryucCH1zUlLe/btvfc2E+Sk+PN
+hmSb1T/WaV+LwOoOM8tfCbtJ1OE6yLF+DSyaR4JXZIg+0ngS0WhFLxegU1E5p1SFA8BK4kRy5IHD
+RdJgUSXC6Nv48XCNHLj0KCDhUcBb0Bn6ftJ8E75Oo386lvMeHra5vfBbLs2GefRGd+kZXEoezD/V
+9lvuvAbetILCQm3aVFlBVSpyRUXJ2yMLvltvDD5Hk6VpfmUIhoHbQJ+t9K4DvrdygQJMhfBbrCQG
+LuXTKJtKwWNbJOO1lnSKiPZ50Z7PV7hKsREwObDGMbgjD6T34K5Ey7JFV8vBFg1mq2ibRn6yQjXs
+rBCJMmuZzvFc5392h3OiI3ZWEQZiJIUSeCkuOnlSA9GpBMdeLYzZLi+HJW/Rwo9LRbJCDf5qI4CC
+a/pUoqZ1Hm8lm5RwafDJtmlu7GDa2gAOcRdCwETrkaUQIuyr7LBgWhrMs5/aQj2lfRfgYCDWthUE
+64UAzyH60Wr+VTEQgc+6IjCOt4MZJ6m8UBKCSmYn8oWKGtJOZwZCV9BzouPZPqEWCEVGSNDP14i6
+1v7noFy0eyxUFl47WvcXxvRQWZMRoK5HCinRKJPy9eerq59kgpVxbSDGtQnAQSWEXeLc7PMFU2MX
+AssGOwHkn8OU24sXkp7MTyBvZIy/MeYGBLVUjLaC5agAOM7Z1pYgChQ1UPInOL9l2XEYBeTsbq/A
+jyOvy2vAB1CCjRQGc8knAZgzCaIHuCBI24r8/gSyIlQT4B379TW2rlnzAcQMH96M/ZXvwLE9Xz/O
+JpW5ZIpuDBktk7ww5clGuWp6jcKgrm3gc8uFFyn9WAAhIG36ve1bEN1KcPAUuKXgGNzn/bgaDkGc
+jTyGtxlGMBwhelzjtJs0EoWPIuUlHTMA/9O9YxAxtvV7ztjSwfEUnegF4giQXVKGcNLAG+4HfFmu
+fMWwattYcW4tQVPR163oEdxpmwAuu9aWoEgl6JSV45RfisnyE4hFNwggLA8jWN3iSmyvwLXY2r4F
+YX8cBOAUa20JVrcUlFfgzV9e9wMIe8AgAL2l5shtVmcBPneb8pwcMo15BDYQ204TwG1HVGScSk3H
+5mXvjmSG8bJ3M3qLV6WbqR28KqXqj10DV6Urssx/JYyb2RV8PiO4oRAorwkJYoHypiFtcXtodxKa
+yf3+AgGEj9f7SwPRgwS7ntwuSwre6+B+rm71DbW15YDLDQpKS43WeJG+iqq1DeL821cgXLEoeg2t
+qyVfIUFMD8wEacvrudxjt6JcVmb/mqB1vf31NbYGEULN8QGE5aLdj8vK0fsQy8lu3cd8IEQEPfA4
+qqW0KfQg4d4DufdrS7niq1yH+4d8CzYjAwVYBNYxD68rRga+bBOA46K1JSg9UFBitX4joHULI5vG
+EwwiemtkycPmIxC2nlazQeGq2cC51cxEGMAleK3GAVyqbIV8Qin6QLD1gG+V8Ah6t/7dDuyh7VsQ
+X2vVyDRtCxqfBpalS8FiGqtjpTXVj7UASrMgvl/XF7Llr6YDNENZGSZ1VuAEHhYBztU22wg2AagR
+ko/qfo224mA7H8C43JZJ7SfvvKhwsQf9GTw2bF3FQ+CxaSDreSQIQ/2btpR6BOvLP3aMcG1GCr59
+Mx/E7jMa2sZtfhhwDGLbH16GXDWWZgbl190kFlMnQk0uzKK1IjF1YvL1OTPfTtcP68UX3M/Leqnt
+4WVx/mfYzNuih4C2PUDAEsb7fjlv5m1uUA3EXpQ1Yca9aK6aYvK6WV+hr7mU+jMM9lJeBRlueS8V
+4LEIXZsuuC9FGXBOl5T/8zXC9cUUxAdXrHQVzlb5NRenTDauLJ9WcGyh1I7sGfDG6hqcM/eRa/An
+LWpTVlHK0kbfQj2iRvCiWemqToOLP0/Bkgpug6GKEmLHVFcq51qpRd/iXOuBHeVtUm2tYuJUCxXw
+GmgQUwB1y4pIU32xGPxKswwBoI1Urb0Y/ErD//YgnLvqXvA6UYE4evUQAQn++3NbMAMOYET8FBgP
+Y3wQLz9zUqk0KwL5AnF7CissI1jyvv8rYUQo0QxAMuAOIsQprBsQG7V5xObRsBt8N3x+3B5/8ueI
+hao7ZcPSa9Gwrcg4f9dSHg5Q79QyVLw+t45SKBpq5zkivDzLgBpTTvEyIkYlfR6PFIBQspUVkBh0
+RuNYE0BDGjkcjQo+43Q+gXhUgtEDhsjRUGu+4gw1oi2QzG3NvdFgmKsb6C6Lv7NtRmuKJ0PCF9+C
+au82P/x9DVZhaUtvjrRMHxF6m2xoMjSfBLAl/UnkmROHFFkv9TNyZBdJXyQnnQWfbVmgi/GLH8C9
+EigbXAWiOD1k0ivINcPZwRXHydFkDrMbv8fe0NYXJn2ZgV72C8xYzG7aIuWdasnJJA==
+
+
+ 1N5z/PkgDr9iCBONKjsYO6LYrIilzfTvYZhpX5WP10B8aLWZNrj2UAV9b/77ZVCKD5cfqoH4Umoa
+q4+i7ufa9HYvjHK+gqwBVSdJHXFx5gTPoJrGiqawTkicTzi22sGJA+7DaSo9eHvy8thsZzRBGtGK
+iFoNSBVh3jQKhMqUphQCEFhTmsqvQdFoqk4EyWt0Aiv9dV1JYSFAhIAGUoES3m0KENXwg7L1tgdV
+w7A/7I3UKmvYLogC8y7YQNEXqRi2HgSVVusBFU4GjhTbXtmqoLESLrZiBXFBFFAviKIzUz2XEp0w
+4EjByHZhoM4uVxZeZidSytWNwQrwsXKrwhXWRPBi5da69gLEHTuI2poAdstyEk6whKHsp9baK54x
+rbUnN4yp8tekRuokhZhb29eHIbSrPQpjMFx8LN4LRckJXlWtT17WOICLhKgG3Eom3hWbirbkAObF
+CyA+I3pLAdLbq4qfcWpcl9T0KIZI/QoV9zCAOQ/bGLS2Pga/vsbWGJqikBvAXDUAscLyoiahcA1E
+gUdZi/kZISByhKrE4wjW9OB2MkkypmwojLtrIJZIA30mjgIyRq8/rIHYehJ8fI1tYZj41ANsv0MP
+cFmlEUMOAJHKw6L1gG1ljXGrbiC7xWqOr2PbBOgaY2HaWwok84v1tgRrItU8wKwdBVyVkMptHeB/
+vtow6sSvC7v2AJGoNekwXmyLGh7yZrIeWXD3jDSCsbdnJSTJm52Rd/zvfopdzwGdlmE1HVFMqy/G
+VvOXS9cyUqtwApaYgJRqCa03BWA9JzxKfQNaQaaNpRvwGba4Y/fhklfgwMa7/nyNKGpf15zHYI3g
+WtsnNScrRXwMAcm1VweYlhh8QwiYK463Jheyl9okKHWulaylmqg7GjVCWTTUM9sCo1I7V4aEpYuu
+yy6H/vfJ+1O3PZayrrZHAWl7bCCdI6XDt4dVjeMO7hO8RiLgQ9v5HEKGpaFbH8e7An1edVmj+btB
+ZSeXzvMxii33C0THTJNZSthvQbfnd4NHUwM5zvQ+CNh0adzrmiKKe13T5qtqczed4gbaTKcU0KRC
+QOrSowDq3XXbLRAWkzBj6MMqu1UNvZWx2gObpbwxzaysBi03mgaSpENg6ugilQPeQHp2pMIzdXR5
+hdTR/x56y6kpb0bPTlVT6tOj6hOoZV3a0vtdxbbqFUIAsnHb6yKZt30xVJLrpvkqNaKXoqoO3D4j
+QTWMV6UqDaSocohq7K6SeWUpfqQAVG6mDbx1q+pBIx+5+zkFlkHkwGCNt29QhYj5BcqH0gpfS828
+oRo2viC+Nr1AVelFd1eZLLo5ynyjK01mcZOKmubqHmswPGEyYRuIRyUII2OYOfWEkR5QiRQwVVMI
+CIPkUBQdPZBqN/ool/ozbBvtYdhimgCCTIsRWHoAk+gADn3thla9NzSpuD8ShLb4+BrhOue5daaA
+bqtrCme1VdW0tuR2tS4boF7DRWqC//6ntoPcEZQbJAWItlMHiPa2jrCuoJde0tsCFMVKQXldyuWN
+u0yTTelmt67gAPgZBpw3bhEgV2v2IBXG8RVSvfyzn+6qzJcm8Al0pRVyU+24rB7SBc0onDemYKO0
+uICpYEO1YttSxksNg4r/d7eZQkSol2kHfYLHWXW9UueE2v4zCFir0C9V0Q6m1fYJupu4+7+GtqkI
+ou0Iesufr3EUULGaCqK+Akc2x2CcSnL34Kw5ni8zLoacCFDHCK+cSVi6vJHIhnA4q9Swz8jvuSvK
+LYV7YrMoNVhYLnJT6yAepWtB+tXaEsSVSMBcIOMQcDXKKzQQfb21Sqy2xebTeis9GF4WJ14eLfqw
+OtxkA5aDWC2LRVbSjhZqWHJkUj3QJEhROWCHFZVHtBAqR6rUS1uq36IHNTBKpHbzdBXG0lDZKnuq
+UblVcru75xsMX4sIaGDUJikQAoJDRT04TQAClqtedY9GaDCCCRooPSDIClivHfuzvZkGHrAirHjx
+WEi7OcJYiay3zUIgXSq+wtCxrFr2ru1H0OMhfl4EwJPGgtMdzAq6zb3GqtH6ME5leseqCHA5rIYV
+plOJWtql9c2gI51SAFc0H5mg2vYt2CqsQSHLtr8GTVFuG1RL6UkTtfjjm9XNhIox3XYN9DEYb6ht
+GLHP0BkoNwZ1HMrmk4vk11fffpoIgLLKeL1rK5IXPFlQOhMQccOSwZge/SbXZo2CMu0Iuq8YAmIH
+ayvn7bx9WWOvK+etADixpaU460Vs+ctllZe3nZUN1dsum4T+Gi3pFW+7ibx+FUbU3le5RRFalRnz
+8Y/8eRZxTHT8NTqv7XZYaYQrhqFBLG0pcRpCS6MZZqx4qW2r3mWXCjA6hQ4QZfezCGbr/pzMMTr2
++qKvv27jiZ+3HQ+/H04THoi1pHhsaEaKHDJieFIQdjY5+dIahbkbJ0SzmShYZgwF357p7fyHzYSO
+bAHT6AOtArqCRluLXkETpCgmZR7BrlBBothWYPYRUwT3GjEZ0OTS7uY8d+gQk42tgTDQDAKwj7a2
+AOVyr2BT9yCX5nbpFt2HfIVrKLyL16VLTgZGxoDj2mw0/DS0wcuHKSWSU0NMVAqmCVsmIc1WiskH
+5LwSaxY7JFYndkgdCKKtMu2jgaUt8+1zSMYpJOo2p5t8QB1o+kAaXB+QOrhYZ+ps7NaZ+tjibJaP
+LfeQmkKNuIXzVW9NbEsLQgPpyKeGwDsmVRS5jMqdJ2/0g41N3HZyaWogrm2DALTl7b+BuDo3cKcz
+kLfcLWh1v9tlcC0GUzG32FkFYggxuKxV0UgMI0sVFJLb/yJVreSiv5DUkzaYfFiXuoHx5/udVeG7
+WUtEKk0d2QM44yKqeb/mYFEdwaocSLtKgj/pDkzP3zUX07L4ExfSpdLzmAIe6ZDMADEVQOflXGWK
+xPc5S0mjBtcrlLf72QPhUIVPtY0BnfsioKID9BXo/V2kwJu4tVtbgjNpYAmyvlqTW72lY72BcKwn
+CL823N2tLRzjrQcEWVhKBMgY0FsuAuiaz1d4fI1tvQd/fo2tay5WJJj2luE+uZiiYxUJda1FHiwC
+xMKmAvb3AmqJVCBVBxGFtEoNxNa2doQKUtM4ALbMDcV7UFQrauOTOChuVBKJleAjBURB2NrpOk+g
+bpYSi9XAzIx5gk7N/kgBmUWDKItfL/DxKoJbe3HRFRgvzKA6aVv5YU/QY8i+NRUsgyQe+fvMI+LR
+Ii1pZ2wgjdsNvpYxFa2DwRVQIDqAtjTFi1S6DeStUr/6+WoDo3GJzE/KZK72bTurmUY7Vn4V20qS
+moKSAMpsJkkAZVziB5BaVoORi/U77D5efkz6NPaoEvzY92iGwcsprL3k4EmqLvMTVT2TPDRJj2PG
+Gh1ir7R4P0ak9y/7b3bmvOv5uOvaLkmP+Cth3NcP7EvXs7/7es8tF8PAZK3WVIoOJwnM9RyGafEC
+PcwGMdCrFfZMCIOd31xTKVRApUfoo7IleoDeFo2XgWvyohS1jIFL3rCzB49/EoCHSQ+0W55S8/jq
+sAh4bn3Xegzv9RyOeVbKsXiF3ON6bxW8IknFwHU9bxlZCNiTI1sG/AN4RAENgI+vUW59Rm27sgcE
+i6XIYN94NP3msrtxFFwnS5GBzzuwJt9EDxQ+0YMDNYJIR2Sg70VX4zcz+D6Xc+jB84IR5affg20q
+K1w9ULBeQcHiijJ4TfObDKJRVy/3MIgKutRHCnj+MQ9f7BKiYAHvtc3v6IHCNekIFp/R5abPMxOQ
+PJMsBBAu6iID3Zp2SSqagtkSArIMF3PZLreHLj0vyMAsvCu5cB2FaeqpeSQJM211U9i9RifBnFTl
+zbQEy1ozAVlxil35Lh9pLgs25OYugg3tIyihQ4TLegAbYAs7IZiZ1rA2hnGtDohfCYd5rRk1YNhs
+93ca15qthSYzuaoXqNfvsku0ePMGV9uyeHUwbRj9rl+Wid42TRuijTRQ/JMqwNv+6lYM9TpWnJK6
+Lcsy0UJ/xYYgbmKaC6jnMagIKuVoQ9irpnADEQEgAlIzRg8IQ7WmQ0N0cwHzdjA4P+Qi8ElAOpaa
+ct9g6QFctw2EkzdBuK/T1yNWCGlLG4AYUvSCI9aN1hbWFZomBMzL2OiBX6oyiPi0mwD0tQmg2YeX
+PAFFgIJzVXaW12UPxDwjUmkLajdwbVs3cMb5NBCmnHb/ZcTEzBIzDJIRKwTjMJodhAYai8hYetby
+ACJmZApO6Z805SDsZCLVNK02AtI8Y5VvUEVKDDTPFwfVdOXYdzDz8dGtx1dv28w+GcTde5ApiOjB
+qzGpBPB1ZWT5sgnCnPW2LcxZ+RWQsgnbmVgs+HHEskAznc5a+eRimvgAcs64SQ8COL/K0kf74Qew
+9YC2xrIfKjhTAA2Qsm64GtrSxyKV/ZPLObVjLDxsVG0DxvbHGC7ZaSWdoaGZztCw+2X71mixZlr2
+c+W7mbZ5URewBQ/xYBKLdxnXJddGTPaacyUGfjHa0x3Fi7o4I1rgDH0ZoqJQZ1BnBtQLpgKI0iIu
+MipC4rxn9ZF00cLJSbic0QqW33uuWjTNR/5cHPexD/70uYqHiJNYQXJbigA6OlXHLA/3s4PT8eJl
+VRSZ58+HntMLhtonwrr90vLPRKn2IkNempIrooHuI/4ZBLTbwLbteVk9cVk9q05Lu1IpXIYACmgg
+LikJjtcJuX5ZeMU6Xql4RWjXSl4H3ratm7F+LLnY6hjInUylutbx91fvWHsz3J6KiNnA54rOMSiG
+bB2FIrjW8bqiWLiNq1uormKtxnDjVlhk1vbzeT6XAeSHIcO1ii0qa70Wy+95r/Y+4QZOMHIW9a6t
+GCWCnftTy3dYfwou77j9a8s1o0bADN7bndNdv0aPsg5KH8so8KGjxjoveumWH2Mgq2KHSpTaGh1O
+zUIEsPaNPEhLvMkHZjE2nTQi9fkmp5vKtOCGLrKqRaJzWQRw4UiFE73Ky+vyIl9FV3rLaXtZo1Vf
+RZYdS7bIJtkqzHHlsj5KEyB9wpMSHG0O7V2zrX6CGgCt8ycCWNKvg+7R+89L24UP+w3oPXjtbdZS
++fi5+GG9JSZMzg3WkZS2UiyRg4hiicP3ZmVG2edQybJLtRvNvtcrZG9ROrR9XSmwydPWODx4W6wA
+KKuziqKCFX6Foq6qb3hR2fsarDStaZ2t8waNsb9WecNkp2ZntW12tr+rVIrVkUm4C/gAunL6KiB1
+VgWrgK3OI/P7XxSAudzaEjyg9NYCs7Ty4xhPxkT7onmP6SzGgw6qt/ogVAuWeXFqsHjpLFJuWD7h
+yXAOBVkTUOD2MEj9ANI9xsg6c+/OpbXmzDJHz5SzuKLgzCM2ldJZgYXmwTn2a2jLYtqMDQQIm1rG
+RKMed4AZ2sjC3YJFLXD8nCgDkPjrmyJzEQEc+6+/R5fWSqJtD5IrQwZwBjhC8uMM0TZmRgnGJvq2
+6VvwfAkGl4rpjEjtYIZiG2dmlTtiTCxKuXeprNnOkNZW9F0elrXkv8VEOYAZlWuUmw==
+
+
+ lb/LaN/Fsib3ZehtA9FXCyiBsUcettOszYftjGzUR7mAx5feMI/lYBhlFZc1lnJmBYeJ9KnVPDfO
+mRGAEcBnsMRGZ81bK5KEZAPYFw2UdAdc3A2uOOoqWYu20TLMqdVyFHBXvWyWt11u3iaLNG6xkO1K
+8yyKOcBNwDq5w2GgnXui29wjvQQjt9hq10ZGWSW72Dpb9Ez+OhnjsqUaQ9Du9deoM0G6r9Uuk2Nd
+2tVCg+cxU87g7fnKL21Rnri1PNdKeFdY2ia3WAeTWwxgNy2W3A6uVTWU1HBPcKkiTiSHe8IoF0KW
+xSe4HyfApGl8gtddJIXa1uF/AJOnEeBrD6QtwK2oDxu4VCkWkWse6HkferAVG6G8Qgro1tFjtevs
+CiKzrNq7HjH1viUg7am8SA2lqqmd6LfYUT9h+1ZMlQqf80vL68Sz+ZQqwNR6xJZZ+vsDds7V8Xc/
+BmZX2/kFW1B5qiy9NkLnXASnSS/6HEswRpKvr8+9YvcD3BelzGiufp39JJJ8wtNZVAfYZ+YInWtb
+2mqezdppsSfejLmvkt+L5cxMiPYOC2Ft1djrwyFWcD8APoDncVJAViIHPIIigKDXZf556UGlKfG4
+OqOGYz/YTmHqFfj54uuFtjgw5bjigXlI8pMc2QdzCQjumh8ARSBPRigt0G/kdKbGJEpD3WWgycC7
+Cz1QFBxqjB/AbafGSXRJ3VAfRSyzMRLrrmlTA5f7QkVqKLziRH5u4Xt8linijbp33eCNBaUJzts6
+gBaOSC80r4N3mIG+myJ/0zVNnf0WbjCBr0rRl5tMKfJ6QTH7+/Z6b3nO2P0cb+p17dC7mFw7xPQ3
+Wxb4YD7Ve18Zv3DFhK0qrVqzeUtORNpk9Izt+9c+RNrgRh73vgrrsUMGIVsVv9PBjCACCAFv276V
+OvTg56vDM7xL/wvwQMC4wV6jXI0VOjBilVCwIo07PN/b+vKwN+AU/rXxFcSGwq/wAXTbEMydGdqk
+bcs6aZpVeFrFONl7UDFEgEewpCooRiuVWzansq7CaNVHS+p297ZipHxjuVT7qtgNOcOlB4wPE7uh
+Drf0QNuefAUEjb0TkObc8fewPGrUW5lzGdwWzWL8NpQ4F5MzYxShZWi7qvbeFhcrPCpY5TS1R+lB
+GNYxiLB7V8UFoVK95fgC8jCGU6ZnIkAEKCYYAhjj+LatOBHYMsFH9uC5247+DoLl7+CwqtVeUXw9
+/TEx9EiMzgrWLPkAQmQzGvPpYjVn0GZNHg7ox5+XFZfDRKcDg06l9wpWRxmHKj2iyAQfX2PbWjkM
+em19ykd1K7TCtVHUwzrosRHj9lNjrXtd9UD3Lz5qZqyKwdPmRX2xtXcBcgjUywLEGLxtS7COIRXg
+4DCIavL+LSgnKR+2aPQ0XvcDKIZ0FZBJGfoVyrousxhqw7ACe9ucm7Ppm9vR5zFAfMac8WoIV1Ck
+Emw9eNt2eFjbr3oPKiZa21J1aSAUl6ZRKVw9+C0or8AjXsZAe/AWbK8AWGz5VHIEpIaQjo+f4SgW
+Wz7BJgBnbjoDfr5GOJNdFGxSCc7nfL8oAwn33n4A3fcCAVBH2sOgebwFcwzGryBtqTi0kcVnTHV7
+nEiihXMmilOIc3ZjHGeH0yuls1ZAfZS8wtu2H6QCzJcdeyADrmA6u/RR7Su8CPizn1ZdLobGVJH1
+FXQLFDoGeFzLvAVxUAIbx+SozhRSTib+NpxMfVVFO3xlXFTKw6UzQrvD+bQjq6vDNZr6+7egf6PX
+eVptdaLXWHIHOF6uHXzNd8PB70WPXUP/NX5VvPXL9xvPiTaH+PtacWzZvI26jhwep3atTl0EsjoV
+loXIk8o9rn9/jfBxjrp5P6l4/smRoEeonD98s9ofqN0076zC0luoPNItfVTrATQG6e0HEDrAIAAa
+Q2tLsN5LwYMDrnB5s5c/Ti9Z2r7YUyW54aGWQ2n5Y1lfdv/KI9PdjFKzJQTsZlYdBbyVStCn52sP
+aq0T5HpZIr7tQpRA/Hz+45629PseR2rZ6T8ZwW3GuixygA6nN9lAtzeqqYiQe7Ljx2a9vdOoVJam
+KSiLLjNVJeeigW76dHC7jlSQrztIRC4zga1h6zJwiULJc9GpXdfztnFfaa47KqiqwW7F6+D8x5z3
+3gYWPYbBnnfo8LHG/c7CWaPUM62IHQTzyeXhsF5srDclmB7qy7NhDwVfBUhbgHBbd2yR50NqtPyV
+6OyJwTSYdixtsOGFo9P5suBgm7DqX65GEKRtYLc1dL7mYxDPpumZHkG3JkOAMz44fMwxmSwzxatw
+irdZH5U2aghwhZcuYAP3iEQfwWdfln/RIB4CditAn7bvOwiJDVyPPZ3FaVFXAc+XmQ4IeG44XvGi
+3AIGmh9tSV+vU8oHuDg7QPlvQ8AajhN1617Xc17M0yt4bld6hfcL+0GD04nSwRullAzeFv8O6QI2
+bEapev39HN6QahiPqqarxSPXo7LweDqL//01otJ02b32eQfZpwXsXP1ZuaULZilzkYb3BP0blWsZ
+PyeaTigDj2l9BfGqCb4KWLbr5VHII7R0Cif4L391/H5C7Xd4rANcnLZfPMvX+fxCx5VuWfcW+2A3
+OJ1zBnqenDqGO3iuycV+nc+9+Lj9YeVVvc4zk7/N44jA2XNPIgi4HOP3W9JZGLrGMnpiiycDlQfV
+wGdXIoohvZiP/PmUHj84YA3bYl7D02rQlS5EujYVLZNl6+USZ7RgEjJ8ZlC0o8u84iWDRaM9e48w
+CfEmW8N9j+GUdyR4PEXGpn8+96813LIWcY348OcYT8ue7mwEVz/ByLA31zeSfp/g0R3qj68RRnZt
+A9PLbuDVXe/jp98q6beBJfX5addtlx5AQGT0i/tf21aggEqVoAKDpzEA4QPIV5CwhjdyRwE1/bVb
+zBqWV6jAio/gEdVDIRUC3MM2PuxOn/sHsPWAcK1gBTM2pD/KwceLAGkLcKkc/gZWeIvtDEH20doS
+FKmmjGEQ2yYUvBqDALRtu5g7NHuEjgqQLXNKZgcJG9C9MffRn6/eNnXcXwnfGU5RoUO2FS/nnrFM
+J0437M5T1WXVjVwOogLfHoTjoZsnmR7QPEkrxMtaRunoChwbT+2KJ9Nj/wPoysRj0BukLXWMD6A7
+f6F4AK4wN5UqIHuQ4ONFgKg+53L3eAjVh1Khgu407UfCy5lXgec+5vRBTfl67mLzlGBVg1BYtDcF
+T0qFmpbgIwVccUvt6h91wrf6YxUA6W0zdqJLdfDfQ1tRbKmsbqieYaD7j6kX42GEM7qzgwulQoNN
+8JEC3E/QVX3q0KrvQzHXi4+idW8hyHuLXhdAHXM5X9B+95bnm79KNK/+KHry55e0OywmqCEbu8Xf
+CYh+LaTj6W3rQkcwo6O/24VKQqb1RtbaEsw46n71q5Bpg4/YkruA+3KbNmNYOjjzUkx4Cov1d7u+
+NhCPShA9eNv2rdShB4/hVi1tn4f4tqWAA9dylerxNsMrvLUBKPg8wJZd423QA7bd2NaL2rgV4k5z
+ohWBOKZbQBgG3BwwtgUoUp878RmmoQ89qDieNw+LbtEK4pFaMI74LkS4gyJVwQPVLzrsRpf+sAb+
+/9S9bc8l23Ed9gvmP8yXAJKSoff7S4J8kB8lhp0JHETxjQZBYCiPaFsRhyRocgz++3RVrVW1+5wz
+lHwnCBxI95Ks7mef3d37pfaqVatG7uUwvj3AM5OVMk58J0Cf46dOJtGtAUJJN6OCST893BtI1NGu
+oV6fbljSCZoHFnXAv3IyHAijOKQb8NgtwiWORoLZ0chA4o7oZUBxMD5icce90erNyB48NEAs7nYv
+jQeZ6jRq6O8NDZR+GL9r4kt5+GOaD4JWPOrt1+NBXd7i/lQMKx8jC1FhMxLhOxs4Zkz0Npaoo1ux
+drNb3B+AFp0N+D53fNfYE29h0ljnzx/zxYy9vQ9MhMA5Cjk2j8h4zJgj3p4ur/CWzfY4jA/eWHya
+m7H0pz+PgXEQBuJ7HTyGuBM8hvfbEDrIDdcSXup6+PPTqEy0tw//hHsPHlg86I0zFu8q7j1edrR6
+jKyzgZuZiY43o7I+HpecIIPEjx0Uk7iTZJSHHzs4Kt8zYuuh8WGFDTaOD4yDH+Rv8JZRjG91Zj37
+HDzpSqdRqU0P8/VM+45fD3bW8UpONbHjmUL3K/bjI/k+ZjbT9N/ue+yRvX8zlmggjHqofnCVDtmu
+mPChHH+41pRfePBiDy2vcFQONbHjSyEjn+M1p448e0++97F9yqz5hKPx8Svc7g2jK6qdxnI2UPrR
+rbvJpfZ8CbkrC8bAgtzffQxAOO3+oHjVb/cF7xRO80lM4bQ/PowXClDE4nqUmQhv+Va2PhzuowpI
+ONFH2fqzgXmeMbnqHyJnckArGtk7ypXH0fdWmTwOv0c9sTi9PxjtpH8T+DrvdSWvAL0PJa8AFVzh
+m6i7odaHEEtgDSHDGvAHBV8IoGzINbOu79mk64AF/uHSMvz5jAK2Lhh7NuoytAF5u2ANO9Duot8B
+Fh0aXAEr3VTAAto6VMACMDtEhgPHc+MdDD1UfwKOPRSKBM+lRvChBC7mBdFvV8D6jpHIr0scPTdw
+9ID3usDQvQEXI7p3jLvhZdQ94FR0Cpza5aOI5S/IiEEU6tMB5h8SWgHm+4uxR6hey/r4MeLnD8aH
+n7pj8mImD/R4hJvRUPWbBldgv7febtf9dVGqcxweatV3Mx01Rx3Pr3AzxkDygRzj8JgHNRzFmIdH
+OblzfrlW9XlvzAQHHW+a+Oecj6l0a6CD03H81FEg+5z2rj51/pjLTJ0/dZvKjOrd7j2N3moYbz2I
+Je54hFg4bw1w2TyKhN/Nedbne49uRavBgTlW3lsD7NbNGM/lRf3u78vvPd+XqnU/GoOQd2sXFRfP
+Hriu1/kIMPIRwuyr92nkMh/PahvC28OORg0w2fyuTb8+7DHEch/2I6K5tw2NAOttRySWeyg4m9kQ
+2qMi6WEMKc9AXV0YjDimIamHMFi4e0fhluAN3ErA3s0OrZ1GBau+Pd0LkdI4dj4YzbN0493hPBTL
+TuPhgpzGFjt4uDYuY3YavXL06RkdNYsD3Hu41xzpo3L03TioK3A3o/T0+WM3I7sF49uHR3N5fICX
+JhZVv/94MGNedoiP+dB5AxaPqtWnEzoiSsAjh9d7u4MUR8W3u9EjJUQ5vNra/dTkRQk/Haemmxvs
+MMlZo+88iaQITYXRfevDZT/lh8O7P+SL48RyuPw8RkAe/AFhOBXX4sDh4uDngUONRJmAh53nFWfn
+ncedJzl3VXy/ttiePyabG1qvoct/iCuqKvBdTqjaVrt8BInRqQp8b+w2zWIslKtqywN3/XpAg57b
+NLaMPvdlRs7WZVbvR4wJBRj8XjNWA5EuY0QJ2zaK4mUe9gXMaBUnRutMORZjz3qmas00fNhAtXPt
+ZW5Wi16M2SI+l7HMa8D/9HSvmh+NOadHY7VT/hsaGMaxovn+CGG8HjcbFkejva94Cw==
+
+
+ t3vDyNl3Mw6nc93abQiG3XpQVi0P7wtGPgLNxRlpRwPZJF3kh7r9b9eKP7pk1nt/stLeHu9jErIM
+lWH4QRMnsXGsFYNA6nZSYq/GHlMWS5vc0m7makUpxNgMhLkbi017Gt8w2nXBMS5Lts9/zQzkENdh
+RZbFiLml9JQA7g9zM2FbMyoipEasfDdb9Y8vSXwNTJTsdyLh+vbXKAhYm3kabx/ut6JTt4l9Gs87
+V+nR/TAzcHE8k+RfmqtytIqXwh6wY5JMYqtcv96lMaavt6oJImK83ruRvvmqrYFrTzIm9nnvvDyY
+CsLUyrbOXT91nfTO7/r4CNfxNtnKcDWQjF19DqLo1jb/5fERrrks2bX3x73mPVyVy9gN5K9CHqN/
+f5mbwcYteST0WF6vLQPuR3zuy6hh2LcPj/eq2YzTIirXlMlh5J05KKXxwWKuxi8dJjznZdo9nj5u
+3H0+/UrY8OzXIuHaSeezF4+uxwRqsnH08mDE4sMGwszV6zIW2/y40t1/CneyAXYsVrrj5V2n1jwe
+jZcz33PMAczMY/k7XsvRqo9A9uBhFp6PEN8EP/bYrdsj8H0fjxsNwPjTh0ez7wxhjA3rZtStjYMt
++uANxFc4GmjUBuSd7/QQDAo9N6wwooGf7usr7/0V1u1tuOe9CZBfj634ZtS9nH1g15qVRbsPkKOB
+GB6nj3C88qOB+OjdcdNj2vRQIDlWmO/dO2g87xxnA1iN7vdiNbyMrU4ar3/aUwOXf2ZpOIdLFCvn
+5Txdnt94aFXYQcxAOhoIR+sydsu+4r1mXJb+dG/gcsos/+q89zQWq958N2q32EC1/KnWbUSY8doJ
+H7sVdz70YMDZjAZGsu3h9g5GsrU97tQGLvMej19siI/CN5vDCCmb2zgYl7syy8NAuozThCIPD3RU
+iJDfh/Jl7ivlp3tpjEk65Hgx6qMDeZhj7t6M4e7efoxT5LljZiwmjnKbNzezP240IDSvROM0AUgO
+5cfexggfzdiT3zcWVgF+8WR2L5TS2FsxXmekufbxYnQBvMwlt/XwuNcU0hIw3zVeC3800FvuTz8W
+xqOB6MHxyc/eHvcm7CLHoIs7b+/g2mtNR/Q+wrOl7V7HKejfydTvlqfG0xi9rjB3nvJOY8PZ+lim
+YGQDXGeOA10sf0ersTvejolxL86Znx/ckeP4GTv0YXw6v8qx9998+K/+7T/7y9/9/q/+/v33f/+b
+X//t7/748b+9TH/z31//+os/XP+Sf66/bsMgHdvf83X2dXPhaa4UW7zU2HhswplfjfQFihUd8iZm
+x/bYwQSRpbDw5MXgmxgNtmiNSaVsAvG/Jui0RazbJEghow7Jcoex66mCLUxbJN1utm0pIzfbNEZu
+65RDZQPXt8Kes4C0yYs2Or8YIa50GfPkEBWE2pvYxuHQQaockc/nhX1ceL67jGvB8rvHxAXtrBlz
+VrW0BiYKjMb1b1LqNOejJ7lwRyF2LO1qMVJtF6zf516wCeWj4UIH/VsOzqaZKD/Iw18y4N2modFA
+tQm5gLX3+jpghcth2STHZMogPtNFTC5hHun+Fk1YjU6dS2DF9cxU1DbjCJYdrcCdbCILe5BNmNau
+HsTtHK1GPIggUErnke+e/G1ezhvSCS47CrCoQwa34U9PUWvi5YT+ztR/WCbevImHZeVzXFgNT74Q
+5LyMo9bHdySfeOHO80NNmdp4/UQ5+3Tn8jtGbTaauAYJeqfxM/hxyRzy6SI94oRNm1PTcFQ0MRJq
+18gFvo5r4R9p0Y8yxsbzHsEWrh160JmkCJYYZ4LbmbLxVmTvSQX71DIFAWsCf2g7ICBU2dVWhZGp
+uLL/DXrk1+ZzNqFqgHY3IgxirBvGaczdV7stW4gLjCEOzQLmcohTmxixqktiT48mrg81K/0pLOFD
+IOgGYwKvZ+zj7Lplb2YT4YGWX6xWLJcpGzigRg9HhzEzIK5NzGSFT/UCJO/kbrrG198hV0QCNMqU
+ben6HrGSSdOW9nNdIG1typQuuFvXNDMChq3bvOhoovQOEINBq5mMrmQgCjN8kgvagi0bz7FKAZhG
+vEL6jOyQ5Z60PNyoMGrU++jF1D1Am7DPdxk1Ghw/aMZhPClpoq11NNFtDF0XODYnkrQUOdrNnGFJ
+oCsNqXZIxbAmGhdwuTDN75wyTDPz+kqhcfaMXuixOpqYEP5czlmcKoYA/ApV561dy82azGtmE2tS
+IpV07Skzr1cazRORxD2t+6TGcjQhhB3m5JGwI8ZevN3qTbTCd2FIIpsorVBB1TuBdaEGr/nq7i4N
+Xx+CmGzhGvb4pkSs5Dnm4N1AYqQTWbdC+a0xziaKBRrkAhxbMW6OFa6ET9mX0cLldPEVIW54Ga95
+h+fQYIkZ56oAJDW8gd1JWC4GVtfwOOa6OtGRF3ptzt/JIWUvvpNx+jI39SGPFU28zHp9nR/7IpfW
+mrhWizmQebuc+aDpUGrziLGcbRPSxdQ1iRauaYiEsWqy1PeE3trt4V4kFLOFl9nHz2nKLzKarYXv
+5D+/zJS+J1VHC6kMZLgddJHrezKbjQFOYQAXJL6pi3I8hu3G1wX1DtBuzfg9FMOzTizkvmk4NHpR
+U0d6uqdNFc+QTcGkecpDjyb+kax1PXX95He/yId/mTn/lGXPH3yZk/8ye/9Fpr818R1dgJcKAk9q
+A2zihTbBSxWDF4oH1sR39BFeKik8qC68eRMvNRr+pJoDyxxYC39CH+JRQ2LGN3itR/FSuOIucREN
+3AUxPr+wP4tn/ClFjvenFl5qcvxJURC28EJB5KXWyJMuCZv4R1RMXuqdILGKTbxUUnmlufKsz4Im
+vqfm8kL35UEhhg281JJ5qTnzoE8TDbxUs3mhe/MokcMWCqWis0C3iTJBJU/kC9GjEmNRpXdR4zlO
+qELBCUW4npkHNHqHIparLT0JBUUTL2WFWKClojyCqBpBHF5UjUaPV1lRhFFvhjd0k3EqYO68knxi
+EzttiiNRR1rCFvbUJN+IqQ+I0p27ll7we+UCZp0oR+VBoSwOq2ZELTVehzbX5GrWuU6lVTYRYl3O
+TGmuHdV9nRWjLSliHOtsomVq/JGCKcY2qFzG8uKXcQ4oN6HehzexBgYGyouocfOrjuIKkCHTdkw7
+vdChqqYM38/HhXZe8LvZzA5J1tTcGGcUeXIDbEQQrfkDhpbaoXL2KLDmnSj1sJsNidoZC78ZcfIR
+4z4mQxM+0HpsYVn1ALH5K16DM1d3ZzYg/jek9q4Nc1D/OI+ED7KRmCgCdaXhvZ9HnC0e9fK7J+++
+PHjozHktxkeNvWgBygf6zKEnXjON28WVFWa39UO28miiDep0qRKZGXVhfmw3dPL414pxQ2Vvhcpe
+zgVjdeZOlUuAKTpWZzuayJsjm9ibcNgMV8jd5TpU/JJvNx8IoF7I+bjgxvPun867zwufjwvlVTNl
+vDDW7/Rk98WV0wU+1SGM5dSMTwKfbOJPyoG+FA51DUA2Qd3NtlzefFosTIzYRrVjo/LOcn6T2anB
+R+aHGqkteLZrHi6N78fLpCxqL/EFS8ECu5s3gXINuqn0efYiUa+fHCQRMF1ePo7aegLDUTFWhSrY
+hFxY5wUa93o27uTGMf1BLnduL2xlR+XIlhO3MZzfRZR9D+rLjhVzTBW29YNiw1ssXyKTDvGg50oG
+/PPv1D14WSHhoZqCNfGy9sJ3qzQ8VHSIJl7Uf3hZKeKpqgSb+NM1KO7VKh4qW7CJl3UwXlbMeCyu
+wRZeF+J4VbDjsbQH//5lHZCXFUOeqotYEy9rkXynaslThRNr4mU9lO9UTnmqssImXtZkeVm95aHS
+SzQBwopcQA12KWNmrpgaM+uVZVtqpIKMRO/YxLBIsZ1YWXFr0EO4jCwXJRVvUC9MRvwuRxN8z1Le
+xsqoS7stTxq95s1T1R028aJGz8tqPg91f9jAyxpBr6oJPVceQhPfq1P0sqLRQ/UjNpENj1QkLJlW
+gFZVyhWcSZau70wPVdzOX2V2hyLwPDWaHK6iivYquWs9Qo1yYc0Jzh72jn1N1uR04GK43eVL0Mto
+1SSz0IQMVDCWOuMSW5SosgUbt4VfxDjNJUeIxlftrYpqDQGdbqoLYgQQJmE+237EOAZj87o0vnkT
+q2yE48C1FGNPjKO/MA5z5KIXcWGhXvnxgzcjfwzG6MU1r+bR9t149ELyVCy6jTvZxHnBf/A0DqOi
+3o3HCVguDDsESQw97r7eFz4TQpPnnddB5fh73SVh/fxkbfQer2Ps5b6SgZGnzbrjzmrA0HPHCgNQ
+2wYe6JRITDvf2S30IxdqNSZIYpxXBtZ1DB82ivUAK0ZJezSe7DaOBZu4xvxSBpMGQj6aqVTi8yjX
+JpJ2k+xdDajy7xuXNikNtwfvVl0+4wXzKVzcuN7caJkeoPELNRkFTatkQW3IsO1OG8LPokOXHcqT
+C9fXBDDOwn2CfPdNvTTs+vJfq6KBsoRZqRRrQqAAC4JcG/gYDXevmrFisiiiYOT7Y+Ci0QDQHr3A
+XysWDCioiExjWnFjNJDrhooYcMNdNU0JOwfIL1t7aAjjMOSeTVwXDKqWdcjcTjGONbFZsnygAu+T
+cl2xmwjMDsxWwuzm5yjGvvxm2yGq5oLgToVD2EQyTF8vsMuyDeUM1TCcOcWoJ5Cn/b1IuNTeZXgD
+Ymzc9JGmpcay8CoOz1MuaBFKexC4jdILlB7t7ggKRL4bjOnY1RTWN8zdk2XEqGFIg3xNMECMqw94
+RT18V3lHq9FurB15m2CZiHTYau0j3zv9KhCi4oPwQhKP/7NfyHuu4wKMY7dno5EUaXw7mnBoGG6U
+fGzXIGPZZHnqXg9lsfd4RXNDrgt4iBqB5LvojI0K69m1sF1noeMdXS8UbjFy38QImp9gtZwLp7G1
+2o7nAKdP/PC2efflBkEXqqFW72FcVB1jL9A2L5ixrzQO409+Nw9BnrmkRosRykFlYfJdHdqdxjgh
+2t0JPQF6qUZo4C9m36qxFhyuTl9D+jwnlJy6D2Y+4DQP7m4cFheMzxcXpvf4WnAAJYHUYg88YZz7
+nCJxGpyokKkdZqmF4+MF7qVb1dEEXvKwY9HnuDAIU/G8pG0v3o0jl77LmzHabjb/BAxqk6+oVR5q
+uTLI8CwTsIiWV4gmCJY5AiLriO75AXR881Wnb1YemX1wjbo+NVT9WcS4bCv+rcaI5ui6lXns5yiS
+Fkqn0fJG7Leo9a+eVDRRNmWntKAwFkpb5eRuCzVuqXSMHysWCsDAKKJ9UyARtTtvxmYotuvIBOPl
+MS8zaoWvN29hdMOIi09r0eKsjUbxQsyI5UJUn2a4FmU6aleQRi02nK5F0MpmjZzVBgWe9ETGp7hG
+u0Wl5YJpD4txponHoANaBt0u0YgKXotcIGZcmG+pxspOJDsDi21Qvwu1FK2Fbskqy0pDmS8kO02i
+pBK0EnahFIqqR3XHSnepPILk7DV55VzSrGe6QBQYQaRO+6RcyYVrIEAASfliZmxb3Q==
+
+
+ E1FF4mjN9MYuo3Ytmjgv7PJ0t0JMX46726u79fygxhXG1V/8oLxI1jADO1KMbVUYNU/ejNQcklzf
+dr65vFjczN+cIx7J8+PFCA4EdJ+ihWGVhl0PSmzNZARNNuqL39rKQrsg7agxb7sX//tyvNDeXuHL
+y96cJkSmtH9mnLmjVl7H+2qWvGZF9SxfjC1c4yvbBURf1Gj8AC3t19ksjmyCNciZNgZrSgltE+YS
+UGfZIziuL8ZWNPM18oPZBER273eHEbpWd6MGlI5JZ3PpvHterU0IOLGItSwHti9R7irWjsuNXccF
+M2KCfc+o4al3byIulLibvagUYT7vhIxTLIKp6q4Sed26CJrLSnkmLJeWSHwZldB7rKNGG+UFNIEX
+FOhM0WFTYBzz7AU20uSiB2pEHnpmaUb9MXNuxWglbb0XyX5QJDfgkEsTugymHLN5GUXSjOX+IHhC
+S4f//MJuDDHdrGxDF/R3p8V9YpjOA5L0j7c8EjL9wYCVbzJ7azCyxxOMZDGOOc6tRg+DegFlb9So
+3pgYQUmOEeeyAkcTuLAMfEMvoKThmlnS3+u9zI+hmRUPkue+i2mpsZjs1gSpVZ+4mYzCNMT/HHCF
+ylsWo1bjzJBSKGx2QhjZjY9jVi4oOnY3DuOvPhoh5Pz4KgZJUDEjD+mHmDmuhhFN2Dw7tMJ06zYR
+FI0/Pmy8fmfs/teMW4cExWO77pYMO97FncdCNCtEMOhtsMq4SmBUO2IZxL1NFkQ3+VhQd1c5nF1j
+uyLmIkZISOmdIzcTHFmlllsTNeNCxucTpLrD6M/RjddlxvObdvtoemHEg1jkyYyFD1LqnofxaCKr
+0ozwOeKxL1dq3rRbYll38ZfYnxTiPmVlxJhzhVjN6Imbpm26LmvzuBurtI2xA3RLFTazGhtwgSoE
+UTR7cCjFVdjVFHOumxElKDcNOeD+omk9Gu5MVpeZTRjFU3uXsfoqlaSZMdOjK7beqmrPwaoJ/Ngv
+4AchoPUd4zCFADYRF2rcfU28/vGQojtvNDWi6EM1iZaQLhKjoeiHwpx4aMu0YGhkH7IcoNbz3XKq
+Wt29zJUhcHf4ktcSCXk6xd1grLqqrW4Bu9M7VOGmnOvx2+Zg6gWETsSoKLBqPwH/UKPOrNVPwM1u
+rrD3Pfz3CpolpHo3pmPfII1cL7RjV7v87ZxxIdEXS8hbFsUtaIZeBymQnkSK7FrofS2XCxp3Uo20
+3irvdj0z7JZiSxQzSznesghX63auWncbLSxhKk4zTjhXeeHI7qp4bGLZJLELWEQzRRdUWq8bBnYZ
+qZpVbgC83K2calfn++wXSmHbnHUCfAxTHnQxwC361ylBii8d4MH9Ar63GPXcoO1aJpgalUknxnO/
+kxi0spS1CcCjmWTtrtxdgzAktq3JD9q11j1iI6hK4gUkfW0Nj+uaK7JwxRwQIcasgqfTggtsAnQT
+FdpjMECC7oM6fdXq1GwBFoZ97XQQasRurAWxp2qwvxAYNEu8C3fcSoBvpSTo2ji3gTbRhKWY+IVP
+GoPbytR6MOpaHUY+RzUZj8e7m8lGXsZCU9wX2LHCEAP97bbBCyowdG+Nvy5IWBHT9eb38ffG/eqi
+SjkdS1I55trC/klDkQYEHDY5xJoyImyMkeLtxQ9+9gv8AynePdCIoi5xsxnTPB6YIfmFJGf9QLba
+yFFPiYbyJVG7O8K8rsQY8V8LDMuQgopyBMjPqSV6tFX95IdJ7vH7QxNTjENOnN83os71YxMu6Bhk
+gUPQUagF1/l9HXcGu8HYCYeooxg1WeYUagzShAs1BsXCMm8OAcbgXRwigcLSMOanSxoG0SMujLjb
+iB7nPucEkod9NUnW0+jHvvrZm45WsDmLtFiz92aygJ8OHktXPnbMT6fCnMqAchjK9nPuNQSbRryR
+GmwauWASF37h0UgF3MPoioPPTVBz0BlAYnRCoICDGW6VRjrYhCTtzHLzBIWDpIxW9RvLnvda0IcM
+nzUxuBjvYvlvIP9pNt2pzuclccV4kMS9zu+pW+dlgk95Pi9N60cXNkGSZ1fiYL6Xsxdja17fPYzq
+xrCJCl6ZHreimHtfGWc+8sw3VRZUlvlIp3i+8NkvWH1hFctDypFytwfk+pxCRpa3PKFmibPtjOoa
++j6QfSXfx/yY3c5KCRbe1XZPumm2ndnuHi6Oxz43l5PaolOUaUwHVxNhHf2EdbpOuKXJyiBytdWQ
+Akzm9qIJGatz8O5F9etrZDYMQ2Qti1HRejFWUxpnC21NNO1y9RIYKpDKrNU70ZobTVPKm1DuXd8p
+akItJL6qMRvHUoydZ6Ucbr+qo68MDWwmjC7BA8zllomGxBfh9FHas6zICZAL8BR2SLwLLbBCSXS7
+EHjappW8bp9U1qXsF5onYxh5V41MOnLRcHt9Z4qGfuG4gB/sJni8GN1ZpoyKw2AbI1I0BhLBdS1j
+ApZExDvaVVLSJ+bEYDnUdLFoguLXYB2asayJkxXT7BbpwnrcypFcuPzoLxf64t2ay2NGZL6Ksbqw
+65EELG0vv3t5gSSLbNsPbpa+2nPizgO41QtQ5p4WwYdx8+mOd2GhB91ddmpHE8JRsQtk7y4tpli4
+Z2VX85+bm1Ycz7UAVmrY+ibLF3QgmGqkZGqnaKi0O88WWq1sGiuqpHCZQyU76mRm2OVPUaT34DHL
+Jl+op54pQy08sAUjq1BqZhgPyyXAY70bJ68RssKSoOntZi92kNriAfhI4NULvDtBbkjz0/jePNdL
+jAteQW63B0nZYIbYXC6/ht9ZjxK0jU5bcFr0wu74PVLRpVnbzB6MzZvtc5xNuG7yhoaOyEinBaPP
+mgbakZ7e85Fp2cx9xAUsLQ2kFDPOMG4aS5q3Jvaru4v/INZNFox/2YuajwvPxqOJaNcX3u/e2161
++r03ManUj8ORGSsgC5dNbyfqEU6yyjh3ClYjSiTGZvDecg2WFc6+ECZ7P56jpkop7YTkWxE9moBC
+KFogxu4YRgqhjSXAZ4ZyOGVcBNLIhb73WkwBpT71zVPXC4WeevPiiCZ2JLajYmLGZlVPaqDloVac
+ONrOrrJtmK+AKZBxOvS8y/1lhig4TjNmpDB7cTGEQ8TdiwlYEyE6fxO9p2Z99gzeQx7/doCLGqB6
+yofyyVE/wc+AR/UEHBbZwmmfr27urTzZasxy1fOf9eNxirVasAQDwobh/vD30xLG1E69bylvnDbP
+4stW0SiqcBlnrqE14GUVJCc+6gRbWtODEdULpIurhHQDqxzLBYQ61yy2jaixd9uSRNsCCIh6TtGE
+OI2r3X9wSCi99KPPn1TmYylz+44UiCYIUQV/bWNChOv8wmOAtOQFG9iCnFITRk9DfuYQIId383w1
+EICwgR25VaNBmUjt2L/EmIef523eizHtdkyNd28iAYMojO2Z0aFDLMNiNLhfjMcuqhda54Xa/O7q
+xh7GchqPJspA25SGEqm2tfDUG4niQzMmiYGOEnI11Z3E6kliYjT06ShZItJyK8PYA0ZVIbre832Z
+OIyy8HX2wuS7HMJgEwVpCF6CwYyWnnlWcxnZgZTb4V8umIDhefgflHnxQ/onUypsPIufh//7BaTR
+jgS6uRi5PXckLOsR4UyLlgvNPOlt6dQwel0euqqXUc5xhzGaWHPjXIKQmBpXezjB6J0TTfTjo8qF
+zDAQqzZdxtk6wkB6xDXjdezGES9FpFQumHaPnv1CZdL057rmWM/1YLzFs+4XitFnVGdyFRhdxwo8
+E4uTrdg+5AJOvNmPGiJrqXF1LX7QINe5wWYWowZH2MSySaBASKrQlL0+ZZsID0L+RzQ4bRW6h/bk
+QkU40gOBdyNyFu7GGtST80I138CMAMgAvHxStSpLu4myAtbA9MN8VEAQOcBWHuoqiPCpgWAC7MiK
+xj4M4lIRuFa5WsOljtIAfqdXI4smRk24wM1CjJ1GbvFiNM6ZwH1HirdeUPZzyozaHJpgKYcG4sB4
+VaZE7/VoYraNu7l8i7H3TbJF5tNpxo9xKvLxGHNvEDOIz4jMcCPhg2oEXSTtjKV1o53Eqz/LFIQw
+WTBXVH9sG6cLHJdoIi64Mt1p5Pp/M+5DKMZH0O3uRZm3owSCD8CjxB2bgNTbUY6tL0oup8jR9ens
+BKOYpBCrPOojyMKyWZRPjV98kYX+bfCfTiNK+JlxmKYjaU6xTscFlga8GXXz/fbibp6vB6QojCRW
+3YgEMDEeoopDmMTK+k9ewcy3FrWhpsVhhE/z7rtTXFBVgXPLEiOUgo4bVwR+tL+WIC0lFvGORXvU
+8lfTckk4WebLcgLdPPeVWgtIgDz4y+poIl2S0QaNJl8JlVgoyQjvPmSRFHgUn9SZZ5mpgfv5uuI1
+MdmLThHqnL0W2c1ID0Iks+/FSqMJTY9ZZxXTm5GKYIcxs0TZP7GJGr0Io8pmPjcRtWc78juX18jF
+qO+NtTwoeXG/u8f3izvvucJdDsIddHbXvtaMIBj9sYVIskHr3pE3onrhayADmBq6evdEjgIlmURC
+HKItqPUeTUSyBIvA34zU+bkZURn+uQlqgIqxKTlT2k3RLmpy9xt81F1BRHiW2C/EaWVyD1JzxEjx
+mckqQ2xhronMUqLKYtSAjBh9cFbm+Jd5MvPlAtKthIPGkg8Sr7A8DoHaaavZknfvQk+9IB7jklN2
+NzUEE0VX4sYHsbFeSCOuCFF8fnHB32fRWiK1WO6PWSwE4pmp0TB0KZjLGg3zLyCdJsbMYiaHyJro
+m5pK04NOW8ik8sLd2GIXSRYRUaOeatnEeeHl3UrpfDTOexOQdZWEvoLx4iKwtfvuJBqyWhtMjEdS
+nJZrQSERCOOF2G5Rqo6nA35SNVtIBXne4CEZfBfU09TW3sJuttEbRQ+bCxSzjga0+6KFtidSe3kS
+EXFc83wkYRaHJEk0tbRMFYAMR0skUCebmLwXUr1iGq6zvMdCajHKnFgDMhEXOsdySmLM7MNGEKOB
+Ian5l/oLbEL0SlxmE0p2pnmMLFCsWI/a0vL3/y6OyXdN868vLrgC+kut9Cdd9Tj8zsKkWKW3w5i9
+icyzr6JaZjucOD1sU9/ZT52iNc8WCirfSXfHpvFYBew5kK5LXT69e9GIZfb5VbzFe9L4g25pmsWW
+XKB7uW8sqRY9MVCyjKlfSsh3KQ0DuW070s+hsAa9ss+nrTpOP1w5T8qHNMq1PfTp7PApepblZPb1
+exee1df+KRf4O6comeowfI0LpUIPw1XQ5ExtsiLbFd62SbaaLR+hQqFfWpqKiF17aTXjgJh8x47K
+3wV3KhMkmjD2qt7NEvIig2jCVOjyy+eIl6kiDI2KDxqc+hoXFMrRC1CvkJQzyjhgHXi4ccxTg+G4
+YLw+/TnKRlAT4bkPRwc1/TTDC9cgzFe/AL1kEahA0lvprEchRwpQu46sDFlX0knfPS7ESm7N2FlY
+ooWTROK8J3timMKL7t37rtifNqMudfQd7p6oeSDbVQjQlrcuxoLEo05VSDlRBcdP7Q==
+
+
+ 7CGOFkpHtrRzNTY3Zm8hTnD3Cy1e4MJ5oXty7vNznA8Z6RzADb7Ghdx54aDdZzunHnTnaS/ZEIZQ
+59cLIxOTaJXZJlczxYyaaGtGY6urMc+Tdm9MPb0AJthzn7/cvpqNCi+HGV+tTdLLPZWpk6smxsjs
+QaVoMR758DKGdJXQtps3kYwjICiW1XDSbKRpjHok+x5N5HIHws4fzJytz89xLKKOLniCwFe/YNmP
+Zz1yMVpMSIwQnxRjW6xcfgjedQj/GkI1WBBslQKbnxdlwSCUdYMyheBjxS97uOTTDldoNt2BFu8u
+H1LKU+yPf/bnH//mf7/+W/74Vx88gAxWyG09eYxaR0D9HgL+ct7tF9Zx9xn4/vLyR4+7bz356dh8
+nsLw0c1aySZw1o+ch3i3s37+BCHBcqI6mR5oIm/SCcCYe00GCMfBcuJZpvfrk31ayhWNDUZkSvwJ
+1oUssA2ZAE7GGaZfbUZWRP0TDJQ0NpgiJdgjjYXqPcr7+BhvD18hIzatgFF8hZwYSPYSyd1Z2j0k
+Wp++8sGnqB1Mhutpy8fHH9SYwsteHF18hq+++oW2FhAwZBOoUanhakQ00CMgbnyPJhRFf7ibmZOM
+X76G0LjSPOESX+NCHsyz3zz7h2207nBHoVbqEZe82TWFzYzdaphIqwFsvMBG/p0f25SuH4JBX/0C
+ZLLlsLQqC6Eij1xORTyP/YlyKCxvNR1TlXZNbE5OZiwB+tCHo4NO91Rx0mMU7uEytFEMSqmU1CFl
+XZ1njcS3aKJn6sUCH7z9oBfPferF0UXR1YcyluTx+Vpws1+HIwvCK9aDoyfjIt+Xuld+5ORZ17zt
+SbKNGudmu98vHLC3tz1ZOADHGzGCsfv0HOdneJLc/OoXoACmF0DbRI1SU1ngi/1T8qWrQxDU37gs
+HX3T2P+E8CfXqydx+a9xobsUfdoUs59Zv2honEX1eDcGL+Q6Q+KC8/GyoxPZ2QWvJe6li3/xnZpR
+6eM/+5e//v3HP/vLf5nTx/fffP3tb/7w67/7+B//w9/+9pcfv/7m73755x//m+uu/+765/r/v/mv
+r3/pvfl/+dvf//6Xv/v1v/7D73/197/+5f/4m9/99W9/97d//OXvjvvdBZC2/+3/8Ou/++s/fv2/
+fvMr/O9//st///e/huXP3v7262///e/kp//8Q/r4l9c/f/OfPvzhQ/74l7+9/vtfXf/86+sf+b/8
+8R8+yL/tf/3NH6//8a+u//J/X6b/9LF9/J8//h//Z/r4d9LA/4py8MA5EiplfH0wDy+2okffDsee
+KtJrsb4kjVa4eoJn42Yt7CU5uCbmEE0op75wLfdEgjCiY9LuYRZxldq02dO6mVZ0/JZIQKLmRPSL
+xrcPt6eg+fOH2xMfTcS7OX7sMFq/3l6/3c9SlNu+mv2fVuHeUMbUjLSveH8sUL6VIqYVMyUmminS
+8MoKIZtfoXY75v73zEcbC4jxQ8tnv36lXecY+6Qsb6PU8G+s54U6U6JmIiu/NSVAEHUg5IDzq5dN
+/Oofqd728ltxsXv6tuTVvxgJL8fM8/AiYPA0Gj8/XYiJ8mqUv5gRb4/PE1Ml4K+n+fZyZj6Ns/Dk
+7sPy85P9GMMvR/vT2+aK+V/sYvkvfie/9/arP/zHq9HbevkXsmT+yGqZBfJQALra8eQrzM22yOoK
+YWI07c5OJbowDQP+3z8cxpaDH6qpG6o/KbiII3bby2uq8R3T7ZrN636vJG401uYiLU68pKIDsBXK
+d9i4rCVBiFGDBDasWfXtmBySPGI11WB8/2CZcpDEPu4VZWNgyxTycVMyCEn/mEaJQFgNGVUWzRaC
+aJHRtanwLtqBtVoBSskJbED6iynbWwMQ7BMpvfTUaiJogVTHVll4BzKCKj5VIXDoSZHXpG59HEZ9
+AJGBMXWQ415BdvzHKIMZRkrqWQNhrqxUp7IH04QIs1EqgXVBZzYZ9KCPIDVZdoZw2qGPBd3EPHng
+E8VCo/6Zq43qt6qaaABVDtUTEV6Ean32pNzLWIsv13YW+KTKjX1b0Dc5/CjxKmhgBZxWh4uHwag9
+kJpnw85Wca/GFAaWVk2wvBuz+dnWAM3CJUIF4N0KiewiE4GkStEdBcxVNa9In+C4tbgwQjQqeTeQ
+DjyM3aiIDx1YybWP/LG6sGWRZOmvwI32ESRwZEmoca+PjbPVw3j24DBHb2tCncfzuUSgc5X98Apq
+QTi/byoctrWRNDYOwbvKdDstR25/m44EKlD5RGyCidrTd10dzrkeRlsGJHOpl/u9MhpzR6IVRV8P
+YzdxSK4jNG/XbJN5bPUeRR/b1kZJ6seEVZmghTGcQ6Knkz5haeWUbkIq82AZC9Fs7vhjyRtYAPyp
+ZyqJ2PoClU8FJD1nx6uLrffWQHFNrcy0vfszUePwMLq+xN1cfMFQn2ogjQpsU1nFO1CfxTxR81nm
+SPV2r+ZnrtRurZ7GowdhlkdgRtPWwHCzl00NUHlEfJZuUSi69hDIFK4SkELR/bGabWlxFB7GcxU5
+zZWBS8v6tcWtG/v8k2YpX14bOC0N1Yw1TTlTi5H6EsKzMzw+T2aMSKMm26Gra9kzDiejoY6M10IR
+PG9CaA7zUjM9B9X2ivsC4jvvOR7uLQY3mXFtFu8pa+BOzWO0zbwh/VreDEuDbXcnUgTZD2O3slP8
+ijTnKCBhLooqD0XRrKZVRd1IZ4ZZm3HvnFjazjYP4/n7Yc5Q+Dxb1fca5bWsB258x5FtWdm+816k
+6qqxd0917G2iAY0nvfHMZ7tsRlDbjGmxVtKRCQaRrYz8SmtAtEIG2vVgaQaGrWPTRIEkjaO1tA+j
+vYNK5OK4d2yvqjEdtAljAUfUCoOHeTgpIloVBwgs5egBjfyMAjPd712Nn0YkwJpjAiUViAerihZf
+YluUD2atJ/k0iTXgjq+Qja0r6o8G6nzSNJCaOzStmRkuVDSrCyF64KRvyECrkMNHno6YZfxXEIl0
+7dcTPV1U9beZNDm0eA3oG6w4+uzrv+kB+K9wsN9QYoQIiR4EJJ2nP450EQhpLqIodcy+YKTDcU9H
+5UE59heolWmvv7z+OcER7DXxO+tjWS9kD6L8s1LBP6Nz15co9lE70hck98u0X8X73Ik/KOUNC7S4
+p637j7/1xbogyRealK0nGMkV+sppVDtq1Kp7+RkHfojutshP3KopBAV0dSu1E6pRZTVxV5AZnn4O
+/diira4XxBEfGj2z5XeVTN4Ycrs00d9g3uRD2dLgIf4NdWsAF63AzKxl3ewm6idCr8Oqy1gRh6Ui
+rDxfXX4S5pIvyVdnZ8L7Vc0Y278sJ0ZJaxPetZivzQwD0avCCLEp4djhlV4eXsCbvhnxORC5aMWC
+uF91t5qIoA0t/G0BDfkxWz5bMzXXL9gaIczbmh3UDHeTAnHKOm8h7vn8c1/Qj8pPIVK4sr9qPyTu
+MTN01HUz1bZLYmEg8VeNiGK6bdUJkb1b90TWyVyH6gnAL34O/RBhQnWL1CkRB/rrB0beMyjpiKls
+44LAiUOhdDG2RCNovNa5Dc5GjfC3FpiAD3qwFq5/YNT39oYGoMErMirZJQlrSyDxs7xE0QrGxRYa
+rcPxxjNA65CqdNVYVTKEBKZrbD29AwwWGU52DpFjRLMlZWsoI0ETgkp+TfRTO3x5pbTrxxDCXFZN
+oD1CkDyDOasyCNdU/vLyxz4/dEJ6p2/93ovznOm90Hcp0q33XqjXZO5o9MI8z2sb//L659CPPIG5
+qJZj9/F67XPUtZS4vo7XLCxi88CrcQ5sYKbRcTBaXNmk3WKiByL8B6fy8cc4WmVsVxbYk7xDG61k
+fAgYMHloF7TBRKqblpX78oFD0LhRhaWwtqG68Gg0qP7l9a/xVXRSJ8VbWnv5yygjIUgHyvi2kpTQ
+93ajCOI2ODAdcQKVzEruSW9OXOjXihK8JQwqfoNSPx78MXM1DV2RkscBVwSWgUdsLzhieseASZIp
+htvJq+4MwXcesVWbqyJCRtXY5zfwhp1nHk6vUpO/YkMaUP6YrjKmUDxZNlleja2v8vKo1mg6WHae
+sNKPmmRHx/3p12Sg/MW/uUUUXizYXz+8XN4/f28reLGO//TdNf/5536Cd/DkBnx97TR8/u6O/+wd
+/PRdT+L5537CivI4M74/iZ6nwE8fXk6Yz9+dXE+/hl48b3VfX2+Mn7+7qz3vgD99d7d8/jn043nN
+/P76+rw4/vTh5VL6+bvL7vPPPfbDd5Dv7zZPe8W9G9xX7r04t6DnH8MYffaXv77yrT9/zzF+9qF/
++q6//fxbnChPp4Q/caJ4Og7oDz4fHj5//6Dx9HP4JE8rkfmKT8vW5+8tcS8WqJ++t5g9/9pPvuk9
+7Jtfv7vHPu/HP73auz9/d+N9/rGf/pEo5F/8wYkHT/EgXviZESH++c+OCVnE84eiQoym/kBcyIKj
+PzsypH/+I7Eha+CHokPsww/Eh4wV+0MRImcK//wYESnPPxAl0iZ+LE5kTfxQpEib+LFYkTXxI9Ei
+a+GH4kUPnfg5ESN7mz8UM7qPrJ8TNeKo+HlxI/vrH4oc2RT9odgRZ/kPRI+siZ8dP7I//6EIkjXx
+QzGkx/fwM6JI5Nr8QByJpMUfiCSRlvMDsSQ+yM+PJlknfiie5PSinx9RoivwAzElUkB/IKrkDNWf
+G1dymujPjywZ1/aHYkueePjzo0vO6vr58SVr4ociTPYufijGZBT8H4oyuf/88+NMfJ0/EGmyd/FD
+sSYj07+INpFl/wPxpkj8esJ7v8aFn4/4Rpbcz8a9rYkfQr7ZxA9g3/6iXsGUduFHgEo2/fOhSmvh
+h8BKbvI/AFfe8jZuoaqg0P5AsIr75s8OV7EPPxCx427z82N2/3/IB/gXv/vlL3/98S9/+9tf/fJG
+cA1ma/rPY7aKrHkymZBuileGFw/m+MpUZLECqVpMuJJ1b2TWps2Dcu3gJUmdgTJRbhq7nRhn0Zcu
+0ggo0S7+tGkatW7ZS9ZANRljqyiOqjdJS3Aid8nrBmQD3+LOd+JORV0orSfOgdOs0GQrpv1iryCj
+rPVmMTVzUvAKqv+WKp9vVrtG8Y7TmEwO9/3DzSxncCS4qHS6abW0yKp5+giMMAxT01JFQ6XyE83f
+iUqkKn9maH62ldXkRYudZvS4Yk0kT8BOT+2S0ct7m98rSEiiJjdblaVlLCTyag/eEdVBu/toYKFV
+LRzXvZANje3owWGe8WOTKmDXz3oD/ClZ1/2lyzpJ8/J7BcDWR5CFufDFlMMYj5AS3q2hK6hXsPC4
+N+N8vPMdUSE8wnlv9QYSeyB+d7obOW6e7xU5WxhLGBM+uPyUv0Rxu9iDdEqporey+aFbM/HOfHwF
+0UzFj+V4BBFHHXTx2eqY7IEehvgIIq6Kz5jOH8PwFECSsq/ZR0y170UqVPLxxccVQVkMTx8c4tzT
+2I+vMM+hjHFg2bCmGrvjJbKvJn/rn9F7O5c/rn9Grd1DY2OrK50N+BSRNDV+8u7GGg==
+
+
+ DTzNRmUc/WJ9tIX8HzCwTT5S0TnTRLEpmysLZSu08cnQdatFKWAgF+rkUlWCdveGbkpcqcNpQcli
+M06MIF0x7Y1kk1HS6rVOu7scwGXGiWIgonqsdci0KjiW2Yk0cO2pYoP80hCYkXkMKc9ZTfpETyne
+arGcZD3GabafNZAoMCKld5DiPDYX+muac6RkiD9oGUQ5gb8j3GO1NM+hthAWNDVaKxIZz6rK0MsZ
+tIl1a2QAWSnvRTHOW+K1oE+eu656vu+IpqxE7f7i9XtMgXxui5x90mAM62UNK37JRRdl03bEm+WA
+mCgn4VWmOiSzVV5D/MV3xvJzp8xeI1xlgsOCCbiD+zQGjRonmhf9oziOH8W/RZaY1pmGIlxkiWXm
+ZYuPDJUZgbuI47MoRmV+lYLnlSzPgjIeFkxJPAErTqO+BoXyE1ODYeOqMEzoLu4Uceqh6cbVC8np
+EqrK4PLzUk2YCyskDVUFrDC1dGUL5mRLQrZ+Imm3oAbq+wc+acURF+VLNReu8CDABHsVpTVJvmVT
+iE4J5FTwUm1RKjgDaNTt1bu3BeX64PKxZvX8Q4cOCzKCyZ0zVWHVpIvyPMg2lLqojciaBjjVZddD
++DtICHPYx+su1FOhi6sHYtTrS4U7uwShEujQVjdKE69btSOMNWA1KzQuhSiEeBQtIxDWpSwzZ1Sb
+JobVLOENa+9HDTaxVISs3NWGA/KtPbXKtKmqF1eWNw8VyCpVj2AypXj5yEqU4DfqZeAjM4dZPpyt
+UmV4qvLz6397yrXsrPxegOJZQFTW9QqVqJkbSUcm969Jf7mbkot8dpvzLZi+ErVabaDOEV+xnnQH
+lJlx4JOfWplq/yrr8w46SMvUT+/4mCgBJmLt9I2H5djrmqn8hLcPfJuqcCFC8wRqFhcy0b9nzDv0
+5l0qynZtiAjLArkGi/xA7ETvNTVNrf1Jr1gbsKl49drKIE0vLq5TMWUYHT4u1MIRb5vLrk47U4qR
+eoQoo7OjckizpcbegYan9U4Vy/BlfwyUJGBBQ9muVmU9gVY4d1gYE3e+I2Rv1Ze1ziFAaamsVwdr
+j9mLkQ+bq6k2D4v/M/smRJRWGoxdWAOy9+6eC6ANK0igGMh0Z3nZkmMYBmFqPpc61lhQpczx3v0w
+kmR7bZBwllE5UU/xyEctLjD6PBFwRtLakURdNFvWCBSyx69174UCcIbvTlP3+aQ6/qREyKaAz3tZ
+VcXQIldQZhUPdE8UnTsoFatQ8l8/A7eqjkpryUrW22iGDyIeKLHvympospNVDtAMpV3Vvg8nXOkP
+Jr8NxUpx17PFO72il5mnCX3k7GjxlHW64EMyFrKSeXrQO7TOAwUVZ5HVq6S2Ml1FFS17+frfnJcN
+EpIUdYwE92Y4KfA4L0mWOjpFBWoNI3mM2hNFRBHHxLMECAs2ezVhavGCWbpIDq4DmezZt1CtDTAx
+BlBwXI22nsrAIEmjotCSdmsP9mBSgibPOMvJNxoI2EyvcqccJIube66MlgKnJPHK8BcXhV1yuMzP
+r5DvtlICWwqVyuLEFHwolZfkEJypKEEnlQtdPJr4N6Y/R69L8bMa1d4s6kBpVg5kqdvYuPNzRbES
+R+af5fg6ontkarb7LG8FRqIA1J7WzGpS6np4TS9RhypAUnhGOHqQLOxJF6vt1R96kFENQXoL/pC6
+jQB4AFi+g5C1wPxoUuNqYI5bMXHxaBRxtAYADFer8cTxlQ3hqUdtrWz9ViPC0tIojtlVpEhbOKnX
+iW7DSYXMv7ieddAngf8yl8ltmZ+VR5z/E7yy7uUEhSlg57zaHfqS6jWNArgK1XPpqcnVUujBJPf/
+8i+wJmd64xKLrzv75k5zFPGSauR29sC8//J6IH/2Ea7eguJkGrQhH20v+5D+dXdi7XbxIhNRQWiv
+qbuoLROXnIkIIuIysr9avXox7uW+KYKfon/EDCnbhuBwethpmtqj+pGOnicJBCLspFFHnhb5Gnt4
+SbJ0brADuSZt1sJVL1z2abqXWUu7KoMIAaqt5CYcYtzhrVLCRO/cJvzME7+qLuvrosi5sAT6xnNh
+kqsfbsfwNiJTTiHFvCGF2zLrv5ZmEbIuVfkIOQzToJIAQu1x3rUKNwrIr879HRH2Mu3oeR8FQ5WK
+6Z+H6LbHBK4DxDT/oPmHeR5Fb/9Eht+TU0AJs1cexEtf49XGaJFL3WvA3/LqYlqRZuNuRkQlysQp
+pxERNlF9lZRpwBX5cqRxM8ukLlZENf9qnVp018rAFqAZpuM4oWdtUwIWu5200NJZ1REcFyWtbS5p
+QBhE7Rsqsq9WGQvAfmdNerF6vVjprImX6+KrFfTVausMg9KwYO856RBYRSNdxansJwtbwyp+q9RZ
+UAlGuqeFzulD2VoluscokvkC1+AnLRAEg0o9NjOToa1n9bVhqvWyR8uYOQaFUS1EipzCVxWENW3W
+0IFXm79rQqYOIAaHwqWs6wlyogMMqqcFvz3No26xSDAXoIy7OPptXqt6kyaPqqzUZGNYYNOozLKp
+HCltu/s/qDGmw9AE2uQwYwr1D/NDjhVl4cJgNVzBvBQUkWNF4VHj6VRBCukPHLCtiR86YhsN6Ocf
+su09/NAx22krqsh2npO1amhlHbneXSFbczDUeBSMUJXJ7mAmoXjVy7QSeahaIiUGe8aRSUiiB+/F
+qsILDR8R3EVCldZli0n+dBazdeLVye3lGe/FcdAiw67X+so34YVkQo+lmeg9dqtmQkqNGvFyY25g
+tahOekyfYircqqk76B1cI9DDg4ngU7XsGKFWkDZC/0DpF6X7DiVlskz3SbZMylW98FDsfb/0Z154
+Pq+cJBu4Lz2ql77XCz/Nmnjp1b3w/158D36y/9KD+fqzb7/59svf/f2v//0toP+HkPezSu+SRSHY
+7bj+lca14/3nhPnFE2vLaKZSWBnZWFoK24TGpq2fnz/w8w+InrEwugrqD6iKq+jxtw82j626pzJd
+MVREZaxWRHGVtv6Fp0tIwU0vriQnIyuMIhJm1+T/hkNYtUOYCpv5qpOHcWCy+ZhfcOYsk/S+BUqb
+LiUV9+qu9Q33DqzgxfHzzN1Jo51r4miSeJjOhRLY6r2XjsCULA7f6JIn8vLaQIwdf6r73ReiZQhg
+0b3aySuOCUaQNn57sfqHxHEM2VMPF2L8w+s06tqQcQTTFZWHhLTW5k7lq45iIwqICJHjC7OHbKoK
+hlcmPcFiTA3ZKwfDX1YcTysguP6LOA2WNlCOCvFZWEIZ9wqy/gWg67SwynHv2h5tuKbv5c3hpSZs
+anom4vsXqGzD2GW1oGKAFe600jidYO5oPFFo1ITtlsbkuLIZL2k2igWMkCHkzSqaK6uNnklsfkjR
+PjvrlCAqLvtQxosST+IbnhgFxSS2lStXY5BAajVf7wvONQBZJbwEh1H3lMSY0zUmvvF43BsyURy9
+HkepHQ2xfCGJBFGrwmRHTdbCbxXbEL5h4BlYrubCox2pBxKAxPzQE5/F+CWfxrBfWc2TbSmyPsvm
+8w0nRhkJMGewMiaqd2ucRGpeWLuTs1xwHXNPZOqATlmhRvgN0e9U7dibAkLfxHXKDGkL4bHQWWSd
+XYmSwhsv20aQNisQnlUykDAdCNwCrCOsM2yx/ILoazKZZFSA+hVaKHUCOtSt7jOiLsrF13ld7Jwv
+97ZNV5PRehE0BtaKAl4eqjU94WteVWR0z+OgmcvwVHNOtRoJV5Ortcy/hqkmrBu8Rq0dgbwLUdpO
+qJYySiguoBSPeC5Mo8OwlYOg+LnfcGexmodaBisZsVOKrMzNP0davJUgwK1aiczyYEH41w9ZI3VJ
+J7jBHyi1IKPKYhb14DZIiko3teJgNUrW0ZpGxhSftzRoAShLGGhL7c0ycCbHrTyDrAv6aHVBxl7M
+dOIlW834ZvLCwXiTjNaU8RkdBBIzgBE5diDKIyWE1uLHsXOPJBxpVoi2OhiilJxWOpAVUvLy94wm
+ZoP2v+BWZULayQlUPjFiHU22gXzjvRbLlmgAKkcoopSxQWzDPiU3CWrXUsElJAVZEEG2GFRrlQwi
+LY+s0J9W3bCOJQLTsnU1PgPwijx9tdOsq0LIPoOu25AFYykZFZ+xNasbYpHvAsGKazJZ7SZpdVe0
+Kox7/31bbuXvrayE0VEKtu62jLGkZmahtO0P0KxyhrUrDNmKEnsapLQ3u6wKjJQFlAXhC/qASSKw
+/97WXZnkDbEAPauwv8zFAGonrxCMY0mrk0WanzyPW+lFvESbppIFI4covtvsZmY7SdmyYqkU20hB
+NkcGaryLs6e+iC52snbadEg4Fn+GmV7g9dnbJpW8T4r162byDSsAgA5JKsnkDWosyF4DIWMx121f
+KNPjVOPK8OE4+bLyl+kvWqkI+a1Cs/wWi8xIvNcShyoTPCzT0mjo2SgBb1iX5ljIL1Qmwme0SxqN
+A/+6tA5+NqVo/4R1HM8mW9jEbgSYwJx0cTy45LKqUIsHHlaryJLUZvfNCO5pKq6oLQN5ZT6FBIy/
+4V7gSMKURW6pJIUYiiocDsEmrd3iFWUk+SNRJ0KD2ZZiJhihtYsay2rWSs6GcFidY62Ku3yTSnRj
+hJ2WUL1pWsEd4zPtzipNplFsxkmS72BRc5rt5Ki7hbaaOW7EXzHkRdicuYTWRkNZZl8wNAdMJ4Ub
+6R2Bdxv3Kq8uVSQw6Lv5gijfsDLu4swvsNllDlolakGPe/MoyFxWdGbbUkkVcg29ahMJ5WW1ukgY
+R5zDaruZ4cWj8PW2+BNVxbSAnZpZF6yB8yI23WB5XrLhqwmSBXrRi/Gda5AoHGPNopCxopr261pX
+G7dtvETNg0ows0yzYHOlIItScizsk2X6MFKs1uj8z0dZkUF5ecr/s3/+5x//2V//Xs7WH//sr+Vw
+/89/9ctf/911iP8P//Kv7Mj+Z//Td2/53/742xMHEPLjNYCT4dAS0b9GtlQCvDyFf8B2FqwFVNYy
+M0qoaT03y8mpmxuabL+g7N2NHTpiZu6d5oxtMpfChJJpS00DWqpbstZBMVch42uLGSl/ssDX5tu3
+VZrYClMztK7sxXeu+jiiTq8FJQEdc1aEWwLvX40FxT/UX6fC7HUYAVWbi53UffS6E4M92EaUN2MC
+707eYV0b6TqAtPR9TxLA4QqrLSPIqL7OGz/NIG8RtZtk40vGmshRfUAUb7xPubmz1Vai2aB5c8zo
+KKCqoRqtDmdG7OINeyyceU392/BJ1Hu1I77RBmWLVwahuQ6Ceb1j54dAuwhhIN+7Zf8CmTWQ1YhM
+PhjfMAaUxArzcF2UlsDyZraYiqWQh6DHBn8F2IuT95ZVOtXoQ3uxQDSNb/R4a1s0267QEil9QmPG
+UU/4eY35pZthdZ0GdspJnh2oygTYrnYkrDvBQ4yGjMJsfrCYV2mYB3C1BNVqadGImurD/sZ64IdF
+RcC6Z92745KPVHzRszCj8fpgznS1tE7KJ9NnsBRg2cuwXcoJ0xgTgsDJ37zD8SA0LQ==
+
+
+ RU8RPBAvh7WleUoS46DvZEg6rJ2j47y1UcgBGaFqtOCeDIO9KbuOz6Rf0aMi8sE6nVCTLVGnxVYo
+SSrpa/kToB6tuH9Wb1Oz/VAhsbFyDgoMYoeg23Vt6DBrPIBuF7xwwdI2miwsD6tuZqVDiUJ/4nf4
+wJA1ha4u0r3Fu0Ii5bJTsHliCfu05vrjeKS5hOba4Ez/Ba1mjO3KXE/1z4CsFltJ6IohRCAemmkn
+iTZUG3ArQmRPKNgGFqQgDYp7ZgtUwnZCT+waTxAAIiwpcz0nMOP13i+4V9+0JVcu667MtLqH7f4o
+/qpQjL5FVRtKzgedWPrM3Ca8trEHWtVz7BfCQXr6dNkFc8UYwhcfZiHAkPElzLZxIpSH1wOKmilY
+IHSFhYTWDt9VfDmb9/JjY3kexrX5dPt7LRlIqKwaFzyhzj3FS+08pe+BDChyn934DeCglcy0dwa4
+r1mIQz/PpNbqshRlc1NRy2stbuJSd1K8iG8AaUfbTKghT9IJIqmcTJCOEpfFQtHk5HQDDGgmbm1j
+1PU+LCqE+yyWAox2GHRfvVaiuLglEftHbWBlt1WcgqJUQAIoaqGGYpIWMo+NWcZ1EkYDo2SVFGji
+DV98G4ggZqTPa80ZG1/i/rutJEYZCqTq1YxAxfTyeJuBV/17Rvk3ufsij8elS/mIi0sXYVT52qmh
+1o4D2oulotUInXOFjbc/bdRW6urO62OVzcKHAL7EOLxiSGOqpRzVkaqzJFw7uVKTkrrPSAkFZdW6
+zkXdRhZBBcQZZKz1SdahoJ+kPSprYpnCGzD2RnBJHAsm3DbmY4hR4CD7As1wtTDb0UdfsbZK3suu
+OG6qSMFOwbjuhj2qHphHIOtmtyjlJ8MZ7kphmfpPlixl6HbODBPIwtWmlU6urJ5nxt1pdJn1qHDc
+kCkjjzVROmjQAxBjngkUuDGZa7QrZ4wCWYnR+2Q163PUnhMjpDdgfMNKdBmQFuLCa8kDM9lZ6/Kx
+NwkTujhwFBcDZQSQZDi6WUqC3rvTLG4kbogK2jQvmnPmnEO0TVpFvpYcdu1tl2q4A9lbekpelgG7
+WN4v9YwQLurYmlEnF41vH2hmQD2RX17pMbGQsRnzXpCDCIqoRORBPR2x7EmiyATUq9EIGvdp5DuY
+JgdRXGZQe1AmwhmkPomxZjdu1t6pjATSbKtxszW2CvnEiTZ9EcJeLS+P78FBkaSj7my5bBUVJVy1
+cxirG3v1HsBpo9meC7CfyFxE2gygYjFGyYJh3r2Ff8goWCbCZc9VE1nM8PLV2LgcLCuQCTNm/uI+
+JwJRvWegMc1qMYtRzofvQG5whpX3NSoDUEYAOWiE4W+o0auXiLk65ZDlwZqNVQ0JKRZjiFIBf7mR
+ia4EBUtbE3N258iidUqpCBuJcqwcokZGk3CqT44VlhU588uzjJehKO9YyhCDLF4qUuA0HPUlLlEQ
+XgJIYUZHQdU8Ns2dwlNMWxORIqiJCvWsMxtM/F8LRQlSXsALw3Ku7mnOZLe2tdzISK5G2d7oytoq
+X/qZ1q1b4y0IosbmRsIC2cutizk3amK0NZHnzLBkbhxBPMH7ccaoMrKhQPpNgn/GKJR4CY55ufs8
+zuZUMBxXc2dW9vZwHMKayZ1mNS7Q4nRvtw5Mj3End5oFZUkDiyk2Cc2BzxWBJNVlYQYPnB0RCMSJ
+TmI3oCEd5bjFuOthfMORJs3KVF0cUy7jwCO0qCouEK4x+5phz+9oAMef0qOkemGcUxqoI4zFjWCL
+m7mtw2xnPWYHeAKfGedptAZE68Y2qu5AiGQaIMq//Zx0rRMgLivcT6UIWQEN4FItkEKETOEPbdXI
+FmozqYrSzzJYzZG/bgWfPymYRhajU0IVSsOWqDXaHWCbllyg/KXNMKXmJNjQyoaN1OFhu6yrBv8e
+AaeSOQrrNiDrECd+BijfNSu0CG4sKLikh157zEdJp7g+3j+g7YSoN0Rkv8LcyoROjQtIdo/zLT/c
+q7HCY9GTi72zyI2JA5wm5RY0MKw0r6og7oEM9xKP3G00y2yhfKGoqXXE/pDEI7AP5/iMBCdFgyoL
+2VJNUmRNLNwrCwbCqmJsFlrS/CcMOhHTJOWnggoqJN22gH9yLgi1uRckuHuii4WhN9Q2GfU/Qq3N
+s65rZ+6IrsR7+xucoBg0ClVJ/BX7j4KiEzbItmiVZIKKLHR8C2nW6aCqU1DU2Ak/FsJpk3NJSRSJ
+ELYujuo240SqgJ4n8yvBiKBus5wccfKxfQuvuhCoJCapADSDpN3xPJJezZozujodFAUoLDYQubKx
+Dxiqnkg9SR46ur4giNw5xfM3OwKYUXxXTnscVGnGuF4Dgb3OlSCbz06EiXAiky9lG7LdS6gptivL
+Bo9OidE8ywSBGg7BZglyYsYKlTityLyD0chYYpTwhXXA1UOUjmcfS+ihk9ClxmdhLBRQZIETtQKq
+WMYXNeNGdGa6nmVpJJqmdThwQgYByrkDn1okXgtJDnNQZr6lt4hRlhvimYF2t46dcjnYn8leVKMG
+JdVIH1TMKl9qQyMDUL1e96TOBHOMdH9m9Vx1Yt+xeVmUz476HU+7DO3XWBY2vyoiVMCmZLfi1nW3
+sgLKsNO7nPNJCHLqTjaWD+PIoGFIt7DkihhYoZ5DIXipC/UEMDMAtis7KRN9llMVwUvs36L1QgHn
+YciPdlZ9jW+4tyAaLvOEvCrWpe3mhH2By5gtCKBycXAZKyX0KBJvzVbGTFJ1bEgO40C8mj0uqV1Y
+CkRMCHFZRTQSopT0zYRyYvFmsa3QPWKJ3hIao5sgBEXvSOJMteBejdJ5RRxjbApQhQ0xUe/DjJXg
+JXMAzNxJBC121JQv4VQOwZRt8RJMAyQKgRFtlbtF05MfIBXjW6Dz7uE8DCGL4mRdGqX0FMe3+HY/
+ovQzTyIRIDbqAxdSVIOxcYjDSdhvAlzusjh+43m5s2PEHKaj+c1xKxWOdyx9O+wyKcigGrCNcvPF
+qsKLUuGaxBGMk6B35hkpb9UyxiRHYyVCy9sOBSkIamL0aIJmHb/h84LkqkvoxNdVZratapYlqUZT
+zhGjVxjszGlKh5jQstQJQ/kIny7y69JioXqYjeCaluef7pilywTU8Q0t2KrHSU/66zwFCtKZHLrS
+2IjFk2YlpLftuCdGL0bVzIlV6wrhEfOx0wpQWoK9s3KvIIAs6QppYKFK2YdLNjkWMnxgtMNHxt+8
+4QGIqOVARyrzemX9Lv4A2FYysoLe8QSQLxIGlvM8EnzL7InFQorwXk1u92qGc3qAI/LlrEnlBZiJ
+MexySL8INFKZDH7gCnrs1Hs14o7lIQ9Aohqo5IEd66wy2gf1IhWyNKATnKO0nXNUTCSAEDxDu5IA
+hhDAJp0y4vj2qImEPekBH0EXBTUzAJoSJWBUf8ZrrFPraXilWWg5IsmefBZB8xaFLSfhQIiV6/FC
+vQh+wlETdK0SU1sQmlqHFKeKUQKsvowSIuA3BEdTzL2wsM4yuFoimQn5+CK00JCyFgUSZR4CYcke
+7pWnBSc2cwcUG+CVfGAeYgZAlp2mI6DXZikZD64sblVKv2WZS1k06gYxf01+w+uTIrHNBag2keJy
+iwMJm2RvmhdVOhE4k4N1c+lOQHFi7L4ODVvz1GiytlsOHUwump0vFacegV6bVy2f5EVLiJvYrQSb
+F/HYTCAQUWm1Lf/5avRSK7+z+a03AS6q0SeEos3IU59E9fD2BlNFJFhANm9DEEltFsUqmqZ4VIq1
+TUvNg8reww/1FJGXeNeoACWCxSBbVVnEKlYnER5UklI9L2R6RkI1ttoboqyYw8TUP4Exz5RyeDoq
+n0hwTQ8n7/Beynb+NbiE4v4A4KvcitWInlajDTGEAgkwMR+3EthpdEKTyTeoMWSDyCoxc1T3wEmm
+YMk0IwEMeadv+OtuEXzFNRywa05qTyGNu4DMVRuohAwLMrUr91HNDNicKgmEXXFLzXcTo3OZxGwk
+TzUvMiz1oGGQIUX8O6O+kkwdYmudwmTlON80EfwHRsDEUiFLIS7UzavhmYUHdBbSkKeyo6Qsa/BE
+dI1OoHhpFIOQJRbhEqQdLaWQoc1HxFCNG3QwhQYds7RMXAVpHJ5k8COI45kUSF1DF5GP7AfvchBO
+vECZZCERit2W6gsjiSBi7lzcwTbUbFsTvNPcdXRrE2SRr1W9aPhmzqEgYSYyYjRbBsygzWZGgsE6
+3+zcJsof/LadAGnhKVmHUafNsA+1seS1AruMl/G0IOkItuuWThUc5Ut7aobuDXbujN2h+4lHI0QT
+s4MJx5IK1Agcd0Yy1YwFrlDzTwrAZGZ8bLAKJYcCqVXloOSplszGnOHxTKrtAP1PIJZqnRiwzPaZ
+AVGJSeTtQFX3fSx5hZ5nABKopQgVKK1FAMs1lI0pK8s/oHn1cLR5HeVfgbngG/Pkj64kiuX5Y1eC
+I2JsJNJViuGqGWu9kikL0sIR9BFbXrhRA3TOIYOvdL19ojNGZdG0vhlZLovwZBxUo/iarhOA+xfz
+3GRJYPbOsjiHGRM/u+QzLZby8f4XFzRqDOLLk1KTCYd5fjcE83IUNRK1APiANdDgSiRMf2r3eIOd
+kXUWfqmNVBhpNfsrpACUqGFSIlgFeAruRW6/gmmGliucMNmA/pkZrWYLzMgmqZ5zoSoPE73lEipo
+araSDfWQNxTo0zNDNxAmeTFrORZV+GKwJCjsdLwD6F4QjcLjesaqciJgTGQsaCIhh9FqGyRLhkdq
+9pQcy543G07eajtmP7wDMSN2WbHTGvZITB2T3vBMyaMlfA7aRtrUtjYuZANO6ZV7J9XgxCjnbRuI
+Es+aSNp12f9F/F+AL6QqyZA1OM6K0U1fATuQqxVYfbMlzqBWADnilCxn+NGXVHNPDss6Ukmkwin3
+GmCyNLIbI1XiMoY+Cv7KTXsxyCKfFqCoqlpv553U5js5t+3YccRoRCkxIu1dIx9MUe5Rw3TZFDRM
+kGUMtvOCVZEV2+AmQ7PMgbksoUzzkfSkb4kWkmY2HADh1lScjDgOZ8jA427uHaFLsJHScqKxxC6d
+jKq8V2KXGC7Z+W+bQlI23uRsTvCyD8IXDNfIvZbkTKyG4OUwSWSpCYbdXc6h3dAi1TFw7LJZ6nHq
+DuHn7hrkONESvIScu2CPQMZVNruiLJTubkwgpVZ2iwTSyropCYoNBC+XEWpS95qVQt3EmK3OudeQ
+yB407ny41ERVpwOdyg7SRpVS+wXeO44qUvJDUJbPxDQB21WLnn/SE8SwSLwYpV/fcAIBlTzFYWU5
+OjYsQPEFoBnR1ghOy1+Z/ymKsNXvFQxvoGdK6vmM4+o2IVeFNCdRGyQkE+f8RoCmM99kE49LPJvK
+y6menbPoKslBjdUueufb1YnHnB+kFLABaxU6wjIWiOAm7q1iXLPGkd8xTS+jJQwfNuC5/Ail2kcj
++18fF8tPRArl+yFOM33yKH26IvqjVGQeGpEpeSxqCRrYBkmW3GEcRhYSI50emQaOXg==
+
+
+ cs9P6VgpO4X2E5WeNMfQkadEtSBpgPjC9hcrRn6DsQkeakTIQY+IslDbS5y1jO0KWSUG2yTEz5Q+
+QgB5W7JJ2me6fDfOmYRJKFPXLW6elLxL1El9NdsoAp4J5LCQiLc81JsNfyJqQfHUjI3Z8BGSLDXk
+SEi7MNAZjDlJpBq4V/munwzsn7wXWL0awXNBtbg3BAZ64qY0wfVhxt0yPmemEfydDOr9Oxpgrkz1
+isRacdG1NDguhztXxbAagpfLeaIjeaI++FeSW886aZtFRcU4C2dR93dYgz+c+WVyC+xRfmDhhOzE
+RzFHblJxwvjE++5eREmMCCp249w4dGhVRvJgJZvtBTNx0gVuZ1tKBvmX3xCZKrJpw7mK/Dbd4Ctr
+wpFnuyhJBbPxbFgjA2uLsYelVSI3iZJf4gpQN9CCRgXYJ/OdUnEWwvayQsomr4NGh36c2yVmqnIL
+Rj8Bng4y3jITglXaa0VpDSASIeyldG/Ih2QtmQ2bReELKhqyA1GqwPm/mH52Ph0uC44ghBpXcMgL
+zudHGcANOKRCSc+www08TJV52X24GyqesDkEteijgU8APjw7QY2DlAkx1wrwlEBVckX3EpQPifVZ
+FnoBEeWdX8CFjogQSESrEMyYUWmH0uTFzkNviCYOMIVLlKZvLoxRmZB5xCjF6NiNRDRNa0fMIc4x
+M+nDM7mtUl9wxihev6BSha9Dy3U1XMogbR4+C4K/jNOC3SBmoO+ytJhSvtZxma6otliWQn1AX4Zs
+ZJdMLbsjUCxQCOL9Sj5ogD30HEtfC5tOiQqpsn56DQyk+qqx8FkLHfbCk6MW28jkV45F2MXzu7sP
+oWwkAqKHyF0/3qCE1RMDGAflEVGskk7Ko2oGAk4ZTq/sPl01VgEjRnuySAU7cIRglsOPFgfMPSDN
+zpJ5Gdn/ceapOHzvPghVAhOVxFNSNgYlLjJEf4lfdptwUiEtkEaG/FzuSI2TEI5OY+KXsWqDNiP6
+zg5SUZlMMM3MHNnuCrJiBt0wuTclhDcLvUtnqT6wwUZD3IwvgKhGbASKgfFlX5N5wthaJxzm6IN0
+xmJrkHv5pMcuKrklH0Ja/IcdjWRUMQ9qfDBxVUbTYPlojis1LowrddsIfrbKZRikG4kmLM5MTWz/
+pIAmSa81ArG7IKjAsn7b8kFtojjnjiGdbOcUZzxh/YsNQEidRu1R4LcQClXAZ3mcjvhZBYs2meA3
+7gWcE1oMUuSh+NerDn9l31sj5q+qphVkSI7/ZwTScMsqa51o2ChgqcJuWQCcf/AHZDBVz+ZfYcYK
+LWdbQF7y3mZFjNVhv+1u0pDKGP7emPgznOak8hyM/Lo+z+apIENa950dWExgBhlWxDHge4QeoFSK
+tCOfZjWTaqZVJVlXlQdMrXlByA0fU4dMhw0KqzAjtb06JVp1wzuMI4zDpITET6wpRg65enHCFbZv
+Y/R9G+1WbHiAEvUqxAzRoBxny+IzUR8g08jRVI3JxjeIA708GJAGaQADp/jZUsYA8pGKxaX4BBAC
+EnOMfSZbF0NFMZ5t58nlSL1VZSSyAhjlktcFVe5sQUQzslvZskT4DlBUJcfsE541cvujrIsYUTEz
+HUoEMdMFnuDjCpg6AVe1AA05YJOhaAQNsXnl5CncRctGEkaCVylhk82fCtavZBpbqR2GNz9ZXrGF
+T3MQ9oOyqAipE/ZEXmgQY53k+5EaI9/IjShfKE5L9YkkyWIVNBhW55CovymIZK8qpuiiv0MUATYz
+2TGJtWmsgUTYEx0QZ6iRsBigZTpYr70UZnsj4f2g0srxxU+oR/hvMdksR3KBGNtyYxlurIPGFJzL
+ummmdkVGaUE7TrfM6B04S6oTM/0JuDKH5ltxMQSFaJNnLEA+RHLkSZwuvjeQIUVttlyoJUBUX0tE
+cCpottFP8AEKlsnkSYc5Tu/pkORZLha0I2A8yVFV7KMFcgnfQJziNEm73I2ELqXlELoEpiuhfkwm
+yUDsBFq0AcoCrcyMVnKPwpPT1O0+PRe9AcSfhhXDmetEwDXThu0SxZqG+8HDHKzHRtE1DQFNN3o4
+3oPsap5ecBIUPFECGpH5Tr403shneOQrkzdJHEsZUtmNULPROryF4lO6OZhxuFiWwhiUJkINKr13
+MBmL+ez9kEdS/nMB4qyJW+SE1jUAwtLTSoOzIkEVnJzQZcu7mjfhOAA/QqPtpLumzuCgAIJkoXTG
+XhMqVDjX1M5h8lc48QhIYwcGzdGu/DHCYcOGuoN/jQoZTIfSJ9tooBARdEK+XJ5RpIhqHCOQn2Vr
+jw1eK6+3Nebjo2kf0FG1pAwyIj8ZSmTpF3rQtMkqYSvTQpXgQ/E0v/0LgHeuIiwyWZPQYXPjBLC9
+D3dZzJmIoms+tUN3RKMfZmTm/bY97R1nbiyYmn586GR2NOCoRWOoW8tAe9ZydcmHHSCPp3UqYNaJ
+m3AoA9YgbBC7qeO/Ald0X3EdNmA1yWwPS9ggUi10aFgPcGrMR1HVauPUFnfxs0h7Qk6d8iwLJb1K
+8f0BXq2qCDPSFbuOsqPJ9Pf31Qni5xvnGhlxetjOfAdwkjoTvPeRNu64DbiCcJF2JCqCJK99alw2
+miOlGt2DEfnhcL2IeozJPq2YQwT/DirXIGUmI9rwzkgKmJMRtk+TMmeSgcOSG9N5NM2oXhzFJD7C
+sTEjOBy5n3DSStsFEH0Mx7lEmULWKfAmc1QPS84WF2PMwUEfiVwmLBhw9oc7n0qkXzjW6DrGN1BM
+xE5YEmAIyP5gSbRaxh2jgpXhLPW+8RtMkktU7mlEvGMCN2AcPA1KZQgsMJnqoWteA8uD7BQJvlgW
+tBiL0/EMe1Obg4/h006LkrADldWsIjSDaSxGB6/SOM6e9NJkDszih9dM8A4kdkGAg/zXyWlVHdrh
+T1tJxOHhNRb9jEKqvhd0Yi8NjmaKc+A+P0LDLITxHe9gQmFse4KfLNagAiznY4gRAmUneqJRZcN0
+Dhg9snj2yV9kZaEdxbd0M4CGBORZdNImaip4KnUme0+MEl97gwfRrEJKDsUSjeqQj8aTOMt4mZFL
+sQZwdqEVVMPCOHwIQKixNf6SoM1ci1Yf7aGz5VBd9bTt6rJty2YMXa5emY+pZ30zggEpGkkkHVSr
+tGLGYC1UP+Auz9fVmPnCd4GIuLqSqAO1gkaujqcpeanK1CYICvKJzA6gYl4aQGzLSaCNiUxqHsQw
+CbfMM2ubhcPnQZ4TFabKWc91LyPwJ2gsWZHdT8zNwG4CiBTx8OLE2iZyX8fpulNlb9ggJoQ5Bote
+bf6+Z2LpYrg8PQtg5zCMxSFMI0mImWTJ6ep9t1bh8WqtuhEUzLrIWOOWqDEoy+gcv/BzHWWsxxFG
+0BS7xDunp9jFsonwihot/J4RmX1HA4ifH8GsvB0JmB7RzNv9gXnEEbiumbl6hnpKDKcdaesMXS6r
+L8EGECjOy/1iwf87gbyFlFQR2vbVRSXieJJngeQdVLzu0jkLlU4Eu4IkOoe7Q1qd1Qk1U8mMOHTk
+5TrpArQZA/MsnK0Qx6iYRtStEYDDEp302Oj6aiSBQfGaDCpWZBsoxazIDW6dJ5zzgEoCylxFlDA1
+TCCCapo/XvK1fv0D3hAhL1RFMDBTyp4tQISOmjWfqRFbU2Oh3g+D+WoeLLWo53e0ik/XLNcKRkBu
+iypCasScqs5mKB4WkfURoejSHIKBhja/fFkskJoBdpTwcIvHQTVGtufheYI25fS/4qeHgsw2NSKZ
+y4weo5cTJN9AYIGMG4uxJYTjUY/2kFDXyFUf3kAAPi7D1w6P1nX8mnNDs526HQeDJGZmyom9GGbp
+cgUQo/PZdEdkA6iSqCJTg73lppsdztT0gY0GPKXPxCBcoRD6CCWIqMnpZzKBLb6nLIQWubdsIDEO
+pMELAoxQEbJGM25UsOcdf0/acIqnLQ6UI9MHy8okxDlcfkbMSL1KITkt1ab4BIRqiqedKO7paGah
+FJNCp4lq/HxdyXFigccqUUMlyjKSk12rkzBWyQfwyGCc3IlzSTrOdVLjC2rrKaaNK43IiwWrIody
+FigBXIY571OQ6jYTqLW3jfx+HjdTCNMpamepS3oK3Q5HOhfXZbCXBXeW5e+RDazmzKPpdBYnhL8f
+jIMgZ8iPZCe/3e/NiNhk3580Xb0TJa0e0JPsitDqdMZnkCPJVFeSx+KQk+diD5B8kcG/+kykNpM2
+xLVcvSse5XV8EdCM+RxCNuDNCt7fIfOsiehWw16+DgOYEUCFbCHvJTNextIMn4TTQSf0N96bOc3y
+2k7xBEqRbEVwoLRQh/QU4sRGnYwrTaAUxTwEFGFBbPHHNtpVlIDtQlXpQNfFi/PUVU83EdGkcmI1
+dO2wq9NsxmRHLM20ClAWqi9s9jPxVzukyVEFTowAraCZ7hPP7IcoAfXsNMWJgNViLRtNiAJevB2u
+UZHRBRy6soaCMlIpP6hb0WccPZCmKEdskidkadqn8RvuRQG++72YwmIUn4jALpgSgjivRvoEyxJM
+Q2XZbvafY/2T87dUZNiMzI2+nR2QRG9mes7F0cwZIY3i73bakvzODmS+BAps5PLwGvFiIK+/Tsp2
+ZeaQsx4PfSwBkpv//XR2eXCINCWYWiCEbrNLfMs4qMX1DwbDUjoOCKdSO2DHMSEZmcWmTnUBBeQK
+Utf3HQ1gaVNCPxgciXVddD4lNkBWhjTlCWzJiR3J42UCg27uUE5BFuZr9d20hlwDRScjjqitegSp
+NNKAYgmsQQFJDJPkKImiq8PiMtwa6xaoipktly79lpEobN4LaTTJqleZsREFSIXrarAZxVwpU0PB
+38QIgOwOHJrJt4GsualEEXjQyaFuXBzwyExjVa9x002L569Hir2vUsWJKdlVqDI42g/un8yCteHB
++gE0e7JL4XlC0Vq6un3F4w8rXyuzJABVgPJabw2qJ5n0vAxhSTbALUTmzsCtRD6r81k1lYaZSbHj
+ZtYbytWPWYry8laCWyoVQJBW12VHhAE81khHyAz5SqssfAEZ9jWIsTgOZDWYTwyhUH34wQh/rtrh
+y9cBk24Qsy8ZLGgTB6OMNFU7RHkOZnGvx6sl608BLGixAxeKrqlGnudgFhZ3yC3KS0XMujG7W42u
+UxWHIB2aTDrrIWSd0oLUldPbynFgjOJO+g14vGQqtbbamcrmjwUyKG/0DrioPo8wurwu3Lv5YT3B
+O4PYzw4Ee9hJYzG12g2Ks9SR3A4ilYxTAGyNGpBiKwSimCIoY7cz6c41NRTKK9M72wmaQRRRkazJ
+NBWUDVMki6wWMfubUWAAxkaVXV/fm3/uIzVha5WCCrqQu5iutnl+xMaa3fqsM3qwzLERcxREW5sZ
+fozrHNnQzSRTieUxhnB8sMiHbk5z1Rh2OxMa39BAMTeMVd/MuArJi8xO0+I6bXEYkFedQ6m3OeSi
+NXfW4zvoh2bcpLQMAyLobKfPGcqUY3hwf/L3Dz5gRMzaSQQAK1pdPEyOYfvacnU2Rw==
+
+
+ ExPXOFdlkiDI4PQkpj1sY7IeREL3OHDSGQWKQFvIzcNbYhx8BBRshhngKRL40K3tQ4MfZrqWXLM4
+H/FMisN015uUM8mgbh7jpmLciePQtcw0f50TxHP5JhPJZJQRl5+eVNoNRGEPwGSgyJ4ZUQdCKXKe
+a0/WWT8jC1OU1dCARxYEkqXiimuJBoW2h0COlssafAcDFTYk59qhvyCLtsWEY3WP3h0MKMSaoZwr
+dKPEGB85/5HoLoeVnQLPiMQJhyMqxZqlgURAhrG8QwWzRFyhe0C6VIrMZuhwfAKklID1jYNaxWhD
+C0XH5jkLqB7x6RUwaXhmEzTzeh3yH6UCxPRMfxY++Ur4uNN8sHqIW6CGwh8xwbtlEYv6hix9v6IL
+gAz45JpUsvw7MKdOCPMJofR/+luDusL5UEibVAiVSHEjVKQRQ+7ijJnoB1uV60EiWEUAqkZBWf3m
+cJmLhfjNyHB39uyR5zf2/t0CTX/5/2KBpn+DesiZ9ZCv//i7DwPlmP9gtZSFbdv1lofyyZ9UdR/i
+IvISr3lvNZK7B2OHbQqWmLjOrH2q4W8HoYcRKYyD41LLMhRcH4jRmmlIg1F7ChXYtKpnYVof3+hU
+PT8yexhrmPR3tdhFJZE8clcl0QjlfIMjKVlhThrXqCpLa2CrF0XgQmFwiN7JKsHSkvJusKWKusVE
+ApQknHaKueThEnALjO7qJcWXy6KpIMaCtNycTvMWBp/cObcXpixKHPfSxS6cy0r2orE/KIJ9aIKB
+H6ildXoISlGu2tXCVcHMsqpFhjtNzxhFumKx4skQxJrUSz/UygEGiK5CT6FWDpEdVUBwfXkcL+Te
+swwJkm/Oe93P0OrArJS93X2oPdIgC/fDCqnGL3xcS3mvg7ucaW2pVyK6BoINuxaguRWiH7tcZN8G
+coV6nzc7FI2TQl2bZZIlm9GI+S2HGPykGKrW71wcHpcHYPUWpHZlgrJXZ1ZEK6H2qDWgDbhvlZwJ
+qwSi65OUqtqsm7ILeVbN9X6kNAKqbDUAkCxODY5RK5TWkXoJ1Q518hCzDa/HUk24U8yW/bkKhSkq
+0vWtWTkm6EFHqnWi8srKXvU+GYxkzWbyr8Rs292ai0wAkayd/JhitsJydXO7lamDcyVLqWm7c5jL
+rGYUtxUjEiWl9u3iQJ/Xyc5y/av8gn74Kci2jZFlPBlr1pd61n0VYyV/vYIBZM06klFVTuxXaABH
+KBGhFx9PR84YxH2KR+PkXiWDot60pYLPxHRT0XnmAf8aoxbMr4Usk+sQTgF10b1F2SOxcqZJ7pdl
+IY9FMEumHwtbXscXf4nN84BHpxB1zRaWsHZdWVGkTVayLni9gdqNj/wN96KUJ4WOxeiYoDaAbz4S
+ue4VjC17X5n0jTpITVq9Uw27JRIKLq+HoVwxJihBXAPwWmYahiO0EbvI6SQsLOrNaBekEq5xTeS3
+UPy8LY5bkevZnNXN1cquJpCaJ/dCYbgWEmuNVyX6QxVEHfnbikfNxDSvaUDeda3UvF6tMjpWUQ7I
+Gij08mRt3fgd15W/RoGmd3zBvahkJxkV3aphiBGLqBALMJXECrH4TS6kvCuNPamRVXyaVGAxpa8V
+PDJ9V9DVm0Z6lwYw+pYr8Fm/OiUFyoh31VibRquPYC4218stjOavVgkWS4VtBE+W1lhm6QmmLUsp
+Pi+VIhrb2qjoeXutbC61UlASlQS6bV/arCwimdUYcFRYotMOvcRmToq165wIybC1TFwpROz6W7oW
+fEEXMDsk2AiZ1+pJNgUyc+zuRHV06JDYO0zDtSQ7V/tWPPl8uf6svERAeNPGPN/tcjNrnfRQm18G
+Tlu7kb8O1Wxd6fpwWuo07PgzzHQDsQqIcTH3NIMM+Q2Tn+y7kHAdnuhScPkL1iqs7ZoaiHVtuiRk
+8iklRghCIiHkTRuozA7IztDWh4CWf/HaP305cwsRhzesScRgknHtP6Ndeff2bMmgV11ZLY9fvpuc
+ZH7CKh7K/77gbmcpzKDr69qaOiFdPvB2nlJRFIU7ERxU5URYF6aXhmDQ+hvupeb19tVuFi9TgKJk
+1m51/Y9tgQ8xOnVa4j0i0GrtNgYaVdTI6mbN7mA1QgnWbqcPo2fNMeEUoNZCmhCbEycZjqvaIHQv
+Zgr6TnIO10pMOk6oaePOilfcVQfkM49Gg5I4yDCW0mWYLDTSNQLgfN7bqaOXIfrOEniMa3qYUPw7
+IM6ss/kFrhywEHmTIolDhRikKWmN4OZZ/SmMPQ5io9/Mn8yJ9/iwEq2+uL/OYp2gcom8BhSylvnP
+PDGFQIgLiYhwH0M8jWo/em50MgnUYEx/lSwdXbEpaBPF4V3h2uVkNMN68sMFV2kQ/Xk+0f5/VCpZ
+Ttmy6ts529ZgCFVVxKG+wowyddW1MFcb3MiqZ6Ob0fy8ZHuOLjIPZvoIyM2QVEwos4hxT2zQisTZ
+Xtz4kVVlzKqG9ewiCcvyAWyHRwarsukmG9iEPrVWPDynyjwUErVonNBuUNLXGzwvJGuWcCrbPIqZ
+QfBFnrVDFAO5Qu94h9DWKd19cHnfOO8394DVuPFTOg/e+G0sD1jLy076VCB5SA+m1aZsleuTdis3
+d7S6xTgpdUunbKFVKp6LEYKgyEJ4w/bKwtctvJxEDWqlipn7WjfZK+I3sPaomHlirxRdk2+LVGbB
+LFBrT4yQxT0Sy9WMd5DJqtbnMkGogixWGCe1EvQ84u/At2H2tk3H23cMb2FoMi9cjW90d0Fq3K7l
+3qRgjGeb44gnhaM7KwPqef2dU8HON6pMae/gGl1k2S3XN++eOqS5iXP4SGQkZZnsuc0FgrLDn0uM
+nSkaSG2HeTIbI1uCg3gHyZ0Wfhoxmk6Vcoz4FcSMfM/pZfV6IPPdd8q+j+LhSLQSj4NRsuXa2ure
+sHo6j0bDgf0C5t0bnSbLBgkdDTXanqENJG910GHpTBSScyvrzCWSUOWEqJuY+Z840492yAFpxIOP
+gNqISuzudAfBu9FCOTa/RjpyknSq0uuqTiJQBSp6XXDDJYiFneQyQltN3cxKH3EvCvm6hJh6XU6X
+ph8k7hUIIjjJmCvWPWjRTALK7qVaAY70X9Duwgh3KU110ICt5kPfbXqZS3HR7EvOqO5UjvPcFPHS
+Ad5ZNZaO+mfgYiANjq4YC3psRyan8Fs3M8HoFIi5Jk+awxyZPqNVNM0OPtPfI43vAG2iXgwKqyi4
+6fnfGob9QjBoksilmXLmi9VDJJPnetn+91qH8Ru8AmiQnPdWJlRmnGvs5zwbKx01KROpygkaloTK
+oKOejgLOhkUyTbgTDx6/6IflG6DB7BVukMokf93BtUlRi0buZaGRzXxxldPaFGpTkIlifdCHVw4h
+ilI21y0oXmd5uygouSxvH57MLKHZfJDmKLrafUaAePMOIBNcv1wcSVA3l6E5jpAl2awTMWZdmd7o
+gU8GFpYRvOSTbcNnuGDCCNLW1NDaGz45o7nTD3m7emBiGlUMRtvKMspfvgFeZbRC5RYoi0fCz7Ti
+gvasVOUYxyIm5QAKF7HEHkw/AMyz8gLqs6oxqr1gN9cto9Cj59uakS3poIUYZZt5pz8OJtP0SSaV
+YTqlX/rMUS7GwyWLg2B4fdjkn2u73qzs8Iw1LPJbC7TN3jEMs2XqFa8zLBVQgDGpeM1gzVcWWQD0
+az0QMxuA1IYWzkVJwxwFU4sjRMVOdO84LIEeJB6R8ap15UDF1WKpMGak51Js6L4BMUZlKnkyhApm
+SHUVg9BpzJ1G7oVrcOMvWGXsuYq5CCJxDm9gZ981e+QIySOwKPHwIIjUIV8ZbjhdKjGa5B6Nb1iN
+qtFYy6Kshi5RXjTWi+4M5rxqKcgauovIVhRkciz/jOaXnoVzBZFuACsL+fVmLm7OXifYsK8KSXgz
+Ip4ghQnTiorXwBVr9XIZyyXrBATlCrFZCV2NnauJ0+7VjCpLhd5ThTisGZdligi0LIci9gBqDixD
+iM9YCPF7EelsylVh5DuANyDm5fEpxghQmA1G4OsrkqfNrNFAmm1JRtaqHAlYtqaxYpeWHPRayY1u
+ioCcFP+UlEk9nzSkVNA43Nia9wAenJoHH5fweo5aNMnyBM3oAp5SUd6c+5b8NLUmpeTluYob4fHX
+Q/zRzO00wwgkflP4T+vJW0hVXgzLBQsSgDOtmP8f5r6tV7MlOeoXnP9wXiwZo27qfnngwd4CYdgI
+ZIsjtxCyxtuDMXTPWHNpa/49X2RGZNW3u8cy0gj5wUfj3KvXty61qrIiIyP4DJBgOAYEX1HuU0/W
+AY/PMKBC2PnYFvbqywJaoVugSjGQJYKwdR3Bf4TZh1dDRNayJK/a1SHejgWrP4NxfGI93Fh44F5/
+BnBYz2I3A4Cq8/SqYEZjORJhbqpndEqjQuHLigcXx/yBRC3sJZkeszoSUF8DIRbvJEArVdG0exzR
+dITpy1tHzOpIVddmpSjm1FiDzVtAYIGF+x3+YGkx26evmshMaim2oOyLEPb81YwMorgnU5VwqvVq
+W+z1k8AC7HC8OFiC+GplQK9w1qTOdvyUvuZ8WEZI+IdbOVcxn6005/vkEsKiHvSldd9bLNQkJ9Ed
+re2o4jlqWUN7H8G8VAUM22or7nnWAwsLlvxHF80IZSFnXXrQP4/kw/SF2xuSuiycdQJu9W2ebToB
+mXmVmtZvPEGehW9RasjYoel1uZSuhRxBVFDIvKa+69jgWdcWs5EFVUOMFgKUFtm4BmdSAiN9RLl/
+xY6pY8a2NqhK3yDf6DeBXpXCUR98978Gf4y0EcS4JLQrxe050MDm24sPBrBRcqD2yLwBr3FZbKfL
+BmGCnebSzH9OF7AqUUIcpgJe/nj/Y9aezGRD2Br5sRgrZPN8C1oaTQzksPb4cg64ucX7x5DEB/6F
+4U5nbTTV6h5Z5SN0o+BgmpLV1OXhpTC3bu3oRE45VSNon7IFezq3SawayCRntt5cO9lyKvZHAvjR
+Nz3cvlo1Ya78cPUaUxUgFnpB43H1AAvSC6ZameWFpS2ZttfzlrNEhkqLNasn5WTlopVaAToQQPZH
+3pXWKsM7C3o1xa4qHiDluKRg+8GKr1xwDBjlUw3HvkJHEVWgSd2/CpptBbJ6yCcIshxpn7Ejeksf
+T6kycsBAI4fXFGyr0Fr9UDFqkYBdwY8lluy2Q3/3wiS3JLCKAyMvgqZr0LtoTtiWCuhmMlsjSBpX
+iiYJi279e+WpHYCM9Ct0+wg6rchsGnKPz1z70y2Gvw3rUHVdnL0wANaxn9I2qufoXglZWAwrun1B
+QYPC6QhOKVZbFVpDkN+QibsNzmmKTbX4WbBp05wlV2Jh9k5M6Q0DeZNBMWk+DE7JhRSVJwb7mzzq
+btKG3LEoE0I0mKpbSF3MAHXBAql6AsKmAD46gQL0OJfCQZANjSUFt9yiRThlLDUzwO4U3gMI8hNK
+/l3pBLlJWphSY0gCGmnNW3auj0VNW/F9hCawWLHAZzv8rsUqB3+YDX+41RxNFtaAoA==
+
+
+ xepd+JVrKC0DTXrd09HD2ylO8VEVmTQMDAJu2MaOGvA6fMIxBAXmrsaDIG5ari3Q8l3fiaU1tZOS
+bFnFVx5JzTpAt5FuSb+QwpGfmBxK1aAEW26W6MUALZeAZbkk9tkqh6DAXLbpiMyl5oLqreeeyMre
+0/3UPUZqn8WidoxdvCqTgW2Oy0TKdB9F25QuC7um7FVNjBE/gU8BK0XHRXax4q/cIEgPKztNmv/Y
+Mwh7A/NAo7MfQ4OtGvMRZTTYU5XRHoicPZlX7snEvEA3XeYmekbB1fB7RxVT1OVz5Phri8hIO9lP
+PFQcjRAjR3AnNXiHcbbtjOPlsoQPpJD4fQ2UCkhh9HqdVBhhEi9qpMJrhdJulXyjXSubvuvxcHMU
+V+cV4rtatMGNgFAR5BunwOELXy2ZBTZtLjELFnUoptqlLUjRzxlmoovzneX5H2xDK8mjeWDSKXNJ
+fOnqP7Mw15zp35jfkPpFQ0HG3l4Jja8eltBR31f3ib8Sui9bsz839Tka/K3VP3CNnKS5lIvwAxXG
+VjD5dpXkq2RWhUocqRfNrDv5jHLYPAxye5R8PXrhDZxiU0AgqFaoZilsaGetIlK9fuMdKG3ImpzW
+0FA1K1u+ghFXlZ28IYRPhfaDgICSHV4AVANDUKVrkjje+A7ZoIOmgwMfEIsrORxmMTc4a6jclsyz
+a3otIfdhXFfvqwCgSYbRHMEwKq4NILBd1dwavjBrCNm5yvd2s1sEPUmq4Rake96j5rm6XFgKMzsF
+M4+0dEwAnRLiEfQVoHZBS0gliB+qTrIgqLcoR4BD7X1cLe3wSsikIUj9uEJJc71GpRPHnGcdkmJo
+GiPI2gbUrPE49QyEoaQAdXG7JMCmGFxdqVtNN1LcAwhLwcoBuBWQLFuEbRwRFslH09jmDS/AgQQ8
+9AQOoKrUzYKZVFPbY+oJ8BHW8LK0C/AqWW1Rxbggt3ZBUwj7lFebpJjwtIRXdeFVK1Tt5GL4xpmc
+NOgato44KfsYag/AbEU1WkFdAMsICLsYjr1Yh/sBNzWO4666JIJFr7CrhCn+7gerDIi922j1YDHy
+y5sLQb6wJslly8JD5Qa9gsfKzK0aylveDYxgJLor+pFrdMpZsZQE9aI+kBUjoBxfZgsT1CmSnHGC
+vEA0bvTnEse/suv4janLJJG9sUPHUh+CbUXNTRbkdZZjjWPhIa6xfmpoLans/PYZSz0C9XhaGh1w
+CdMRB2c27VQqZ00FA6koVITyevXkdakZaGY1fdUqh0MEuS2HwyfGqpBBugPhWZPBjFYA1gTyR+GV
+RdkbYsFjQthn6EoBIj8psyEAg8R0EPQyrwV7jQug20Y9uxogpnSk7WHNjk4C1oC6Fyi1VWFBtlB4
+n7flW0hMbkRcQCSIyc3qOoImNRUfus5Y2vCWeZBBBFWFMggwsElv1S9TncAItkCHxBcfwXvETBrU
+8BFb7npxTUINFI1Hi3jjCB/2ddM/RtQNV7ALx9AGCE9W+7WhPQDeV+QE2AHx5WTJDjm3dvPVLG0C
+EaxTQWUlaGbYersqX4/gpts4ipiDHhxbAjcJWpjDqO3Nt/dKOFp4ODEtejFGF+e/nwWiBbW9d3FE
+cE8utwYkjPp/CAbCjjDntxxVy17lzl1LeL31KvtQHCmbMRD5mf3WHJuzXsNLZ5NLipgyte3Lqv49
+kQis8uraSJpJy/bf+vA92DHgSSBEAU92NMb4D9Eo9QvBFeVZK1YH/PpuBA3jTotQEASrCnvPYdav
+jDs5+bmooNOznCTRcNDFGwQMnFXgVVGrdzFWypCerbWyZJnZn80pcOiuarKg/D7VzoZpgIRKBJfK
+4TWWjT6lNI+W5BIvhlxnEA9dChQ3yw51c/TSJuIRZrkOjcrcRPQS6V/VGC5CvQorui/vXnY9dK/Q
+kC6hZIgghTHwQ6PqCSTp1SHMKQuwmUPhaL5mDt9D+h7BMvUSc3SNlCCGta3yLvLyFCAhPwJzvgri
+I3AptYBq4cFjyeUd7ISgQ2SGMF3PgC4uAp54u9Ga2s8tsK5nexul4D2LFmbCc2x+ahfoE9jxUbbY
+R5jZwuxb39J+tc+TInZbljkIyrpiuemYkHISM/JZZIz42Il+qsTdV8hFbydv+xUQ+F9OEfRNAMbs
+DIirT7EhBb3NowFh896P3PWSx5c1PeVDShv5Al/PA0DYXZNNio4rTL7UWLUxQemIPKR1fNkwa8tO
+entXma/HLJ/gxY6gYxJhKekyV7Rw7FDTjGMP1i3i5FSeYr3BNf49tVyA/Hnz0xjBwk7SKbZlL4mM
+efqAR1NSxC2+36t6gQY/41GDbdiv3GfU4GJCmKPswCjJODpSzVaVDOqpaScIpDyjRXsopBneV4vh
+hh24UMrm9XFT302RkuS4WjmK4Lzi+nUpzxuZk237boUprLKHjongesufmjTeh1pwZw5Z0RYY+Myh
+Xd+8kU9NopJwoNoc00WOGNpdCK48aK/IIiBoctTW4Ngj4U1CVpOUsa5EGuHIueW+TRWbT8zZuahm
+WhK/CsVMYpSaPMIH2zbULMjVrusrtx2y0ArJKjsBQbFxvFKAlQlgrbKBMPyhHwtVoYjYDcUdG2vn
+lftUKc1c+9ShHYXxENWmCLyCyotFDh22+avxJLMYlmteJFqxMddRdKTylrp72ESgU/h56xL6rblu
+xaJtMkP6VA0YkEyHwH/QU0LaRj37uF3C7DWo/rjdLoMxAf8rh1zPOAhEDvGV4ZU0bRW5U7rmtXk8
+06dr5XmQmYQJe+QDespjd7qhvd9A4QwcaGZ3HXI/LlJ0e1ZbU40oXSOeamiqOwQi0qYVfwLtOCWV
+MQT7piL9dWU9CDaGturKCFKUb90d8fKXWG4V/IGwt460YSHAKQ31H2hdWvHVXAu24blasEeYMSPs
+E2sJ3VtHRsSktHz/A8FskdEPK24t4dama+vVesD8RY5/AdKHPhWCB/Zrap6zcBUyonbdLIdhU6hY
+MlsM6S/jVbM9psi0zAYGt4o57mvuSLAuEywrwXR5O1J6BTMSHSJKPu30wG5EBYWMAW8hqX21lEMT
+bno14FwSD10AMeUle8iNq139SHphVVJt6Ow9MBCnasuyy0F/T99RTyKfkThVgCOPAO2KWqRa0DuB
+MLIxY0WCZV1sg3ocxorwoNi0pP7qJbKjAGHSsQxLnNwXa/uAT84dlQt9hwR6kZmIzbJYeTVIB8tR
+RQZJnF2+Cgr10uBYjg77ZQ0Oo+2ZOscLobTk+im6AgIRQD530RVIKARVzOB/+9Cy2EHdKOmKqEi+
+R00gBwixwnYOQYpe+RDQHpgu9s7bFUZKbujqQlzAmQouF8Kec9RLXCM+DQOdkt4rd3WVUna6AFYM
+L4AKg9j9ROpheIClTJkFNte96Q24PGUN62JM/EycJSjAYBeWeBoIV5ZDA8LkM1hwEDvWpuiUJxEM
+yGaFGx3CR4VDGFmisaTFiPHSTP2F6YaYR2cqggAO6bFHumCGSFotz7TGgxJq7cP04uXomiT/ZkHP
+zyolpWMqIkycfIL5cJeIa1aJH9Cj18wrha6VcnHpQVh12xqAZorGXgQJviZfUPwCqraQ9dDtkWFm
+DWMhsilGUT6WLq4BskXz4oqKcvoWxneRGlXIoifiCzNU6nYh7Oaexl/0Txa4Xd3iWrL5vOzjCGBd
+4qcGwwtIqgWiYMRdGYIx6c56bV9INAc8QFbUAUTLPDSNsBHF/Hb6xrZzmC18gYwq+83IOBEsayqo
+pg/bPnQdW/TvRUBavr3yICm/mPNkRmFh5xTag2lq61e9aKnEjhgZaMuXaT2BFGw3pZVAM+lsvoNB
+BW2YHu8Qk5aAS5bXKO/ywTZgJNXg35NmEvaGFgvwGLi8VD2Uv4ymjUNN8W2OJl0DCwpIGU2oEUBW
+bjbjbdew/QKcyUQHwXiAfavsXs9Wog//IP2mOA/0U9ZJzmMOrhOnwuS8gA9O4HRWT02xn+o9ZqJ0
+6ZL0JluemmK49DB+LCev7C025uuYqyKsZXYeGCT0qgHAszL1LSQp6LKiL+ZAl+FNZQbAi8zKPjQ/
+l35QL/RequgaVzoi1ewXhdbCjSmNau8mxeEYXY/iPYLUDaNB0ZuuIEfPdFFTK6FjUyIMwIe7Puti
+FjmzL5FPQFjkJhMjw/N9EP54UTtq/+XoR1uY7ewlemP6VK8esDyu/D1kdAqHm54AuXkmAtgFnaZg
+HJbFbvgpKrq5048DnVIdqJz9ZY+P0O4gmMUaQsV5CnqE3OPizsQOHDFayiGtjug6Yg6uW6DsD8LM
+fnoUMkEUEJrYBfCVfPWpoS6wlG6zuoXHtdUCLCZ5n3FVyfWg9AiU2J70CzzqohOo4aaH1Z/1jkXD
+dHzeZlK0NIyk2LmD/9CXOtIQHEoeEJ5Cs6Jle4W49Y5+gL7EEUZQGsrWWhzHBpcxSx4t7xs6FEFx
+e/N0QIds1d0as+NmxlwERxmTUwfljf+eDWHWdO7jENoz7BXc0eYAjHGHJV30paBgdHrsK1euKvoD
+riDqVfJ23Dd02aOHecfOH+sx1+5DnR3z2qFeRb97kxsFwqkefQu2EcHRFEyHYqmuvBTdpQA0SR6G
+ek5WzU60kHQMRnEL6hjdsj6zOlwWdig6/eghEjK9uKTFT8bFZEhJhe2MLm2zRziCFdrL/MT1f3Ke
+TJGDjdi+2+DoIU0kYaAVleJxkDSSTARfpiDrUgPYsdKQFEA6JvxS0O4hvKO/nA3BPIEkgAS4j2Ae
+nSzOjCP7irZzJhzAkVhfQCJHXQRayOm8wrGohsX0kh/vaVwqIUo17ip8FNcRpvbJLNG8P1yyWD3u
+YkcPfz2vTMfZ1GVy00lUguZZnwUpXIPw0TIW72QeYyVSa6VCpNb3HsTteSCq5liYmKBCo7q3ZYkJ
+yi7JfDRB5g5Dw+aMcrFBNYm0IwF4CIuU2v7EYxsR1ybTJQRZczVlLUl5YRvHsd5c9NTPK9Zll0ex
+wTlNkudnxkOYsr39NDttgSGmiNwF/Yh7220W0oZR6hv9ID/Tm6l87HIbOmdwiqnPqP2aVKmnUwg/
+OEp0ChjaRkbyIisgkVXkZ7VCkALteVOsdm13sLmNr/Iky0bg5eTKGjvaA0NoxEogHlQz/fJE7o17
+7mPtebUd7qgsqbMFwal6m0nRvwgeT+Kf21V7UONoHyZeDU+IfcyADTiJsBYY/FhrMeWWQJa9fiKS
+pWADvtoSJlum/+kSbyYNw0dYrg5xy/TEd1KymWNO2NJPwfrAtBZBNn3fq47xokXsD5QnCccvF9ea
+3W5IfaqSrxXqIQAVY7RoHQqTZxsrLhxgOdLeohvpl/lv2SBD7HQGXsAOcKZdQjyoUA3R3/MBCfi7
+CFz7qtqfbtp5eDo1eGXgivm0h24bSk8gyBam6rwBjV8xHqvMiC/acmk3lCRNwu64vEaw9iVdBn64
+LLGK+pFpC5Z46fcnuDW7icLE+YK5fo/cEy86CKZWI9AzULvHCJIAShtVOxh9Qwg66Q==
+
+
+ 0rrrq97gCkpJl2+CVzwq8Vs6ctuER8hheO75FpP5oGCkOCmg3A0FKYuLmCNvhRqIugCJLIxIkU7J
+pZALzmDVvtK20XqGZ7upJG0ltZZgvypEMckeCfhvkP4QDnhinoYD2m9d+9Uz55fLjNhXCAl8imU7
+zzZwxZd5+IllHQMPYyNWwTbxwqZykzIDfUQwNMkObIIwq8kHRJ+nZ2dFD8EMF7Sy7pbkEToRR4gF
+H64jsOXqlG6i7RWqcnAmcHFHD6+m6eBQ1qRYNJukFBEM+LIJbraoWqLVOXhEHmbIUyFYRR9BuGkU
+ND3uGp/iOk3ZJaTaln8ySrlEQl8fRRAM3iP8VCXDHAxHBIO6gDC3tzPacWdkGXiH0afNdl7AI8Eg
+n0m6XWWeb+5IrILNPhXjC+DmXeClpNnH+ZBTACzj7simx6nRsC7iJVNRuc96kLC0EYuq7kAb5upY
+t7BDEvQwTbNREGdNnf3jV+YuZb3hfxZ6ScFHwDxbOp+cCMchYoYiXYvbPxwJhLmUjWiCuU+4lOwW
+GrwLuZQo6tBSaCSTxMcf1JF5aVWnWM6sm06vKjqv5zVnqrMGwaphXaKeO6aK51cdC+QVSu1NGXJb
+kLnAvEoII4rHCAumDD9qjVYGl0QMa4BBg4V2zKNSWa3aLUMvUZSg8hhLmYzDHH2yA1B7hNVRnyLv
+OWK1PVwzNNYDzWpiHYZ89dZ+o8xg/wBjc1aTjhSM0dzQG/fFBb2fKvHw3M+DhbjfXgFchphU6W58
+7e3w/k8vEOcdGBmg5X7cCUxDUqH3MZ5JCsKf1e4NuRwpRmsNgGxE7lxOGe30SIKxGNV7hGsQGXs8
+a2q/ICEivzeJ36pG4zddQBSuRV4Yp/5RgqEDKbotYp8Jiupl0x6klIO33Nmsap7gTxF59BzTb+DQ
+/eARXAUuEfABakemuwWjHt/LQZwO7KcSMYJdpfdoUw1VdKTDAZqNUC8sR8AHONZSL1OI9OVggpJn
+cDCvxFvIB986/bfxxeeLwbaLBK7seSuFVnVu3G4cQi5xCyyyp2u8m7BDyA8m9c8yEFSzIqUiBDFq
+9AbOP2bj2gjrgpJCEeic0cwQ3viPSRDOO0rGowoNB4a2HAjFDEKeD30mhddJNXuHhPSo4ai9A44Z
+0VNi4KY+VoCDpIhtmqYB7NL2ewcUDASM1LV9wcbgrQ890kCqmoxEcNIalR4Rbbbz5gW3paKNZnwt
+oRVSwg/I5lVugFj113SrdTgd0HVET/QOJrE1WmtHWULBAsBcbEolWgN0MTi3NIMzNUfnQFmL3jqY
+pYqAOSizJsKdvhcs4wrGCbKg8+tY6UicUrZ1oMt5xn40Fr0mvVRlPSPMfksKSjrgQnYA7+Ngbotp
+dPzb9uFVaCy3jLT2YIISu3UbXsIs9R2HEAhinLeTz8WyiaB4UUmRZ5/6KAbCUSJf4cuzwxloEBVx
+KDRJsB5hyurtkNMZx/p5+0wQWCjl+q5Gkq1c33D91AMLlWPQji5gBGnPvh0L0Hmpi2QIetN5T3dq
+NJKg9rBuOEbpmyD4ddaUHU5v+5joIK1M4rnZaV8FsbJFewWZCVgq6aTrxiyP5t86wnTpozB8+/hE
+UhUgvAKPMcHQTFLfkCWC8U4lJGgL0Cs3F2xChBbjqGIxkE+VWb/5ymPbzFPhro0IP2AEMQYF3cop
+bdzsiBV8Y8Nddd4VPyfFjqcfs4XFg526kdf2oAbDdET30KwxX46oWcx6iSle+6OqpqZLL2PWd0+R
+z8X3dwa119gecd95MRuPvJV52XVdlCjBy1GAuAHKZayDzYZut6mIHFmDqu8xRZ/0PLIAOyohkDuo
++haMeOvBGV/NoZzOrnnNSPtx7A4ZEjsVg1Wfc8hJIrq0PKoeBvYxkfMdTVnYjXf9e5vHtEkfQRZM
+l0jZ2rEIBO/nTH9H2Hh2VUEQ7gEZU4fEMEw23PXI0NMl3oYTbMmALOnpxkJYUoCITT5O8hQTSqC8
+FwW1oBglXVSMzB5LAD2thRLsIGxKqnjWgDRyiJoiyJbw7AV3DcPTQ6/l1VSClQkSfKGK8LuUDx9B
+Fl7azr2qoQUq2WrPJOCMpFfLJaJLPe0XZkrE/TJPu+CQ4uo2OgGXj6vabiiL0nYRVs1YYhJItRKf
+HuA6NAAhGtwHBHRVZUGJIDYtunmyxhGmEJT5WmxekVRQEKy6+sOWncHoA0BAyR5MN4QoLtQgJqZC
+ymXMAVMdVTmmG1nTVC9a8lLZmFmNBaQpTOlODWbGrAEHXEp29dKXb5Ez2rUKcdaeY0ZButSzENUA
+CerZ9Nig7LysdeSoqVJbDucdwSHrgOPPdL2Cdtqj6yXcL/WNGWoTpV05J8JsxmmxZzlTK8x5RgwC
+AcOk7esKVPelnObzV9WecLYkia8kj1dbCAiftasKynXQLD1HuKuQ8NycDBc43dSNxcVm6RmWGok/
+TMUCpNKeC0E+F1ob6MjKpx0ze46XfTcePMLq6muBCcwQy7zf4dmjN4fsdAU5zA9M3lo5imwSouVG
+7c30+RNMd551Gfu058jSIerFUZsut+wfwimOPTBdZimkRefZMcixISCkchyZXbyY6KUu4XURTyAF
+gOvvWhdAFRq72CrhpCMouSUQRU3v8w51AcK/2l3hF/5Wo13TgMau4JIkHTJrLiNHY+niTh7SPCDJ
+pNnJPIJ0BUJAYxAfOoLNA0ktVqot1It2ZXyGrjmjJalXHuKYXsxYl/hcCcIzwiyetchbsBEhBNyi
+Hmo7maRvc50nIO+wdjr1lprEwFw7je9qGKVVsy6ghOVmbNzCz8Gob123JTZZc5qhroCWlwizYHB1
+9R2pvYsV2y7dGzhe8etQ5juGehUBAgf5kwbWhT0Bb9r+sxrVo/gMEhHJwtjz8wHUWN7bpWc8TjtE
+O5JsRTLLpYUiWglE6NauHKde0I4JV5EybKGsxgdHj0JAcOcDwKmMUE/3X45OhHDy/Q4GKcCyVYcr
+G8HK6Nk3RGgKrAyTNiOSJW16hUvSAeF3/LbllzAdx/qslb+JtCVUbJaLXWW5h/oEKdNvOVYJvrP3
+OgJu1GhZ0vUE3lnVTw5IIGvxDgSkCj6wmSBHcKnafHWBVqm7lNM6AbnVAHHUEPLtE/uX5XFcHI/O
+9Vub4y13h9U3TaHd0TrUnFI5dKKdo4Seom1xF/qQMUhXh12iLK4wHch9woCNMaCITzo222NNoQG4
+LY813lDqZgvop+W+Ng25AWwzGLdVB0FkRnZS0Nd80kxD5B53vXeviunYsFtqQ0HQ8sc0iSPuTJDV
+rrWzGxNRuX4dY/W01RGa6IHzlQ+XPIYUFXSYOu/tDiPZT+BacZtDs0NonooneCfYJT+C2+m88oWW
+4UY7Bs5RZk1hS4hgW4Zq4Vo2ya7mIe1cILz/7IcCu7MNXOJI+MRDu2vcmHNZ07GsJ+RQmTYH6aGW
+YaM9+W/lq036cXNy7BBJq3hNTu4ec6lh97GGyFhCG3HT95Uh8eOVq/OTKSwE8r3x+8lXztyAp66A
+m2Oosy0xtwz1kEWw5BRHlFTQ5EjYpDt2JL+62dV+bxvlV4ZHkoJAWPxOSXAbW7PlY49Xg9kpN74h
+78y8L79mtMMFF1iyQHBxIMFv3/KJVZlkvhrXWmBK3XeD4fIXTk0SdFlFstR4DnjDsiRmESQfoghY
+TbRaQhFmruhxluhAPZbE6DhpVBm0oave6UcKqT5rkZWIicCJB/xzGR3zS83pgF2BK8NeEp2dftYZ
+0panicEaMxdNd9rxa2zSUkjznLepwIHZ4qB7WOttgcXMcgSm2LiUYIXY4nI1BTQvVX3WGLFyFj5s
+g6E0dHwf3WGmPsJJmqxo+MGTlLBQ6LeEzIKxL9phX1iO9FfUuBKF4MMy2iv1ZpEScvmT11suix4w
+v3ycYjJnqRKURG/FTMmXeT3JnHyOL1H9AEbo+A4mL8xkUi9Nu8fakaVeatVQuzCbow9c7IaW2Tv5
+XplFU7YlYSrZMsTithNBfisD1TAbZCm7kokXfLd0uFOOhz7UHIbp2MxuZLlss5WHlfBKA/iR4Dp4
+IIdWr5rjZQqWtDIS0I++W3hGwR/aWgq62dWrOqtu4y7DHj+p9+VYkBMGWoussthhABO5ZWJy2yH5
+KNS+OppsQcM0PjEP9ZS778vsDMkOEH4EDWeQQ7UXUDoUUuuShK5zvXAJYY2anK1gP3Zo/qa4Nbqf
+V2yQ6TV2hKxJW9UILwV36OddFREjhyLYszjC2ItY/yrC2v0a4xtjsa+n1zg4yhGOPc4gjI2gKUt8
+5WvwOaBbX35Ue9wgFkF7NDI7c6Pvjj7rxGvoRHE6mKayH3VOxsweDqeGypZCnMBgQFUkrF/9ES6H
+Xle4p0HQ1HxVIvBEH2H61uOrrv4c660yPNmnh0MD8VhU3bDglD4tZgtLcTzc1QpdkKo8grxzX1E6
+Mzf8nKETmvSc6hsP2H3CaLJoJ6ED9qYftx+KtETau48MhK9epNgwsLGvp6mKY04xNh4UZtDgFAse
+KyXXBfBgO1YzToTw4T+l3+rreLfluMjddSQfZfVismzJQNtogJS+fNGS7dnw/WigbjWV4xpsI2hV
+SUwo1onY9+nigpmsv/hdrsG3VWrEM2MRAakib2KtQ5K3BHD42Hm8FB+oO3USpewLQn3Ys9jpbkV2
+XsOzERwUjsBN2OSm7NixHpyC1ewtb1sP4g17zp3Z4RZhz6Sdwxhzjs6bch/+c96QiVQ+Idnwe3D0
+A0GbEuxAyy/euBfQB7TlG7nRCmDpIqanslmP2ybMmzlFJpzslXsUr0AiTHAMexRHsRCMSi7C3m9j
+U6/3EG+ktNtnQ/ZBfOKx3W/DLNiq731kuIVlokuSHJsfKy3bKVpmxrnVucnFypLhXSUShqD5FNml
+WQO13/RUE+guMZ3t5fZ1n+K8/mUtrQoIekM9UpfExQ5R76pDlB0a26Ae39OAypu5MQPWYowXhFm/
+QLAYTokgKttfeWj2EkBKJIRir8bvB7nTnJNDGsBZ59LMzpzvbG9/v+nxB19F+77233/2Z3/69vbb
+L3/xy9/8DMdyh/6Htkeuxe2RfYvOlddKoraaYr3+wrAXfuzDL6KVWH7jI3AGBOb0WA9mcTMHjRYt
+zBrBkDJPl940j7TMGUEzXw2uiZGvEY7ULvsM4hfLeXLKBQI/tU5vfHFAi99WZM6u62n5gKjjjpha
+qMlCDWHbfliY+0P7/cZP/hY2td2wz3viC01uDzx3OBC9A8E2cTIBxJVaVmjBPo+yacq7X2HPMh4n
+5Wq1D0XVa4990Uk2INOmHwuHJyZdlk6EQkOiWW0EBZw77/I+dshJFGuo1qqgmWD9ORINuLDic3QL
+fYL4JKXYwaAVKj0Y9a9O0p6FtW9oGlrIME5R0/ISXxePuGunbC7CrU1tyxxKxlnjEWzPojz4RPZP
+ZSrMN76pJWBnPQ0zWhOr7+9E9vc+Tw+H1r0pZtmDFaRgQU82h+8ZXrQXT5vvZkruxg==
+
+
+ bafssfYQCreFxYPYQPrvj/j9Jp47LAjK0shSgrVpcGPBkAh8Dh/HPT7AEdQM5Fa5Vj/QvtI35lEm
+yOPL6QxExLudLQ3aIWLv/BYEj8Q08igsPwyn8PGr/h0f/ZXNlvQT1AkeO5rMxIZFAswfXE2LcC1L
+w5ovhfmivcEj0Xav+JKVyDV2nFsmyZ0JDEhNz9AGS3ghbulB2yjO5Pjs5mmlTxssQCHoCabZRGQl
+gs5NsPsKIaStRnbfn8nz1ktl3Z5m65GvcYGGd4N/R0DLvGSM37Kpyhc3iQraHOfoO5K4yolv+UbM
+87VOoWxL45bAQWe0YuI0b2Ctme5JZimU05RszZyRGw7uK5CZja3sMI5V+1aXN7DO68u2rRPekIT8
+p9Ue9+CgIVQAfT8M/4lGDXSkZrUoR1469vH0RuWqZnWhT8RuHQCwxKweqJp7mx1eJduUEzWWbOLw
+TBQ6LVnjzpFTczgZhGKq+HxbDDp7v3TtQ1rmzUfI1qL/F8D4sOZOnMJK8p5IDs1Jhmwy/QGc4DdB
+wpbnP5P8ZiQ15EbtIrEuy3TEcMN5HYBCmP1D9mO+Dm7vs/nKQ128B1HuFFBn4X5pSUvvXZCDfBdV
+rRBlg6ulwr4uIS/E0q5UmNPyDo+obaKHDqMEGc+CPm43S5gv3H4o6SGc50HveMSxXnr1WGKuF8YU
+Fs66heTGKJb6e/k7SYN6G5BsFbJHzLTbXjgU2R+IcN6b24xChKs4yrbNdnkRcioCO7YpGcSxfIN5
+qtUrVdEXLOggJoKTE5WFbY9t4TUzBzLZHqgAOI0NY5Md1ak5UvHGYdi242ZdvlM7Ry8sgk0faE1L
+VRgxfhCmgrDC/lRI7cJ0w9JGDhITtoeyOLQX6+wg1GccWrVZxulFqYr1aEHvslbwRam9c2Cfj/Xd
+m5dn/BbSdMaoBYNzhN3qKoWlJPYpYGssi/Ok1joLegeZglotrF3XPzkud0spJvYhchJfdL+L4AuL
+IJPPMJzeMKk/xtQgYuy9NgiyOT8NK828cf4n9p+mtyR+MMNrypM8guQBebBHkKk/TtCzP+4tEWZc
+le27vbbDGQMYMc3LynGlQJj8aMzj+Vh2uwtJTtH6akHZrh9dXITZwP50LAWkYN0kOGWE9my59PGw
+ax6SXZWF4K7B/M7R64AgveYYfPlBYVfByAFi7yo9QQx/dn9j7W4qJM2wqEGqQtvxpqnErH93ZZmj
+BqvX4FVXGKmR5yPbWqcSVWYEc7uCyvGkAvB0rOfpKDkV+bCoAjR9gvUUc8raI89TAZoa8jlGjAdF
+3z0kMYS9bVJhR/bUxH+6y0y4r5FVbHP1G3NkCQuPsGAAThhKvSLare5r/Am+/KBwHu+OPeZTTVmT
+CQKSwNtsAfcLKExk7C3KPKjKfQgfAsWWEJxeD2XQLwBhY6ndx+Zw7MtRTVzRzomhdYyWH9lPbxzz
+luf4CUitRvrVZo6gT3HrMrxD2FsCrmNhtMXp8OSjc8dk8EhytmwsANs6oypRdcEvC8/E5wiNYwS9
+21rBlx8UTkPhIQMlst7TeDKCY41o+C4/+MrkDPRjTJZExEjH4QXBPNYV1BUUbzK7jkWhK1WyC67m
+dDO5PkEVxbSw1+A2q6BgaQHRQwvaSI7gC4HrxmO7IHUg2y6mlg6LF1VTb96zYAjEZjWMICw5i+LE
+xJSCwIeQc/UUfPlBYa+HXccGVw8ZDD2G5xYfJ3mXncZAWok1Pbn5YrvsJKF0Op8s6GvqLWdn4Zzf
+Hdsln2jpUrR1b5/1EhPs4Pwu0UnqkaFhG3xKx42lidyroCjPVJu8jy2aDFPovFus9xMT25LagbhW
+9VOF0y2CJXheZDAmF+sUTavHc5GeBPrMiKaN6IpGsCbm8db99sKamV+Ahad64gT5j6AM4/dT54HP
+zpmOlYP4UEI9sTDhb8GDt16q2Jf2mw5Vh+qGcsquHxmJRt1vgMffT2X6Z+OlB+dc7pR8cM5N6hV+
+zjCPLww72c43zIHoucJRN1u7oPwS9Ni3kKsp0vtDKMdJPpHfa6XPFtifN/cjaFVJ8XtV/k1H36ir
+aoirlTBn983wwSw06xEn3DnID1glun5Myp7QH+HQyF4y0aynbUv2yiXPGvinqO89qkzbgVCBbE5O
+vSEezNu5ChXVNzs872FQ2ZIp4neiC7ag+HdoWxCvXTU1TuxeWZRbhyIt9r5BrXIQ6OzNtppPymGD
+5SD9oo+EcEZfTzyco0+CaA6alcIbKwckahO8Zp1CBHZEJVRMLUNPU4i1uBywBXO7YEavdFh4S/yf
+O2JoI+usi5LzAJ4Mp9TC4yLi3STtQxjIO1kNOmzSBWpFJ533xN9q5X0FJFgoxoCThqNm4X7QgkXK
+lLFIWVhufkM1q1Ojs+BcKsYF3I3w2npfM7zoWDdb4+QU7Mv34JFVmTQWsldDSG+JO25FOq3+mztK
+Q9mypGmew+wO22qPNogrOzUC6I9lkXZkENXxVZFYd+buLU8awy9Z+d6FG10EraYpqJJDZtcYBlt+
+IO+DtqJ0lYkDLHW0dUdH/pYtkE20IwBUE4X3smF0zOx611qpbbNlQwVkt1PzZ0uDO+gOLz98Nyyw
+k0Vgq7t0VdPJrsCTwRz1E09hm0kLS1YQ5zUqFW5iifIkVMsuV7rvW2asBhSS0oNNpQqESXMEdqUu
+tWbgoShI2Jm3MoWMEtADhbKvcs2oKm97u7nNk4O73RZ3xqDg0kbyzXUs6IetXdO3zquhkCXEASCi
+lsnz8nNAcLACly4sJkm3pBsEvwRc6dmUu6C5CVrYaMD34sAmVz8/mteLrXoWghlENYTn0LHxfB9j
+wEk1hnZHib2wtdNGqTOTHOdSioEP5pPQ2boYtUrJK7FRz36RpExiSjvecPeMWIiru80izaHs184x
+r+xxcPIt4VILDxWBJQNlyVcnLdTg2bGEl3qqbADxdnLTVCe5Bfnab5zkXZg/NtgCgyBfWpakipXX
+pZtsYX7r87zgqG1dJ0WQpC3byr9wMHp7aqR/DMadTkV8ZdsUhNG/znvpRt3fe2fZxRmH2BESC/L5
+71PdRJjlqi0v951D6xVfq7gMRU0iCKq8alChd24g7Ax/HCtILay8Leg820TR1xcN7qUNDKU77Kzu
+TABC4akmsCvIJoYluLX55ViYKtt41NrWFOvDZCzgWsv1Amp0MMbCa/Jp6QLqAdq2hIgB2akpCCdg
+Z1aKjgwryXizEyYsEcGVuEVQL3HEk7mOJSSWyoEKw94InEqVVxGmDQKqRq4W6zOtwErqOlmw5aZg
+1OYmcRcbXdT/wCh3ahsKCS3gO+YyCr5wWhdrI+tYm9ZJnK9SQjAEcvlbbCf9Ns44H83R+7SyQmUw
+rmCzTB9B4a3UrksjaJa4SQ7EeZ+1rkWAxCpjvuaenfQO24gd2tNpRPEfQddqV1CFwLYW0RCRCrA0
+zkqMZVJTGyVDb41C2SxpzwyogQNpRY16R0MzKm8HrZysENDESHCncKanY03swc4qPbl9MOfts2aU
+WF1EPR0ZfCRJbah1gEwBBL0fVEElPrQOvI8Nb9l8DH92UneXBTUQtWNTlLHSCPiqyRNFzdSJWdua
++MbccWy5VlVK0WDjElCdTwYeU5NDNGojWnJ/PjJ0v/LxtzDH58Vris4HM8CpgtcLXXQXlwUfWDsg
+WGEp+8bepqSB7mOHpPfSjvbhNcT3x6taUpbHtsNdo20J2rKi0hQ3Qh4JQSfrKygIlh1XCBO4WdHH
+hdqcNF+jWRqjbV4bEO9aS1PlUgOGvX8ZC5Zc4Zs6QhQU0cJz56djo7shHcl/kGC9hRszaPBtsF1q
+qn7pAtAWnTmTMCFHjHO8x4QAcwRZNMRBnemBmUwOISsFGFUPBxtixFHlkq1RjamlhLHTUkU0gvr9
+Q5uPY8tVqJRGn91+XQqWFrc/AhEMIVN+zl4SXdqTOQveY/Nsv3LKrGGHv1iXNVV6shrSU0m3m3k4
+46YUgjJmS5RUOptZtkiziC0YGZmFfTuxr80itQcsSElE0wf2BSZddixQbeW4SKHAg2OZpq3gMEHH
+d49+BYXBLxIez7GmDJoCKSWYtGJ6TxfbZ7Lu/AxermvtDZHopQ2/BcuhvbXisPR17KC2g5ErhakO
+QsURFJZDIQ1crfB6UjP8GcpKGt0xSeX6LdGRsUR73vtIbiSHBE6+7sHMBoVxvqPo9raoeiy2SC3Y
+BEh7bXNysU1ELceOO5HA0lVyNzKewwA7+uBcvaeLcBRSdZNbK4c7Wa1FB/fWzlyzy7eg5B8SA328
+8/aEgdqFNdInLWP9wrA9J9+6CcKsLNwgWNQxoGSNlrsvRN/cI8zCpakJp3EHfPwwTA+jEZSMPNb6
+oVriVlcvBx0/sy49mq3g4m6wXA24k6dkK6LbMm7+eDufHBsmEBRcv0qMgfyRicskVuW7bOk3zdiz
+Jhch8J/GhlodKrf0MQGTHV7ckOJlp8K+Ko+TZGEPj6X6lnpJsMYKO/VqovPKr5qXt8s7wDWl4O4a
+JYaTRuyxZYmYvpYZhNR11KMGW2eNypeXZLq3f65AgQJ1g+Q+qfEzikMrBxcRlJhQZffePQuWWPdz
+8EFnEG2BVJsuljVlhMr4DojSWHKadF1GzJDLWGGFE8+zFAHGKvqhEsXvGs0xM3qM0D4zkmBaCbU3
+7fjXuFyYw83OwmxXX9SsWnc7EYKEQ7cDulH+noNvVkquS9oKdgsc10voDWIn91wuU/n0tHcSQGhI
+3oyYcK0jC4mw1V19DJOJCNq2hku0g1Bk3fGy0NHdMvO2DzjaXx4JPWFPlTV20btCcNXT/qJ6C8M6
+wa4KRgMOma8Iij9gCOlktAXB05vyvZ0lNg/uVWXYVbA92OjkgCGtXW2no0oBm69to1TUXoKKgPZf
+qWm0260K89Sil0Myw3gdVXeFAslPPFZ0WM0X+K0p3qv17nyKH+tbF9vFDxIdNvvkFI3eSZUhMla2
+kgiHC5v6x5M4qjZIsgg+WrMoj6qe8B4kegqPWK95QJ5LgoBAN8ngvo/NVK0wbiS+GJ3X94bGo8xN
+iBTnIiMYE2Kg4rHf7wjIcwRSF2VWQ6raZseioWf+Y8HVxVBALetVoAwZno+j2w5QLakeaL3goql2
+JhXFGdP+c8ZItEThemZbFH1sdV1g3jDTqdKAFbMdhcxO6rNTGGn9VXghh05XWxyC6u7t3psmkYG9
+EvFR1kIMS2UzTD+eNDjWrdENN/WtswWzisvRRG4/RxB8HDbl+arGoS0WldQQbEFxhNKCEjnxwHL0
+ESK7m3o26uoAyL+JuRVuUx0eXWLisXkAF+X0JQuyWDqOgQbGo/pf++lca+TZ+A34GMWyoN83AZD4
+963x+kfQA92txCmuczOoZpnl1UOBfi74aGHPhA0gHE0dTd6qYph80r7D5vc34qbqlL1qE1vatKBt
+kDeZwvgbQTGNLNy0eaKelElNjOAiCHlNQZHMDra+cXjSstBKIk1fJGUaEGRfmIlhCA==
+
+
+ nIuOBqdIjqJwE82W1niH5GL9gGx0L8c7CycYK3Or2nRsC8wuqcxlr4vcUQbjLQ61qV/HUsPQcGKi
+hpVrPoJWCHzjVEWtLmO/sE4WTZibOwsPig6/L9rAnlF5Gi649OHuH9ih3o8Yq/vTp6YXTe1dNJGY
+6hIrhfZcOI7VRm5t+lL1slVgJKEF6n9YQb8tQTNBMKBfCwp4pUdlOnJCoDK5FrB1BjiOBYo1lQ1u
+nomRxDvxHklSYXc2M6GRWLWHnIsU1LIrXP/p2McyRgxGRXf71CthKOsHEuwpXtMI3iSWZRfgMv5u
+Cix0K5RHgJ7UeT5MX0NCqZdyiv5AQi1BM2JbuLkYSbQTTFWfM1IUl/1JIzrWrdd+7uusynsOSBw/
+FibCmGtG1KtZwfDYi9I2F7GzqBPbLCjSonVseIZIe5W0fdZ+Y+Lo7dAIy+0B6ebKOgH375aDlnwF
+BfmsLiwxjl1sskMwC/NbvhI6vot9iFJfUjRRBRXt4RARj0PMEqwQwZcf9GPl/bEzKPszXIWwvSFE
+PY++jSOvg8dG8h72KNK08aDEi9plqWkN6jNf4Q8Ge1FEzeo5SYRWOqxhwA1xT6yJbTBM0j2OpQI8
+iIhME42ZIZ0kCwp59Qr007HtMbdXft8lGtSWBEYMrhbs5htLq7ZsXT9dOgEmak/U2e4fQf08RXnT
+URwAlloLi2PxVAopQdbgEAqFx+oqPTmP07j7LEgWbHtdQeF+0o96OlatBEcXH8He6hXUK0ic4q5j
+NzVwXGZpinoyuS2al6MP9v4sqvfDc8EElyXJJOiy0yzQg9cgEENwnw+haw/DlhrGyCw7bTaG3q/e
+n49s9GcxII5a3qtGk972xFKv4ACqKpXgWFZ+lxS0LOgNlRZsB33Wbm8Fh8y29oINKY5vHlqZMdIG
+PWxNwhaOQZTUuIeFSaMwxQNc9yhMNHC9j4WEUJu8KmEDCFbReS0oIKesKjxUwrQ1EMId3+Y8qTF/
+ypGUzKTEm5IChsvB5szchip/3WGLhsbGwX7/MIPPV6obSrklNqX9NnNHr/Ek9p7YAQBcblZuZULk
+s3HNMczzEJ9btHnVW1E1keJZD7HwGxDyD4p5TvdxPpjnYr3NttGYy78wrLawcoS8UYGY3CoaPYpB
+12oRT9Uf+aZbloGm9H40ySmBlkVE8cL6Q7m8a0AUT6GYU6vG++Ce4fh2G5hZiVmc/njAmcHqkjwQ
+Wny3gBiVXG12W1k/tc+kp9a+LIAILMAt1LYefa7GLU/25yPklIQ/8Itq0MpVwEihhILmiNoInR7N
+klVp1nkjGatc3fgx5x3oNvnmRY/AxbFNOSAfrvtqvKxSm4iM3llgwQM9FpdY9bDSD9jHDAKqPWTH
+3KvLQNqaT9eH2l/3oSx2gVn497Jz7IF9sjVR064zAix85l3fdj1RFlEHU0fr4f6u0yC/gy6PjMJp
+W2ufNojp/8y7X0N5BuGiE0ih3YRwhF+zD9Lzn6rLApj0xhP4TsiegTiim6mOI+ix9ImzlY5I/drR
+y3kMOYBDrsYHq8QWwS2yn8HjSkIFQO/Q1gVnbjaR9UTKQFAsN+NsKA32VsIuWqcHXQbXcavggk4u
+Unf9wqBSYUaa+/BVhnrWpR/Et2jg4GF9ZradtvBUtOCa59Dncz7/88IVvR6mx/k6a3QRgl261FAc
++7BCPMBZ5dyz1UAvUiynqHy5XNOTUgZkY7h28Ot81e5mJlaVREsHUBa8V4Oaf+Kx3u1mtyC2S7s4
+sjbxfRJUmgfnWA15gFTBl6+rHbDUG9YsXLXJzvG2rPr8lRtyV4JzFZHYfBdqlRWHw9VOrzpxiX4G
+4DlD12VA5Vdt1Is68q9jK6XZTPD+qCqF5gq3Hdhnz67Tspy5DaSJNn+RwE1Xc6pBIMDL5CrEvgDO
+RJARcEZwO0GFfCWuoTur4iK5sNPSMn4kR2uURGu0GwNP2ZOMzypBSWs1Ddm5ECCgD7G/dXm1GIJK
+NAzoDR12gJyRmrwbk0FH3hzLbj4vSwxVSGmTibk1d3P0NgcEpR9gJBYPL0pDrWAtNB8MOq9T44zO
+uqVONeI7ZerlwcQsK1wzLRyai8HpBdVyZJ3AiYxpBAzNRjQBX6zr7X66aNHb24j1Xg2/vv1RH5m4
+ap1PS4RDC6kIThtJC2ZBwgZt6J8fmUGu7oalEfifoQGBks9krJy+4Mli95RxgtOcOwHdKRZqC7B8
+HgMsQ/K7wkuXCrmJxmycjS5bbdoeXNHf34KZuORkZMONKP6SBZexXovkqK7m7q48YO+Ds957H9Ne
+Y41kiPVq2NKLSidF2lUqA+BDovpilIvtrNy7baciC3h0tqHRZlVzSNc+jztN+xKHNj+x07QwH+Lz
+sSkEFXZUfwpFDvZlG4n9VdJOy3RufKJ0+xZ7Y100Tk0bHhNq17mrHNEaZfwNAZ+yJEGQuz8GhZz2
+qg2sfbo+dWaKV9CzjRdFTbF99zhMuZgZNpp1BeL4JvGUUHjY0bcYPCWclj2xOcQycYlkVuZolQGL
+OnUCHpaPvPERTPc4PfC1l/skkVoPcCnpBArBvRC4rGmOK+xB8b/yaRPp7nvi0Ei0aWINJVuyOBfW
+F2GBfLQ6ZNAtzBQU9rmSznsd+8iJdF/Utd2HrAcgJ51GkxHKrVNtJuyEf/7ndJm14BDyWa8IUxvq
+SdSPIeYjLdsq0runRTO/P64HxS5NFbppnZToLqFMT8+tBcfQqt+J54xCdfZ1mcGodGc5wqWr0p1k
+OJmuBp8k6+dUL5Kd0U8VNqDYg+oZLS4FwGBTaB6aq4uSRfgDwdnOoIwosB0oCh5ylOmeiSUYKtI7
+nkAOFwEEY5BaUPm+aJr5EE3XheCp3RGteCXfTHZtONiqj1VKbvcrusSPKRWCvFbaFQrypa13Oi6G
+2MasymMvJW3KCmCGHX3EFWT2fqegZkyJDZz54+LUpuOEgWhVWU5HDlrsPaFX41oWju4ywtxb7fvy
+D22v0jAOO7atsqJxBHUBIhZsEfx9Hzi1LJzuO5dXtuAKwsuMcunSGmQkEgKDxw56p+glpgmcRqGx
+XzyPmDEGEpfGFfIaoBo9B+MKVuYaEFTdSRK6CaecvbApFZ6gnoHz85+OhWX1Zn4RXN9xZQKG5Wnj
+LZbiOkjJCKrB9OZTBrntZfAlXmNa745tkq21RSaQ7MZa/rLGKAG+Oi1SHN/1AaEP7ZhbV851vhQU
+/iMVzOvYkDozvSe+mcoOnAgKPVHH1zxCfjtS7xmFUfSsdj3tpsrJXGoGPlKirhQu8qUo+3ORGh1a
+pEJcR13MUtUoCLyP+GSwJJzlNrMS77AYnMExaIFAWStu1/ZDxu64rRDzLelooKv5rx43v8mKkO2L
+KDTzLQz5h0Q9e6URdO4ygl7RtImrwOzxRZWKIVpWQDtNcmln12fBLQQh9jCOJoaa3gpZFg3REixC
+lCQo7Fk+hp+XySiqA/EqVJBsto8/kvqbuUkW2cx6oReP7TF/Htk7LYDr3uhbiVyf/iGG1brV6bA4
+xMvdKpGih37PawJPTYyk4OTP2MfkKNvaBJzZZGvIjE7QSXfJvqx40HAqDxKxkgqyB/MF2plP5XJx
+1Zj+pMmWb9TPW8Rcmi6o9kcGNZ/qGiY9KQmHquRJrIkIq+7qxtuGr/UA+MqoUydwy5uQEbKgmt+s
+4BVsXIFukTLcqB2OJL04Xx1DhqN2Ud7U9JQu1VkRfw3b3brZw8BIH8Ug0xNAiETofISnkm9WPdik
+t6MGXD9BntLATNFeq459wxcDqa/zVN/1ZEvoE9jDiLKA1DLz1XGbYheRg/NXbhFOod8lVlYLCsU6
+hlIWVmFhVUGEwnTO14kg1/tyEW9xhV2szXoYnkoZmuto8wRzcJ493pgW3vkKM8il/V1QqoewDj//
+PhPREVHAgolBud3ZR92m5vTYCQJj7UQY9cnsU52rXuz14CP90QwZlmCGqC3CZQbTvPK84rk/nXcm
+LTY2xQj6dAcuC5foklPRqPp8+InHnqUpNo6VPVZdDXeCSTOZejXSZGFyfgLsnb7y2CNVT1TCjg3U
+L/AyUyjNcQ36Rg6GwqCcc079L45tMSWRbRDnZROANzX5v58zxWklBLDOLYTaMsLn0ejD6aGNXkMJ
+wHhDdcYFTHkDjACSqrJ6dYHzBOzjt3D0coR87aCrSwD+8hmq53bJkYmWT7vaEceuSFP4zl4J2ah6
+VaVRYxBwwLrW7CQe7+PK4sxDSM75UlsNoDX7/oHnTfJbEvTH5/tVxzK2A3R6jOnxNMAsuPTAzL5H
+oJNT6yzs+I5d1VSFJKQWkxwsbk0hC0dOtSjwhr1S01lVLt2ypfHvX5U2PPEwPZBXuKnKa1qRSI7R
+9DSDXZqCK55hCzts25gV5pW2qfKgMqTub1xXoI+sR3PYPqtYj/aR66zjZtnLnNLCMnPYoaI07luQ
+l9fVGIULIFArlq0dOUXdpZK9BYeapWzO0u9LO2IcbZAVwP44JDzwCBkKQ3AETXM09oIePFuLWDCh
+wZOC5KufX/JVMHnHI+rIj+7I1hi8vJuC6/SaHx0HSewhSPmmcRREIFMo2VwD54XbaQgcRUJDKSev
+gFrimGGGnnSoqdteV9dqt+JBIdXDO5o82CjdMa5GK2NtS7QiRlCPL+60vdrEJ+g0Ml9cwNDmTuVq
+7JIClX/sYIqCLDpNH1U6QR8C62O0hPrTDi8Qm/mnCgAmCCPccVOiY53X3byWaseqBI1gFnlqHF3N
+syhNKUzYscwQ52k1uXe9x9LcMgXpa8iB3uidEs2I8mMNDa9blX/XqJA9HWvlEN5X1iLeCdSsaxjX
++OJX8DYw/wb5SCJithaXdQV1ARR0fz5WeduKDk3bt7UItoOB0vBGYQabulSDzlvCg2H5DK20SeWZ
+8OqwtCnuVogKghwG60JfjOOa1zfH1iJWlDgDSI1Z7F2+nOkKBI0tdRxYNtekECEm5i7RzLkuT2KE
+R39/bI7uwhWAhEG+gf+0dZDgztx1PeuzatQHKo7svUWwHNZBjU6GkJjN0Y04byR4u5CZ2aj0swFR
+IjQDM7VjpaehjClddZiWe2x/lNHeR46ij6437Z568M8DuzHCjY5s4heAxiPsJ0gXKR4UgweIHpKk
+ORYESimgRK0QncXm9fjNCUhPOgXYeACt0NFI0bozr5Y7c/wRLHgdq1T8NP0ZVjnzFdQFKA1GuOjY
+07MSc2kKGui451LU4TYxULk321l17DhuDSMamo2VpiuQ1NA4VKsdFIIR7HWTu6/jCmoLLsH3p2PN
+zcATAgqXWFui5CNHmTtAANngICHOAgyEO40QVFwneWJQMMTOurPr2BbHWsHIgwdIvmoBRxd7nO5f
+yP0pfQowaJE7HUFdwVnpox4yA4XF8t1DdK7MWNPLwXK8nGFXGxrD2m+PkCsFLWxGB3rOFxzmonUY
+Bswf1ql/97AqXMfhqH0M3RMTrcjcPoZICPZ+icHA11sAzs0n3TfhhEPkI5GXwCM86g==
+
+
+ ctKCaLfc52HeIqwsXNqmK7wWLmzgW0jyD4qBkvc5Hf/Et8geQ8pyfOHEryJBOb4dObrlmkOCv1PG
+WdUCP+ksh8mWcm1PDSa77KmgnKUNrBCLQ9+42UFU0jXMFZOzDKEMcnU1viUZ2g+BecQnenafACVT
+FxkntIXM30V2jdZ46p9zJkdHrf3fPq0/wKv5/+hA/d++f61/9W8f//mT3z7+A4Nq/Pd5nCBymVT/
+0V8/HkXFd2xlx0JRzy/8w5RuyuUV3zKpkrB1t7X7E4/epOoMOGCQJdCSdJKKzxZf/eCGfnnrxoKJ
+Bjl4DXY2biveY3vbKjmM5i7vqb2fonDjjz+o5R1BLyKXHrT8FgL/CDbbYvspqsx17Q++v2mAU/rQ
+KfzzbqjeD57CSt4vcQpr0ikj+N7NSFx8EJJWb412bxa0rML/fScIYw+IyW0vck2FHYl3N/vRaBWw
+an6BMKUd3DZtiB6rhO1yf+KxZtE9PU6Bp9a43CK2mAk/gsvVzcsW9crP0CQdX3ZoYzfBVghK8LpZ
+kYlB0qfO4+n8g6rnjUirBTWFW9AaaGr66FtwvWYXe0Tc/pdfBGkilWaWn86gcBpDBbPbH6e9PCuL
+Vyb9X+MGXRFw1GMTiudWTK8Kdn7cGJjGTS2eOb3Fy6B5ST0qIg37c+vnqz3oCo8j2R1Vh4Op5xQU
+gK8npelJrUSValK8uS6JkUdORGOWx70+dgk2th8xA3x4b72j33LyD04aGaxS2M9pKjcrWyva17BI
+sDMMpeH4QyPffZjzYfUgDc4Qcw10xLxZz89QmO6MigkEbd0ex3Jvc0gdnqV4kP2wlcygr3E06UuP
+P+RCW14MQx8WLdYEuPo2Y8DU5kI2upBOG1T7Q1jHWsZqMbYNIuZuzrWpaKkT1GRUoXpk7uFem3z4
+HM3q0dmuY8Mlj/gUYPvnHbQYmmwOGpO8b7uwJnM7417ZbxnQqYsIv+vKCeID1YOMVwRHyTw1WMZ2
+CfxaArwz07vJj8MGJJ/wTHGOwzCGpHcd+g5W1il8I+sf3o7Bgj+4gUgFTEpZcQSHguQM2CmsAREf
+tAsjnlOUrj+wDg0eSuXRwrBmBnOCn/9aZ8BN0ITNVwMOnT1+cE0fWPmjvOsAxdokj9g6HzX+sPz1
+ZTW0mFi9/j3ZH7iE5B9/dsJnPEmTufKXvCTbxCbhWo/kelJ7pgWNJXFeRt/XH3gNJTeNCTYWZe7p
+Ebz/Pdl61TQ2+M1NMfHxFdlkrj+g0GpNubUf3SH0zxZ+oWFrkMW6Qsrg6Eicwk0U6rgdBB4rIo+2
+nZ8HJz86Lncv5/JclRJZB1tzZ3Za3CMoJyr7LWe5VdIp3uIMtfpcuo6i+CDOhNOqpQ/CQt5/WUPJ
+2U8BxaG4CNqdw2MjDZ1CuuyQWGg8ku29OsVoPgDm0e0Sf+gxU4sIbKwJN7ypLPjqRuCeZyzMuqOP
+YIb0aSXoyO8cEmy+trR0OkdoheFBvD5+6UZhsRbudrG+6EVkT86EoHTuSXnb0VD4V68xW+4bC7Y6
+9aZL7WMdC6hzbdH/WnJ5Z57a6q42ltoZ0IbJ2dtCEKs3z22kTPuEW43c0ioQJr+HVT+tyJKMj7V5
+dLT6T+pQ4OjuFmp+9CT0azekdprGqoxdNz7ZT3ElZ+xYVsHPCAg0l45pax2vsJ+hY9U0P7hJEbIe
+eworzvq633wAf4pTk0BXu7Nq/SadPWYrB4r4X+PuqRJQ6+mnB4/bl8t6Ou8bcTLLi/AAX87lrcY/
+mCaHn4LM2lokYmFYuIstYJ1xtqyeak6Ja9WSsXWCsBBX0cAbN8EHmzL7yfy83ZfnFuHLKIAmwFut
+RM6Yb8gxF9PJFGcwqVundFaa33qbgDXgl+UbhE88li0ddhL5MYML6zIEWAOxOH3l0ScnybcCC7OM
+Auu+SNvtDy4VWpMkGa29w5ULEcyjxLkBKC1mvAZDuYiJtipLY9qCy55nmVKq8FNsGZXhD1Q3gZKB
+k7PLk3y2g7UImhPFOYVXgu1oieRUFlQsnWfDTm4ugmdBK9P5C8QfaPH0uGbnyJu09Og8LbnDJkLd
+N6+MBk1+hsqGR/yhDqqDY7wnnsJAWQ9S4rRMSbfoIrxdBX8g8G2nWI3bUjUg4Mdq1W5wxopsptjW
+OWRb0L74yZtPX/XfRLoZYXykNqALYSkP5tW4ybY8PYI60htNdQovMfkfQlXdmSaPgXd8CRv93wfM
+IFO5rzn5Bht9s4sneKwPWcdmxcxC0o+zyl9cQhk6gTSOwG+wNbZk50LyErgppRvouYZSbWaF1aWe
+cpeYTglrIwu68I4Fa71OQTnbEqQjBvmDBA/8FOZLh+BK876K0XnXZZcfn59vCce+3KXPUtg9q0cx
+6AqCB195G5Odifg5KMDxUzedfd+6V3XYIsh9EF4nkGl+6nk5Zcj+oF4q6PcP66zAe17Z7d4TTVvt
+iktsK9yBcvJodUjBHXXbnrUQw/Qgc6/C/ddbnIJLV2lsjEbssavnwXr9BXB/XO4135R8fyGpyPSU
+XoWFCxiDnEHI9n6LU+irDlFBmL9yKwQL+1gRd5GVsJ0FIkiv5w+7FJ3efVY7ZR0MpOn+3RSIpFWC
+NOZh8hJn8JZ0g1g4s1fbsxSfkvmEDB0YnNRtDeedYHPWBE7Qd/ExT1zomO1XeSvINLvjKdOneA9y
+ecHDcG05P3rJ1wuXzQ8QmWbx2axGRxgy5pRjiLf4sCtgC/9Qimo2u4Eat2J68lmyyU0H5x3ORbdT
+NMmX2Q/6qG2ZZrj2/bnRhg52FB1/kLw+gsXvIzll6es5ulhjBAY26TytkHyJYKHeGBLYPRi0jmq+
+QUMoE8+tGb+BfGgfd95i63uwMMiSeZxiuT8j1jnrqbcHV+2lmEGG3QfSt+WulZsdD3qrvbi6+goX
+W2zdtiups5lRjyjRZdmcJ5ueJxtXsjMa9IBsh748rlUAD8hz7zyU1vvrawze83IzFaXtf5ALAnA2
+WlKOsLJo9NGzUOCm9v7b1LHUr0OQ2u/D53A/wSPJKh40+OMlTtHjFHJPaeh09jtTW2HrVE+xx3Dm
+rDZYabA4jXeBTVY3tez+5ekBL2nA565es8csHU+dclp6xJtiqvgDQUtcsH2IpndvlYdPcSWcuHJ2
+i0QGvccK2obYrn09R9tJUjhotMDZMsbrateXIynw8BOw90SVnuU1yDMwHrn18j+QTrBtv7l4tNT/
+6gz9IbpJa2oYGKuhie/tooALdmeQYsW7ihRvOlbOsNUpcgtR+7ojWUJuSEfC6dPl+cOkX3OPHm7M
+vfQkHJ6m8y7xB/bMDTUrWDBF0KE1BI0W6cFdIzVCgjiyxMmYU5QRAufzeI8P8sLMGTibY6GfAsYX
+odJP32yrDBSqm7GGiGCjWtaS+4Cfgs0a/gem0liqHFFEkFqHKL5QC23dQAH+0B4rFP8wfYNTWNDz
+YdDiFI99PcXERhnXYuc8ZYtz01OsLZIqaUP5R43nTnc7XUT1b9XHzOQpCnLO/uOtqYagJAQ39aj9
+DGhWkOVqXHEhh92V1rzzuphoD0edteid/GPHKZytiQSV7icwZa6yXO9dSmtPd8Hs0v/gSvpu0F74
+nViVgUGfNRC8h5VJstBmo7nADXI5JyYiKKXMvJSz5+y0OqWqkDTRrKEEfbMnA2cwOWcGadSbTKL/
+LU5A2A4/J58pE2ChKQi12RB0WS5zjB6rXNdALBh/YNaWqT/iwbR1b8s3mfDwAbZ28knKDGJCc0a6
+PZ7e+e64ncTaXxSzRP6cYTvwh6GirxyJduE7klk7coosG49c+jWy1Yk8vIcfQWRPnTY5Rlj06cD5
+89Zeif91TjFDCdM0hl9jyDM3TifHtwHbaaZhxhE/xdDKtIrpManmTQKeic3h2X06A7Gq3ZUUfzwO
+CenVJ6gA75sdzDW0gvOKTxU2S+5nblsQdbdSFzS2IHNKWlTDFhyxyVPIKgsW2OHqVFwKTnseLRtF
+pofYNBEJR8c1MQ9PRHhkTuXeYq+i3llABWcvTQAALbF0h8LiviPorDMLrqzXeC1q+EOReiuJa7bX
+25W/p+ne9tKJ/eBsH/VTFIEvaKAHJ+s1/vC4NVo3xOeNjbRkBJQ8wuWmyv3rKurgD5LT2KFDDfdr
+ksX28fpCO9GktBrFZQMwGlJDsHzl9fyBfKWgr9oenu1k1M//KVYkOUsliRJjlSLFDDeYYxnuwSLG
+Pdazp5psv5WbGT7ELk2C+6GWcQk7KF+syO+zgt7VgKA4sJ5kK11JrKlftEx84yWkIUyeSRutzM/C
+WYWu9FIzncqM1reiNOznbmTmEaq0D78sqZHkk8CXEZxkCi6+nme61IigbcfjG5fQMZvqf4ppb9ZB
+xhL51ub8l9QMIbkUpPlZukokTGtGoJPjDtcNW2HJnEOvHkMyDcnPU29226Hl/W/U7YbSSGbQ9tuC
+O1owtOmA8BpzAsnrK8QB7fM3xeLQ9NI8Bn5/ofb8alxfsqOJT6fAerBlb2pGDgevlGhbchbwB+Kg
+heJq9DK1YN3Ug7+XXyzobhtj4mRTH+4jGep+aSYP8sGFordk8YtbwvqNPFbYbbSm4/9qPzgTrRHo
+6WRKPk3iXgYC6SqmjErxkKRuAxjgmGaEZg5bzyCyWfbBvYc8EU18oMkJ85Fa0rfi0or35NvMXseK
+YZDCv9QEY5PfSFHPkSwSBHCb16iehxrkTWmW+mmWD5OZYuL93tuSTl8HEl6ZmEZznbG5qK5ngkmn
+vGAwk/2B5QWTJClqSU2NsmKAW6LvcrWoFYOBGb2XV02JlhvGWmtqWRhdAo5WvtMpjlVkUT/RMlWl
+Jp3EdfrQtnqtSApWqeWxmVQnGntQrcikILdEplAWDT3GSzlXwQl97btNRs7VzRP0T/HkBgcN5Sxf
+40pGN4bwajK4NE0zb5Q2s+FoLlyj8JHad6srefwhD80GVIW1FkwF4yEVFxLlw9/jOsXo6l09Dnie
+Nbii2Pp9zhY6QS9Sd7uY8r2oXVs9KygDygSo7XVdgVdDjQRZkg6u4US+2wgC/zt5OZ2h5mg5JzPN
+BFs2W93kDG3Bwtm6tH1dgwyVyqFM5uh7LPqqXaFPZrp9nXGVr6dunnbfHJz6juA7jT+dwjgb652k
+oCsqu3VRlkygPpDsxftzFYPNJ/n0emZm4fbtUqZ1W94rv+RWy3WKnuTAEqp6bM5LIvN8z6cl/vlo
+MUcW/VgLYcV+ehnqHDzSNtznCh7jS3OvvkZMJpWKkeHZ/B2XbJ2iNeMcmxWRHlp106VH7LoyqpIs
+Su6di3js/Hm09E4QXIXzcXz5mXxA/2SjHGd/cCGsNbWp8lPIo4iqsNtaEnmggdO6iOi1NPWUFgcX
+xiSFs5M6bkxZM7aGfg3WdQN6eDrq5e4yNL28LfpBDwOp+kRZwf/LVQuWwCWIZaA3GK0Uf+g0JDDd
+1s1gyKubv0v12c74L7xCU0u2z3+xH9PZF8wdVzk0kiV1yEXnHhE4Jgut9ocVIhlOpw==
+
+
+ wnkNouVdzvACWSHZCMHkPBizL0hMrRJp1ZEOh/UYLciJ54gD1sPp6fAbEfSG01WdgP/1HO0KBVgy
+EllykU6bi31d17nd5MBcqEijH+MaYvYqdW4Ya3b+wSAKnrt1vniREsw2TkZYpVz8uaXpaEUtGMHH
+KkAnKBPO8SC7CUz1ZsZniD/sxU9D/RtjeYX8uGT5VVgrrQfPxIwzePcDvjjOoANZXdW3KVrlkkog
+3KqQeuoitnqpL6MsGJBxRjPDW40NECYkyhrcrNO1k026/Ke4tl4l5kCgwR58z5wYpc2C10ShkiSF
+Zb2mROvG5GqZHBctMQkbtYj7uHbVfH1TLRvNDCyPI7VlVM/qOT17TjRqGLukJ97xKNFOkqLdbrAF
+w5cpgOEaiCkaprJn5R48bQC9BZHoER8hUpvIRwZtdEl3Vfp2IJiGgOc4izvuj40eLVbFkS6dSIlr
+jyT94E0e+FtchJNmbG/JjsiRWaLwDefuwfqVeajBULJ3hPJNIdphWMC5QZCQibDUesZioqacFm3Y
+RnpFzGgy6VDx0FbmvjL5OD9iWpRbTQpe4+PKGmPj5MWTENMKp/FDQkw7ADi+2Xn7sFpj4NeYGVtg
+VsTwzFJxSedNXpOz0T3PVP/SWbEmDE6z/tB45+0ClUwcw4NmSGVBvNyYzTvb2A1t0jVD2FTWr2x4
+mrZxy46fsIM31gPWAHIIl+AM0/HCKmMnWySSrGdMNuDiBIZY4uWpyrp9YgVa04YkAVxrMDTFH3k/
+B4GlFiLuybsw/sBzu2k0BDhnSI3XtihQR193rbstFCLVHLjQ9NrkeiSFtUJ5svDMPaewfrZ1eSTZ
+el717Ekh8EW+cQRQp0mn6M6mwB9CyNz76Gy4kFf6ra3GOcOx/gk9nsLdtAdHi6CMmmyN1ylSIJk1
+PJEmfeEtKM1vC+5yBV/O60upfHM0vbkhK0u9zWn9Ezyv5XovMV6kmtieaIpw6pyZaLQRcV5jkJLZ
+bU5Ghym7Fx1/9PwRrInQumV8GqRmy057IcOLPIgiuAe1/bMMyaHGoTZpnYJcMpgB5S4HBhspXrCT
+H3ALk6UpP2B98m3Ly0YtkmbS6zeyQnEcV1Emq18XB8RuZKp8FT/YiTxdVQ0Ey1ZB11gPLzFrlNFY
+dCFlHGjBZFmEpCMLOuiqis05QZqG+efgDNqTaHL/kR7ObITyrMZ7cHmzr506Ohw+QELIqouJzgwx
+n82rbfMio6OfSrVptWSBxF3k0y6VG/P4UFFrHwqXewYv/iG8Yc2YU1dxEhvW/PBj6bTJIOPxajDO
+PSNFU90dy02sl4PpKMx844sfU20ygL8BDSlpmrJZQkmA0MCYqm6jeMBvbUwZJ4HKcH2uA4qLmxyH
+SpkQBJ1un0+j7lCfLUgLVg0/p0C7nf8hctswrs+eg/pKXt0qyiDZs01G00hzegKNo3gGZ5I9gpGW
+yJYXlBXb759TVP9S8xaRAcFH1kUmDAuj1rVCDl9ygEOnqFTjwl3LVeWR2ThKZvXHmiJz68v51v6+
+QdPnXNSneP+5iNNmXUa78k1N+lwMkzAvvG0XSjxpmt/Miu4VS/Q6WTkzmng4u2duBJSloX/L+Sz7
+ZFKYBi1Xyaf7Del0cItML+Sk0yRD4A/bu9sRdNInHjMblwalYix2pQ4DxcvOl7UID46hAVfOTDQk
+oG4cKXBoz0WQzYI/KGGlIg0ZVRot9BME2TAHFdguYsTv7dgAcP5FLVP7P2mTI3ivivgDh+d2ur0H
+mzc/IUgfbQQtlbbH7g6IOkXxPpW8o79gtJglN3cJO05p/Ph7ZFp5MK9g+WMH4vVgfB905BuQJplF
+g+RAMAPqIv4prIDUBtIW5wqtwG9HUaNeXs/3gJzc6/NTtRwM7O3dTAimop66x0aTNK+dzy44U0UB
+8bhkg/h42sfjGAw27wFB8OqoRF+fM0Yx2VC+eVgpXkF2z4xE8MyPPNg5th+c06dz7z7YRuUxDkgA
+287LRpCOeRkLuq6h4xVaDpFHaFr3pbZATKRsF+uYrjrJaveQ6uDY+3d0bO8R7BGsfhsImjqdBfOK
+hKWTQ2lEr6mjh7iluLcUdCw02rqoKyagGznvxhPRwACDQH9IePAcXzbU/TQOIdiIWWxRXlJTzkuq
+k/6jINhp3JJeYw2tzs03uvFUizIbczBi1tXlLFEbWzO41rYgxWa2JJ02bmq1G63S288QbJ1ziFXG
+vp6j/ZWBssHFvRXKWYHxWdx2148eaqcoVQ5M33af49T/MwBHQwuM/2vfPFvTrTNJremXVZst1s7T
+ps4z1G29+a48wfzQ0nW7vxJuUEinnZNVaIv3UyT1j0FOcqvU9rFFKuKmh3YxYLksjv1VG1lms8k/
+sB8XWhhDMZXNIKbRnZFfPCPRGUbwWov7/3qwrkE2rzw5DZEzdkMpspzTKcj8PLx3O4VnJaBtzSPi
+3DO5v3mc2WPFGgqmMKVYTRlz8MkbwCsIdwcd/hy9yMB1GvmsdwuZdZr4HzZdFRJfP9OJb8fEyzVg
+VgjBbccSvsQf5uiUL9o7S09vDJko2DytCqUu24wUcqjUsS8H4uiegJjbLC0qs2TndQrt75MjRh7M
+/jUf2+LvXPN9Q9FFmdlE+CWeVedqBJB+l6jj5SCMdWkqRmmtiHIbpcZCjxIcbUnd1zh6uXyAEWiy
+bGHZVZLDusULk+LRnlZYq1IuTq4hVmqKKNOT86vZjt0fufp0ciqb2X0C7lMMGgQi2EaXja4rCNo1
+xDIjz2wLmw+tB8vqQz9XQkLPu/wfQSNZnkqz1zTxB00qoJb0oqAUxZZMmtHPdKEKcBNxWw38oEyK
+rRzm10uinpmSND7duznWPH6rXqlK1ZX8GVtCdwiYvRsuZyyZF0v1hR9LQuVQMueVlrmTYpHX7O2b
+r0gl6DJA7aqno0UScX4KvHlfpYtUGkAu6Dvx6EbqoiyRLVjvhrOpLWGOurkbX/um2zsNPsXvLaZz
+lN30qyspPw+ubZbdniE27yLU78HwrPFollJw1+Jt1+gt++a53d+noVicjYB2fYnPR1PwZQwN/tCm
+OgmVa8+3oj8oETHvqcYmEJvofjrnbrYTLcfn0syyvBGs3+XE56u7rhxFwCT9OqPmn7X1sZBwqlQG
+gGB4df5TZgU6hQgMT0fLyHSdOtzkkmuycv0gWCbOPSUmyDFvJJU4mjuRRe06P+846+VSddSUOFvY
+VlBp8iRDKJQuedTXs6m2K56Mlzj2kM5CCNx6E7Z+6hStTM9cXksG+jM4JKWXKc7w7eu439XghthW
+L6yYX+IPkl4FY5/6aejWKLRiEtUAOcFI8mcCv+bkBI8ERvZG3H7gB5eMaMOdFonCFOnvqpBbaVDW
+TeFQglpSE4dxhlLYKpVHUlRMaYWLLMTl+SmMwefr82gKvnsW14MCUuRSJMWpgl8irt7JHX5LCLLF
+cQeIn6ipaLFDiDLEKidK59jPerAkb4i7HGwxt3uGNJ2xfQor2UQz8YfYMm9BPyAREmEbWyxg+/TP
+SjBMvnZef/DgoALQCJYFgkzgxhMjwuqPmhNUf8RVuAE4gkx4hmR5bZ4pF9i0pV2BuUYlKXDkNYOV
+KDHVpTnJjYPjSeTBNr0oMGX+GGsrekOTN2HLynWCqlse3mNrr8jb7QvkYlMUqVZh95918JxTUG6k
+zOiqR7ApWAV4Q7qx8IX208Nhf/DoaKHTQfAZwR2Poedarvd+/j3BxxLEQLuLUF0KsQjJT1rw2hTY
+H+q4/vBBhTm2aVfSh6yWvHkkRRHjLtZmI3pULJKKN+h95CdtT2fxSJO5uK7C0zoQeEforjAnKPtU
+LN5/oFd+AgR2JPb+GS/2S/yh7c5WP7XFIBVagxAWFwgPrq3gaZPFlt0xunKa6j2bYvce3Uzsx9bk
+jpv2NTpFD/xHTa4WzNxc176iF3lOBd3FLG6kL/6Bj/rqiM7TDQoYzArSyilupAmToXCG0eSZrE+l
+9hZ0N6Y8n+nsIM0I4ajqwUcqMQjd7hFnrQJp2tUjgn18VurZ2JMCXFOIdzs8ZdPms+BFWvQ/6BQu
+Pr8N9RF6zI/HgsTMh9v3vcUZuPPFH9TDbYtDVVBNB8L+h6G+1yUQUHxixz/2Bltvf+nx7tmJ59mF
+nSfJ7a3Bmjx2MAPfAv79rIKN56EK+TsSYMr2PMRcjy0fx8NsWnRNB0bR0y4hqTdWpHuMypwI5XJL
+v9V06o24mCivUdnUpx/9GxiAiec1M5rvfqHX5wscxdEM5PjQVePni15y+o9NyXizK4mtWKL/Z2oT
+L+trunUAqHNtfxju34eg2yFZ1UpSAsjPCktZZliuUyx1jKattdraYughuJWo2nl9hUQDxUlS7BS5
+q+HO+8Gsv3fwYGYWdmDP7A+c16YD84GrjKSQB7KgK84l2nzxFHuybrrcT1OnUDkam6Mep3BZDRRU
+my6iuRhWGs+iCjus30Y0eoAxvVnUJUHrO2/0zklN9oN0B0DAX06cZo8pCLirRc9lOjBVixo6g29x
+ChEmkrvcelC+ilGygHN4HHjary1OMofleEw93ebAYkMm42lvmuBdyWgTTHab66FXY/EWtMEy4dlW
+r+C5BXcjeX90eO5xT21PIctcb83rKupFPGETpTm4Z3FJpC9oNIkpUsWVJi1sIbeIOFMo6WOk8D5k
+Xfj+Xeo9/8nv0RlNP/6bP//Fb3784z/985x+fPvll3/45W9/8bc//hp6pj9++eXf3jqmf/TXf/Wv
+H/+xY/N//dlvfvPzX/3iv/z2N5///hc///e//NVf/sOvfva7n//qOn5T4fSPcO6//ne/+Nu//N2X
+v/nlZ/7/f/bzv/v7XzDyx//h7//uf/3jz373r35IP/7p4//+6h9/+O0P0D1NVDj9P4//9RcmowrN
+0//0w5P2afrxPz7+x/9+hP7xx/bjf/7xv/+P9OPf4ix/Ic14sggomPSFArdEjfFVyiYcDSWL7cfR
+K5FoiRO91LKzVb6Q3WzDg8waAauwjQxvwrt7McXncKNd1D+2taiEhUnvnO5tvP5O/hdlERsG7eqz
+TBUIwOyDQcbtQvtkyn4nhazAORRbTlPu1Vm/SpbZGUC6hM9y/nICSVyt0XrbXteNfaUus55MOYZi
+9XpcViLlV2v+9U+P1na4nFvPTgos6zbmuxf2zct9+eFv/klJXY2h/xO7VUqbXPMeErOlNENffPfu
+FM/WqEe7utYXrHf79C4sLMSZi3zNVW6Gea+p5DcM7Bzz8OC1Fa9oJ2St1haY1+sP8/6Dn8appMP0
+XspRfhvS9YLCB2aq1/hDd4lNaILgEs4fON6tIzydP0z1gqPIUUP4PnEQ5dgKgwZqPFoLgpImGDeL
+soAV6bSQtKmaQ5iTADpM0s65ZkJzqBq8oYXWRaHilQZk9i/A4Dl/cBt5r4CERdRWChWjyUC4+p3L
+HoSwnm7y1mUpxxWHBBc9vAMds5L87nGbKbV/8k8vCHPBdjE/vVL9AXYTPQZAHde/oA==
+
+
+ PGXxRfSKp1yfBh5mJSftXkMUQSXuTwPaqiMu3HKGvx3tKrTnQ3HLp82vJ6VQqwEM7UJ8uR4HedOE
+XpxEj4X7Y8NOQYVbjyfJkMGSsTxViSnDaXqngm0G3sqYDJ89b5KSvOkAHhgMxachFEOWjFFar6L/
+XZzYfSQRiitan7JMb7Y90b84hZxHwjN4fmoZL7OAYpt5yD0K6bTrPkRjqwNOJt7S27NJZjLbnJrU
+oZKW9fDS4fRZvuEvK0uMCnOJtxJiqt5bqdSZEt+YPvyLzRz+/Ms//Ornv/7147r+/tdf3uUPj4wB
+GeyPyIQeXxgIcY/5AfDU407/35KI7eYRjj2B1vWFSzgVAaC3RbYXxp47QqOaPJqaIskEFS9IOQCP
+NQGAJRMpVhxAfZH/nVotjeEyLmup7BeWVwi2WrNl0bHqkpu6hUwLNzlDua+eVcpl6mNNqoQFZaUB
+5JY4JDRUZCqE1nNfLbAPKnHoCeoCdjwsdo7Im4sG2mUe/dDtGMP74IgLKPv8e97sI5rl+wiawyQG
+Ge/gm5f49v13+/mHX9Mil8oTxdsz3IY2iS5VysHksxAlVPRlYl1cYcOCxwcd5GaPGcHnlTEKBFnx
+P58w/b6RzIFX95kJljsV2xI4Qvt1kKvRD0pfpTgDBZzwwLFM5EiV7cafa1IiLdypMsyHW3r8PqUG
+ASkKg98itlejV1lsiIVdyfp272Hb5UgJ/kgEU70YQHCReDFr2tJD839/wuX8fvYH5yv6CvzUjfoM
+KUF5104wZM1jCyJO8JlhSlSDIsmWoE0rYFcW60LIBQvu677GCraYWdDzrF3XgNxb5Daq3iNElNUE
+2QsRzxpGGuBz8bmkeK8j1LuRG7BsPZJaGUq+sulBA3h/BroDHmFBSvUgWJfSNnuYfgK0uU7+2KWO
+XuKygqk2VdE3gcEdT5vFf6BS+PevfFqSBGVL6SuPrs73LNnvR++m8pXlAOl/b9AfLj/bl+d3C9bO
+aYXhPy8fx4nxXz8NucROYJtQSHeAjLZvX2oOw9fZvTPE1XUd5vTPg3lybcGERTMflfLL8XJvot6a
+ys04tu1HLBXf1+d30XGmAuOns6aiPAnLOqcY9ALsEVOBtpbdH+Hnb8PqtriDcd6nYEu0qTLPHp8m
+2yEotZjPaow6zFHfzJHVUzkLnw8UEw9PmiV8a4lNoKFzR7sJZ4gszUSfpolfmjrp1mmfwkKpcswR
+vy8YjtBH8TKfqTfRyPD+7Fa6CHXpvNsUdLoczYiYUFkEy1E3B7EtboyEVIb5NeZYf+YZ8jlG1zeL
+mv79c5RLIHgOKWsviDVbVkREwaEHTBadbfokVx92TF3ykBDOLm3EYNaxhyYPNIDOAzMadjGW+c/N
+nV3/vHaXzF4fj0sVMeS6JA7qRuySkrdUShZ4ppZHIwomPU3y4WXHCcBoYsWw3knLHc7HzNENtWwf
+e3yLvbc4gvJSdNPCp2Pvpx1n/eYVvH3/zfCVgX5ABt926fUvcvvySbyezgvsIMx+Emu2Oi7x7VFr
+u6nE4Z/UolB2cwj/lZ8kWz2qS84qcSErvdLb6zPDbpBmXh/axqhf0kTRmxriWvx7Q+r1/eomrutF
+gWGX61h+fRRgN+VTfWZuMWc/Lw7jOTIeC783v6Idxnn44gbtS3pcKBFDWLzoikrY1PiBeoBsxKvd
+60mf3z3XU2+/nl8/3mjRXolgjpny/HPbQX8mhHYk6MPQfkpOX7YhH3zLSUhme/lY/l0kH2IYlS52
+zI6xdVFmJmvDxvqVe9dgJrDlhzj1TstFDPlmtL59fxBrQoL7klZXWy+E5nIHDwF8Xu0OnL8+fU7e
+DeymHGWc79F/ELYwSt0sWhTtK5iPTnJEUMIZ978/C46M3M/Y/MxNV/GUrG69c2AhwwsNNQgA4NI5
+W8vGlzzDTZnMi8r4mik3DQx1iU/rdRXQ64y4cnAuB69bgE5Z20YEKZ2IYGaIMoSWVK8Z/9xNwG15
+puYrglSJLqI72AlcVBKpujYguC2XKjFCComK1jc3KcUvfWGAva7FqanaTxAirvUyMcUIc+V/KjF9
+MFCPNmdIvMA81Jsxg2t7YSYw8arwGF1vPLcIT5PNMhOEFgh8U/2t1kOhbm6b42NRe9d2fXq2IZX3
+O78ynLc0WRi7+a2N8TZ0ArhgMFWMzAEXxum3HOvZJiCqlkizvv1y3r7/QeFL+759XjGFrFz+WcaG
+ZIjOKicGEKa+MCxbrBzciUQPSd9TUjENvFPvdK4U+PKX32NUbs8tPzNcyLaRzmjqquphcpNRe6cv
+agQ1qHm1hUw5P2sO24EVjVtGOYwdsIbfEtMDQ6p0PeElhcJaj/f1CgeeetzTl7q9EYSrkQCKVDW3
+CD4E7OltPrUeg8b9Ue5EdlH655m+axJiApLqVtDmNUWt+USNaKj09d3iqbBMqSNfGTYurPOEHLV+
+et4wU0L6qzdz3nge8Wp4hizCo72aJYcnGxoverMxkKLWFsSaiumqKTg1LcLWUuNl0QOJiK2PwmSq
+UbYYUvkXQ7PrK7Pff9NA9sZ6S566lNwoh16pUPvdIf/2/S/B1zOIKpozL4mRyYFFiPp1b43AS+EC
+gcIbpSJWgOWgPLtlij3kOWOBkOJtfVLAixo37auwaki843H+wZXLFpMI2wTrb3KF5+qUG0UiyOgx
+X3y3dTB3yi4aAUQTv5ybTQTkMyfzPlzUa/gl+LCdNAu/rNEHx7K5Z+8zi0rCZIX5cydijtjl7S4x
+kX1er/176nvsaFeDLU/fYtNuNSc4v8NibR8Esc4ULSmqBNedeU3xrMFIW7x8Spv6s1J4O53ylWEf
+jHbaYnYl/mZcUsyoEriJz9+GcW47Gg25RaK4QdlJ/pWkptQOAqiiIxjbjMNoyZAn7aDyo1rsrZkp
+2i5MR5QSajvejIlm00E8xLXsUEqw7aPICX3SEfznfE6Qk3zcd2hge9NyvMXvfkhv3/+++OFBAXFL
+pcLEQL4oTKJMjgtGsEijxajEnC13aHZ4o9+Hu9siUejn8zdhU4V8/rHkw4Hn9ap+onKpzutjzL7d
+yPPNPDokarUQVXV2pbOp2SmKXNtT0RduFGgkitmByQY2dW7NZirR3MpDwidJ5/zsilBdWWRIxSh9
+Pjp7vZNHU19k+hbsM/GHNpz30rhdACRREonrfGIGmBUfOtesYrjS9EaH+bEGd95FcG2u0V4TTZiV
+w4GkcD0E6dKu+PdcofHGDmXdGshJw5HXcfdGNK8I4iW88qxtbQkZez2QmISXb6WmIiSvV0myaAtj
+1tujXWf2uz0/Z4VnPYQjORNbviaXM0jy6CncR9peJgy9OULqqe/3uOMaj7bHK6/OZ9JjeBf2h0Cc
+Ijkf5Sfu7xL1+Ev4Sbpuna4Vq8NXIRdba+G1lf1ukH1b4lnFVpZPNj6z2z59+7yoH9NIWLHqgPtC
+oeX51NLQ5VffYy2JZ2vG8HxelfrqFtPd1hif4xpKJcRvh5IKdLj6N2qfAksjSzxyTOKuSeVfTXUw
+JZ0u9rl5r0P7Ln5yW54DsRYhLOmddUSSoIZQqT8ysz8qqN50ia5cZ/02uMjfXG4iME8Vir3I0NRm
+CmvfUgSxYf2qb8n3T/n6OvZ9ApE42KlsP1ZPlQ+ckEX6UFW+POJTLB+VI6xgEhY5x/oa78JnRraj
+/rNJnBfO6jKKAAcsPvukNPw7YQ9yH6HV4qcfvht+XkK4YulYrReX3V0J8XkGv2oRKZJWv449wevH
+mhs4SodLN8G0X2FegSe3z8GzvgaK+J1l97vB3xHLHLEsDF/pvzCs+WscNsSgUqW94Gua8H0OmLM3
+vETDA5JsP2ueyJIsEr63YvobYUO9jibT/emumJKGI2GfiTXTCjMd7/V9ZoQdSJwx3Lwrq/uUpPMq
+nM8U/phhi3dZpdDHhLjlklTsWR2tt8mnpBbTF+p3DlYfewIT3aCARb7APIj+kfSeYwKFYId71uLj
+01kBNupIZZGm7TKUY5gypQeJgOccuOdol6GGpaZ+Api0Fqlj9XTcgP0ZdiXoc9FT1gQAYwts3JfF
+ByPx42tWP0sjiJLbFQSH539vLHg0l0HFFlt7+P/L3ptHa1JU2eL82p67q/vXvuX4HMoBpJUqIiIj
+MzLRp1DFVHhBlEFKZCgu1VBQt0CoYniIDDIPtZhkRoSloNKA4LREEJFGRBYiII0iykIElHlazFS9
+7wz7ROT3fRdxgPX+eLdbqioib2REZmTEiXP22dvZPmwkCLR/RFkRStdvsl1YvcQTQ9OwLl3qyeac
+FsOlq3q59DGIFcrbq5qFdWmlJN1IazE8YOU0rtW+QbeaPjE1yOq8OTZqT1mraADWSJ137cbsyjp7
+0Ec+3Mnx33OOM8HgDLKETKl1q0YvH2NaYyPXITd5vaoM15XgG2c/UcRmiIOGawCx8g4A+3zsp6Rn
+O0RTsRypqFeqRkTrQIP8cv5GpFAPA1SI2yf0yVf59kgZ5RTkBCevnrIoYVonDdPHOxjhOMLnG7kW
+75vdI1qYZOmDjzQqzYEFERjNHN3QLKKzle5NqQi3kGGjhpOdYdkRGUFnpt3igKD4uChBPDtZA6as
+DkzLZM/0ISftk1cVT1oVG6VY1/T8Angnr5FejpDL6ASaHD+vcPxzMAegADA1vlgKkcGlvKRbzhhb
+LIVqfWBVw7VDxQqflI3XK3slmzp0XNHxNQAG8sZbg0xJ9Wt5OsyUoDPShZzwlrWmFTiLpR2U0C0o
+C6ud7cU1T46lpKJIznSHatM1g4AfT2QOJ8jZ2uGERC9dFf68SfhiBZfCIOSd9FiFmVx6AD4bZ1EI
+6kw09aXGCaice9vKx+QsOMBJXGC70z2fU4/sAy88YhQzc6p7Bak7/oQjvjHaL/ZSp0ktuY3etgZ2
+qYmHhMRzIdHjJYgkj4YmAdxvKI4m/ZB9cl5jcnvptZrXyjQYJhEztrBTCqZY+GgC3IIkkKo5gAFe
+H9+Ut4q2oNU5pc2mBz8iLcKv1/lz7hdb9maEA9JHW2VYbq/XfTQAdrQI1kN6B+p58tE8ZV75MvOz
+kgbo/O+UbUNPUtMUBmFx5BejaZdji/VpKVFYVXzgo8VSiERBXVH2mjG2WAvFMKZCsnu21EGAlNCD
+aJ3FbSNIKXmFkHbJlAyYoNBptpgYXSt62pTrpnJxkFuZq98NhyJk5UkVPMmDBUN7wPDKLfXaRjcs
+kSCQsjwGDqLuhW9fJ00l37Z+o50ih+VNyhiSSC3xQmOyzXqcC9DzJukx8bETpC1HKhvQvQUFbcjK
+mYxlzyKFubDOWJGyuAhLeuMPDIo54LK6U9vVTIiy0IL2Y4rlTm3ndeVKIhXZv5dHkh5dGiP2GZtF
+DmTXhb0jAwBzp6IWBL3fNcUujMFW1gU7Xg2e7LgGfAU1Or4VGhi7AQ4Vzpdd1GdSZj3/TmmxJO0J
+sUPEMgMui6z36LMUSnHkIV+2zAVW7kAk2ik/RpCzjRzKxZZgmSVz57G0fFARJ98Akg==
+
+
+ XGmMICJLlZMyWlHMiDlaw7+vrn/IKPP5X13/0Xz8zkIEsTwk1xrjqLLDHQvfUKFG0fH0sEiiOM94
+akBzBQuRMxV8RyF+XZfe/rWZPbtoc+jtTY5/qYuHT+OiP97oadzDY0Q90iNyqgvLD+wsxOGtJNBN
+nnPMhVtZyqseQVIUAv7ecX5Q6HyjJ/QIO4JIb7M/ACZporC+FOl6TEVKuUhhqHx3PQCJ6S4jUn8V
+8xUEkKvl0Tf51A+PshX3DmD9BnJhZaPvFRuxWtmqy6eyoec/Of61AL/uZ4NeXfiMZglLbsDRMIHg
+thYwHA79swTKrKdzdVfLQbwDmo2SCOAdDKpaVyTK0wRo5QhJWOoINxohwuVVBWcDIx5qj0RGpMJQ
+oZyZid1WpA2kGNZxl1njlaeAdxjzDzR2TmgLHBtNFiWGavMQnA23EH7oMF17b5xod5WKzNvMJDBz
+ZynaelJJHg/GhWz2Mne+NECOr0zFnAtxkO81YN6E5OGOIS+d+kKT0Yn2C8sZMDlmVuAAThBsXoiJ
+ui8iwYX+walzVGyIuVbBMKWMDqHAGpEAacuxkp9+piiUOFOhaCtzxsBx5ABj42gagksEae/A5a/Y
+QMazw+Fpz9+BcDCLRs4SxmIVn/WZvNmSEKmwisC+5ztxHiE8T+hsZUA8gniL7APHgywoIth3lgzK
+jkYXO1W+s3BCFnN02fmXxS9c4anM76VzdoJWaSa5NMsYCR6f1TrsAVJxU6mIR0HyqA20XT5Bj8yA
+yfETAzOGEH41CN0C8xlKsXpn6KOhIM4sDdB7zR7kxB5xJGDd6bIXlU73Qkgbcq48qy41mqlsUQU6
+VHYAk2cvVzJKozjbmUMM6P0K9DAcrkrg1hTlv1kSlDAsN8gJ6iKtwUjQFALfCkNyhzdeC06Oi13M
+MP1O1+iWU62lUwr6pkULebyG2/QtxCt0P5AsXpzVkZStOEKiiAC5V2trdEHZZngj6oD5R0ixqcIi
+6+zzVo0RGhgYWVujoNHULPx+SqAgRzol3csZ07juvW07G/nnDOvAu2Imcln4VWIGUj+6G5iztrKO
+tt5AyZTCnrDLpLa2yCu523G7KsdjFeSunoXFVox8auSaUWGFtOwqv5xobOkqtayvXNDohLPvOutw
+QHK9xuxyhICyvDwWCVHK0ykP+4c+GZnGmQiIWTAlLc5rivOkfnMugpbScI8JFBV0jm0tCbCSKJYP
+RYSARGWFMJwPqg4ijE0ECybyD0a/+snxiwGtEi+Vh//eZYP/LOM00o/Qf6dP1NzV8qSDg0GhsSBU
+eNciBbLpQOGpKslM8Z3AzwonWituDaT0UjAVNE/G5eqD10+Lszt0cdN0zVZcy5meFMnUrYgC68P2
+OPfCNOTXEhp8iFXOTK57+SYVQEgqyMwZNw1whq2c9AMpGRSSi/SIKk3L4PSunGOuEET6jc6VFbFy
+ARUVjkrq4SbaO5fAsKv8DSH1+23iJ9REpsfV5SJkiV7GJXm9kuWnQOCpqypXKLs2n1qrVnsR4Oan
+QikqxOjkhGtZUBUuVYofyif0nTH/sgIWFXLUPHfBVaDjY3jthE2N5CSDMGb2XI2tC/4Z2Rud7qq8
+RBW8jFSRF7SCl4CXVxBMafoYU8w2YI4AInhk7iMvWzrjkrMc4lAVTMmutaYq5BYPbF5cjDB4C6A8
+FTrfFt+FV476TijgtFBF4Tvxamthlyo0UczJVhTXdTwWwlFmoUJ8gQtBwcXE/UUToo6khoKWNY0+
+ETvOM5mvDpg/oV4ndICxoIxoTdCiE17bCfueYw0rQDxhRQI1MWDjdbXKuUnzhqN2mW3YS64JXQ3p
+UBJWdODnylDgofeHl0vrp6XCb+dnrlvMVeGYTRKOnyoqvH4fOuXlqzMiw1D9oS9RqD6lwpxVKpdA
+hUrRSF+SkPYHjVfMna53EzqcZfJkGg5H17CwMFupWKSc6JGrjUhybBIPppQENb/pAFB3+hTbTLpC
+Oa0BCaXASVNOq+a3B6aj0ANAao38w2VNhgohHeoa5GJYNqxDfxvI0DCQWBMBmyzSkcgn5FEhzOek
+vRIw5MEBA0fGFGq9ssn8ZiLy1mEcMRnBBFcg+Y9tcVR0oPGjQSKbt4NEBWW8xhaijHogIqNX8lSM
+j1TTgIIEP6SwFSbnkNNqGk55Vp4V9mrlJlqHxFU723vRLROUdGW6bRrIoLyJQjAwUXKt13yZIueR
+veRSqFJ/lKMVKsXKh0LWj1OnkqZUYCumJFWjtbRzGPnpBPAvIjKZvCc0QRH/0A1ua9NHSLKcZ23T
+lPNyi52jX+HGlbPrB63rN6F8JVLYOKckBj39AOLGrPRqnt25aTChsnC4lUcIXhD2lvDzuSKJ6hUB
+bVURkgprp1seWC1YXFWMgthjJomU6KU8PW1tTEd6tCsYfcgFUCNpqIp5lyEZ1Spo0JIN8Mx0VCck
+sLITqqBACpV9IXndpt9g5Uz+ppALqJqzrdAldpZhF+yr7ivH5XTirBw3k43+ripevLdkZiesqBNj
+KrriYXvTO3CGF6Es4QDeJiIYlULVCgp9dlbKE7aDiszsxN+tNgp4UTIeM+oBeZBA79qBxqdISk50
+fg1YZHVDJyCfhxwF7yq5D4MTqto+5ttkCLQuFIXyYAwgxeBs7Ul7EGDyDcheExEOHOdxiKHc0NRq
+ni07+OdaE5r0Samy9DnmhzywRkGnRKtTVhSO+sIrIzBjUQ2PTTqCtkP0yHn6i1scLQwmj5Ig1yo9
+R7meDdiOg5IjtAxRsKz82KPxE58kKnR+dth0QQVNHB/RyE5C6M1PJf9ojeCZnpOcNil5RxV/W+Vi
+1GSaLEFpx4TKkv/IUafg3yqDMcmvKmARzsgLWZqPEnmRFQS96hRsPY0mUpZMiJHeRx26oglUhMx3
+TJk0SEHEOpg8IDOcHV9leUUPFcvgsgCvU2Qcn/3J9MwSvIW4l7Fla947G4a1sXBXDczh4u1RhYOF
+z+CwvP/WqYMriw7Yeceu6wbe6qqytYCUuDoISxlZOAF2Gj1eAvLOOrBwjrO3BL1xhpnpBB88YRUq
+hhWctlDVTh+TWTUWFAS6Y9J+2zvEYY3bnOTC7BWAmHzIkAPVpFNDlT/pChQIxJM3VZSjNNnHb5aN
+vgcuxLrUlRTzFMmOXVGBTwCbhR5VePlIXb5VbqA1opMunweKNSKI4FuuUFZWqiBbLVfg6Dr4mzOW
+iC4GpMeC1mP4YRQMrI0Hx2hQP/hUrmgRJ+e1aMIqlGuUOXkbk7AibTOV6ugE6SUm7GBCQ+JNZWRJ
+JbCF34vPM5M2acG+7iyhnqzJCIcYAnpMtYKdjg2R/KXEClzG3JgWNkm3NehlcWFrhfngSBUtWGdM
+m5KEVRpwuxRWWCJN3KTOXKzkg8K8xMAzVBRWPQs45WdNjoxORTZl8QttBUYj5R4eWJd8fsZvW0Yz
+MoRlpY0B2blMkCnL8uAFgYkhxJKhTentqvyRkdWUAmjhc1aH6pQRf5Nv8rZo6cu0a7hU2HkqeRpU
+xDJXQAyhkY07W1JqovO+5nq2VwWeKbYq1e5qzcDU0VOhkMsFRQZNWhOxieair0AQCvKhyjRnWyXJ
+klNJQdhPFfbd1eQKyh+kqJabeZL77ZqkHyVn0hcVnalmdal8BD568FL2Hk3dQPysYNoCKX+0Ixjp
+mIm+Kj0BX4w/Ja9PC/ru9KI1qbmwLig5OKoYAwcY84vW4H+o+6Yx4SQqpePhlbQw9cURA9OjrKjV
+hdEmTDBoxzWGtuBCiaw0gt3OnamUTaAFe5nNlYic4gAm1QCgEuXCBmSIsBtCPqvCsUqpLzVyqk2r
+l8i1neY+40NJBvatVAq6+K59q2c/qLoSeFw5NKPsBVpYcD/lF0YVDZz5kG0iSqgWhnAh1tHV2BM1
+KGWHY9W5y+K5LL+R4PP1JuAheAAy0YtjEleA16oql3zy7mJpZgtholiFbfdwXVnhahhOdVeYJZTe
+i5MHOaVQnoy3SEMnqMhBNJfJzQaPH/uKLsW0XzmETjoi8c9Om8HLsQoT0vSmi9ordHaoqduyCbW2
+nR0nqND2K2j6cSEoVXlzLJoI0FztXIM+K34biDQUgqG5VE7ntj3oWpO1UEOcFeb+6GYPS6Dv75P9
+A+fcICeDqaLCxAkhV0NHNvANQld12nMcVThwC7LfTAprdVAGSYbRwoQFsmd/j3SvdPXBX1lSIGla
+OxzUFfh4UCGFCvwhzkPEE3Khsh3NtSYqFWPUnMVMxhqU/KrLbFSUftYqFwi7Z2cloZ3iUVRK+p1d
+G4OFIUqFmZkkYc5+kCoV6o+NzLWKmDFL6vi642dPhFaZRK0RXaIq5Uy2CPgokVcRfVxugn0OXGG+
+CwIKNVporPaK1JXCHBxhN1LTaQW0aSggLWdzvrpGMgloGobiYx7UnURd5AIYSVIERw/OagSEy3xZ
+VUGhnCuK1xqNxrCYACPTBf7wfLBojBSMjJxCSDFE5TxqO5NFHJxR1P+oQFXm9k0eLjiXlYEpzyd2
+egp2ILhWJFuVlRKHOjD+A7YPoDWhbqImcS4zjVNFUpIlgCW4EDwkgKdwYVCaJealmVs0YbQnoten
+TdjV7Zh2Gxd6TfS6N+SxH7150f8WYkYB9m07sJZbjUIasTHTt8GnSgJSmJ3JnEStQLOl0IUOPg5Y
+WA1MAeJnySI2gqDzyvrB/ZcJHgJIUwwaQTYgZkhoCjlVMvCwMLDxUJiTTavkYoH6rcankPlSYYQf
+SKcyldVtadX71i6GVAQdFkONwg4n2IHJDfoX3zvvtqIayeRShS3uhYBK2IqaXoV6j8BuJIW+AREN
+NM74NJKUJItnG/rtbFGr5I3NUpeSdTEqyR4TEqjTPriyBbWfiW4tgBVRfY1E5+SsUPVMicOsOAOy
+dzRqhYErHXgRiRILeA1aoeTD1bz/wtcYnK7uobGrOwl7c6GDXapxHlI37tqmOGvoSZTapj7nyVFH
+7ByMps4V6rOpmiy3QAas+OgaI30l359EvaiJVJVO8UrcGVQBFA/FP2rQwpHcQWb5Z8xg2yPWIzpa
+p6RVJps4diEZdts0ymBaC4lP9tsMbBZUqCOJnbnok1d9zFYlTbiQAwB5KjepU2o9poDU+e3At+eT
+x2ztQgq4Wem7SUFOBHX+Ir0dNGpR8Rk7jvHrdGmscM6gQ75BYaxwRQ1+YR7chFX41tSYUgBcvYgi
+CDCKCiFr7UtfKFWon5UZcj3o2FSGi+190W1ylIAF15fiHKUJonzyRVBUy5KdhVU8ymXmyVAasEKI
+FHAkUhCFaReFHrUPWBgdMGrSAklmtkpyZmkZCQ5yWmCEd75jVv5aF8WUzI3Cj6hq9SNh6TvJoFAw
+D9lXrjNAivI3JXCDyR7e4vxB9pzXrP5Ba3XA+qAaELW1oHzYGYpT++SxoDlgGKuq0vXQmq1xrKEl
+VciG0YQiC6oK3B+oiCEq/6DvfFmhG3nmz6YycSqQ/yi1uOfgyOWlUJngrGldyoPhJA==
+
+
+ iEBEVwDlKu9qW0QCGPVgojW6U3k5R0qhqmIRI1YLy091MSnEWoSXmO4Q92MDMktw6LQtiI6p0DV6
+NXvcpZB58GTIdRaArmxihEy1X5kt3UsFHZi/ukexXzOfFWrX6KPn9aAQCOm87oGMuSkqBEdIb7Eu
+AFUVmL4rywXkwohtmjFRaAITgRF9c4u2a726LUEpFYJSVdWDC9HX3CRYHW1ZLtHgShWoi4quglFD
+cb0Je00D80l3ulp35s50/OgIEgBNAb9hC85A+UzZma1Mi9H42Cplr2vFRyBfv9K/VI14KtECSxrp
+CtA2DrxUgbXdhTpRdJ+9uo54udEcIW6C0juFVoDUPFU3ktcghBFNOnpkUR/e9JjQTuTfGQ0cva37
+ETuWwoQninJEN0Om0IT/NcjXrYWK7wySBz63uCdYrjVzc7Qf82dkqBdzJujHWIskgVXk70vRG/Sh
+64pChRFlNVYUzQXG4uHbqI8+KQK0FqNevrliyROsHRUW4Bk6zFVOv1AWNpwoKip4wVONNHLNS+Tv
+PICCuRYUHhVWxccyMvCJGVkNPdnJl0gt2vzqWrNX4mwHtjudHpkakwuLDc01xSQdvFk9tVQCj+Qp
+XXXqAK9rYzNUZXHyFadCnJykWSq92vThiasNMVzVrJCuVcrJyJ6+ohc1EC0qkN6acR7hFh3zHMYD
+yfrOGeK6FFPViYR1Rg+yEqMchTXESwDYutbHZ5JjycholdU9Y+C6gLWPY4wZXqfEF7xSGjiuE9gp
+nS1CB5wfnLexF6RiBs4GBMfeuHtqV+tZnbVxpFBZgqgwZWU/QlXGSts23HUHGQ26YQa7qZwIWGEz
+tBNHzyqD3fAbnRkG/Qrf6FdixJ+dGFe6cyObtNJHbQw8Mh0IVBI1TKRxKV6Qu1r5ONVhL8Q88v1q
+dgmaYN35UFhwYhiqkErZRDSbwslymtcuFampvFAU53UxCdaSK4riVncHb8wETPdZ6XQyHuEaQVh6
+GIXmLhOUYB1RM5AK1QdJhQL660TbKeCLCTZuTsPQh984o9Tw6tELxnFISYciBcbNutwE7Zge93PG
+JdqIsht9FjGAVCQJ1qYKBfyCGY3VkFRRFC0UMgb2YWSyjwCDLEcCuLxGBKUOFvziznXgyy2aVjgb
+BWFiwhMCxrCT2Fx+yF1VowKaXrXFsTSkMD+/kgh9aj0R6m6rXi03jnSXC/MNvTMd6YyfY+poxRm2
+yO2wirZTnCGTeWdhNNUNJOWMrrFUa2c3ri0beGjVG/Ex0rIhcRh4S6aKihiLigIqLvExHAaw+thC
+0AVTgxKEHbONFybqyE3Lfa4S9zSPpHOGEpAKObl18uXmB6L5NYOKtimebYWTGlWAuIwZETyudlgV
+hm76hw/RZEtGXylhHcdZpqxCJNGlokJWizj2mIoPJo+8usEXpqxLkLJ1ahlmVlRdM6IDsWshsk1U
+lWxRMD9mfllMWuta5XMrIJFMfOugelvExpgoV7CFzsDbVNg2xhan51WyWD2IDBlVlS1WXXdd1MMU
+kXqwA5AzchUV0YGGSLjEutwA7XWS3J1E0nwW00Hw/syFRqZuhrdL4LnnJljvB6rDtZitgYg3vBJC
+8sloFlOvSohdGBIN3EEVnZFhRTWxOT7twYErGnqdqIdpIbtMcxM+gSEARCCcYCHzwMIaVDg4G2lh
+WyyCVFF1qGjypKeKUGnb7OBABacxaWJ7p0zYFAB1ldKzqSJlx1mKUTmt6rz4s1J5VGYufiSzhLmj
+afUFInvFq7XCzXLaCJogeHKtfJpdqkBAMthjNM8XlD/E9tIgI5X5CNAEicy4hKlb45QkCzozyqUK
+hq3gn2o2l/IrdAolE3biKhZzPGp5kny+XDGY8q1U1NipO3XT15IvEdQ0bUlNUgqzF5srlEEhGWGR
+U304LiR9Z3z65EQHJbSmwZCRI5leTCGRapPhTGiWCbNg3iXVPeexRHUONDbHCOQTQessYQHmunZ1
+VxyKWFxLKtSNTk4ZjpFSIdgHyfcShYmiRfqwOYK6oE0wIy68Q7U20SokgQrZNS6cgKEtmqiqoK/W
+aLhq1TpgTtDs7REHI3+y5TA6eray6ubUMoECc6EGrEcX7nH7YkiVPixatrEJsQceLOAgyMy8F8kI
+mlxSgRl+gM7n41YqCK+9a+2ow6F5ebIx2x6UVAcucCiwc2HVjr86Yn2qumRXN2jbpiQtVbXH2pQq
+614r0CmpwHm903w+Iaiugt0Q6cm8JYXeNxaqrgJ9dbacma4K210CrY+BOV026byS4wvjZmxDsTRo
+UJ/1kOW06YPRr0ZJ6ZwlJEQNyADZeZK3GPDCNhrgpiWO06mE3aBtwEKkQm2uKY99dDU2qSxhH5Xe
+Wyg7Hdi3NKxMK2fjumKRdGLH8upZgz5LKaFcj3/LV1F5gHnpKrbaKugjUpAW06MJ3oZMC5nzsq93
+YNelPJC8SApenz9IWs2z7SDmvnHL54pk33UBs2OGd+cx0TIqjSoEQclfU2n91pqwzUtPKIxcMrkb
+qwh1WeGSfg9KAA8rEFszndQ7iJLz2Uq+B+QZJg3E8MB8XZ7kxSjiBavAHnVJ3Xg1TFd4CbDtNBrP
+GVk3XoZzgjMmvJo7fJhCJMrBszCoYIee9odYwztYWAb7cMrcJqtai6wQiQjwA4hdCblwLIPDqxDw
+EuTYgxlikL3aiFVbIR7LkAtBPvLrrgyggR06S7US5KJB10o0KlEWxAh+6hoXB1fDZs1ZTMmDFpgj
+n3OtE00DNmxGtuYsIY2LkSGbeulDTdUoSxB/KGVFXY2vEEkqFm0uyyFNbOSErNomYT4qROYIYVmE
+A9VDjAVNuMzSodqOLQM79Ks2afYIkCgVtl2Om5MOjte2WZxUCitx35HFriyqETSARIYc23IueAG7
+MiW5w9VeH1MowZGa0upUbKoARwo7gKssU5V6VsuqnuMHNDjxAZArJhQ4ohoZonQay++dM2e1MKEQ
+rPuVpK7lyaDwBDcEIWhwRCR+d5GCtQqVua4EhzgrCQ2D7S9QdUy26SjNDW6aQJHhVL42K8mrS86F
+PuqYs8XVEDZobYLmIRdmlgvxgDolB8lolgD9BlDUtpRQqnsocqTaVtWEmfO/UGqnCv3UO/aET+Ty
+6NRgKn19RNCcwBlvLzMJ+lZs1Q5c+LUXnZGmF5kiYgnfqrXLxPj5JVQuaSuMKi5Au5Us9rXlklE8
+TXafWuS9ZinkBQxr/A1kVEMXO2WbLjkBCPIShdWMVixfgkpSEIuxMZOTeOhdVWH3lA0g0T4DwXNG
+wAMxSNwBUXUe+Ig3UVTUVmE438HBtVLDhYAXQPuze0eJvKqYcarE/ywkgsz4q+xQLSDhHLluwBTd
+dQ147mkwGdSo4sZOl+m8tbjIThuXtzoqbEyr3nQ3lXmA1HKyz1Sy70R4pct4SalQAVHXieGbK6pK
+DJYOTHbTlCkpr1M163xLpaOhiqYp90mhMqHyrkCDMweHVlhuHjG0gXK3wswiN4BXirdKCBsxaVXI
+mCtawOhaASmTb8PV4OpXJzJ3uwhF0+bs1LYE7xSdEL14SqocludkFfW1lIwc5L0EO55lsjPMNxaL
+hhQKxxXvQNlHQXuGThuvOzCXpUqXOk5zF/tKA+pOgyJogeQ5vPaND27ZIgO7/kjFYGv2RYV6vNpe
+M+rBi0kdTwXxAFeoOyIIv1n2+XUtvFJDFZVIyzlFnBcVNZgIA0gPK8QlWGQjWaGqI3j5xHJvookW
+hPw1lRWub0OXFXpYYXclPB52MAwqOM5WXVc+9U5p/B3IOVgQoW7VyGdW1/n5VXRwPjK5S/GOKkgX
+tdm06ZhrTg0zXqtnMW40eZD8G2aTPqCAlYQCesVy78CRzLkQuuyqndBZgtWoATyK1iJXGjjiGHUw
+ZRWhhlFj3G2QaeJCVb5tazvJDWXZUE5Fh32a3nW271Ta3uXMKrqh7dM9dBr1RNbxIKImuRlNQmT9
+jXysYNVfHOsMQ2pgm+FCn9BEdnrQc+lq3BQJgTXAmNwTM5qUuIUH40q7iynTpCLaExwcjHDDYENX
+aKUz0e/cBKxNS4yuwaDiQj4JjLxHvGqZMYOproOpqvyOG3MoG+KKwYAtnmrVOZBHNhKN4sJUF5NR
+IQsulExXtcPcKTixlJpGPpqihaqG/cdO6Wy9tDWMMQa0Fral6gBQ3LK8vsF041CQFoZGn4v6pkef
+R/GsWKzGyOxdZ8EHltHp9CONRWoUi+a06hi2WwQ9J7C7srOs7KD6Eo2gkDJcU5gauULD0WykefVX
+wtnYMu2+elL5YJ+tZZcqdaA1SEZPGgxl9xKkrpNql8rZsFhYEgB/tE4q5Qc1EaMKldUholBTp2n5
+pdPT3OLVOF1+e2ZhAhUVHT59Y800EMSz5SRporX0OVNFtY0mVPDJWsP+PKvEL5AEJ6PHFXtIVSoz
+KoT7kR8eMMV0/nF4ohDJgliy+KYzw0inEtTsTPUy3WlmCAidQJfKFUUmUlOpj4EXp9wElGZStrMd
+IOuuNQl3KkwQUOAwYwY2D5Z1rQhloqblVLMoYMFs4ZDPQhV18S0xohoVNAdzhQY+XZuPqR48eq4g
+9/P23XVCYJextoODbisVVQW0t+ZOuy5/pA5pYBCDzAMdrK06njo5oMjZ76lddrCk2WsshS6UiUq5
+Au5vLowNCkOTC02vIkOT5FXqsYDd0IUZrDKZ6gTSQgEbUSHFMubnqx3ErUpuidQh8usSgkjTFg4t
+Tv1VXrg22S6gNTpv5Yrko4rMyCKOQGblDjbt+dlxIYOR81beCZyHWcgBEJdoLJUZo5UDNJcmQ6rL
+NJFO6CRYBShiWxl8AB5d7pBHNDSOyTxI+qA7HNy5Szk2HKLt5E0C/BS7YjT6IFbjEYO46Z1pCTyq
+EzlmGfBanAZ8bDAAwEgvxoe1fWFmca52y75q2hGnigrpYY1oKBdKngSjWSJMlU5oXVi6tv9uag8/
+OL7UstD2ZSqUrb2W0N/c6bo3lMOTmNCZF0kvPQLFAKWVt+BQ19xWUmxSC6WyvYjoKWSkNF3q7Gls
+KpPpAcO9XBx0DsAH3FTIF/JqEExaC0nePVQGpFCpXOgcqS7qJoLMhwqbTCrTRFNrCLaoEPGB0DL7
+bFEwoVfSr6nOXhjixm7grlIUDzOddOImrg25zPuFV1bgntOyUi8gsdQHGIdJyVLoahbtmyWHAwf5
+P2alxMGVwH/YD5PSFhK7QVAUgx7E6MJG8gOc6zMyOuHq65uXpAFYqS8FxH/kWXMSGdJsnGxIDJ6Y
+Tidf+9JzVwvVqFOEe65gbJ3MTNGyQoXykI6pkORYlnduYe/4EHWCh1CDS1Ul3DnXovBqDj7/6LQ3
+xphAdI+VupIQ2Mzcr3Rl5sJhl3qn9zPbgXxt0LkCI/pLfb2K53K1SbCSV75DIade65XqpSEXSVue
+EjoHYnxLX8m9aAA+lcRDp0sfb7n5UfC9uaLI3G4bpHsQEX4BG6eHKulIVJFRVMJZnQ==
+
+
+ OlQ09l4S7ssCjfPt6laJu1OPJIE08lKNcmQgxoQgoDEet0j9d03PEdeaGglVRN/Y1Z1GJ83gbIWW
+UAp9znGmvazFW+AFTXYPH2v1YZvuWxCIAO8H5bLCCcaIwyiim3WpotezgUPqK+EaxZNQl6FI5k4O
+Emor4h6EF2WYBK0E3nyp/TV6NPpu1Dcc7ekyKk2jJ7qhNehSEGoHdiwlSNy1AbGHqnB809UOJ8Em
+ixLGDkGbQmOzaSpIT4hemDTB+uoaMg1BkQaULOCACMGu7JQ2lj3bOf7MjvMuqtAH1nHKhmskRuvl
+7cnjGsyAKFdyYjO2glbp7njNVn8/rfod1B3x2gebhp5zve8T2ETjZzLFeS6ULXmosKrLK4smJNMn
+W1xUZmrLKkbDhcJlRoWF8dxQNKdV4wdE8cmpnAyLk4DCrVX+JHoUDFHKG1JMEkBw8t3qt8maPvyI
+Q4MX0kWJHjSEmcvv1Bs8LxlnHG1vNWLjoersC+hPzj8c4xUAry03BOrJqMa6xo6ih1kWw/FYhZtM
+wgq9w0Yi+Oh6I+ia1tSm1R7U2DFxGpmqnVMdMRZ3KPzQMaiF7LAbVzi++EwOy9kEqiDIgPy59kWE
+KqmEHb6pIFhZoeaO9kSVUo1gEU0/J112VpYRrHISUgBSgzWYMgFhx142Ze6unQnkSWqNr0xIgJ5w
+1AZKGqHO8hFJwkrDrIxPcjpsJMLTXLGTSRm/pnC/+uU6EBcwJ3MnLyqJJSjvOQdc2CswaTMDcpNt
+FlmqsbszDC4BMt7UUR9yk4OvXCEIE3pE4KFuBBnAhQmikG0V9OGnDERhOcRGn31TSDgKq5jXrDAp
+VFIg3yM+4AQQe/AekkxJFKpkBqhkmWN2cZ1DdebZKDJOfCgjj5yeKZEmmreV4s4T8u/pIB1aILiH
+vrLhrYWfgbiEvIZZp4oKj36VUBSqwCg462hiTFPKayDPuMYo6lwoWCFW2sswVRa61AnogGNX1iRv
+olCNPVsumpt/13V2ZQSivzHZyKZprCxg3mT7l4H0ahwZB4Pg2uuA1cQiE1Wj5k8I5jsWdchGQVAM
+S5ylwSqBZCSAPzmgoFiJruwEnVFhx7emjsCYwwouJVBx0GbrtWecm5x7MVgN1OIy6S9yYtY6FwzI
+TOQWrQ6Eaf/yi9DZTm4kTFTXQpY1VRHJCkPTZ/yJurf4E/G5cok7cZtO5YoAacgSSUUVvlYtMswi
+VgiCeB57mebb1VVqtMJQYB14CQiorYsCEaurtIKTXQFotlb3RapwlhvK4pVNpZ4WlyFIrJgnxPVO
+Q01SWNfwqmgOHBVCg7kT7gvcM4G0muPBqplHqXtJv+vaJyCH9dxPYyF6kxL/hsM6YPL8yDpdzhzU
+BB0g7INCdu3lJpR8lfQPoSyZRe4K/LIz+ddKNJHn5iZyRZtvmDUzMzSvuLIx7pny6gipPi6T5SGC
+gp5BkRIrIwk0gkeiBaZy4WK2aies2HvZz2JxYmJAvgq7RIEyv0Rh3cgkLSkKGKlYVVDkbIs5Y9wF
+vncW5ooKGl7I9SflNAcZMrZKpLAS6903ckbATVn2iW+aSpYKQlkqObhXfqNc0YhvlpqScwkBNZUm
+j/CdwJsShqnTwlAsDj6CoIOSECBlScmarXYRqq61gNJ5LDz/S7Bop8+KD3QTuaKvQdqrwLPKZKtS
+ASFUBH65UJQWYwFGHVjCWlbGzvndispNJUffCatoBHrgNdCTK2A2dIWeqfj+6HtSXDKZFR5a0G3B
+mUAvQeiUvfFnc6Hg7XwFA5ELPeRIOVI915qoU1D5F6XupUJlCfCWYslKqZVZLlUdiiY0ZYvzE8yt
+w810DXZy5yEc6IXSgSVtVZy2LqTfQ5nx0MCFyx+ivhbKmKvVjAOKwFP4BoLInEkxaeuh0kvSh9IK
+FsNbEinbo7rCtUB4kB1OLNJ5GR+8QLUoOGFAF+A6qWXDziisyq1q5LBfKjehrNpewWl5xYeSVeAD
+QVEeYNwgs5D2Dd/qozaUt4Um2U4tMoY6aBrQDNJkT96SbEkDmJosCrGFmjJTljeT0Kn4lmInaKI3
+YLGDCeCV2LUVzaNUFyasLhShgE1ren0rdMrIzfIioka9yYzfHWewyO6ash3uTQ2YnFdqR+dCU3FF
+E6iobGFidKnHk9cNjWE8MBR9jh5yRcR8kQwlBp3iUKMpQdzZVqc307bNLUbR6EGd5UInxlVAeMPD
+hqR9gjL/5tvVsYZwuOsKvI0HV4QX4ngtc9jgFYPQsY8qqbHShKboYEhJL24yKzpXqLaKExuzqPD4
+jYJHVSoq7QtnH2mhGtZODucoFBEvJ/tuftxecMZkfEV7uE5YAmi61Q2EVFvhZyDjKxRP3JmulBNK
+wwmrUOEiz/6QonxwltR78tIu5nHbtToWgMI50RumZ92WKd2ItanQYM7cFsAovx1ab4qKDqE1rz5J
+LkT8gwN9W9rVra2TqaTr6BR3aRUvWdhaYVX2XZM1eZ3MVLZdh2xHmuYFyrfrDIoUBPEvB49adGRo
+7ZAAN+OhPCidXZEQnYg2SAkrsMF6AB2JY6izNUeTsolDvM7URbwiyvfalnl5gyNPJ+sAq55IodKT
+kplSsB9Riw3OlkmyMME8rU9JVijmUMfWVTobfGda9N5S0Ykt23Tr29ZDzH7ozDKMyeLElhh082X2
+pymrcB1sbXaXFEZahz3cFuSK5E6wK1S2sTuNoVWlMMCYmxa5w2R/RRyEQjQEkeTgdFhKsAUSCt7O
+yrFBGlFlR3UOxeYb68GE/VClfekqrNgFyIEN2w7q25yPlisYfyhGS2kMBluNqhIwzlavC2qXM5NG
+rqhjrUeEgsqdT0xdp8cE/kT1KQgDHc1SbLMVzmyscV+nwmZTigMPfWi2+vQIGiHLwNahcvdHsQ+z
+oamuBDZVYZVWNuPNQqHCVo1dn6ljOJ8q6TbphWuI7bLYagshq0yrehMVdlU5CBEjJMtNchB5yCIW
+RUY3jmZV0WwhR0KPMh/NlMuC30jT6VOzNK0ADgJKL2tTVTShucsyIq/LR5fMPq8bZHp1wt5EI2qL
+dDNfHAbZMYtCMX9jPgv48uBZ9sIjrYSPwGpve1MyraBtyYUScaQZSoGISWsCMs6VkK/M0gNip6tr
+LUTn/IxjBdxG2+Q3UoNWkrA58EskEyF2oEhl01cyRXjXzn4rqhCmSK+ZDhNFBdwmSkPAJqOH24Rf
+1XxbkZ0ItLBivFnWFZpWSAAXCgGXVw2c0tyubRdVE5XMbYzcDiqUfmZC9LUrLXb1oHFuM1qo1Rz2
+xnvjW5Ahew0OFS20cNQr8oPvJ6BmfvwpHwS6Cnt70UBQJ4orqeHlAdVmqenMJwkVmDYpn2lUxIlN
+tfJI4x0cXIoB5pRKIX10Amkeu3JPFss60wfB9KAQ2FR+3wG4nBJeTfNJYwPKQTgxXVMl9YQDk/GQ
+n44hhR3eXk4M5IoaDwMp7c6SWb0DxIdtPJcwhzLp05ib9nuUEtBPHAjKPeIUv2Eb1Tv7YLoKpnXQ
+tdUJfWZhddoj53maBwVlGGcmhTP2UrbQo7dCc5H6VCrsNU1QA7UB9ZPxnLLdHvBchkY42Rs+I9N4
+uWH8Th5+aCr1EnRIcXB2dorGW1AUDp20ehVtxKsLJoZu7EAOCQ5UmAmjRTKw1v2UoXdSmDdZzaYf
+M5C5xfQ2DRDajij0mt3DKpYKp57adh3sDXTRZ4WfqpecQRV6Cqug2M6FCg2qAJ3hQnGNw8uTbcZO
+0qJpmwZ3RIdsRBp67sXQQP6wc5xt8xY5XmwXZcVbSZthpEGdRRo90AdNfmkx6YWFkhG/CpUQV8bd
+nH3Raj5ylPMgFXZkcmph1XmkY/OnIQCmzLsg/sag8WLN9GHnVV1pvNhppApGnmCN+wYWKiDC3cHd
+3Eo+qIMnSmUwUJgdk61lqdjVtbjIe83msqHtJ+cPOHGgZzcjs75JIjP8WVFplOlpMEuVdFlyqewF
+4gsD3rju9AA3S/JZojwijW/xITIIiLlix1J5Rg2Vlhf6DVTRRIWa8bPPFY5YyLhCA44iJCzNR0vx
+ZLaCWvGAQzK2QtZVdxlsRZGnutGcQ0ClRifuSLCRXaNe4dl1Wx5HBCHIyBpnFpNPXrFy8D9xFK+u
+C7xCNimTy8mUCScaMc9qiVi3KOzqiHzM1BXzbzBFFQuBMy15y61nMDOHh1EsXg54WXqQ/GiwRBPy
+SjhPqtkQNo6aj8dlklzImUx1ra+/kKtgjrVWEkkrDl3Mkvhb22oZzjWjffjDiAxG+qspq1GKqZGK
+aEoxjeGKc+Imoe0aREtq3/ZQasLGTRWZvICz8UWRls4BmieTiGGiUQAolOBTDTpQCvMWHJFU4ZMC
+2oq8XSpXiF9f+2hQAY6exhC2JE3qQXUBJGqKsisLcC+krIMXLXOqtvSMFMFqx4WicJNM3oexfzl7
+JtGMR2TetSpPU1lydyOsMFKolPbMqxFzQoIpGNEkcEmVq6D+zCCGGk1kAEbJtE4VmsBEatsxZ6BW
+xY5YN8lyADSOUMNjwy9dOHHJAV0mbdAUcV1RMTzJQAo6OvNGAHCJToRRky/Y2J/KFdEAh+YR5HJx
+IbpUEmlwhaKrkol4F4WNaQhzE4jlc3Qkv34vgT6qkBCEdMSurnMTQtBOhZmxhSqCB3YR3DxcOFpk
+s5gLywbqdvRqzQtrjGeNCoWKFBiQudZE2+IIBkRUSgVISW1SJuSvEWNlxns0QXRkXj1GmBH02VRo
+N8mZeMwLfBmmECk+SWKTV4zElFX4CgrloAFlfSjxpHRZxYbgr3JlS6iR/AAJVyJXa7xGCmtJ9ubz
+Yo3C0CQVbQwZLJiYdqmRcjidE8nKRG3BodkIZVc+e2cAfCLET6sVanex2l2SQGoytgXSt9SzAhG+
+ZBAxaTfFiOOnKpGSaJRmzjZq8tC9VCnLVT2590SwT0kErrKAc6aiyxot1ESw7OOu+CIo6uYAF4Wu
+FuWLBCsMKFRuXWoiNRk3mcCY6IwZmvQyWdyET8ZR51eToIfNx4+qfBSaFkkHBc0UpYU2QH4Q4uup
+xjk5aIyieKciMA+x3QmbLpr/HJyxPNLkiiIc6YRrZeykHV3NauQ2sf6oWfhUHmUD7XrZXlThE36B
+pGom8rsTHWaCt4gflwXAOkxYII9pnlSN+vhSqd+dLKHfwWtPVysNsBOtG0zBGrwMOUDGcqcB24u4
+4Vn7vJbVP/O4kAx5BBCCj0voAzPWRf2UlEuDpGIl9ZC/0IQ9WRyKrQTZ83IIx19neXiJJdyjPhy0
+2ggtFxeWCtCpsS+3MwVoKkxJ21Xuhwb7vNesjLyiqFoqLUqauELKkSY/C0lMuVLfGlsSZROQ8VSu
+MS6MtfY4KnxsZAqNX07zUkpxDwcaAIKTThUVVYsKB0FeFYDgrzSll/x0kwUNqaKxi9Veoxh7bcqc
+FSgTCpfdmN4N5TE17DXRMxyvoIVUqoAShIVhppSl1LXFbagwwPNGR0PCdGLu0StulA==
+
+
+ EUVRBmzheQY6t0UWRtREQwLvl020jWwtDLdW2Q9JexDGUicg/VmSpKOZxPqx4ZjlJKFeENtFXgYj
+3+Vs5yVYJIVg2HRZFoFlgTopLDkxvGYkSu+ajM5PrRRaepwH1w3xdpTpEGAP5ZEnyxGoEgoVhsrd
+5aQMKmSHRB4gp89wBWMdcAYAwSpVKG8wPTxxiteURpGMW4fZ7mtoWuGrSbrb1SwxajlgrI7MA4QK
+22AaxWBJ0cTiMNfmV9ScdScouwmr0PCaK1QGycGC7a5GftnIFM2nQpqSA7tW8zTKBA6uAN0IlHG4
+MAQUNmHmaBONZWhKRRpz9dgmQnnlZNHE+BuOa7c3kOEwKF+SnH5pPGOLsSZvFZpIQYUBhRS72LLo
+U1InD4vAT+QKCWE5JUREBcG+nebn8cFeTTpxgRAlFzRqKa+JKSdZGzCUHB0SpaEKE6qq9XBIEw/i
+ysRAkTAbC30KPjpxpLGmS6JloTghrYymWMIDrOz51tO9UFvUlPl+qLBpQfbm8nLCV1dGD+dtWiU8
+/So//d67ehlmeUv66Fn0NhTJSMpQSyqAKkffKQJfFYpMLlBxT7Sc1CXnqaYreksfEIGboIXqgqFC
+8QOxXV9QbxDvlvDIU6wFqRctbF9fm5wyYaoD4oKsP4WlqqzoSau0YK0jz4TRWAOqEUxLnjKeHBDm
+kZLHi94lZLzaABtyIpVoeC2UhGyOUufMEpM0Yo+rda2Gmh+hqlQxlzyKAdYsjrVEoSahf1IkL8xn
+yunzJg0KLoOEiRQ0oiRfSdcB08FmSt4IWyGICd7S5nh3bBVC0kXLzJRkLSpkv9Vc64VKlTAcrcdE
+UXVQWq18V2Yu1nL44ArzKWh4hgujJb5GKOOWMt60tUiCFirkQblkPcmkcuL5FOXbNtOhtAAW0dUJ
+wqNeEg3ofAA1tw4E9xQzoGThufmzirAfSwoyqqiTHmx5K8sVsYVliLw7WtGEDI2+DLhYWkjfkS1N
+HGS52+oyoJBlZrHj9V7Oq5g3KhokNnpx+GPvngTUWnPiMRtYrcY7p49lViBVTKfDSe1B/IFgWgvM
+s9BpBgwk04gzzaSCLlpJWij4J1NCxTBxUdPgeJC3jNay9UzIuI1Ao0DLWRrAXAjCgpAHr04iEh5C
+lncC4iAAfTy6aI6cCslgdFEl2jiElBVONdU4ZDpKtgZb/dSQGx7gLcLnN9dW5lBBtQgEKp3qNEuz
+nemeShiHFW0oDlusDrKEBssuo5zrCgLZbeVBcwSNCV1G8t7KuXSyE9DVE8UzhGoePKdUKFsBFSrr
+N+dtQ2iJJeQLC1ySu0IQRIKuAXIGpbGANmbkKef4qvSk0y+NbfapoqItK7Q3Hl4o5gHXQlntOAsl
+lGyPoa3hs1LfEtPgdNjwQLdJ9I8tDpJVPmG2TbF0GBMsraToM/tCc452refR1lJGaaWLHU7QFYxt
+9VJSC8XBnheHxk6/bf6eiAgFnhY2xnIF4zOkh1gzCRUc1K1RkhBUqSzME60RkVTflSt3FFI1LrQ1
+vvL2OIo0Xt60YofnVJw1Ehhf+cmWdKhN47TbPZqdBjKXklPUY+jEAzBlKq2IMWCtrsqWnACZaC8o
+RVtruNp5k6hLXt5O1EqoAhq5NfDewZmwMXMyQr+d94G8Ugo/lVxd5OlThW1jveIKW2koedkUMUR7
+WwjGVOIr7JkgIaNCF7B793oibE283ze2witdQmkZ1MBaBUVq5CZSF80U6dEODw6QHcwcY2Jo8fBc
+qox2uf95j7d230v/XHOdPZauu2hy6aLdlizYY9+Za/FSvea8JUtnrr7OPO9mTu42tftuy5bsOHPP
+nRfsvnDm1G47Lvz3mWsMrnr/4H+D/9/qfYP/8LV+0wVLly7cY8lHli1dvGjJwvV322Oz3fdYsO/C
+PYrr7ebU9nbrLdlxs32ndthtsf57zsKdFi3RktU3Wbj3TPn7zH+f4WauM/jfVnvPWDb44yOD/9H/
++Zm7zqD/yr+22nfwj40Gf9llULT3zDhz45lbb+Nm7ki/97EZg8dSexh+TvN+p7RYE3qYW1FW9yYJ
+gJVDAUx9NZ+uJUet8xoFYollKcwOPDYBe4XkSJWdtF8cVVpQnJCij1rlMJsDLTAK+fcpkqW6fFUZ
+klMmutxoUVbev1cMU4oKKxheYFdIOVuok8P/3Bm6yHVQ42HZ3YkZsiBqDks0/xQ5JBxbsvTkox5R
+quLf3CWKone855SXJcDjivaIegxK3nxr6hHDsUWhFh2dQLEQhOdBcaGE0fLw+4X2qMpiPFXGhKpD
+3R4/gyzEL1i+Kk7rkX2pvLaTUFGv0VzWu78V52nFKZ8K9rcJyDmZNfBITkI3g2IWz3Ntb2JToeru
+4iPYS6/VtDOKgyiChRXl2r4jIxcKQyj7/fvFRBpSowEx9ZkisHK5B11XFKIBUDkX19KT80oXFOkl
+8mdIh9FM6eZY61QnjZJgkJoCND/kqEbOElDbE/VzFL9IA1YLARkIjq5OnTBVTQwVa1aQ3C3SdkDu
+uJSw+84Sli52/tYUmm9NPFWSj2oKnyvhPQNheHAolO+BHMkMtimv9ZKoLa2q2jU7IRk5kpSGiD9R
+YkXmZNN+f4viYnRkCSeWwK3ZFOWjtp6klDAjlGw2lRIEeyTpsi0kOZUcvOIjLi2rpHKRUvHqJrDa
+VlV/SvDKrC9JC/fSa4X5ZuhaAckWE60sLCZlLi49cdRqwnoPf+7o3jA54z9mTLM//tE72aKddl46
+c7OlC/aYZiNzg40szBx8/C93K6O5LOLO0YvIDG9lTJMTFWeiGbizmIIliQgXha+FqbR/tRcf9kSv
+bfIkNpJ0INM9BuQ02tUdGy+uG2k7X132ZLTfE4PHHMo9XA3eAItehWClv6KJ1b9VvppieJIZ0rsV
+k9+0Oq8hXTJ8dQTBUH8YdjV6Mtx2RK7k2H7T6MZOodVn0f5eD9byf5+55mZL91i0ZKeZq8+Zs87k
+5LKpj+22dAFdW5hNfuY6uw9e/sdmuMEKN3ODGQSHHBwl9ubvOoHlEV2f6he7WIowNG2nH08rZ/78
+vrWMl2OWwnC9K0VuLvlek0Uhbi+/b8U8QwISGqVRFlxX4t38MFHI3651tbw2Dyq3OuYBTM6Ys4N9
+WnN2Hjy+1bdYsmTB1MIdZ+60x4IdFy0cWLfe/ftMmJFe/+TLd5pBGSqDfYv/OQv/gO1C96DVbM7U
+jB0GM3fOnOlWia3+F5nYy9ieHry9wR/07nbifxfznRzOe6s3e+Q7zTiQrnWK5i3FGbjCa+YQmLn7
+hcoLxIUBhW2dQ8pJmJO4wp5zK8gSnuDgsqVCNTI4No8GWstOiyYMToW8+hfJM1ToK7inCzoHrkig
+FIgqYZNaS96sTUaXCoX/nUARsYBmtBA/IhhW1kaoUgQHgJDFMA+ZaIBSmnbTFi0ATtBkK5g+ZBlc
+EuCTFDZVq37DXly7tTx48jLWGAexq0hhCxZWCvcZfqbNyr9EvljD6QfPQuqMk0ndmlKIBNRWMnjQ
+BHFWtep6NLRSB2EY380ORkqr3Mkchm9KGmHlQaTTPQjJOoWIMuykMTUIhfHz+TOH2tjagBs7gIuc
+iIErPXdHPcFSJmurZZz8BgeJcQLTcRfk0HTcruH60yfcWppG8OJKyU004vEhH6fgloU5uFavPhtg
+UthFixaUrM4eqYvkigP/IbFBISvUBueta0F4A3ITtVAOBuVvksLkLIlUEr6FqpgnFnnyfCG5FMC/
+HCrxZkqhV1d8lXlziTe00SZ4quQmaslXDEDVUpmqKw3KdDsgpn7R1CAHbtkAORcZSRbymkCUoBpq
+iIb7oPC0CrPGHoiLaAE9nMNG2l8hQTZE5E2xTJWobIQoUjNoIgK4HuosVRXFCcOF4GsjBmF9c5QC
+GIsWUieuX9YUa/XirkvaAtgBmX1fXD+16BOgCQrVib+JckiM/3IwebiJxhCXmT4zsAe9cHEq/WVg
+YmBTwBIW+9AIQlYKoyzcoSmpvskVLND+0BhSiyJWYnaFRqa+mCWaxhYaCRcU0NXRq7ndNNJuFHWN
+kU4oZrDfY+Xe5LFV8N3B3aU+5txE07b6hBgrLF1Wd0LI0FOGQ4g9MOh17gOhFWFUQLGSHbRy+FYm
+amkVLyP1gM5Z4ylkQClZcwmFLcY27bOc5uqx7U7TC9pIUYFgNo9OnB4phxpN8omeRdMj40yyPYYE
+GgmOdTg0YQTMnSSkSmGxDbZIb6AKwNHokKiBlQRSQGL2TLKgJLE9EPwl14rTN2VxXmKoQmECSwFn
+j+m9mI0gN6HqsCGJTo3Y/7ldLJkcjPcobDJZMavvRB0gwgLE9iimERmVLuEcrixnQRUEcxNdiwdn
+VxOiCIWtKBq3oD7VXlS9XtS8c/PVHeLVysYVMnc6UVu6KuBmVaZ5HXNmQoUSweE3ckUepbUfhYmm
+35MoCuuj/Y7Av5SjjEW/7XlUgiYbfXpRNIT6V0ckx5dvJdoGOfQOaam2p4c3Tkxhvh2aGxT5dONm
+EgQle/OuFs2U/gxtxLwdns0NwER56hM4IQx/IyS+24z7ojjXp47974/o70QkrvhSyVPSjn7VRJXt
+q66/BpDapbiti9WCkBupDaNrCyk1uib1VyI63YrUX7Fmsd60G7PCTXf12Han6UWSs4D22WEgCuIu
+1m925fkxqz2L0zZtf2cQAfW2t4dIFmDXYccpBIM7i9w2xoROWYcCECh2Mko4C/Xotkf3c6np75GW
+QVbuptM/Tbo6Dl89Tbv4Roc7UfY44uKRsY15ErK0cEUKVoHEXJ/qCmW1laWEsjKHuVJbscliVE7o
+jtQ4apHA2erq1jOlmDHHtW3P8FJ6nq5nogkbEqyxbM9R+eBY0vaMP5Yy8873zESWMhOyiL5RKcxO
+DA7OJigVqhx6NlZZaUs4D/qmbccSUjH2DGFOcasQQlCTmZJQBzb3qIHNzJUdMAlwuRDSM6nhj1y4
+CnnafROf01sdsAt6IOhEiF3DEHp06JhxOWqzxUGDJa27qGcVCDKzoJBspXaA6Vi0sFGsRXHc4fQ9
+3fLscMQZgMICnY9RRDnqBOPVP3RRhRf+ND6iqfNIuQNbOcxFEOZGjfz6kuSXKxSk5xFJl0IAujTm
+LoXBCl1dNIERGmaVCjWen0+lVNgKTXz/DEsVOeitybQcTmj1yGzPh5gHo8aAinM0E5TauV1P3VQI
+qm47nwura60JGcVpvnNl1D9kalmvOCnQRFB6XW1YQ8ixoaKxAKdwhbxEIbBMdUEM0GDlzx6MTrjz
++76OrJ8+5Blh5l9uwLwoQgbcaaH6W5jAuJG8rJ53hirAZW6+HGY2VjlH8/oI3XEccRExVZygoLI/
+iQvVR2yeJ+ZFztwB2U/FFQJBzl4tpkAWFbDs/xIW5QiezYL81CVBD5W+NS6s4LFTLxwXalHhsePi
+Fh47W5ZaQYyVfkAu9CA/KryGUtHBI4nFUZW5S2/k0JXku9QpMS5yMNx2EAxnWQESXg==
+
+
+ D3aJfFMKnHVhqN9DJHl5lD6zP+Tn4YVIunx2ngExxaPTx+xtd8zvgzhl7X3g7bnZ2aQtX7Wbje0u
+zwkHQHcxg4hol9LKikmoEYzOkv/zzCRCcqXlzNOYiHazCksx6SmF2uMh6NdBfOTJeqbfErFtx1BO
+Y/3ySCzKocdBwzCgzs0fM6dMxfJj1k+f+oLFvAFzqSt4FG2dod+hXIa8rA3WSc0Cta2qgZMSYhm9
+lRGp0LkJXUdpUcaYbcWl1Rsd09WZlv9yGLaWkzqKRr3zos+aMNXQFkGbmy8W+Fq1jlnQRcl28tZD
+u6mLKNTdi1SEXbEs1SZ7FvM6WoOtklXfHDZA3XHJLPBtb8OFwicombn3jd5PCSWoD7VobhDVVdPf
+sr32gQGVuut7p+JUjF5Xw8FDrJtVIgrDQWi0SBwhjjYQbGTjB2E2Bl9cNzN71gg1ChJ5s10g7Zqb
+UEuHrDTdIcwkcsoe2zOgoNaZbTA1t1iCFDTqapexiq+HXaZWHGV0pUxdlk0+KNn2bEPKugHbpFmS
+LA2feVWz3clACAchX7VQmYnTgYRB7VnE5nITav1SZgVsPrOT2Wyv0YRa1WTk05rXs6rjyNWDdquR
+dqEbN9ILkYsa6vOY0VVioo0+C3pyfvTJjX3GesDFG5lrTQxVTOTnrDFWL3ubFIZQI5Wqs7NLFbWM
+x1EcXgJkrkCiy4eXRp+oTeRpH7MddZzLH5kdipiVyjhb9QTlNB04N6HnLTrROaND1ZOZc3lxtHMc
+UfLUoVQEqLukSkJgZOfzYa3KXq0zLh8hy2ZVzc54P/js2gjYR7X5cMqttAkkvdmRmGUuiSqpPJgL
+4EgTnnDUxtVIHuaDeVRtz4Kvk+lBgwS+KSCo+iKNGOWi7QlnC3EI1QpOKmMUXTTyoAQKeHFbJSXW
+QXiAaGU6EZppJcQ37LbiCmtBvFbcCTCxiteKi9os7jv+2vGNiuNMepBpN8zN1usvHHIyMpVcgvuu
+hn+ncCJ29oAgjQS3IBcOOxEZbVAkPPPVkI1FEJCdkzGNtCu0ruN6wWcduToiXasjCm4t1GlFm1Rx
+q2EHbAGIkYqgvOL8G96XEjUudKhQ8coiP7XohzcyoaFee8m264+RHNJNO/Q04L4eeXZwdveeNNzi
+Q+2KZTGmF+Jy771vOOd7MwOu/JF5BMd/OemcNZtnp8UTRuayU3303lwe32zZh7aMSHBOa7/HoHvu
+faVekttGvmnqXbQvTV2XlGTRVdqJmPN3hSFleGXhcBsWPqxDHG5zob9iWcxveH2zCGG5GlossVw3
+LfA4vMpamLJYk3NAs1i9i/Bnf60vgqWuQOxbWDXvIUUMtr/jFBHbvD8Vsd28kxWR4P6+x1dL4JB3
+ycYiwamNvf2Ue6HmRW/35SZUf7VoohKDrjRbJKTdqRXBJnYR0g6ARFruWwXdn7KJaQdiAfD+DTVU
+3m9XA+t9O6kIw2c7qQjYZzupCO/37aQCC5DtpAI0kO2kAmLQt1wLQEK2cwvoghnEBc6hbz0XqIhs
+axf4CTPKC7BF34IvoBnZ3i9AHPlkUEA+eseIAh+SD04FkiQfsQrcSf9AVqBU8vGt1Li2g16Bfukf
+CwuoTD5EFqCafNwsIDj9w2kB2MFBtgD25ANvAQPqH48LzFA+TBfoonzsLrBI/UN6gVzKR/oC45QP
+/wUiqu8qKPBThaxURlqZ/6GAZfWdFQWIK7s2CriX+UAKaFjfYVIAybJ7pYCcZUdMAVDru21KOJvL
+WfsZ+AZvUImSKz1HJaTO3Ewl+A7+qIzTKz1XJaTPnFwl+M/cYSVUsOc8K4GF5mrTQnXj2ZTqXUku
+PLWlxkGRLS1RbqwuSPY2To3ceAjR6HH1WOxj9jbKSEGIysmlE8Vzgc4g4uJcCEZvr/rO/FxB78ei
+ZuWjrTVZyNCSqeRrrdp65tgRThbD77ffGeHAaEXRd5WUicK7pvNH5AnYmazwv1YoUcQfHTI4jadl
+A5RlawDHEo9pTXg5BY+iNwcmlQ6/wHrq5jOECu0PZG5v+Eqb4VUcfKr4+JwCM2NlC0DsvMowFWjN
+Rj+d1NO55RWgUgymr4oVoGnQRKhsCYCLv48OrRJQo7Hyhi/1gpNsxIE2dhx4x5mlqAXjIvWzK1iK
+WhG2kCgHiNlouQTQE3mlvOI6oD/JbixXXMsx1w1wCFUaMf42WaQldf0VNwCxqrFwXnGjImEbe1hD
+48BQMwcYJ+tamr7L3zRtLsZDBURrrVpenYHwkjEOU2SskNKl7U1I03yXcbUd4B79JsBLN4JzrVT7
+kfrgsZcFVWtvhf9h7DDKD5cztdBFcpAhndqJShNXgF2O7QAknxZ2QB2iBjdZlKQ0JTyoJgBkoyaC
+pp/iZMemRKeFQ0BaDZtwL2qMstOkQ2ckJqMDKUZJXawa7QlbJHmUDMPRaG0CRFYpvkIQ1BKstkrT
+12PTtj2rzRugNg5ZbSX01iGxexio64QcVHsRcTUn4WrMuDWzrT+QcpRexKGkiyl/mq1XSeceYDfY
+o60y9pAoT4IWMuViYR8r1FHZwGEfx26oCTaQNZLfAwJ7pf/lXkSHZ61WXTDt0TEDKUdJXtig8X+m
+kZ+yCrWrCIPQ5oOExE8YxuAN5CtUskFFL4qzSFUrRMJy/SujOymaoLOIPNIhqHEwXCAhITo8ayC5
+qjzNRgZSjrIifjCFX9RE+zxlFZrbyngPwwsrOVsfWVwLMR6BTrKyHR8020pxyKCGliYimqiGDrAh
+9pwr3IvWUCc1HqtuYYQ6ScFOn/2BjGwpclhX1E3KojxM6eEq7ZMxnUZy4yqAGRY4ebdcpw+gTGvg
+JoI1kcAWpdSJBPNBgiClvwMjVsi0sddB5P0YKVR31kRCE21dgK7LgYzsKQR/jQDUsVmTGUScA8aR
+VcdnKaBVimoVsydnTmNgvxKMTFQ1QDiqhLM0YODXjIgt8bN1iZ+FYlSBtm0tTaLA5Y4Mo5i7Q9BY
+Ew4Xxxdgt8yrI4WqX8CAxtoAuh0SqzjWVLjkFDRDQWYF7TnQjTKsMiHDNEZc2ZaOdnKe2dVFC8Cj
+gpd0dBzlIOH+HhlkbctF0VQ04qYETg/O2zOcatnBWvJA+8PpgUExcGPKHH5MxK0QU/+hchO+Hnr8
+I+MoB9nHhWYaVKa+MmRpRpGGDiBwzEDqYt00o/NV2LOa/uxmvGkz9BUQoLIBbDmUAFniCsELKoCo
+qjZbQlZHBjK8Cklspy2//0JJRQ6vebWQCFPsryucIygZ7v1VSJT4gP+DCAE3MbS6DYMNfT9IlaGJ
+Fo+q2taWphaRq6GBDK9CHE0Lje4AVVNl1RjLJe5jDyXrvdhyOO6pmRKxtBQ4Spq8Jcq0nTWBXaAF
+pK2PaQy+eFxlL0wURoVb8q41ZiB59hZxVezRU9bFLmJb0x2d47UiWR6MhZBH2SJxiGHyRZha7PI+
+PBLpHJWp0lEElqUietu8BnJr0GRY8JO4+FCo5sOYgZSjjJB/gr01Ze13QrWVrTOO53uYbGrHcReN
+han3LhFq6jURDe3fw1kiXaQw2QBLCAbATAAxBOWJMVNwzEDKUY7gLaes/THoTIJjwII3NA51sTXU
+ZzsEvlALvkCQKAKAbPKgakUE2YTx3ZZQSU2eJlM9VNEa8Gq/M03B2GGMrkOEtvGK0uSz0JRVsMxo
+KyenCqAWIIh92XdlVSagWteWWJkUAdUsEKBdCwaiWpU9CDbkwYXk2qzAwbAhEAJxiBRNRDDGuIwa
+6o1jdBlqTMdPD7dTVjGYNAr7bKIHkqmK4KhSB4PAm8AXqOwJuYnao4mEq3MeKBMXSWGrmoqtEN/l
+JsBN0hoagujOU0IL9rCGxlHO3B4oNHX5fSbhR1PHhomFiLKIMGrrQtmYon0rc2CyaCJZExHAt+CD
+ejvsOSWQo7O7oychrOSf7BsxbKqEMvotDI2jP8g+6jSPkWeU+qkUyUVwPTSvrPwC18v+r9gH/LUt
+mqiAOm0CdM/Vr8awQxNx7+0ng6tV6LrJ6z01YQnWlY18FD2bxwgJP3Ui5kFC0q0GyZwAIyuAZVtD
+7A5MN5Plqktg5ODieqSJwTeKRPQMrVVLtfRDjq2YyBUV+KBKeK3z6uMsgLhDIyyHz7hUTbYvPNyK
+S1W/tXqLBZcatX2fscJlF1P5jqFlYj5rKWxV0VG923Iz4wIgX/jcons9rO4o8nYI2Wtw3xID3Bvh
++OFrZGFqpP3pQLxj4b5d8epamKxcUVflq5MsPhLZDAXkN2mhrWwl5Df1nisgw01QWyy/L58tyZHh
+9Wc+3psXRdI886Ex5CztI09lJzg8TPyoiGD2V+ceJmFYZllog+7ig3JiR/cn5zAqeTCTo/ahyV+J
+CsB5sYHHDqM/RqWndJqskMfIISeJn+XO1HJO4QicfT6V9JCCeHVvmVbHvGuRszcEZM445Glhz4jV
+d5K4hHWtVV3SvHYPjaM/SHYESQ8pHJ8HGTy0XzrV3OPdRcKlCR5I2Yu8XjmU7dHJhkuNdU1nTVT1
+UBMvgayGlE6vFyAZN+7aMQMpR9mA75lvP5h22axohFeN/gZjiQyFSmHXHueVxoCQA5OpNCqY7FPD
+0q6zBsYgsdUkGMVtN3Ub0IeEDT4JZTH1XVhDxwyjbw/jNdQ9fVE2xRpDcAegyL0oeXLwPQQbo2CR
+h5DhNSKr3ESEOZdEGITMZUxXMjQrRU7XIZWQ6kYhrQNTPPhkTQAEDuj+yDjGHm2AtchGv3oa6Bym
+ashOtz3FWrhs9DtFRfeU/hjgF9FEBbSzyEcI4MPgudOinVsHMEmBjeaZ25Yg6pFxlIP0ovclCB+i
+PMtncd0VIApJhU6Z+QTtVNmJv60NMNWWgqFVV+nVlhzolAiSm6jcOHBslbcQL3xNCpiyszjER1w2
+XUcGUnqSkI4qsLDO/NkEkq0A3ypAsl2NfiuXr6SCAv1V0gAxztYrDk3lAxhN2wJNq4DFaXGzY1G2
+0+Bxh4ZR+uzBNDE8RgHKpRGg3BhI3UsA8JILNp4EvougiiSd+BLUjx3Rb95schNO5TE78TyONJFR
+eUMDKUdpTm7MlOytjy62vXklzvNQ9WYgd9G3eiVDCCeLJpoKszsCy6e0vPIdzFR/v291usYCE8DR
+AUzCkJlmixZSVUAEm6EZ3w9MWJAHgLMchHFNNHhappNpFOAWwftBqDenLfTofagFqDoUALfkZOEl
+HFtApKlqesvPXOvdUMWEVXCa4jDyTRgbhzByQwMcDVhYOK+/Bis4ri0XumlRdNNi7pwIIuTVVqKE
+jS3tFYKvUU4r/VWcw4c1IHMerDwe5BJ5dxgzjn58WCOziqfLgVMFqeQcHg74Vp0W1jETKNk2UxeM
+PaqYoi34TOPUaCaShescvPOu52rkQHBCehJ7c9BEp02YCsrwMPpD1BB732CQgHzeldFBLOURviuJ
+86OD/LfcQRVc6KMDnXewQ6D/1+FQzKljhSILoQPlrdc5TkVNNL7fxOg4+mgGRUvA6g==
+
+
+ yoiNOgL5NzitAXABU6zOIpEESfQ1LL9UAi7qCOXPAn+oSJA+zBA6k0kSJ3ITQTx4jD80crPoqpEW
+hsYxDoejCBgY0RmHUyIUU8HCpqY8Zz+in+CTLHxnitrxaKIC5EbJUvis2aGw0bfRCsq4wOHockNW
+OyCKSdOZemjIoXH0YWU4OOlxKA9yHAKy1kW5B5WESGLbQ3FzC5VWGBt1K3oA5VlPQFEB2axZjp2v
+Dr7C8ctgkVWybNaMyRsaxyjYKEPU5HibR6o8F/ksXCLfXIkJC02tJz/2teV+AlXXa4JZZfXonlkS
+/fABWSuaxqCazmByEpHKB+/RYZRvMyMIey6UEm9oHokSmWi+iz4+tAQCOl8pGyyC/AKOVBJV2BJ8
+p5yfXVclxrKP+ixpKg1R2sOIYiQlmrQ3PIz9/26y+k332G1q4dKdFy7bs0fxC5Lfl8tRTwTjkso7
+MEQH08x1TOY6MARV1bJOOcePIjC1pI44ToHZS2nDXec0R2iwKPCJh+IaDdi54SEKlfhUeZVmdDsz
+txJxjDqulSu8X0iocj6RhUweFeVALL9PftZGxV6D5uxyiErS3ishaefOUlRDD8T5JOZNPIpMGi+5
+i14VnXVYM0GxDt7oQMqafKET2AxrkCF1mmZvBU1HTgCS32fBaEVwgw+E6eIllNHY+dVub7RD0gAp
+hfN+ViUhGTYHNbVatdlR0ELnJdJSWINmtwG0KpJce5H632uAHxbRa0v6ZhWh3NkB5jgobMyzxqJb
+TnF2vL6Ak1fJt+jN1g5uE+0Bedg6B7eGgkzwCtDbtqtrewnSpmDPas7fakGdE4KkcnmJ+4Pp35Ho
+EXOxR+Se1WSLKEF7BBWJBeopMYet3X5XFQuvvgJzSPpMIIToSCcHtkmlcx4s113xFqUQej3JVA7p
+TCVp41UEjL/XbgxlLFfZxGIUvGevW7UXu0saqCA5VbezQfBkHRh8801T4A9oqI2eZvEEdYWtG1Pi
+7Tqk/xO5Oj3WvdBX6UHsoAjMUdbImJZqsA+reGuXYFJVCRGVWZL32EWdWsB1E8gn8idTVVlQkwSZ
+gh/6OqiB2EA3GMrITCeNcFsDMjNv0nCi8iQU0DXCatRtRQFRzl1AYnrVdbFXaOvb5Ix+MdYHltty
+klvns4hp1JgmMc0PdkF0gGTtoQLpTAwqReT8QdqOXA5NU65jk0oIrrI6wZtCMWPBvEZbzSKvVJCR
+IQW+leWBVEB0La2cEf/SSVxyPio1PnuFsRZAAVi05Usk8kBM7pZy8aRVXbWYbj81AMsWr5YlpHly
+Vs5g3xZNDLV0YFIFBhTeansEHU95PnA0zN6W3b/3tGjvD60mSMUs647cvQq7CUuVR3G41PAIlA3U
+LKLXxd4A6jbT/aeoyn4setBWWR1FBRVYi0x+3wsyvNxPSIal0pQ97ZX8fi14K57GakHZ8/NxtuoK
+5t/urU7FpbbxlNeqkuJeOjEGjXW9pZBEa1RskCEScuRo6CsTh10jEDERoiE5Wp7GbU6JTV4l7SnT
+Getj0yl1U40kEmmgVUHTmgTQVSqsIXkakamo4G4lgWsWTxzYNHVmiGdXGi8vdV2bU3TU/tn35XC5
+d/8+0xHTYD2T0JGDLkpaezdzsHvRx6oE74P9k2ZNGGw3tBQS1/sseiuDf1aU3hFmkjgEgYBJNcQy
+3jkxnYSVfcW87/8x6M+cOePN0TXLf89cc5Pdln5s4eRue+w46O4afPQc25E1P7ZwweKNFyzdY9E+
+bKDOXWfeBjq4zf9jtz2mpEpN04H9uuNuOyzcbp153XaDDmy2dN/FC7fLty0MWDI8t9px6AGGP+MB
+giGfx9+oeTyNYb7mxgv23JX/5meuOWe33RbPXH1i0ZJdF+4oHWR6fGLHH1jT9XbrL1q8cC38gy3r
+jy3Yc2CfD4oGNxmMYoPB37YmiQyagDwWSjpgYyEkRAZI/J18lNvM9IO35wdlA7t65z/uN3mc+tv4
+sy3GHwf/56inq3I3112wdMFaM/3AcEoztpr3j6v8vx/6+f9ezXu9mjf7q1fxXn/z16/evf7x1Zu5
+//jmN/39q3WvN66+6v94lW712oHB8JZX6V6rrj1v7VVfnVu9dZ0tt960fd2rcas3fXD+ol232+Ad
+r8a91txyt/32Xbzp6q/Crd660eKDjjx06cfXeBXuVW9/wHEnHbPPVq/Cvd62ydJjTz/9uL23eM8r
+f684echpXzjr2D02evMrfqu3TCw9/gtfPP3whekVv9Uqs7c56LQvnnPSfq/G1Oh2Oeqsc888fJe5
+r/wjfPPGy044++wT9trkna/4rVZZfav9T/r8aYds895X/laD13Xg5844Ya/1XoVbrbLmtgeceMrR
+S97/it5EDadZW396+YmHLXplJ/xrXsN/vGeLZUcce/CO8RW919/8Df/xpg12PfDw/RdUr+i9/l5t
+mbjt3gfus91L3OsvYKXOeO3f8Z+rb7rr3ntuW7+S9/qHN7/lX/gvb1x7m6kl263zhmmvfM2fbRK/
+YdV3q5G2+kbb77z9hu+a9sq//nMt4n9Zza+hQ3ldu9l22248a9pLX/N3f+bN3h7X8m/Sv7/lQ5tv
+vdmH/ue01/7tP/xZN3tDWGedaAv7ezbYcv7GcVqT7a//6c8xv9/g585bN9h0eH276SfmbzD96vv3
+//y3f/qtwnobb7zOGv9qBattsPX28+e+fbrr/+Zf/+1PHdkbqw023ezDXdH0G96/5Y47bT1n5nS/
+8c9veP0//Wm3ihtutuWmc2f9W1H23k0W7r7b9htOt1/+3evf/vY3/POfcqt5m2+12fq+NxXeOGeH
+vQ7Yd5eNV5vml/7p7e9bY7U/+tA0uNUW87fYsBpaJ9zW+xx57GF7bjHdBHnTmmu9f/br/5RbzYtv
+HCp/2ybLjjvr8yd9Zus1x//ev645Z6P16j/K/Hl9teHm4261yiof3P3Er1z6tXOOXLT2+Jf2nvW3
+nP+R7o+42Wvd+tPcapWw80mXXH3tVV87Za8t3zfuV1edt93OO27ejfnNaX7eNeejdKs3jal6x/Yn
+fvvG22//6eXnHPzxcTPknRstXLps0UdftsH6prU+Mn/LjerxffvI8u/+/PcP3feLH3xp/4+OOfW9
+cb1d9v/sfgvXfZkDe12cmL/Vxs24UQ1+Njrme3c+/twzD91+5em7d2PqP7j40OVHLNv8ZR4IV9/w
+E9tu8YHp1vN5x17122dXrnzu/psvPmzzt47Wz93j2FNPPHC7l2cEvWnt+ZPbT0y7wm60/Or7Xli5
+cuUTd1x+4oLR1/K2LT5zyhdOP2KXdV77cu41e/NFU9uvO80TXGWVDx9/ze9fHNzr6d98/5TJ0Z3T
+TR5x9vlfOGZqzsu511s23HnvZQvaaes3PulHD67ge115wtYzR6q7JSecd8G5xyyavoHip9p2v0MP
+eIkD3aan3vDw4FYrn7zj24dvOFq93r6nX3DhOUdOvhxD8i0Tex590lFL1pr2gvnn3PI43euRn/3n
+vqNXvXubI7548UWf/+zWL+cDm7XtIWeee+o+c6arf+/Si+94enCr53937RmT7x6p/tCnTr7gkgtO
+2XtizAwd+al3PeGrl55/xCbT1c85/Hv3PE+P8Jff+uzoAWn1bQ4792uXfOmYnad9B6XFutbSs759
+1XfO3i1Mc+0Wp1//0GBqvPDADV9YNPJdzPzIvqdd+PWLzvjMZjOn+fW/ek3xjw/td/7VN17/rRO2
+H+/FmLXnRb94cjCsp+687Ih5I7Xvnzruy1//+vnLd5l2FupJRH7WOeCiG+6444aLDxltiX4mjv0B
+PcIVD//0S4tH1vn3bX/4Fy/91sWDYU3rHvu70tKa89lLf3bfA3ddd96e42btGkvOv+XRwbCeu/vK
+o0Y6s/pWB5196WXfPP8lPq6/mVEaWnMP+eYvHn7qsTv/6/Rdxtxs3tFX3P3M4F6P//dXlwyvGat9
+/DOfv/SKyy85fZ9NprXq/uG1pZ0157PfvP3xF1947I4rTh5dgd43dd5NDw9mxooHr/vcR4bq3vHR
+/c78+lVXX/7lI1/CVzDjDf9/8a8PfuaSnw++1Rceue3bx2wzvDFsdNQVd9GwXrjvygP9UN2H9jjt
+Gz+8/offOmOPD+TC4TPZv771zcVDbJZ++eZH6Ft94OaLP7vB8LC+9NOHaN19/rffnBoe8uTxl/7o
+lpuvueiIT2SH8F8NH8le+453FAN714LTr/097RnP3Pfj8z7Vf2Xzjrr8LlozVj5/72UH9Mf19s0P
+ueDan99x61XnLP1QLh05/r1u1dVKg279wy/7NTf41F0/OGVB+ZW9d/EXb3yQhrXyxft/eHx/3W12
+O+uqn99z962XnVh8mK8ZOSO9fvU1yj14MK1vpve/csWjv/jGoeXE3hC9WLnysVu+uE1/yIdcest9
+D913yyUHzs2FvQ+Xf96wRnjPvxT/3vSEq+55lp/U/Td8aUm2OVfb+ezrH3hB7vXMby4/qDQ23rXD
+qVff9diTvx984cUC/7cjR6TXrZFC+UG8/9Nfu413jZVP3/m95VvbWv7BA75++xNyq8G6cct5nyrW
+18GMuumBZ5974IYz5xct/cPICWnG+z6wdlWYWO9eeOa19z3Hr+Whm7+6r3mgPnLC1fc+p/da+ey9
+P/z84jxzPnTg13/x+IoVD91w+ubFsP6tfFz6AD600QZ1YV+sd9Cltz0qA/vNlcdvqqXv2fVL/B3r
+z1N3Xn36EluL1j3ssjsHH96jN521ZW7nH9/8P2cM3+ud62y25USbTfDVtj/l6t/yG3vx4Zu/vOS9
+9gh/+aTdauWKx3999Tl7baSTbv2jvvfbwZifuO387XO7f//W1d5ZLhP087Z1Pr5gu4+2eeKHPb9y
+88Mvyhu7HEbFxsd+/+7n8r1WvvjEXdd95dBtZe5scMxV9z5PU+bb5ZR5i6vfN3Q+et1aW+28eHLj
+YgJNDGxbnt0vPnDD2Tuz2f7OHfQbzyN76t4bL1k+yTfb8Ngf3De414sP3nDOTnk1fGuau04YMrZn
+b77r0j0WbJg3nVmLv3jD/bTTr3zi9ksP4IUgLDnnhgdeXNn7eeZ3P/vWiTs6vRd15OlfX3HUxvmB
+fWCTzT6c+uejVTfZZd/9ly5YO8+PDQ4drPbU3HP3/OB4tj2a3c8dudfKZx+49dvH7zDYDuYt/wE9
+w8EL/tmF+zY2rg9tsf22H+16R9M3zl2436EHL90q2xjv2eHU/+IPesXDN56zE31ibtFZ1/7u+aF7
+rXzugVu/ccwnV11lo2O/zxbPymd/d905U7Dl/0e31aIlCz86uzewuO1+Rxzz2d0Kf3hcdsEtj9AM
+f+K2i/aij/btnzzhe3c9PXyvlc/+/sYL9l9/cFD63t3P6mfyg9MWYV1ec8sl++y107ze1vneLZYe
+ecLyg3ZeNz/bDx9zJf/203d884C1qWDO/hfe8tDwQxzU33X1GXtsuuAYLJUraJfdUQ==
+
+
+ V7b3bLrkgIP3WTCnXG/fvMHiQ048+dh9P+Gs6H2f+uqtj9H7v/OyQ3g5XW3ylO/f+eTIvQZry8VH
+bLfpZy7678e04JGff2f5tqtpu7sedNRhy4pm6W18cv/jTzv58MXzcpB14+P/i6bxs7+5/DCxOdfe
+58vX3/fMyM2e+OW3j9pkla1O/RG+iOcf/NnXDtZdtpk8cPlxh0xtWM7Ft3z4U0efdsbxn946mxhr
+LvvaL5+ie11xuNzrXfOPvPSWB54bvtfTd11+9LxV5hzyHew3K5+978fnTslTnLX1/seffNyn5/es
++7j9QSedccphi4rTwJZn/uRhHpfea5XZ2y//1n8/NHyzZ+7+3tEbrPK+xQPzAKvlU7+6Yvkn2RJ4
+yyZ7HXfGKYfv1DtkvG3jPY8+7fTlyzbOD3G9o68afJ+D93Xouloye8eTLrvtoaGJ/+zdVxy5/iqr
+bHLclbKGDn5eePCmr+7HE2qVDy459syzjl+2SS8AXm1/0OfOOOnAT+aHOGvvb9317Mqnf/Wtg9ZB
+UVh44mU/f7h/s2fuuuzQwalmrb0vxOygTeB7J27Dy1C985FnnXPqgf0j0ls3WXrsaaccvnOxdE5e
+9KunVzz5i0v2zWVup5Mv/8UjvWXx6V99ff/BI3rntidfcx968cL9139xN/6iZ2936BnnnnHYDn1L
+qJ787OdOXb7nJvngtNPFv376xcdu/criwsCpdvrc5bc/Wt7syZ9fMEUXxGUX/8I+iUdvvXBfNhPf
+ttn+p5xz5hEL+wbZ2z+y1/LTTjpwW3uI/jPf/e1zLz5609nltj5Yq0698o7H85658rGbP78V12x6
+ynU2O574xaWfkRe2ztITPn/GEQuHXBDNTkeefsZRu5oVsenJ1z344opHbjzjo73L4qJTr7rzqXyv
+R35y6qbat8vvwYCfvP3rB8hbXmvJsWeceujk0HHuHVsfetYXT7HTq9/ra7c/SU2dNmS5h8VnX/e7
+/BQfvuFkPYTudOlvnrNxXbK/2KTtrkedctJB27l+G6tsdPC5F51/NIyTrU67jlaCR288ffiUkPb4
+6m1PlOPSCxblez126wXL5AGlRYeftHy/jw+fHDc67D+v+O75n+Z3Ws1ffgVvzY/ddOZHh65b5f3H
+/PBBe2OP3XzWFlxaHfS9+3S4tBPJdr5Ku+jQ447cfaNhgMkWJ172k5uu+coRCz8xf8FBZ31fZsCT
+t5778eF7rbLksvtsxX/y9q8ulF8/4yePaNmL91978mZy6QcXH3rMZ3cadk6ssft5P77z3rtu/v5F
+X/riBZffePcT3PVnfnXR5Oi9vvs7u9fz91511No02IO/cydW5ufuufJoWX3fusmeRxx9wIJhT9i8
+o757xyNPP/XIfb/6+W133POILjgv3PeDwz44dOXck36MEfA8+MYB69E5+9ZH8GCf/vU3PyNDmf3J
+Tx999Kc/OTQ1BoerGx+gD/+FZ5566pm8Dj1+24V7leffNdbf5qjL7iz2lhcevu07J+//uW/+7EH7
+pSdu+/JiMae6nQ857uh9thw6aW505OV3ju7xdOi74fxlMn/f+8ENNpm/7OhzBx9zecULj91107U/
+vfOR3L9Hf3qmfN9v3XSvY086es+J/tSgYY3Z4lfSdvSTC4+Y/Phmm39i9wOPOunsr11182+fWNG7
+YsWzjz/8+DNF2cPXn6Lf94LBwnfU1Af6wxq8rTGmC/8888BtV1147llnnXvht7//o5vvuPfRZ8df
+l38e+vHn5PteZ4/jP3/GkTvXw8P66YNjh0WP8fH77rj15pt/dvud9z7w2NMjhtvoz2Bc/H2/+5OH
+nnXe5w9f0A8cbHTE+LelPy88/cRjjz3x1LPPr5j+muJn8L54+Vln2WkXXPSFz275tvJW79313J9M
+O6w//mdwXtmOWp087j+/841zPt33x61/2Hd+/dQfbuPl/jxz93cOHnwnHz7kq9+/5vJz91m7vNVq
+Cz//4/tf+MNtvNyfFQ/ffN6Cwef9lWtuvvmqLy7rgSM+sP8lv3jiDzfx8n+e+91Pzjv41G/c+Ovf
+3vHDcz/Vm4YTy6+6Z8Tw+7N+nr3/59f/9FcPPP7YPdedvVOJ7Hv3zl/4yUMvb4a97J8Xnnzs8Wde
+WPHc/T8+o7dPpL0vvO3xP/zrf8rPiod/csZm5b3WPvibv/oLzsLez2M3fX6L8l7rHvbdu0YPBX+Z
+nyf/+7xPlvda74jLf/MH17g/8eeZX126tHQMr3f4K3ev5++58rAysDD30O/c+Uo9wxUPXn9K4csh
+b9IvX6m5sfKJn1+4tHAc10svuPUVmvNk51y1fCLf6107nX3Dg3/hb9l+Vjxyy1eWFLNj4+Xfv/uV
+mhwrn/nN9478cLH2fvprtz32Sg3sxYd+et6n8vlrtcnTr7nnFRvYU3defvwns0E/94CLf/bQX3AD
+6/08//vrz9v3w+ZPWXXbE6/41Ss1FV988JZLjtwme6X8budce89LGDd/zs9z9990yTGTbXb+rnvA
+f974u1fkZi8+fucPzz/4Ez7f691bH33pTa/EzV54/O4bLjl+17mlmT17+2MuvfHeJ//CM3/FMw/9
+6rqLj58aggPNWnDMRT/+zeN/0dn43KP3/Oz75x+x4weHg4qztz7oS1f/8qG/3Hf23OP33nbN107e
+e/7sVUZ+Vp235xnf/dm9T/xFhvbis4/d9/NrLz3zwB3mjM+QiDsdd/GPfnn/k3/u3VY8/+RDd//3
+D79+xoE7rTttRHHNbQ46+zs3/PrBp/6cu70wOAjf8dOrLj79oB3Xfymc86rr73zouZf95I7fP/bM
+n3K7FS88++TgxH3T1d/80vL9Juf+IUT16hsuPvLcb19322/uf+zJZ557/oUXX95nsOLF55558rGH
+fn/3L2+65pvnnXjwrpt8cDokWvnzvnm7fPbMi6/40S23//rue+77/QMPP/rk0889/+KLK8bedcWK
+F59/9qnBXX575+23XH/NFZd+6YQDdt107ZedqbD6+jvud9Sp533t25df+YNrfvSTwYmS7vnggw+N
+/jz44P2/v/c3v/zZ9ddc+Z1Lzj/jhCP23+UjH/rj0kpWff8Gm++yz0GHHXnMcSedft4ll1159TU/
+vPZHP7pu+OdHP7r2h1d//7JLv3Tq8Ucdsu+uW06s+/6X8+hG79eus+4GG260yZZT+x929PLjTzjx
+pDE/J55w/PKjDt130RYTG8xd6y+Q4rH6WnPXnzdvow+P+9loo3kbrjcnvQqJJP/X/lA+6XpLdqRs
+UsqN3RCpsIMyS4TdZHyerWXXrjOvm7n+sv/9v/edSZm3Pd4bStE1NhtjwdljqVzk0MK6i/ZcsMNi
+ZOha8dzFi3bffdGSnYaK5y3Za+EeS3H1+7kD2w3dWnJmKX/4palvmBxnR0spHsucM0up6lhQvqHE
+5KZmehxKfBcNE6LHsbTzanZqiEOkbmuRbAPLQcVJ8sT/0EUlbYrKHVuzALTK0QVViWKmh5KTQQks
+iDytVQauXNjNrlX5KRHZkVO1RybulQb87Da2ShnWVEKLkYgrAyywTIuxl3ICuBZKwilrSIrKdS1U
+WlLY/B/23jvaiirdF62/3j3v3cc4oUefczueZXdr032aTVXNqppV6jOwAUVBUIIgKiz23sKWndgJ
+aASzoihDRUVtMDDMOTtUzNkeKiiK2WHAnHUoiLLf/NKsWmvVToCK3ax7rr2Zq2qumcP3/b7fL4ps
+rbzAMiKoAMmAYubNJk6GmGLsQdkosXx/phl9plTQzBIADHksZOtV+SFpbpkyaV8z25jwT9gCIPk6
+8MAIJ4RIWqhU4yoU0ivfciKAfLRGQm3lk5CLkASI/F1s6R8q3u8Usg43ZGU4lDHJNhaQESG3Go8i
+Fg2A8SSMBmm2wIckDJdSAKTZjC1nqBvRyAiFzYwyEGoQ7gSqGIktwTBk3mqQZlIKmXCAwTSW5gaF
+IxJ9B+YSJmENmOkB0sJUbZ10tYGUgrntSloLiDulZWORAwJ1FuVabShLwYHUh1QApg5Le5HYXZA3
+gwj3mbQusQSOprVjIBuiEth8UWEpFHYUxXJbiYj1pqVSoUgNUnLENEluKspuCxAoIiplIhoPB1yg
+zXzyYtuEzBuoEqKPZ3oZkv80PxYK30mcCCmUAi27qDTXTPkTYLWIRNHOtT9lmkjFTOTC7G/A5eOL
+iIfQxIGaUljSqvR+BIy5zEonDBqmrkLKFVuu1wTEnQJmZQ68JGEyIZ9+gmTtRUAKtM0U85WIpG8m
+kdc3KoFNTpcHJG/yFI9Nq7li1gzsQuAaQ61joTMiCnf4sTDyRcHJD2Nm3WGpVCA0SpQf2YWMXndJ
+fgAnoiuvByKenk0MhcxI5rEwQpkmKl1eUG+I5RDDVLjGJgKPjWaGIORjSmS8ijZARaZCvyXCbhlC
+faC/TFj3JBBG75jEZ5HzBcXu6LeA6z30S/YIpLVm5qAoJdy2Jcg2VsxSJ8BxpBQRuyFBoE6I3UWJ
+yogQQllOrrIMYpWypksFQp1YWn2gOMSlFDhzIl/Y1lwhggEOpYjeNzubjBa7mQDdGtF32VLVcAsm
+MfKaIWsOk2bbFkxX3TSDkuUp+6zdebLPKuCsZRo8UH8nHW67FCZm+mnUaYMmFIp4k0jMbDC0kY9e
+qN2I5Ai4cIRszPNZgD0EOVApANDkwdAOgZdIGitkBjU4koj8CyjboMxCCEcDeZ3VlcyZJiLOf6Ea
+4yNJqFPRxYrzz1ahxxnkmqNSEjM3jQfUS76f+MBbbSrruV4ILHPm+SHTB5ihY3oghG4BgiSzygI7
+XgFJ7IXQjUgxzZJLx7Ito8zpc+G2k+j0jURHigFjjxWOzY7jIsHZIYXQLSReypvT88PwHb1A/+2V
+KCcIQ7UN8OT87//V3zcqsay9ffodQ/ebfrNRqOr+3pn3PGh4P9/Yt3VmPyPDxx1/4qTen8p+Djpj
++fy8oKzuP5OXXnHauN4fy3zGLbly6cG9P5b57LzgoqVT+/WGc8jpZ9b2743d5i+e3c/2nXLigpwo
+pZ4+44/sHOo4/3c/3hjTVqecn/cWv5gFk+9XP9pxduiF8uE/MvDiqkOnVzvOTr2M4F9nDO5D6g5x
+Hecv3cUF8ec3Gbz0vtPB/xbt1ePM+lWm0KpuBrg9d53YbVSV+fx3mCn0/rMQ2bZbzZQeAvKDnVOQ
+7rDZR6LbffDU5qndhpRVDUsxUXsfc95CAo+NmNU2qpsXwvH720oOO/n6G04iPJE3dc7h+cFo3tSm
+NJqr7fan7z2C/965YU45Vo8++8w9yk65A69/7cMn5A1nZGt7brkOPGmRrATDz33hm2+fW2B/vWbu
+9PKwGfgUzzrrUP6z9o5Pu7peOMp+tUtDc87aVWg+f7lMueaHN3R1vXR0+uWEWWMr33BmXHRZC/95
++APru7pePib9btzc5pzZOP2ymxczYnXUdR93db1ybPrdxIXH5UTF1Vx214op/PdJrw==
+
+
+ dHW9fmL6XfGsJTkL0cEr7rm+jf9uf+rbrnfPTL9rvewiRNmVzuA9T1258tx96O/RN37W9dUtFs64
+z7J7r2+AP35ZGjww89qHb2rmv099s2vT31vlm457n78H//G7QskbI8578OFzGSo9e41p3lP4i9HX
+vP7R32fDXzumjhZcEObctepm/pEJ92zo+vQmbp/5q9ZvfHou/PXH1G79M4iDr73+uceXcbzOZV90
+bXxiFv455vqPurqext8YmM64f4c1ZK+L175yRz3+e+IDG02xjqKfeOa7ro2PYpDUXzIODNyKT3zm
+XR6xC1/q6up6+3T4c9T1H3Z1fXodeulViv/6Pzhdj17z+Sunwh+H3gmO2S9uhEHe9jj83EJI/vOI
+dKzQzx3zwnef3zLGNM6l69Bz82iTSTz51a6uDQ9j4w6fvIe8MHAozvATXuva9FSn+a2nCbD2zBHQ
+mWbkv38V9GZQ22DhW0MmIvrx7He6ut5c5tQ/wNjoF09ynJbHv+3atAprt//cWbJ2+dPq4eUJdwKa
+4o2bVguYet2FuzlHPt/V9dH1gJNJOo5vlKVr/9mtgAI/9gV8LsU4vbVsV+f0N029T4anDj75FBnb
+uvUEQEoffGe55/q5Y5xRN3zStfFxGNO7LFh++mR+Y+yJpxRNu1/6ZtkL6x9sdg5/cH3XJzfAWjfx
+zMvs/l571pJDHGfeE+XeyPeu3M+Z9eiGrtcXw1P1F1x+HKNDdz1mxdmTnX2vfL/shY1PmNE3/e7P
+1q+Zb57a7YQrL5rJPzF+yeVnjncaH9pQVu+3rzALyIir3vrgQejICWdffa5U4+Cllxy7izPnGXzs
+1Vuf4fp//Sh2wsJVL10NY+rQcy8/XoLlDj7zHDNgF6yFx96/wGl8mt54YwXO2nkPPokTfuo5586Q
+Dj9o8emmnY/CznjdzLvr0a/9xe0Uvzb7wTU3AGym9pzTJ8obE05aNFneeHWhM+F+HFTPH0ffHvH4
+O0/DytV64UkWfz/ymIUHOTgazKg6xZmPxdt430H07TFrN3x2T4Mz9arbTrAjXbcfZ5boeWvgwQ8v
+dJZhK399NX97+ttdXZ89dfWjr718ZQp9OfTYzp2d5r8jwvHtu6nnN/29Cb+beA+Mzk1ff2fabpZ9
+46BFZsvb/1ZC9AmU84tHz5hj+uPUV23/0Dyk5j3jbDOuzn6vbFS9teaO5Zc+n4JBP7zJbgmHnHdJ
+hynwO2WjpGvT+k8/y/zz29Xt8sbEZXddWutc+En5G+WfN2SRdIYsW/Xyoze80dsLXZ9fbzfQhc9/
+s7EPjvdvH7axoMe91Pvj8Fk9x77xct/eeHa+vHHi6317Y+2R8sbZFQ3bzRtH8QvS3X3/jY5VfcRe
+PCdvnNLHanSt4ZqPvaWPmJxNT83mWfZMH3/i6/txi3b2uqyPLdX17uU0Soq3fty3Fzau5hPXIdeX
+L4bdfN6/hqMwh5z1XJ8wrl89YkfVgRet7QPyZsOapelhccKFqz/t7YVv1p5vFzgYJkfe2guybcPa
+8w9ySj6HXrL64x4wERueu2CyU/bZ78hrn6wM76LPps+eXnZQ+QvmM/rIax57cV0FRuebT15fs3JJ
+ZUwGfka1HHXajQ+vfnbt2ufps3bts6sfuv7U+dN7uuSNapyz4Mij5HPk/DmN5aEsP8Rnu9e6xGs9
+vlzpJdenzfZ9FbIcCdqBG9lB4MWaZSJ15ImosJe4rKtoXSyaFN3RkB2KcgsIeHgxOwO0FVYlPW9w
+VbL6GgqGopsPE0mfSzwvCXuW2WSO2mUkLRmJ5B06LZhTXpOTqprfJzVe9FC47CFR9rcy0rBKSPnN
+L1kHA9nvQ/ImBaIloqoS1FAAfRAl0sRBlYseQXAx+SB4VS0ZsO6ITxJR5Plxk0iTfR8dhWRdT0LN
+/nIUYxKHVGh/zPqTXBZHxmaVdvFYSwX9wsrquYCBnhSxPFG3IKVPl2VSrRQ8+FhEHi4EYShxyWkS
+2hFBWfIqRqx9GllVrgRUokREGFUUqgeQrxAF3vFZLZKbMUlmYiJ7XuBJai2UC7BeSVaBoXLFpEIA
+iUHMDkiBLIBsSKJZUBAF+iQDL/BYO0Zk6BIrG+0C+iGUGlAvIroAZLdEpUWhA5D0O1liBMQRrLaq
+qxJO9CJR+vR9X1sfcMQCoLE4uiBRedS1ZvKQmDp4dlOHEOqGVLMbPBUKFTE+mBOeIDQShhIk3MbY
+CUoFtgZ+5LIgt6AeYE6w8IlnoQwJKPVZ3fcgAwQISArDMw+EhNtIAquloUlCiGrAYkleTMpQ1ZyB
+8klCTJNAED0bB35MAhMiYAcZhJqBG3YmQAYkIwUFE/VC8HgnMbtmRaEDVX3EjY06DpKB1hFrK2Hf
+SAnEryeqE2aumsowdsZn/xt44mPfektlFIBQqc9tiEp6lOjHVpw+FuiISWbFJS+02mfgvXZ99iPj
+IKFE1tnzEpj/aQE8QTgEXmx/CoUG/YwqaMLiWuAvjtxQwBjQ8CQZFZLLnCAigVasI2X1WEJGcwA+
+IoDhVs3aLdqnZ7V175tnWSzRj1JVyUjEOv2A9A+lBKwiD/JbCZcAcDTY36ZagieBREXKbazZJ2gM
+FA6icRyQDl+sBKkDrvg4EglcBo74LtWrmgEpvk+jE1ZJX+A/mnNNZJvDhvFJjc+MY7sWgAQQldYk
+2wY3bRAinMOMYxkFmQwi0VSXtiWBPRCV4UbUoq7kKUEoxILEobElKzq2rY4ZKWMb0RfdL5el7Sgx
+Ikl2lAgMRYRIZNpAwcX1lUUFkZquSTTLn+QakH/cYyGaas6A12koLSm6o1Iu6YV6vgWawJOBaGFp
+ux7GgEZCIXGACzA8DhRYeY3yRFUexU9tWQM7F0EvlGsWpCguAHcgosN0jeIJEqO+tMd9C6JS1VwC
+Nw64G5XIHCYEy6MeU1a1Mww0a5SFJNhOyS7JALFqoTwqGjiRiD/DXLV4Cq3TThAZoSD1pscWewE7
+tMVr+XHEa7+rfWUzUL7GZGlqydATIS/Q4nVpIQPN3CCiygOwQolIdRjb931YrWnn4T0KppYvB6BM
+4Vn+nU47qfS1abKQgBeyvMWwZRPyQ4Nf3spY0aoFiB7F0pAAJcCdBxNFx8rUIKJMYRbqKB3CHkmJ
+m5GtfDvak4QRQZGV8I0Q8QgldS3iEWCEPkIczAYgADCTpkQMTkWB4vfdQAt4SbZjndjDWoCbLKV5
+nuYToExLGCVaAHihL1MYhVuxVlBUBvaBZqyWRN+LJdGMmyCDZrHjP0Ddu1hbUBYMPwIBgoZUKjqb
+EOxDcH/lGSiR+YPKkl4WJLow1Hla0tEDG92KJQHcTgUEPLHaXDDv8GQLZUmsrCadyiAxPVHoUJSZ
+QAo55BkY8YqFxfK0yHtizyHMB+U9LZQUNQWhumbrF9SnF+HAgN3ODQWg6tOVwQyiFBqIBfO4wUM3
+TPhZxhShhpwnYFbCT9EpPJESRLS70/WERhEIebmKrywytwCgGvm6kNWKhLdlDCd2BQHBv4APlbIX
+mgdDO4txtkkDuqHHAs1WStVjwTBYbeSgGMX2qMpn8WrGDSs/YOHiQMRy4RhBV4NABCQhV1F49qj+
+1ay4FXIJLPgojiI508FpG64RkBgychmP+7KKm1SRmAY5Yc1PUl/hnuXSuIoA42NlzKT5I3tM83x7
+8ogYToiJgg2NXLr94YaFB1Uqv5Ibj2cvYqgYFot+Mq+jkRWNgwtdLMsYFID7Dy8LJgmgP7HVNY0k
+R1d7ikZPiiyNQnu1cwVWCNpmPKRi3q64/4KY5zAeL0TwjBBlMDMTngARaDu7mualXAqimLX4YK7h
+ji8ZBFQCUFkmaKt2SVLNpMGVmTWeTWIQouIa39kFeM5QO63oqEKZ+qigGoJ4naK1LdKytunMzS4C
+bWy8tZtUUWuOrAqbzoxgMyroWmRKpV1ZBqOAj1hYAT68QnPTcqFTnWszLBI3VJSIeNZq7kFzAPDp
+x2THNrnybNepzKRJDOnSrmmuSwFIjxEqG+jAjtaQfstHrTZKiwOqFRxugsi+z5uu6Xg5cZgWYGMG
+SOXx0QCk9MwhEhJ5MZIuZLuFeUvuZVEia3OUahyCah6h9KHVYBGwgo4xPauwZwYh9N9NQX2+BCSE
+Crdsk5YJHYgYSQ3JypxjeRuglQkSrZQfjGe0kESg/RvZbYTg1WHEg4lPjVT+EO5fvJMHEg8giXIp
+4t7OPAs3QB8v7PBbKia7lUsWGPypVB0Yli4ahLBK0LED7DbcAibX2LOWJ/PPiJ7EVVYgv4ADp+RI
+7Emx4JAjl24PjFcluw0Uy4xyRmb6LMEKyQIPhqM5nRwia58ADCkf3CLGRJchQyNfZGwhkfDNkKhF
+nDeUYYhLqlTBiwS3DQOSlVk9LUcvSKTX4VJFz2Wu5pDM1gnQU6RZAArPfHSMEgrvoMQI0c0oGy3I
+VkgNsWtho2EzI9wQKfRAK9kKITFJZHGRizHoRnuxy3MzZjOfuXh6vubFTcDFmOh6dBbBcxNlYJLN
+dUAOM65kEPKxwxPjI9yn6X04lcPpgN73Zc2D41jMnRXbNS+W+wxKSSekcummcRKQjMYe/C2expjI
+P6astq+nBdsbBwTPpgxiFg6EMxJfzQHd6wUYWWSeFY1tl41huJdAW9sm5N8yTZiQbjSgzV3FhkqB
+LIOAs2vB9JpXMuhDxc8qCwYHlW/q7sSqb0IJWBQVIPr8tivnPhAUJl1aTNRiveUDHtQpDDw2paFJ
+tpozIJsPPOvSTpBKUSPqmw2tGTnygJY+aUDFBmBZByEtosOkqWoSxJIpmYHgSI8XZRkCMSPUY6v6
+DPMloQ4A/c5I0NnaAtQx3kNWgZD2vcS3k8iD02hAlzw7CcAioiQEC8eF9EAQ0MkNdkslBdBhKOYt
+huhrsf6C3DgYn6plFpO4sWeVeXFlwFsm4t7ZfAyDmK7vIAxu1bC91HwbcfOZu7/H9km2noNCehSo
+MhstJFNQEtSJd334Hd5HkjQaBBY7LccuuxEivB62VTw5274OxWYIP6ZYuB1WDhKlDcxQCXy7iAae
+x6WVwAnIFXd9SJQ2VfbYHKSHIeg/Ft12w3QKK448wfiA2LOJqVQuGOelBtKtsdi2qABk9TSbln0b
+40bEamt/nixu9FeBwxtoREDYBy8KkDlFpeEOoSRwRosON7R6wk4JcMsoNvCGom8eiZkfogeg06oH
+lCbDoNX8vlhvzJBxrb67DmK272oviG0BIlyD0S7GmxgMOrzTw1CV+Agwe5GtCyxNiYT+gNq6F7N9
+NiGrFOaqRKGdLQ2Ua8gmmXQEgFmXVKQhuEdmoMsrM0p+80kA+oIj2ILsNupyuB2OFtnI3czdQclG
+7okdExwwdh8yyXGieWbb2BV7RgVrTZJIsQJcGGC4B6DRLlVQGtvLdWnpoTYQPwHYjLgRtY0tVFXK
+Rh+JjjXUIOZV3IXTgeJB7GpXcdcqNpyDd0RqABGofP80C1YQS0gRuQGhDfmigom8iA==
+
+
+ hLQ/i8uPdl309gSJjEPPjThOhwPTIFEC0+iYLQWIbcuGgSfDMJY0WRsqXZ41fYhc8d0/QXCKaQUP
+YioijD4w5yRTf9PlkAtseYEEh6CqchSRsLtvNZ7NZIJLmBnaeLDwwM0QwAklNs0TkyMoIvM0nv8S
+33TQFuo891asHztYpQ8tu81Fq/iRBKAonwNQzBkEwm1yolVyHobv6AX6b6/RKqG5LG4D0Sqb86ng
+r9+cz+YpXJV+/m1raMf+ou/iRt1+fl7YcingX/1xywuyQ5Sr4tS/PIYM23LNUG/k8C1X6Iz227X/
+Y638hWT/XZ1/QXB7P+KyssEn/2Jy3G3injRi/60fgmLZEQ4KAkNrxjgOQNJ/3a0gScXn37N6R782
+g2zUnAWHDAWSuf8e3L3kX+nnP3+b0YP71WDz4xMWX7gYdYR+6Vdq9+R9fr3jjtmKV4HU2ZQLbr18
+tgeBA3/pJc6GWnPHnf1siXccAsDwGdc8fH2L4/zXDk5Yyd70r1ldup+DLkLVfiNKCrz7BIBlt931
+3N0djvPHfcccWB6P8pvfZ9VJMOLnLwfVj8k+MrjYBGjihavfW73QcQYWO2eViQztkIQlBLh/2MH0
+ZedxWUEMZ6/5JzU6zvSVH333wT3THadh8ZH7lmYSjYiy//yVv5PjjFn4t0VZNslxZ9xw7RlL7wM0
+5Uf3n3nypZecuE9JHjuNnlASyfZHbTKZuOTK5bNcx5G2mrD88Vdff5s4Dr9449nHrp9f8sPOzoce
+XKK985fAVG7yOdeumLOb88uBpI9QGLV0VQam/MkzKw61z/8MhEKHTp+cXWh+5cMIOPTcq86e7joD
+ExwOf/CdWXdloKTv3XX0Hvz476v+CMvl+FklVJq/96CVp527fL6Za+6eMMYHjTt4+CEXvWKBuF88
+dprAO8Oxw4FYbLd5JxezmewIoyia/7fTAHMZDIGFbFRHxyjn4Js+4DzWrz6LUdqDx8+Zh3/Wr7j6
+xCzv8KBdzBwZvej8Y8zg2mnobgWTY8eSkyc4zgIOpOh65QIhlTzojCsvNB3uTLrsiScuyQI9veEe
+wsDbTWVG7QVBKfuffvX5prBjbiRU6hd3Hur8O87M3U6559lHTnTGLbj15U/fXTkzm8koU4SGa+44
+3hk6owabb8rF990A4PYz1lGrnmvGJy4nk6965cuPn7585bMfbepa/1hntk1GT9jFOeHvrzx07oVL
+2zD6asZNax6HoKFTCDz+4XLHUbjm197+YVfXxs++QqGb5zJxRY4zvOmIEx74eOOXbz93KwX2NN79
+znsPHj/B+Ruhf795elHjNKTNLd6e6fZ3Ls8oDv1m58PPWomA5C+eIvBw0/2fd332wt1XvcIMxZ+v
+unI+hpjsdXkGVPzpyjTy8ee/doYcf99HmP7WmWb7dpy6e74AZH2qBPHeHQtocp62Ls3kywdSgSOI
+JdzvkrdoQDxxWvvUwNn3+jLc83s3TqeHl76dJn5+b9o9VTBE5z5FQ+Krl+4+xwznv5VBoV9ZRtWf
+eHsG6v3ujRLi4uw4fIjpvf1v4N/+9u07G5zRZbDwrx6Y5fzMVHPI2S+mkPQvnlxslZJ2noCKLacK
+/nzD0/OdtidLkcJvrBjl/Dn+b2faLR+lGT+3zK6EO42dPBzEcY+1eP91S51zSwNpNjw+xyy5owOn
++SGLxf5q7YVprGw8aTyu4mnQwMZXbnm5lC37kxvGOFUH1+7hdDwhJfz6+QszHK17TKHgjtPfyvxy
+aat2vX2WGSHtnfs4swWl/82LK7Kryd4NiKGedm+lPIj9vH+Omb4nnTA2zeTNy7JgcGfs8UvmzVlw
+6v0fdJ9H19f3He7MvnjpZKfzKRrCX9xRKgF1yPkr73/k6dd7Dj/45LFL73vkymlO6+OECn9tcUke
+zoxrV73ybq+8tRs++eSNW2qd6VzptUeXZtJx61OrXuwVEW8+H9w61dnnKqr1miNK8hh1zj03nbbk
+7o96ycF83rt0uOMseg3/fmZeNo9dj73t3iWmTg/3Tvr7yqJ0SD5TUpJJFz+99rapjrO8p87hTCCQ
+54RX8O9nj8tmUnfLui/eumaqs6LXqJuut81gcc59F/9++ezs1j9jpXn77Udveq3XPLrWP7988QXP
+0nx4/rTsvly8HYrwbZ+oib/9YN17lMf6h2ZlqzP8knf78n7Z56NrYU9NOQhO7GPET8nnzdPMmzsG
+f/gvPjnPWbUZNJFvmN4Ox40YKEfN+vt6mL3dfT5Y5uzb0ZGe8Pa5/O3eXyr/fLf24utvOC899DhH
+r9mM+nz3yXsv3dyUGSl3bR4H7ycPH5cGTQ9fUR7d2LfPpw8ck4kIb3+gLwtB+ee7N6+ty4y3vZc+
+sxkd9P6DizJieGbzO78vkT2ln7fvPn2kU/KZsOLFfnKIv33r3Ap9ygkrXu4XL+2H98wtz8J8Drr6
+9b5T+H/3/qNLckU7G657tY812vDJC7efli+fmjRd8ezHvRXmuy/ff2XN47edmxcDT59xZ9325LrP
+NnQvI/HNO8/cf+VJR7RO7YkCZEjt0Zfe/fiqZ9asWfMsf5574fUPv9zw7Xfffbvh83dXXXVc48ge
+3pfPXtNndc6ZK59584446uQrVj789yee/Puj91y3qJtYqL7kW9vS3tnZ0dp4aE8MDdvGZ3t4VFl4
+VG5VBw79U2Hw2PZWU5bCwLEzii11QxrqmmrHFNtnjBhKvzpw324fGTe3pa6iaL0GYIEni4JBIoam
+NrJPNmLMSkC+MnHho1cZAFzg++lkF75GAkSAHREmNgGgP8MCPMFToquaQEuAWwdnrPjgiQAR/NKu
++JpD63wKq1zOFZx5kRC/IXTFutARToeAOIJOwo+J8ymy/jPkqyPgnUcROVICTgaPDXvwPMGuoVNN
+Cfkd+A4DtKaDn4f9uhzeAM4zC5jxGEIQE8RT/GzaDTjaC8OjKEeO64L4CcJTQqa+9hnZgXg866wn
+KBBilZlREHzlHvO2MQ8q+NkSdCuDW19rG5aV2Mi0IGW5U1URYdWBIi7whbqOyoqOOuvvdhPxogJ4
+kxET4HmmyBcIy+LQOsv16MYUlSV+MqF31ZnQPHHJRURa2SlRfBTjggFYgfgfdRJmmh+cqhwS5maA
+JS7CviV2yrfhepqiOyB2KqIsM4X3CM8qLkkplCL0b2mllJ0Xtv2lnPK+pGbC9VJmVZ/QVZ0cridw
+CZ+c/IMwXI8gxRFSRrL3UlmweZIiKtN87cwoHQKxTEyAA2jiqYyQ5rG0rgi3j6KStiqJAAyqAqbc
+dTMOaDegYYOjlbG3PNQCSmRUN/xSyIhQn8aXBDxytQDKLWA4l2MlADTlMrIB4woRmwGBCKF136oM
+VjuSgEclqC1AvCTC38kkg+CF9HzpbQjWoTnkp8yqEK8VcqsGEfc2VJzGBXeLhCt6bhBmZnxpolnx
+YqZkzCbbMAbqbs8rm8WuMC/HMUFC5ccCjHXLNC3G2lkwmI3ViwT6J+1CGcDyg6jOWFmkJsYram5v
+G/AYWmw+AwooA8VxUrYbBlG0YBQIYJ4huInFzcjYkOBIphO2fZNtl5QjOa2B7AQ2qg6cmXYgEyZT
+cFOZWD8fYAbshI+yUXkujk5Yh4ToGn5BC+rI54AsCLVghIpXFbuCQIVkxrN4Eg8MiRJL5FcxsBjS
+OKjO9LZvB4yykWYhumXp95XnceBUIEy6inm6Ea1uQdCmsVUi8bGJBEMlDOG1laVExfTdCYEzCAKb
+MG4rs2akhc3su1CCQGserxZ6huGKzPKcko1jDEkYU6KN65NYXgyZENRIWtqSQRQwyCsz6zM/pcOS
+wETG5OlMEKKSaBTtCpADQLwujXfAgUucNUYJBWFSOuIh4IcLGxDonhIJvIXxMII+hOQg8pLswgmZ
+JhxfEaRxhaFEHkG0sp2HMCkDAd4wUA+C8ojEHXF2Ui3uI955bBOmGVgELZSAww5cCirvLHsUItEJ
+Mm0eRegwoVFCYVsHXlwO1HaFERrCcCLN0VsSIwNgfx4atMcIujqIKX7exspTnj5P5EycFhUVkZo2
+6DaGeBxa9yzwBuDdsvRHQjOdRjTJ4UkCnUIOi/eygV5EsmyPRIMwIMmnNUt6izIwy61lEODlBeJ2
+OCo/EqQe0r0z1FSniCrAp+s0qo0nV+bZ7HYAOGGKSDJtIOEsGOqV8FooIXkAcFcS1mXpr+HHPBus
+JcB9gCQDhp4o1CVMCXh3keRYxraEtXFcGYRicQnSroGGiyw7PkPkZaOW9ub4c5lfVF1mUYCAjTSk
+iYJAEUktaHoItbIRIcLVjZkqjjOxcP5Q0M2yc1EGAB1NvNJJG8lZM7vLQZwIhrHCfqQSP9UiEHhu
+OmIgAoqxsYnA2jD+icOiVCa0T6tsvCUHVENYja94etpQJ1fCmbMnY1RDoDhvjMVNbFiMUkwMrt00
+LifWHLWLmEkJqZCQbt8yJkD4BbEYAIk4nEtwzEWJxODDTkcofYj10BQ/DrEFBJ1HSYlEnkT6Z4mh
+iV25SjHfNgYBBYSQVMQgTU8y5zzE1dsNONKEQaUYX2ZSiPiuxhDLgJcuG7JEcbvcCgFHESHkT4Jw
+bAZSBQlX8TA0BqUqXB6fcplC4DKvB1oYD0puAyhrQRGGQOAQKwltEamIdEGI0hN2dkWzpYU5GtMR
+H6KDBFRv2ksyANCyispPXBHEoVKAFICSKexLKxbWgPAicx2RKvAebr6OtM0g4ai37HSEQKLQ5y1U
+NqA0Qqxkt7RtiyFaPi3KELamEi4tCy1ANAgFPUGIZbYJODIjs9tGcvWxmXZyiJzrRVHpggKIRC8q
+2+/TXCO4cOh0eFFMNAQoYexhdjbZOJZBJHmCZzaMGsqsSHwKQBxkKBGRMamIZKKOIICZgpLDJBMl
+BxEZFJgQwuImB+Q4lkgel0PE0gNu9v30ngHJEVU2c9UP45R5vsKG0ydEqeoj7pFQm7Fvyp3iSH24
+oHhBApGQccFzkQ/DFBGCJz0hOol8vM9gqcyysoVA0vzS/Ojw0b424zYJHwUjF8FHdcEsoD3DR+3D
+CB/FF+i/vZOde6H+icJHyz7/0vsjvXx+9l99fLA7MOG//scf+4hW/JduSvt/fuP8sQQ12T1usRuq
+7P/y/uyoPbNiid0jZLvp9V/uGjvDx2YE7/+t+4b5f7tJ3+PgSTNrM2CoX5c0zL9lwXQ/7wbzOrxl
+/oIZGaDa79VvMt8WsurkP9upVFpePnu3Hd15YAZh9uvEzeSnSyi3/5zkijHuPbNhYgkFtt5LOmhg
+slf1oOxXVfsMBeyL85/ZGv155/3HV5eCEnedfBB5/oMJB48MS1QMfz9yLICfdohSLGTV3pPG71LO
+Dr7rzCNmQvP609qLnvPfv8h+t8fB++/k/Gr3fWwPVh3a2VHJvVc149TT549wnHHHnTzVcX7h/iXT
+hnrywbHzm+HjLQfrsHlnLBxfkYUz/rSrrz51rNN+6aWAINh5r0w9/zjhUFPAnSdPkA==
+
+
+ 9t9v4YVn5pBK73LsDY89eOPyO598ZNk4R02cEGWm8j4HmcYYeOC0ofzvfRdeunx6ZRZO8fLV6959
+fd26lx/6W1Pj4RMDhnmaz5/HTwJ8xMiGKdzzet6KS4/JoRvf/aRH3l//5VtrX1h1+zlzpuxhJtCv
+GWa620GjAXa3b2vLGJ5Wk5ZcceahlVk4Y6946aNX7zr/5ntvXjwRG/+/aZAOnjAREW0jO9onwAD5
+X6Zdjr388mN3y8nj6AfX3D7PmbF0OdNeFwqQwV5TpozEITC2owlgpf8JGO+6869bPi0nizm33HX2
+vs7OrYvmUD1/Z4od1XS0HIhN4E/vLJo/fjsYMh635IbrTh5WkcOQxTdfBfzju886ohYH/06/d9wZ
+C0+ZRdNxVMesvU0OO8fQQsnsi2+9dMHu5VnUXnLbhYhgGjNvHoy934Y7OiOOOZ+Zg3dpPfpw00KD
+qonVeeiiG2+/sLwqw85ceddpe8BfUceitthxwl1+44w59erLsWXCWaefAn0waDivMjUXrbz11DIP
+eMstq+9iz3rzeadNceKxJr+Rp9xw29ngHx53+pXnTjX/u8O+Y2hK77Hw5nuvPSoL4XQmXP7CuoeI
+NXWfJddddVbHgrmmNrrzsntvOX1/x6m/8t4rsUZDD9mPlo9Dl99910XZqux9zrNffL0ayV1HnXLj
+XTdfetElSwH9MOz0u56475wDneMfXnsn1mhY3SEE5dn5yGvuu2VhZnB0PvR5V9dr5zrO6PaL73r4
+xrOPOueG68+ERp1x1epXnrr1osfe//TpRfgDh09hSNHeJ95w94Up2vHA6wDSs3Ht8rNueOyFF+9Z
+vL9Tf9l9dyze13T1oofe+vDd1z/p6vr0blPsZNrhY2WtGbn83tsXSTFGX/QSuu2//eCdT9avf/Pq
+CdBBDzxz9xmjTBdf/PyHH72zbn1X1/u3HdvS1npQusoee/+jAmetPmNVFqDxBpKbd9zz2usPnmx6
+5Yh71z5968VrzBPvPnTJSXUZoYLFq5+/hfmm6277MIsWeBvpqKfd/M6X6240ZW+88vZlBzsnPvtN
+11drr5nD3ThiRsdRS5768L17GEAzf3UJjvDzm6Adh13+dtf6x003z1x+jumbsdeu2/Dx44uB3HTn
+g1uOvfyeJ9a+tb7r0weIMX7YpeuyOXR9+xQC5Ba93tX16lJn9OLzFuwBv/Pwm89fCrDg5IjL73/u
+XVIOfo9RuTV3lMFmPr4D4McnvQFMshddec05uLoUr3zsTgSrTb70uU8JM/Hdh09eToOr4YFykNd7
+tx1zoHMBAEc3vvvifSfjjNz9xOsuQwbfmYKh/uKVmxcePRFDRBofqIDdfPr8vVe/TD/14Z2Mc52y
+dBn+1fYYYlo2vfPIsoOcfWjCF2//rDyLri6LoH3/Kkav73bsspNhas5eBXl/9/K1c0c4f2Bm+mFX
+vFeZhf2sO0OGwcwVVxxlBuM8pC5+/TJYW4L9GIK+sCes2btLJYvDr3ngCtMaC56Ddlg5FZJ2mcAD
+fPZTPSCzvrpLwJgtd720+qJRznEAAwTQNFRgGrPgzrg7pzHs5/VrGK07/6nPPll1vHM+zMj3z8Ok
+ie1F2iX3XtETD/emdbceiYi0s8xTX6696RUo8vr7QXdh5FGLmnlXa3uwR/jfh8/ccNrxJ/ztaejM
+TYwMeu+BM487cdnl5zTxxB1x2bqesuja+MmbL7/6TinE6au3Xnz6iTvOtsjXjs2Bhm367IWbF9gz
+3+YBwz557LTMNrD/8uf6hIbMfjasXVZyXJpw0Qv9hJZ999ZVJRBgc1K68Pl+5fHduytnOWWfA1f0
+pxzr31y5sBJGNf7CtX1sj03rP1hzRUseEOvAi9b2oV++fv/lNY/euiTn1Aifccue+mBjj++v/+DZ
++6866YhZ0/bMz8H07ZI71rzz+YZvv9uUp7G98bM3Hu8dCVY946hL7nzo708+tQo/q83nmWdffP/z
+Dd+s//yNVXddOLs7NZuSz/CalvbO2XP4M3fuvAWLrrrn0ccfuf3Cow7PReX16bP39JbW5qn9FFL6
+oT/bEWSbR7DtRUxLRjRLSUz4Lt8TKugo5YfwrfKxZmXQTmYYYTYTINZiXUpkyYnZ8MwkwkicEgdi
+Cw4t6imuCn3yuKRIEi8mAmh0wwjlAFCJEK4BwBmWoURXucw3loinADk62CELtJGmBgLPcokuCnib
+GEgCzgjyOYEfSEka8RVDWdEzIwCrhESKkeGKOQtSGjPrHkPcEZnewXmdpVLQpMANhDgpd4gmIVj0
+xUdittVWHda6hJF5g1sLniUqBZNrRExDKBfMXhxkpFDC82JJtiPRHAWvt9AmAMIHXY/ozBPyDdDZ
+VGyR9zM860SNBTRkMSOnNHMxgE/Bz2YgJFaJBbQB5yeZ/6NYmtv1hNQIiL9CbW3czB4EXEvkEUBC
+cY9+3XeVJDEjD7gHfUuc4VvyIeCgSXw2pxN1h20qMkYzXRhIKFsqPPDtEhgIfIFCxg3kOQlDZpD3
+opMBKyF5JGAUh8SzCVgfwuOBUyaxKsfMkAqOWT8jcsz8coFQsqNDgN0vnmUCBMpOotLTUYZ7FqYE
+ssSiQC1zxgE/tkKXiBR2EFNhkwcpRvJQAZyEnq8z440gFMxWBXgUC6MhrXMS9RbKN5TQ9ZhpCUEc
+XCgmCGegZydDQ9DlTOgeUcoGIEsclJUVvIfku+bRKj+meHkQOg0AMPDcBISE0CVrIUpFPItQDAIZ
+EhM7eZanHVickYkbeZlcq6GeMKwBeMOF5TKTQSBc9wBL8HzFQBh09ncyjIRJrJBYPxReYuGgcq3r
+FzAQJDIMdFeepVa2GcQpIzo2QRSUjm7o0ETxgLPsJYhDUcJExrRvSEVNEKsoVRsXPnWYh6mCN8A4
+yFOuPfK7EjSCfeqasXoMogiJpFBn2aV9prLOFlYD+3vMU4YhlOjAJyo4AMrYDtO+SDakSxmiKBiD
+mA5Z2HBYpjhKQbyZHwMYWegG/GMJoy2R2qdzQGkG2sICYLXh13nQ07OBMM8hDIwmKDSHL5oJoi5v
+CUxh0kVCkAbOWCKjgnq5KvLYbcvoEuh54WBVwmQWZ6katS/MnrD2CQbBtYnaNgxQOTLIKUn1k9ET
+ylTI6eCKUjyTb4rFZJE2g1hl4SWugDuga5i/HRKZui7tL8gVuaDtPieua0JBEARQy7PMnIZM7tze
+ACsgOjRgDGV6X+AB5HHkE4UkO46Z+CzIElMqO7wiEv8mh7aQ65pix0xOag5EPq0GvHSJl1pAiOm8
+BdbCQPF6hiAI8VIzASCgtJl/3TLBQgkSQo1CovAp8ziiH/PE95zi5MF9LlhWs5zEvpC5astmHGhL
+ZSos+DA6BMcBWBYVZOcoIxg0QWzNQuvplEuVlUJ4Y6ZOIBRjdjVAGAd5/1UG+QMdpjVjBZjkCUqV
+CoEHKa6BeYc1DyOpQUSM0DBZBVkB/mSPUUIIUOu0tY2STBm4xwneqFkChZ70CWkfZcjuEHSCAgNw
+7kVkAo9aWueiFLAHOENmofSzwDSXCPmIN1S2hVBIN8M4TbRLchhnccJ2vwsTOonQLu6ReH3kWoED
+AJoQtC7MckYCUJBOF2kGCIunYsmP5Z79+4IL0OTPDlwU747NguQBFBwCP+BWALRR3eICBsHIMosC
+EGtq0/rmNG4mblwI7fYB55UIT3JQesjgHxIV0OdG3JZQAYE4+t1QUAFRIUjyUQGVDyMqAF+g//aK
+ClC++smiAv5li2mluvNp9/nTH3af/M8v8/3ZvX/+H6n9b/tODlTyScte2KGn57r/pGX/3U49PdfN
+539ly/4H/ft+Z/CvP8uKfP929936XY9f/cJxdko9+3qfuIeHy+igsP1/8YefO44/zCIPgvH7D3LK
+P9JT5exjgNf4xf9AoZPJ4yVge8cxU/ez+ATxjw/4Dbmof/Wbkgyc//p30/ZVoIy+a33bIQJX2H3q
+ZOEb+A8L6Nhp152hlIUy7MNvTR/+ESEI7sxj2sX9/j8TDt6Fa1yw/bLD/jUTq0wBo1Loyx9+7/xK
+EbSh9uSjrRG1+kCTw79CjQcGdpyMOWLeOPObu+6eJYD6rR7o/C7Gwu8yfymri5vPnpADjrGBu1p5
+7kmnLTt6N8dRI/fOoCm8Pf7H+WWEDT95yUWnWFHVEZN34zH226HDpNTFFbdfVu84vx8+cZTVWN5x
+byAH+gv8SvVxF19yvFhyd59Rt6upOJZ299GCDmm4+ZnHlg4zrTR66njJAgm/nMHDXWfYgguuOq+V
+uRr2mXviTNc0vi6YfwybJHCEzoffe3sl+ILdgw+fQF5Yt3g4ML/sdGD9zFNWXLX8SKrEsJbzrltx
+OFRgTzM049raPTiHE1/YuPHlC8ChP3rWDPJsjZ47D1t/3AnnX3P98vkT0MWz35KVz75wN4rGDi1O
+PrTtiJnsBjvwto+7uj6+ExzUozpmofE/aF9yEhrxx5123a0r5hERzahzn/hww1drT8LuW7Bo8alH
+H0qjfa+/vbwJKF6gGqPndaDxevQpl5yNPCqjTr3mqoVERrXnKY+Dt+zT28A7fMgpy849uZ5HZ/uD
+QHKyaQ2QfRxyTCcOvoPOu/HCqfCHPuKivzF1zpQbiKbi1asOdYbOPuOMYw9nx9GwC17DL1461nTP
+EYtnYQdNWbHySiIdqDlrCXvimtgB+u0bNxy14Lgjm8eK17nmDmLyeGep4zResIwgJ1Mve/AmciIf
+uuQM9ge2P8E+jI0vXXViy5iUz0Oobb5Ze/7SOx6+7nBMPOjSx+8/in7gb+fW0INzVovr4rXLaszI
+/t//F+eAIt6Y9QfvfPTO/QQHqf7bquevxdLPuf4aJmc64lnxeLwIIICf22nV9veMg2XD08x7cuKz
+H7126/wxztTr1qxaQX1x9Is2h+PNP/9o5xCq1dvPa4sodfFrm777aPXKyx54+6uPHyVl1SWWTOL1
+s8w/dx0my0PtXVmf6CfXI73AmJuheTd9/Qm4H9+9Aobn1JTT4qsH6pw9p0+VNXevS7LSsxufRGf7
+MU9nvLUbnjzBtOi1GX6Oj+494+zFbXtINY55Luse+nilafraO0pomr5ctfy8e9/JPvXZ8/dd3GaB
+Xw33lVBufHjfucseKGOM+eaD98uccx89mVFgHbGiVNb36w/e790P9+4dR2ZgIC339M4vU/b55JFT
+sgRyw5au6Z8zdNNHjy4pYblzxi/vl0/2y9fvOqU0A8fZ/4I1PTnKSz5fv/XIxS17OeWf8Wfd+2Zf
+avLdF+seuWT2vhXvQ1t0XPbYW59/06M686Yv33n2/os7unUh7tt50Z2PrH5h3ef5lBbffvnemvsu
+P6ahsvzZctS2zjvhinsfX/2MZbMAPotX3/vow3UvPHXfZcc05Ba/oih1raVkFkeedMmNN6w4vrN+
+C/yHQw85pCcijm3gs9372A/vYze3V7ye/rkDizga/zvd/JdMrKLQyVDzRvuFy4FDmg==
+
+
+ WQXASKoVBdPGZOhjyymHzbJOanWaQ4gx+J5EwOf83ATz8GF8d/YKQ+nVSukmLlW+0FOuJFSlehTl
+kCs1la9JVa5eRRmAYSfiSM5ExRJ7pSKP9a80y4xC0JBlJUffLbcMhpAlQsPusgQVu1dJg0sKxm4V
+ipKCQJc0C6U0s6trG/zkJhJBJnFWeTFZlENuBFdurFdFXJhk0U0UWVnE2ST7dG58Wm4kW0XUm2SR
+EyOXG01XEXnHWaCqlc+R46hnSIko0YU1lHhPVLCJeVihZbLaZsGCpp4vPnmMgYxCflqcCjmxhpID
+eW7hC1GQgojpSDrEhslBGHXIkfIohZgWApheeMgqGz/nhj7TfkQkHgOJyic9DGbrkCw8IFvwqbO1
+x89qL5aG4DhKcK6gsz1CvY04LYNP5eTgehr1kJgoHkIonTnBPo0MBNjy1u/ikxsqlTstXVJ8sXbL
+khJELstyKpcXIFBoQt4AEDpiCcfKhUbKHLInGUehhJaFLIwIZRb2Bo0gBZ57LqgapAsbi2lA2DcL
+YYLrL3CZnATlGMivJXoJIKoaBDaLyA5klVZbk/OOdBjcWNQV0WdCTAMQkChZgFKbaDGwWhXGyCnR
+CbG1wwWcZyR7LygLELMlbWLz064N9NYh9UhswyLB7UHEMT5E8cXKliIm/yzq+LIKE0VKk+awIvVI
+KgULbfihSC9Ij5DXKVKuFR6LJDJeKeuJAqwIwigipUmlkHMAWSbSoAm8rJwxUwgFIa0VvA6lX6iE
+vAQ8akNcfZVnw1HBO4e+CRA0RkkXrjV4kgNAKaB+su+F7N1NEA0Q+bFo3KNoKskUK5/Cy6ttKZQv
+Pyh0HbHV4fYT8tlOsE8jmwJ+IWscJEYkwgziQNYbUi7iLDnkSD7nikPnCEljFrmy093oU5crWUsG
+ubLXuQLZFWLakgU68OgAwAMcfIWBXb7ZsYR8JHRU8MjRzC2RsP4xSdGIa8RnzxCKOXMDg4NZ2cFN
+EqLUmKCxgyPR13b6xgJzwT5ij3/M9FpmRxQVSMohZje4aXWRSYJCEHGCWcRSHhyX426jQBNKReoR
+0AqN4xh9ilRk3n1ViHRInbbd3ACbXgFFh28VxxM8OPmg2mRl0BXyPvkhuczTZgt9aoywhN+F6FnM
+qEJ4ByUSLAUSOYZaCpEEuKJmZjXKY2IWKhVeTMwJIMDt20x17GbKghRo6GkbyZ0g9ReukUFi90IQ
+ikJ3ZRR62SyA58WckqAUYST+aARDadTiBkweNCuvFiBCRWsAeJEjYiFSQgcSxqwWinRHVAbzc8qz
+B06kciKJqCCQ0HEssUI6kMAXlTcoMWHSIhWQ67mmvAy+tnM3EZIM28ol+cphXEoB1FZ0zopS1iNl
+ZbKDlJEL5AZdPsgAyKDa1iMIYz6+hT7XOmQxUOTREaKvULoDthXgUpBCwLE05JXFslr5dmkLrX5S
+mqgYDSmlEGAPNIVvKcDKsu3khyFqH1cRVJXzRB+LxzFIvIfco7HQs3gc8V6dZuHSORIq6IX8NJ8M
+QE1Lc5fmSGxJFqYaMX0hOoFwIAwkC4H5JSyyB2kIaJBCJEBqE1GDWp07xBmwqL1VGvRZHhmWaCQl
+40JYVTyYZSzUDvkSKAAGHO8qyN1GpBcqFsVM6T2mXwt8UY9O8YpRENO+OYmfrsiGoJgs4iU7OCFM
+mQCwdLmAMpupHlNP4dmBMKZ88bEkT4Da5PkBZQRYCTccfBH5fHiyhVBW7NiyG+Tqu0kWlWJwuapx
+OQpzlEMAtWIuujQH3mMBm0lysUg7yOwXLu1GUo2QycXgGOm6VqPPJbYsX45pObSJUoaYROTpi4BY
+GjEx9iTR5hDbHGCdqLY5eCpmn3OQKhWi3BfxERI2KFcokLLoRlYwR4AwR6yQsgBVcJdv71bfNIbu
+4JNwGNEc9QBTi3dToG1QaVsCT4XLTDGJVYcUWkVtaRWRGdO3gn3WrkGElZol5+JQhYVBeeSWk+zT
+TEKDF1Elapha+0I1FgrBpznhBpQt63VTDibD2JODDGOSQXxUy3UzjEWkk2hScIUmdCDlEMhxxbQf
+g9BQ6RQRWHC4xbkhJQZzh+whzCeZSTMjNw6pDMpqsZkTQYTkHZQDnLAiFqQT8kEfrrcJQz2R+ocb
+widYLGtMp40M1h76QkgZoYkCog8Emi/JoVRYVNosR4M0V600R9lUKgEoTkKoyfrqw2GF2E7h2BpI
+uychsfTFIpQuLWnujUzFIoLCprWDxGMoslCLgG4ui2qz9GB1ZvjEzKSCN4lcbNGkdKGIA2ZT8WO7
+6JrTIT5tqaRIOTLiRC+zwZovaPMGNBQfx3JITtJVnsXAAfrECwCcNWLEeYVgmlF8WtGeFkIVIJaS
+YyXkEPDDZrzQmVDY0hCoJGSIARDEcKIZm2kW5rJAJDTmC9wIBiH+VrvYKaGWZs5li6HjOJg4fAaG
+ydUbEpXPZeZwBLwTEnYTEmGvlQuW6Tg0OEIbBWHoye2dkIeg8szwOCQH08J5AyfCjG0i8kL5gg0A
+AKaLJZGOWHm0Oda6VcGxk8vGk8fcQzY237IaeYhfpzTUJiXeMOUKBtQcwkVGHZZrsU0qujhQDEPA
+1jQf9isWaLfGyRyBdikEEs+RnHssv6cCn+XgGe0fBcJAp1ksVjIwy5QnsQFyyQPUaiIcm36gJdHM
+W8Z2IklnWg080OAXVpNekTURp7QnBlKfrTmk75xeNaEaRIcYsy1sUB5B0yT7NPKc0hcqEDwqvkiJ
+ZpByojA8u3jBlt8DKVGPoex8oYs8mXmA3w27BcSW2tdL4LO5QNsKUG5qV86F8JbBfSfZp/0o5FXW
+1ZZVyhz3GL0vUSSIYA1llYWBkHZ1Gt/DYTAIgmWYuVvFg83MLh2wsHUCBctk4AVcONwTeaz4PnPS
+yg0NqsFEtarkOg8rEkHCgXEwkp4TxWKfgwIiPyMLywyAMtYIswsnECHcUsysDYcECU+p9IxUswPF
+ZedJep6GspjR3phJjplETfTWS5/VYXogJ/pv4HHOnL14mYVoHDlMA72Wz4k+0/zmUYXLCVBbEkd2
+kyDdOXPvRvZsAU/i1Q3JugNrfMdSeEJkKaLhcM/UNl83qawanQwOS++hpSqwjekVJ9ZMyOm7LCQb
+EZaUEuWWhD/OWaCdQe5qwAfrMkW5n8QiZZsECT9tQ71Moh8xXSxS02ayiAP2G7lC6BxRpADeGBK+
++KQ3X5Oos/ds0Zr2LP06nNDjxFInuyLrLEc4l/Srq20WbOFETeFYyhCRvRjCxFQa8caXL494jdMs
+KAyJCidt6ccRpzE3aa4ob9pXnp3IMe3j0ldwXvY4EgVDAClRJzSVzc6gmLfNszrzHgVxVNu8I9r1
+4QvlSbib9l0Og5QTFyRGchjUnrXCwxfo2KFQJx0KzTX5Tin+SUtgnvBZeySrnZpm6JqLX/CYgwU+
+9mVJYrODLwR4QEAKHKzVNgdS7KajKpOVw7WQaMUhW0mK7C/BxpRaVcxqxutarMVEpZVQKVqu+Yre
+qLZdBdFJeJpBWwmSnzfaoxEG9ZBphMljIUqVKO49PNhJGhkkkcPfnkoxhyRkj1CcUsqi2ZPvQMxp
+a0oYyZNoTqq2pVMYYIu3I1q+INEck9looxXb1SvqkakkuIpRiT1EkkLXOsyjNMQwSo8LNkQT4itk
+M9TCogr0inHWncqkfeBhYgbuSMvlAq4LadCE8nxORL7z1C1MfhPMWrZTMAViGBU4qdg8Cl7TRKJE
+wtTiBT/IQhFQwTSiw5zjPDpOhemOTLd0PE5lndMBuzEwaopP00B2SSSeWgJTcZd2KXpEoxWs2jay
+pz0OcNaJuKZ9hQGIkBZZJ31Zb9RkugpjOJiWFuMyGm0rIf8jhQlrPs7CLd/n6EC74ZfHSdXYHMw2
+rOichNOaEiWKTlv6bkiMkZIbnC3ZUzI8rSUuK2HnOeAqFD+NDkNKrCDNlQpi7BWWAsOwKTFwXQ70
+ZDN9ZUtkp61symAIyKywGHBJNnHfdD/Hp8YQ4hh5lJhEsfVbuQH7wzA6NeN18nHSmadjjvaDcrk+
+J/JIiK02gx9k4RoQSK7Jyg3k6AVKCsl/AwYIudkF5JFCw2eSqHTaw+aPuzdaCtgto9m6gIk8V6HF
+AzycgY0xirNZUBgiOoziWDjJfeWzw8iuabGllU/Iypq6e3wMWgRPkqUl14IjAMtN4krcaFlvZDfD
+mE9muGbCvbgx84U4xl0JBTeJJGzhZTbDmMcMJqbACLjKi5fYy1KeBtCYaJQKXZaRCMWKC4HpmV0k
+YgkDFCKJrT4KRkOikSgmvzidRcS1nrXvwWHCVfy0Elt5JG4xsDNpa/SnqxX5xeM4m4UfBmIM1unh
+x5PEWHejfJI6mSplUioUVSbZ3xNZk5jiXPmklFjjobKNGStpN2yfatv0YvhNrA3UBQJvMnSb/gg8
+cTJEgeYNEm2PqZ8iJEs3whoSGQCBjrxMX+eOIVkLSpFwKRirAgfTaL8IkRAdvpCJiNHOASO0UJBi
+kM7hzK62WaDNjfFcrgB6yn5QQGJ/7gbe5hYGj2hqB5Sd5xZqmhtbmjuaagttINFUaGyurSsB/AnE
+b4TnjSm2t9e1No3uaG+ob6ob3tw6tqW1OLeuNfO8bRDIGzCHY+c2Tmtu4H9jQBWnDBzT0drSUFcY
+W2ytNbn9aYBb2BMQfLOREGQokoJI5NrMchBft+g/02MBhExrPqREdF2BZBfmSkCLWMhjWsU0GQi9
+kWDEcwI+VJecZi6h5jCYUcHIjRUtpJ45HOGz7HkmmIZLJMfKs08G9GS18JsQeMdPLOoN/O5IagCI
+B7FXhSEZNHAJDS2pdeAT+wjhHcCCPBKSlWZLHzj5FC+MKiGDBK0CHGIeSMHgPBpAzaBgMTh2GYPk
+04o8kqn62aIDwesUDo5TlUkYXOsZQ/BEzPciNP1hhaFxQlEFQhgMtS43Dp7auRljaXIQ/bEtBp4z
+xhQlwnlhLiRmxmp2gagAqRmg05XSXAVNF31IjpiaAYER7NIMAPineUpz9H3OqKmGWE8whoB9koch
+9Y0OFa8peJVtZBIIH+9B4MBjfRA0+Yc0kgC4Z467EwawtV6jaAYeo0Nu78qcRw44bItnsMuBjTN5
+BLFjC0YQtDMWXsV2wEYytGGw+NxRnnRUdyNIaSZ3wQWczHw4jXC/8BKbqYolU5lENVyAkMul02cT
+W9jYgqUqawD9RIOYc4autlUL7Q8C2AWSRzIHRKxC1o6RMeAy6ASvwwxegGJGcuU3wyKmgQWQnpic
+aIG928NhRSPiB6CVQcoT5LmlGwgluxbeKSMT3GJahivbo9E1R+AOlEqw8mqhTfbIgcpbGM0jmMms
+joZyDiWJFN0d29ujfRbRj2j2wiulF8qhPAxdsaJZVSAwRjL6UYmLCixuif0xGTWVfVPNhBVpciDM
+K6EMBS+VoQARKc41oK9FSUvaIKCmGYSe/lAHfubZQeiXTp9MM4ALdmm+1OBSgtA2Ig==
+
+
+ bBo2Mc0AfGw08AGOFdkux5HGGC2iCgJ3Gmk7AawQlnEZB0p7DMfU4myEy3fIMAq+NWQTIzo01EgG
+vMTFqaIgmIs0n+9jtvYgDxYB4CKCE1Qz5RWK0RBcRoL0lRxa/TiV2bNt4McpIQsepgLBRTHvSCIr
+fsnkTdKNUVOH17CCj1+x/ER2n4A25gzCKDMOsATVvHKmybhj04Ia2E4P0xUs7d0kXVXS9Sez5ceB
+tsl+ui7CEd1j/AyPzyBkmxmk4Q2J3g9YqwavaXQjDADB6svlj8HMgW+PHNxaWK8gtItduiyGvjRM
+pgKhtlMpyqzLsCuFCWOkRJYOoMMxDiSlbH+BMibtX7CughGahqd4jCCZhZggUcUBw42YQAcSuViK
+0UM0PCNpQuUJBh15+qm65lmlyAwO7l+7smMilcDMABVyCdgTBokpFA9x3pRo5ocMzwghAYOyzngf
+Rro46HVAd2ptQUa+bUNf03Cp4VOMG4d8p0bSJTgumFU9ktHp8qQJYMcL47LRiSdPPmSac58iE6ny
+BbTt27UPkQe+5tOk9mwX8D3RT63h5iVGjImEoaSEdHqhxuc0yyQHv+X6fM6KhB8PqPLCrColnd58
+chiQ9wXXsMBloUrE3LN0Y3dHL5dFSeC6GIa+HJfdQPQrA+VZaIUrrFYeHb0oGW9JWeojHGVsbgbZ
+10AwAshkRXxIZLHmfD2rgUW3pQTtIoGIXbH4os+XQFLMATAaZuDKsoLeNjbjAXsU3tBRmcvjySdL
+ilt6rE6TM6uSXUXhLJ1ZVPiwpdKVRlYFcIqlq51ZQWLC70IwC4OvQzv9AJLAe2nevrvlJ0qvsGdL
+5mrG09H+uD17ZZJxCNBJ3Yc7eRyUHCthrJWdNWnqhXSbKH02zsk1TZQSUAZpcsxjOM3TVzm/L4k0
+f2xZM89mKit5Vta/BolibDt5tp3Swyh2aGPpGinJvGz5MYOexNeI1wiJYvCtgCzc+1yXgWUeL5Hp
+lcpPr6te5vLlpc3kW2Can73a8irvWnuFuSWatSKRuI0wCexNLwEOLg7RolOMUnTxJCRfRMhhyDVK
+PEm0NUisvy69XAPMmrDc4NJlAKwP+MiELSbs6qQMBKfqi5Qi3ktDj8/IiIulRHP54kslWuypDVzZ
+6WBtYy8URDcwLC5I7QNpFTiRMggyoEH7LISmuDxXZZlXAAkkt15ER7ZqHu2K53VkyUtVyOsVJkrX
+hBaKGGW7URGRWemzHu3bZHCjsZWmeeyZpPfT5MAC0dJMEZAYe6UFkEQxkUQBnYYzz2pCtdAZm5Fh
+cA8kuy1ey7TsOTG5VWMSGiUTHGRAwwBUvTMDkZyrgPkSnU/oRZ86F2ljbY/L8TCyDsbMOGJAXzVP
+eb7YwTXADwPbXhQm4ou6M3QMzU84gQdhZsly0UUGtwBWyAYQMU1bPMvy9DBnkBDxur5LaFAZBTHZ
+piGKgmF3prZh4nEBxL+s/HKDlCwGcmhVcj6EhUOaQKeJ6XLEx+Zqu0oF3IYClYdZwz8W2gyUvcCJ
+oats1fXtXgTnAfmxUGJRIZHnDNhy7I0iY7yKaWWjYcAgp8TydKYLGqoe2gzg0OgGnJxZuGWCphlU
+LslbY4vsKa441wrSaL/YAjsIZmFOpnLnSKxbLYCAHBzVkAU7lgIEQdARGpbBTAYkWw5bCMcMBQIF
+xFw5pqLSHilZAMSTLhMcWDky/aIi6CtARHYgh3mv9OyTuRFRFlt0JyL30hbdigQjvAX3IoG7bsHN
+iLLYortRGXx5M25HlAMMiJgDEjieHOYlB8HCL/vabiVsVAjIzMSFgJMCRdbAFwxfhjMFoYDgzB6Q
+JnzeikNZhNaKodIlNmQEIyQKwFfZiGtgC7chhrh5kYY9LPJEM0qLdCJLGYSgUCI6kzARl37JAsgP
+Fe9UIVUjAKtLxAGiAR8L0F4gGyWaVzgHuAfwNU7OfAHgIyTYxg+1XDUrzNWUgbauAwuAwESK4YBE
+8nxDohn6si/HnpfNIvHYO8rK3pAYu55YXohnM/fCK1loxvcHIj6J+VIUB+TL+wqUIpR8s8g1sNJ7
+nrWb0kwwbSEnQnBmd38BlSyIXhvPhKxAGURi2YIFP3AlX44DheOImzppIQiNAzwSCr0fRJd/hmpp
+IvumTY99jXArA2yMDAotsZJAdsD3d4Wi87KZuW6p3yizmVEWLjm8Sc5asyMFIPWk551QiB4fgzkM
+g0M/ZZ6b/tMuAyxDCTKIrIJ6bGOU8q7jsuZtwYVcstiCK7n1Nm/upZzApznXcvpiiy7mdn/zfe6T
+IN3JME4dW54VRyGRCcoT4pRNd98yBwuXbotcLOQP3mZdwQfUd9a1FoY3N9QXp5d7gkcPwOBmuEab
+jSvjDPb74AxGRmoEZoYhIBli9tYBJJ4kBkAoXaiIIwvcDik4UWi1GUkNtNrCosEnCrRMsN8XkUdK
+6EBSxnSgy3A92RV8S9rgo/ZCpITPmiJMINYvjEXbPYpYoRlinFn8IsYYFDpnJNa3GwJeBNefwMuQ
+AMOgpnCowLccvoGyDACJTFo4ZlLwhU2sGVD6bCTmTziESa5crE62lye0MGYKFsTUFniw8ugSDuaq
+BKnG4QimYDMVjmmpWWjnCsCxOA46thmg5AWiKdCgI0rGmWZMXUqZDohIU74kA98TLBz9mIS2RoSM
+GsQ8LxEjXDjoFuFkdAoArGqs0hJ4nsDBLeF6isYHrJvvlyUqiiOoKR1v2bHpMbgMxrFl8pHxFsLx
+HED9lsad1pYQDMZMl1IxETrRvx0lOLM0KAKbv2FymfmWpPNLTu0It8eDROjTJIIdmggVgnRiwM6v
+aRT5ZGehkRHTSQJHJ0PFYWxydLJKbxohmIjR3I47qmjeh7yRZP3rSDoUBZyraGIAUhBD3GAmpRnA
+TCKIthmbNjqF4JCQp44tr7srrEmZnwoDicaEuHumwQg9OmJx3L11G0GseRiW1isImVwf5hHD+Cob
+toY6hfokrFztBiE4jkKFzbkJgkzZ0Q3yHtxufspvEBBbAv5oDHeTTib25ohcCHchJ6+2Z1cMOYuF
+kYWxRUBnTmH6tHiZFJg7QMTOqMbIhk0COpVhrCHYgXCWIcxX+gIiA3BCApWMMCEFQo8EkVRADSE8
+6jERE6AOAEfphHQjgFJQH9M0D4kaIeSpS4UNmQYdqQZEOMVn4RlkNWAsaJoINAMycNJUuCGJlomS
+4FHwjyY09s2T5lDOHlqk0xIa9QBx5Ba+NwjRjBhSZXrRtcFVaaKZUTFRR+X2eEOf5y5E7hEph2aW
+q0ZuVZ9oFkDfIQqFi8onkiToATDfdfKSiCdKs7JFiS87HQVgQvuzrROJniiaHsIeoQNFFCKhqR/G
+WdiTopkbarHwYPthkBTsQEqkc5Ckg860oZei2QFLiZM0VBQf0Cmu5ABvDWFoacGAKcgVCgshEIMN
+mMZgCOcpu+HCQQpvLmEK0gLmLjfgaSB0IADyJvII01pMdzOIIwVxvzQVx42J9jVFbAegPMAQrcqu
+Ia9BinkzC1H51GdcrKkIcs0Q9ghCR3AZCWMrEgLqKcRgA2GeMLE6GfhCyjpYP16Ibdwl9FwoQZNm
+u6fVEeIZ3Tiy04nXsSgUzycyQkVYsMgCOFF6hLjjMGbSt9ubQhkheNQKraSJEdmFOsuetVff7G8p
+O/V0JIQNECSZCMalpGLC8BVHdp3QVvGhsmlrCFcEIQMenmlkqWnkJTBKcFXJFi2tMUf6dvKGrGlQ
+wuhiBjSIdSC4OIQZkHgUxqt5uMtBmIEXp0gbHPcmOUgHJWDb6FmfNh+ZrXyugTODrK0QAhyXlQA4
+0TAq1naaHB8w6hX7gk1bUDOFWj7U6LTiVzZNTfm6VLl/AVIXL/9mkeMFvZGdrXQihAhkZiVC0TCk
+SyJlCxFOUyLDAewzbFzyJIoLxbiYniHkfQ7V2GCsCeqHZMvI3aV1yftokhE3eyBYanDd8/aHhnft
+slnJRttDmEXElDEhGxXRBeax84QpkchOhHhKtMYzbxxYFUgCKfJTZCVs2wkapbyY4lklA97/MiUw
+BxNmTwJgCvRnZ1lpfYlnIY+GIA1YDAyMByTXge5OuUJkagYomICcDwB3paMPkj2Z3sDOhWoy+J/J
+bKi9KUYGAeIAfqFuBHMIsRnElizG9g0SDCgySKYdbtZ31xNFtzQDmI0UDA8gJY9l3iJLFRMzsVwY
+qSxwKYJgaQ5OF3oMcGBS4A14z5n7o3LMVoz07nZgaNWI4vXgopEwYBTMN6bYPrWqG4fcKzwGkcXC
+tx3oeuJSEj4bxTXGkWm9jRyKQ54ypTPIZS0XULyp0HDjSQBwVDbbwkE+cNmgYIHH8Czvqkg0kdCP
+JSz9ZhOptGD6c1XZs5GcATIlgJsfrSlSL/FCknoQjqyIQjczbeATijq3ZXvZQKF+XkwmyIQEfBq5
+fkyg4qfkFUB3F7p8QcRrra0fG4kVs5molBfOtwQ3MBtVzE/inVG8xGw7xMmkIq5dwmxzvijA4RQN
+BXyAxFvi4WSCLHFOUEsE7LPxKdxiELoyNdG0+kynKKAG3qTQO8c2uFgiW7Pta1nXpF6yHlCMHY5c
+cdKaNcsPeUWS5VsxJwa5LQPr3vMkBhYs7UwphOb+mJvbQggCOshzx+jIDmhpW8+CJsHOGglYTwCx
+YAzjtYsVQ2X99LTPYww14mAUKKokYbo4KqhyxNC5AMYM799AvATbr4QZIEoYk1n2CR2iTLnLemsy
+lFymqtHW0aoC60PXKWpCzIXovhVrBzSkhLfHdstIE2ERELnTRG5RPnOr2AzoFA17jhK3sk8mFFwD
+NK/WCN3yGWeacQArughCAZhsJ/W6ABGVCFhCbUlkCjPQniDKMFSOCuvLRljWsrTY+n6Aq625Y+be
+iyNeDcLApencyAdeOgcDQYcYf1CQkBThFJ3M5bxplnpmzBGhuMQatcSiMQjhrYpuy0iIkciO4kvn
+mXxtmFsiUD+gn2BZvdi6vCAa0Nr7UAgOL9xxenoDQzcdWOE8CwZyusWH4oaCIzExASBSmgaxtsHs
+oOdJklt4UJNzEFxiA41XlTCQGQOXMNJeQ0tNnIicJXOJAhpdFrM4Fh6eElZdn+chRIjgBYevYBS+
+iYqGUgIMKEYJXLC78d2aooyhF8CeKOfzit6lQRGQrSSxUDQF/iQ0mLp0dmvkrZ7pm5UdBdhbkWCv
+8drTyZaUmMxqCB4IbJA6btdgVGNJVeQPjPFiDn4in/UhEXCPa0CItMNa2AOZVgZGAdw3Owdky4DM
+G14cVxTMMv9BlI7P0ZIpxhNATOyZt1KnCa4nHq9vApmB2UTXRICIsCofMkLRcT/jDEdCqJgJJdFu
+RN4iZuEFfIaoYSKaicL/wBYs6BobCQnOMk/YoMq6ph+HKIjUQdOKSsjJTsg5nwwNRJvHMFzYKii4
+D/FIOmRtaJeMoVhRzbxwsNKT1w52NT5GeVquW+AgswLCCNBXHHRr46FgMVTc/CwUSw==
+
+
+ PE8E7fFSVVok+ePjnZJYcTivkiQg+r4Te8cR0Wo8oPOjodwmwKlO5DZI/UHMgT4fsqiwEA8ZsF9f
+4pGQ5IO2hhhv5JTGDAAYlWYrG8l2rDLEVrFQmwOWIeJSJWRzQMNjujcBqIliSJVlMUB9brLwqMS2
+AGAp6Gyn2EFWM2C4rOhE8xL7SK1Ghk6XQl1xORVzGpiOqBY6TlsR7Z8Us6o5L1oiOZxZq5T/1q7y
+UZTGd6ASckzrvGs5ptIfC5SctlAemVZ5uJzZIBngY2M7lW81JyGejo7OYJACdJ3INnP/Im9NoGWN
+SfDEqT3rDgBOODrrQAyNoCjhx4hzBkywQrUN7Lt0XANOh5jj0subtreTM2CB2FTNESsC8fXoGhK4
+6UKhRDQAFgqwP9ME9GRvE0QTjWn2zcCsFKbVmJ3VOKbFMwJThe+RQBlM10VfLHMIANXKWgiYBty3
+BGUJYhQUg3nYCIcmArqZwKk0YB8KsuzQAdGce4QiJxFKVzi4ha7wEPJ5Hm4BInKMUV8ukpODzyoS
+HfogDGT9ZE6aynZluxOE8tNlHPi6zXmJjzPCmoAdx667OJHbfMxQIjHzM/IAODqYdxvofWi/yNCN
+wXjSAR8l8PBdwwNS7E5a4PooRI5q9DDVcKbIVGNfiE6srATyKKMNMQYrsC+WybKa8VaO20A3Tg/N
+qgWmAeEcyo3hyrUHA62IEUCLCxFD9/isjQZ7moewdLEZG1YCX65NyqcRCRuq9jOZ0oBIrL5FbPmA
+AMJFKxcpZgrk1w3kUOTa4y/+gmbcMvsFE8+6kQHFarcqUJPwhBubVx2kTGavEnNm0lLEGzUM9DAU
+j4FtGMGzUiJPSygtC/iCmRi3f/QthJ6IdJe3d0Mv64NirQtiFYXNsZGNH2mzCXs0IEiZedO1S0Os
+hU1B4tU81+5WVhcdzIQhT3gGJ9HWCmHUCe/j1skT22t9Qu4GajGfzWFxxqWVaDkiw106cYW/hwUJ
+oB/k2gYszoE0buhZ9gi5UabmQwBs0YkBrlLK9+3iwA4N4NYRLI4W9nSX1dJzW7XvRya4x3kU1qMp
+Jq2Rb+9sZgTzV2AxijwyNF1ypVfYpQjUx8zVAMhupn73reUQWBS0sF1bxxVgKsVIFdK9gyYdYWQw
+ZF6Y0ZU1i0RiyqFnfZqLMNWICIR4uCXYDldZ6Ra5y3pyl8Atg2mmNQXnUmldDsRMjRLQV1rgcHJk
+hpFKeQItrthZKxoWOqVXKaFBeRiNVKinEtGRj/3IwYkQl2UZoCQXdZKHUBE6ptDypTE2D928KmF6
+sJigcuhOZfrWiGJuhY7TFNfTTC0rLkUNnp+I4VNIQ8hXcg6IA60BbcFP4L2LA14OXWLmIq6bUHh1
+otRd48ocdFPwIu44sc/nCWbBpo0QN00AnLuWuh/tMwhfQOtvmoVSePuCuFLetIBsVEfsRdbEZZDr
+cba0VxX+6XxPdoXXOyUWrfSRV7jTU17ISt97rpc+z6NP3ZfIwgpq4enZkTTIwa2Gxlqaq8zRHLq0
+WkjDgbRMwM5XGcWJqL6Dw1FGVp5BgrLINV/kGjoqjCJCHpRnQqk0t4i8iTm2EFAZ/hIPYcgsyZDI
+d2J0zid0mlK07MsPaiF2ARyPHwlbkY7okKMsOCaGO2bC5iE/SIloE8tljqLtrvDP8Z0XTlQ+8+bn
+GJ6k5fhcF8ZWRQYOcIT7Dz3LqJqA4zpg8BYu29J/oZjuAzfVFoFRSxiXkAYoJSKUHU9TfoaI2vWE
+i8Sq0+B+GaHH2E8s9zoc8UOJOsfElL2dDa5g5WUrbKXpIGXfrrAzdGeQqDBeUA65po48o0iO/YRK
+HEuMF+Be2XLtIV06b1JiYQb0Nams+SzklFYanarkLFB8/gE7qrjYLId8xYlRSqEtU5U97CDXuxuw
+gRjBjVSPkAn7NB1QBZ0LS07MxljRG6h09EnT57oFK1yILC6R63DMd01WuDEFBZ3n9Kx0kHLxct2p
+uY7XPCdtWQ2zLt1c52+ln1halIDQKDDCV17oTRVyIWLBUcOiK8EqeDlNAzTExu/K/Mu5Y0inwJWM
+IgOBj0KI58MgYlE0yyqCEnyMgkYbZWYoxjEzm1jNAIAjoREdGGPZf5fnXRfe2kpXfJ7PvsK9nzKK
+5WABKnywQimW67HN9e3m+IGpxDlO43zvco4nmnLI9Vt34+Eu84bXpCufR9oZifhCPKTz5W6SsAsv
+IoWFmEQgfBvMA5ESSSRUMVEghcCfpoNt2vLll1whRiPbO0LYpOUjMQOAEFVKliPChezTSulVI0sp
+GpFUFyQKrXZCqlaD8kziUopcA3qFsX2S/cEK03y3Rvwyg3+NHULEE6JTzSFF0ToUtxMwMV4q85nQ
++Vkq7WZDgpiMFDo9jrOaEbR18uXPh761Ew/PAHgBRLotBmFVQv/k3FIBFRxZ/kUGWJgLQcyDK1JJ
+lBj1wDEvRk9zYnFDXtlRr4yfjES7CmVipDJCo47XYWbWh4M1G+CsWwNqyFcsPyi5TwDBJOHrYKcT
+31BkSWwjC2eP7bYKIy5lCiSWJ7RigP4EH2gqTBup0B3zmgcRnUmlRXE5CwlmrRnqVemPkmxyvVd5
+fq48nxgdxYXQDbhfOXgO4XihEuL9NJGi3pHuPqOXB1KKPtHHpuw5lRhwLnMuYrwSXZ4+XYlFz0et
+5yDcKYs8PHwucj4PZS9XrFxMfg56PwfpT6XIjQvIiyDIizawpLmVsQl5UQx5EQ8U8ZMXH5EfSVER
+dSFZ5MVoVMZzTKp4Oo3+yI0TyYspsUS4labHRvtFoCUsOKY9C4Xy/IhNaSxHkfgW3ZGQmb/a5sAI
+AuUJLRfmEOMFB5kpbBamRzU1tQ6SzPqTxNKoOLco0Sc6QcUc37AkmY2HXQpBunLA7ZJMXwAyEvFG
+MGdJ0K9VPcyxwNo2qsQZpBzfiI6juc9o+9gnnR1cJdhDCTfXGKVZQTMmK2kLTzMldUxmRlpo0C9H
+oj2MfwYRFqbkD0pC4TQOkYRNNqLtCeuj5WWOeaGpqIjUctsiGUWd8yn7NTeNaa1vaq9vmj5oECVj
+vFn2iwH7tcA3MX0zpqHD/Hf0tMPratoHDNyztnlaXWFIa0fbjMKoYlNxel1rYXRrrSlEz98V6Mvq
+YkND/fTWYsuM+hp+clxzc8Pggiq0tBcOgIYY3MOjfyoMGjAQn4/g+eENxfZCT8/jo6aRc/LGrLp5
+IYQXRncWG3rN24e8MSssTK/PK7c8azM8RjeZnp2Bz2FW8nD1jGLDzMLYmtb6adMa6vJfkGeHmrE1
+omlm5iHMKudJ0xDTZ0DerTXN3RVDnh1nyj+zMAazqmuqqe/l8QOLZnzWNDc0txbGtrc2z8wpM2aV
+fWd4R619TAZ4Zc57trY2z4ZRn3kUs+rt+YI3+E+FKhrOZvyXDOatPCm66XQz+DMjEP4FIxL/j/4/
+sSDh//ZU1M37ZTuU6YdD+L/ITf8Pftr7Hn4YJwbOCfxh80+famr2POSM9b6X+qqyhi6Etplj8z8+
+eYG+l192S1ra/FNhnbXLre59T1VOV0L8YbMR8fgaBNUd1Mc6b82JkLc4mLKVLmdY2MGF8U1Nxca6
+2oIaXJD/B2NjcAHby9viqdFNWXi5LCuEF2VLAeRJCuJlvu/CwBJYVpLoh22O0j2hvFV+4L7hTQf3
+m7Ki0HO8TfywparY28qKFpcOncBcEM1lo3+l2pqTsLu9FM5psjn21LrZGQlE364O0A6FlQM7f0iV
+Q/c6nYDMbX8L274vhS54PRY72Ixi+99L5yT0jRlPY9vnNtS1DRi8b1Pz7Cb8h7kHDBza3DENWP5l
+QSwM3s/Ux5zlB+9prguddfLg4Gq+IgyvbzBVhFfNTK1vKtADlPonrMBgfuQveS+NbS+aedXjS0OK
+bfU12TdgoPf4io9/N4xu5WdNJtnbjqlTc/sBdTXN5hpQC1/SY1y1Ql+1C/CJWpN13WGFXQoDCgMz
+2cDtZ5cC/mphlwGFwWOKre05dalubqrtqG/vphrZFzeruct+Ddqk5xd6bCV4PW0j5PnAYdo/xQd4
+rqTVbLbQZqY0Q8zUKgwc31Y3rLOuaXRtbR+bkubquNZiU9thza2Nf8LipFUbaL8pDCvWzDDjmqaS
+eaCOR/jAzMuDx9W3N/Q6cGxp2+VNnvBtUOhBcWHwAXVF83Vjc2fd3lPGtGNySeoESZXrd1NHY3Vz
+S30dJgac2GIWpmYzjUtayPxkbXNj/V+l3SjT1uZ2sydMGVo3vbWuri3vqwOKtfVFKqEnX7XVFBtM
+CYcXa9qb8eYOZ9PS78aYjaaurAj41Uiz/OXkNqGH3Cbk5tZad1iDWdYm5iVO6tcokNULhnlDxUjI
+rG2VYyDzZZ+GQCgVG9tSrDHLLFZX2eru2TSdBrZflT6Jy8SB9bXtM0r6Z1jt9LrRnXWtDcUWTK9y
+01eoVNDSbfydV/Zd3YRia30RykkPlBes9Ouc3yx5IKept/nVKAR0nVLb16Pu1iOVux6p7evR9vXo
+J74efc9LS0E4wX/oRaWHOg5pqGuq3YJK4vv9PfKmFUpf77boAwYPm1NX0wFFwC/w3Yr7RmtzS4sp
+0dgZda3T6toL4+a2bIuXjh5u4eXT2TxU8nXOpLaPZGZ1P+8sbs48r7jHHDBA7vn75g9dmJYVnez1
+cq8pN8wU4HdNEQoDh9a3tTQU59I/sUR7mavqASafnQsVb/XYpoOzF11TioHcXLiq4x5UDVaP+r/a
+FSKz/hQbZOETn1bt4R1t7Y3pAs85dDSB+aShuWbm7Pq2uux341va6mvrhpqRWjJhx5jR2tyKndKw
+TV7xyvYbsyUXxs2uK86sPH5Qat6pg7/p03bjScvUUyfYYTmjufWvmGLXfbOqt5es9cVpbc0NHe11
+sonYvIpNNTNKEpo78E2bVXEG7eM63VWKneRy7EOPbPXdoV97wpBpZqoPFDPR9FZz+sFxKZuMV0hd
+L0Omm7eGDNn6h9MxY/esLbaYf0xpwf6fste0hgMqxshexY62NnM2Kwxp6GjNHSvlT/RvzExvxpOI
+nCpri+3FsXx+HDykXl7ec2z1iBFxONRkUAt577iD+fxulxGHz5j51z3jmvG/C8cNmTYQEndYsJup
+PObTx3bYypsoRcNt5W30n+gwsHexvrUwpAhn5G3uBPDPaXb8vu/sgUrAiBgFCi7vcQGlt6Jt66T9
+g9/hVM7ZTkUVVziv3xe4Hu5v5V+VXt+8ni5v3ubc3vIbGW4D5ipQrG2eXdHEJd/ltHLp931qaL/8
+tOKXH1bkBDmtoam25IFpuOGZM4mtfG2xdSa1pbaN2Wyaq+Qk02JWuD/1dMfkMV/c/AnQVtPQmi16
+TVtrzY+zHf5Y28iImrpt5h659Q71eH+qa6qYFzY9Z06k3/X1ZMZWsXIzXvlZHWLklF2natvpOpQx
+7Zkq22dtJibbfi0HP737NrMidH/jVptx30YoRh9v2fTsP8ndehu0sdttusTGXpK63Q==
+
+
+ xr51bexb/RIXhbwZfx+3uG3BPrRNbSW+W76NeLnbiLcZ28hWv69EhZRSZbt/sXTty1/6Bm1f+34q
+a5/3PRuw/hEs3PZqZw3ctqu/BwN3mvmPaN+uin+0Re+fyvo5qji3pXnbgFxujYn6AxhMyRjag38z
+p996u231eevliDcBXpcvP6MPO6ytrh0QwPmbb/nrfVuN+g85+aEXyKBihfQrXIBedyuk29sKGVQs
+kf7muAC3vt9nm983f6jpWJWEwHYH8vCq+4kZbZ+YP/TE9FXF0SXeehMzzd2eXeJtYWJG3+e8/FGv
+8j/MhGZAbZXuYTJv32W3T+YfZDLr73WX/T6vUZvp2t/ya9M/6F1pvzrz7bbi4/txFmYXOD3hnOUF
+8D8gAV6xQnumT7zvbYX+wSoK877KCzDAw/WSqPuK+j/piuKRGUgTsaJY7e4quhl+xG2oojR0FXD/
+dXdTkIoGP+mKUo8G3KM9VnQzkNjbXEUjqSigurqr6Pdz99sGK6p/0hWlVVfzHMX6dlfR+CddUerR
+GBjzeuvR5CddUdw5e7bP2AOD+73UdNsAnm4zh3F7xTX/3KthMzCP2Vf7DHksATRa66kAGvPgizk+
+ITpvAgsgSlswmcjWwC3+8+AUzdM1Mwg59eNfYn5S6BK/KrYGiV4BJp4F7fYMMMlm2m+o4o9nCeoV
+w7z5/mi/wtmyLbijXdiuPTh+JVll0R8bijOiqWlzl/Hsq30cBGHZOh5UqQpsOnBx92Epj7xQwyUl
+CRAAAqI0KDajt6Rpp5eh0Ke3z235scyGgdr6C/yPeZjb9uKE/vH3arO+F9trZkxrLrbWbgvb9fZR
+t5XOLFt7eypsWwDRbZB6pLu4tZQvq5J5xO5tOcwjSdl3/WIeSQ+H/0BUSNvHYEnoZD+GYN5o6MMQ
+1FsyBNU/6gj8MRhz8kfg8I6//nVuYVSxrfJWhl8NO+ywupr23BE4vK7YPqOuz+QGtqcBdt7Rth3X
+auZwy9zWZmaJ3haOTlvP0jGmo2kmXviHNDQD9XvZ0BrTUTPT/JV5IGd88UM72Uf6NMxAcsZ1A2vY
+mHKYDT7YVgzOaTTB1iQf+klGxtgNqCQypiTVBsZ4WxgZk5oBckJjQBUvLPv+Hzo+5qc9FrZwKATl
+XV0yFEDi6B95KHw/gUfbl/wtRYt+PxCdn/ZE377ob62Zvk06nH/MK/k//v1iXH1bWwfINLSYMlc3
+NzQUp/+TwkK3m2j7GMUfR8pCYKoSBpa6KtkGDBYV1IzVDa17V2xnyNBS2LvYcFh7c1O+6azikT7t
+afEWsDFW1/9/CokY/xT9fuSu9fbfv4vh34en/26Cf6fP/24n+HdD+v5+/SZyrGy11rbK01l169y2
+dtCs+ms3TVby/WaRWbqb03zRpOaDR6TV9358Hkt/66/l2/aa0L9Zn0/iWvDDH5vHdftisX2x+OHx
+Ff9si0WVGwYJEkUhayljwbefH7YvCdvEkrDzj78kfJ9h1z9kPeKtX4++3WnBotTYPL21/rB6dD7+
+E95mDxCsp2JqaNfz4ryABeHVDN0tNyv+ZCLzUewqcmmAdtMoeis1yk+adGybtAhuYyEo25LdPJ9G
+MN9uHmyp3TyIuzecR1WuVrp7w7lZlHS3tvOKr/pgOq9KvTs51vPy734SlII/nlV4skktdjS0H5LZ
+PMfWN7Y02M2z3C5/gIUt9YfnhE7xY8we0Z4pDCrtDmuq3dPq7PYq1jvG9KqZBViIMdNYuckrDJx8
+gPm2zUwVqO8h0BcT2wZUpI6pydRl4IEz6tvrMomAxDItazZ5TvTkyVHF6WYQFW2yR8kH1NVSUpWv
+0UQq//FBnMEcdOsb2wCcRr9QFcp7o830ms6/TJu3H2E0AcaQwhNj6nAd4Rc9DKalMI6B1R3m9Nxa
+a8vNeU6qa8DICMwz62A0342sb5RfUxFqPZvrqMboefh6aGs9aIsVbZHiNNu9zDznGlQlfMqA//Ug
+7mHg8ObWOrgBmK+xrfBrN8Qmq6s1rdtqalpXlAyClBh24JDW+ukz2kESpy59n74a09FaV6iey6+l
+W5/5ar/Sl/AH6Xat4OuxDUXpUYxnqPJjm2lda/3s+qaZDfJ9SDXhbxs6Gjndg0MUlxTarmg2jVqY
+3twZvi3MkOK0uYUxJk/pSY28BNAMaeMOqW+bZUsL71YFPgpaU3gOdGjxMFNdM0tH1tXMqMv0YFUA
+eYXwHy+hYdjQnq1d6POZT8X4dXPNjGJ2kFdho4ypn16XjkIaGFT8drMNtc2ob8HvyFqHc+IvBZ4F
+PZnpyh61OYxtr6trMN3XUE/N1mMe5Q/bXA4wS8U0GM89vm6fSn+9rqmtw6z/ODV7/unsk/b9UfW1
+tcW5hbEz5/byevZB+/bQurY6s/zuDbzw0OQ95lD+MOUi69OQGeXdUcBdtaEfvWLfyMt6v7rZZsQV
+D+slv/SxvEwm1E0v8nTsMZfMc3nZjGmtM/fw5tbCsLm95VT6qMls4J6tdcXCAR3T/1TyGv2/yZk8
+Dim0ZB+GV6uLLa31QHtV3wKniz68X/YGZjIDzibmeGhOe33MpPQNyGSf4vSOYmuf3pZH4TWzItT3
+6SV6EF4Z3dJeb85G/393b7qXvrItit4X4B1EAUEakwChU/pOQAVBGhWlR5ROmrn2+nKe/Y6qJCSk
+IQXGfea9v3XOf08rRdWoUaNGP6rOqj8wCiHAit+ggarLyUogR53fC13Rz2rb1WY6JPqZ0FUioe25
+6aIHkEgYVBOJqb1WiZQWvuz4gaT3TnzvZLPwRRDQsh9I5TYPqPBJEL+yX2hKZaEDJ5plv5LI66Bs
+Hl4ey34gldI7ISsiZaucQip3efEqfMIyVvEDvlUhWoXvUvkq++kB0bvrguWv/Hc7oSyK3d03LHbl
+PxBlsZfx+8U7ZfhyTTrEihTECVPZCDsJW07udFFB5RSVUKl2anpYcnos/iJosiXQOqXatUb+hcKF
+JS13l+WEi1cfS97u0XgaVnr1l6wqD36x2KIyk13RiPRFOYVKjheiq5WrIISmuE/V/856iyka5v9B
+3LfbG2J9CCnagI77xWr5uXAgvjpbjnGhuQMpnYCls9QUNF2ME0zeZ4nlEkObw90Ah/8M8dsuAD/Q
+5n+6/0WImS2BP61B25+sZw5BX6yCwoxQu1rMhpvP4XbtwErmEmEBcALMGBqeJjDeWXYxnXA7gwQf
+B/yZg18QoEC6HG208NSQXvS3aCvT3U3XZP24Fv4Gswr9JbEP0d/N+9ID8lejP+wXA76v5Emb/5lN
+59DBjf5BMVVk+lk/1L//08UHHHUI8Ya+9PMGXwqHvl4nQEdXgwBQ1eWc478FgD4NgH9QdQ8QaHWI
+3Bj/94H4vw7D/yYWImKf/udkOlgN53wfGdlKOoI9ASxlu+EcNeiTS7mW8LqL3AvoSPwvbyzxkvYh
+Rr/RB9Num68/+sCwFrOIRmcJzMz/7jYIa1BuB/4Q/odseUCH63/r4tAaXCTkeCIVwNqBXB8wQvRw
+1QNjFr7T/z5USVehJAb0DBlSifXWN+ci3f+ytQnQ/yUVHMEL/s2HhRBJ+2tfj/7zf00CrqeT/v8v
+xB9eSHWxXfWHSaTF/ivXJKN5XRDdgWDI62FZdlc/8W8hdjUu91+C9QQCyDkrBpP+Jev5r9p6/sOV
+5eusiWa9QbxH/7Il/Ue4VEC+rM8h53AgWde/bE0C6MpF9RYbUBBLw9HmcTUZo6vJ9JYnhCf/JUtT
+LuBfIm5BOv1/XNoaJ3IMAl7igsCkKCQMJO5o+mznygB9crs8K3Xn4213PDwrL5bbJfeDXWgd/6C8
+QuGOf4ZnteH/bM4yg8mm25tMJxuep7F+v9e/myB01l1tsL/qrI8TLOmzlaDb6fYcc85Qor69HWn4
+GR8T1O7KiADo9pQAoNu3p5Djym77tIu+45SQZRc2tv9fmG4yOBPud9xDe+hsid2N68lsO91dlGL9
+8IpFhqjT43az3G7OnrrI3cY/aHz2NMTXIO5+Q/v3fnM/XH/q/GJ//wViOptAr+5mCCsfYjPpYOfv
+OWj1CwAO+QZ5urK/otjydiaZsC05+mrkmZ2i1Bl0fSAmw82ZxASSnQmBXADzKwm2uHTT5cQjA7c7
+naxlTTN8gQr+5U7aLrsD0TRJ3J0ltpvFDn08JAGRUmnqbLQDeYW7uf8ZoiyXs1532p33lXu995MF
+/6DLBs6aTJBo9Fzj/Lb14c796WQJJIn8N/8D52EMaNP5xVI49chZu0Q+Uv4HPgk187uDdq+y7SKe
+cFYa/jOcCgi7liTOyDZMnlej+1mkk2uR5V2vBqu1h/PeyLVuRbfufL4Qkcptr6KTgIG1SBx4ucqO
+23lfpwuIOjgrAyLil/74f5YeUUiqjQ4dFsvBVqfDWm+E/mKfgck6IKI53GExR5ewrvnHhw7MxfeU
+ULVfoyew4H1mJB5iWc+VvOfuGMo67h081Z1fcvt+eNehEzCg/X4Sfizv+tkdDFfDw+NNaXQmu5uD
+nQB3XIXCwT678MnBfvPhuIsSrA926uF0fH6BGoCLp1xtkNF841lve+sDC0NdBtPlarTYcRY1KuO6
+zUDR4fUCVXSPZ9+eWXf1vV6MRh5O0yXuvhJVfoLem8WSuO8UlO0dAjQ6A38YDuRQE3SXQE3Qewc1
+Qd89qJV7j/pi3abXXR0ibtRvJcnh0+m6BBV0Mh8t9GZeSVai3gUvhO/jEV/PVPQbDEdIfkrMWHVm
+jDt/LXqbyWaq8OwoAcSiaDSZHjpiqONaSAE90GdPfqj16q8Gng3o4oIupnaCUJ91vz8/dBi5Pstp
+nz/1tDpb47p1p0PPP4T9Pg+QHeq1WI2FsQ724cdRY/Coy3KxnhwmMtQL9nsp3CKu3WuxQrWuOjTb
+n648O8Wox+WuHOorSMrlYnPg0KCeIqtTpzKgRB3lAPXoTTaz7lIuILV641V019yPCLouDtP3rl+P
+d5Qe6jgYrifjuR66l8uVB5tOh2gFdfpc4BcT9br9h6yb1B90YDCRhdgTPg2dDnUU9y3IhCS38cv7
+TWbADfckgj/o9VA6/SUigWYk16Wr996JBFqnoygPgj7NrlJE+UPqTHcfU6pMD7oMuMSbw530Ff71
+Zsr3Wi4H2swRdeNn3PXTHhC6oOM5VfPxK/qiAzBc7TkED07P9RdsBUl2v9oMIIFRzQMcGtEejuz8
+NShXPyF0PkNmlYrFrLSwtI4omgxnZx/qtAKNcLUeotFW2gtGPdffkyWwzPm3HptDOgGft6dcX2HR
+uwN9QbI60Q0DnTLl6tmjzHLdc57wfVB1ylliteHetUAOroPuE/5XOeFGBPQrzqGiZYvsfsP5DK7r
+nDMgqeUM4EHnjfuaqhtgv09VywHAdUsh0z/Fm/5PUtOfxB2DRjjgg6GlLqv5QnQWnE3m2N+ABLPM
+hVut57Kg9FfBPhhuNgrdhf9cWvQlQkHyMTPrDQccMvdNFPgG8PUnohEkmTEz7y9Enw==
+
+
+ lU/8gHPlajtP8m5B8AnXjqG1rpfdvsr32hCQujsY0i/l8UjZ2OwulY3V6aS/AyuiPJNiqc1+Shra
+HC5VDZGI8M10jdqlLapF1c4o67bE147mebpY6I+yjgqTiP8k3+2+2GMnGmh4qUFkGLbO8Z+ROzBm
+sp3S9jJrdr5SsjZnrN67ppjpxp94qmVr8fCyHWJf2NmLyXrj7mQXeDCYL7JOVLfP9sS8N17zv4n+
+zBLFRuZitYre9hKu5UMhXgyto8H8TcOTXbz46pnV2wuVfsm2atnbxG0fj+eM3i6tvrXXUnHGPjde
+k5UUniOg6c5z0/pXL9m5ryQSrjndNlkjMboeTF8Mtpl0Kv/WVgMlunTcLGHsvDvFWG47ac82/pwI
+vH202NaSLmdtleaUn6qfsKVHSwedqBU2W7HNZOVai03HBsYpbNOex8+b1cqXnlAMe76M1y+rFq47
+TZW7WcfG1s242g/XSdbFnPPjdBbx1SqyrgHqXHcU7f4KY+A4LCWfUkOTdR3MburM++LbxlaGV06/
+OeV49N1UwjXn7RP7uWpT6xuPtxRinNGc2eZbM+t7gKYe9Fyvgzlf8CfyBX86HNTA1krvT/q2at+/
+VfCkQGP708JvA+/+8N27R3XSd8tDSXNSdlLMWdUmNVlXqxuzfbWmrSu1ta6DZfrNd86Er9QmXV+6
+7t0ak/o/7d3LVgZParIq1upzvDlvmHFFddLz7Lvv4nk5LalNSmWTxbjapCYrTMteWOYrx606gn2t
+dyo7eqiqT5oz39jowkdNddJcnqnhSdHZVyKYeYnWOnhS+irRy+zvamP1to2W0KQR5Z7aW97XKe2A
+Sd0ucVKYhSOlEpXk11q+vJRN6vfPPpZak36s2p/zmsak8S4byFpok1U2LU9Ksc6T1qR5i9ceeVOf
+9MbcXl98Dp9kk8LZ56atpBzRH8uspDapMzINRzUm9X9exV7ij+qT+lotKhuiHoDG1NZ6nh0HLE8z
+5lFtUirbbmc1JmUvrN/z+5RsUphFmLZL5VyduvqkOSpxObQHWqro3Vy4YvykLbddht7Yg+/2zcSd
+VTrz9p3dW+vLDVUKuGk06Y1i0vxwwT513QxMSrnlKy29vnRlk+JZ+LUGvgfZd61J09T9VTukPund
+Tzj+tXp4Up20GrkE+aKxVvaiOKx6KY1JX91U9cNxrj5pMT98eH1x2MVJQYqJ09Yv52PNSauflU5P
+a9IcVS8ub9QnLXmtJutzNn5zq7rW+rJwrjlp/SN3vtGa9JFqxIppcVJBInPT3kczH++Vdlt10vbj
+953mpF8t/yCrMekbcEuqvZ661df68LWcPYaCXtVJP+7cc81JV9aq0yxOiqSY9Kw+U5nJrKA6afDB
+fW6Ot90ZmNTrkR+a7Ufgg5+053XIDo3J6ngpda/wtMxl1J7fX2uJ6lyFE2jSqGxSGPbrR2D67LV8
+0vXCdstPuok5YV/212p+6746uEmTLfpunxW6VuvnqBlNGlfypDu3sNIbWjYpYCySP2e5aWN00S1j
+ha6l74GTNF5LOFXcn9SyWnV7czRpUr7SVWK4EKg3CTQmF+X+rzAvaWLhikeG4PPFsFPjZOqw+8Hu
+g5R/tr0vwmpfsUT251sVelbX+vUnle9Yt5pfgfWmbRpfYQdszpSV55bU8GsYkH1ng/SHAPf6Oyj/
+Ov88b2p+DZTvwm/iV8XuB5mrp47mr4Of3fdLza8JxvbSV/vK6zAl5zzGaP661HscRTS/Pp73e3mN
+r8G8LX/zvBYwNrr8Ccl+/eycCOrpiD4Py7/2CtW55td62vm9Er8qMNaw9q7Nmr9uvKXDt5pfO9b3
+gEXtK4+xr015mdf89XedSVY0v86+s9F3ra+AqkrEv8OY8nuB8UWbml/78161pPXVZrbdvV1pY8yW
+Sdz3hpq/LjCxc1rra8LMWBxhTYz581Tm9kpYddgekZ1pZ62yjvFfU54b2ddaJ3eVkH71uZ4QQ6lw
+xlzKfZUC3XKzfG+nxp+1j+R0mLiNhvIWRFkNO28tx/phDbNv3YzXR8/VRK1mbWAWlajdD3yZ7urV
+6kwu1g9im8kKrS+XmM+F6aD5ATMz81UxQptd6aeG2VV/r5pdH4Oa2f7q2KL/KgMJfqfM7uKHX2kU
+tsaJircaBKhTTrBOF9+sJRAaIUv8ijELdmU7mP3YvHXjkSV9ni44L/zC0myzxCL9DmR6ETpnLm/L
+0fTwKmPF5w6ZM68CFtX7mbieyNoKHe6J+0XDqdeWbj8ww3qWp2+xn8mq2fPKemNe6I7IXpCuBWyx
+wJOjTTCiZe6NfBD0sz5O7rsEa2EvkFDvE4x4edfzjIV+F7NsalQIXt8XhgH48+oiEXiZejkb2QHC
+cXTD0Qm1ZqaJWmKepQp+3xVHNsjzAdaynxEFL3ve8t1nXvo/o+vJbc/BvrClPG83B2yrnQBOJRY/
+zw7EYZRb4rDHXqeHwUO2dJsEuPNs1yP1KmiCR2WLN2UZeKq74XtId9SAw9xSBK/1QQRezsKSAJer
+XLxIdH4t8IL5PWLRxF3r6TBwQGPc1j4U6yTgZTLP2R3u0omq69sCA1Ra15OLsGtvAueNnMbCElDo
+S/97elRLexHIPrS0G3GltOuZdouTrrbeFEUwKej8+9Ni7fjESZ3hxSaDJl1itFDMNv6Z+vR98PsC
+qmZ0mc70yzVW8CiOt5l+a9jk2gQ+XkzfDW5BU8pup4FI5bGM3IrM7usT+i8wwr9DdwC16zubioWr
+eNsllsXaGY1mLgHa6hWC0YNXHV3aB2veVbPvYORWOrZOE88Xt0groM4T1al5lc0En675QR/6P85o
+2baAWZAwYzd2Osf/0DJIc2ozQJa8/hymrdw/QAcNGKzM8tYWzLfbEryMNHIyZPeXkZZ4FfAyrJJ/
+0Mzhzk85LBGte+D9HAUcPpUHwet582rgqQB3pQkcWgsP3poEPEyhmCr5EQtBreVuxfGE3ddcMPzz
+xC2X892oLBeMq9Lh5ZqO2Y3L8xNJhefJit3IlWeIiMfoIF1wXIctYDW2HoyGcs9lsJxsVvwPcxmj
+7hAgd7uhKgLnK7PQ+TUN+wIGUp1wfwmIb0FfJb+yFB3yf8W98RekwdnsO99FjRrArlqtwj++K/5A
+YpeBcCA5va2zWvdgmyJuUgSayE5b7u3nNwgUtXEehUhPfvn1ARERyCRfQgXkt9xD4VEIVOFoT2oc
+bXcqW66lHMvU8j11GkfLIGhyIkZ4iayOk1zRhmZ+Ut39zNvjRrZX/uV1qCzbK8zeTVZNBr83Yt1M
+MCL/T7eZRgjKa+7+e8ZriRRLe3t1cam6V8Oyx8bviwrGYuHKvTEYSzsJd9Jm4vmhOm94zyBHQUMm
+X48HyWRFQHlIgdIBCWzWlhpIKrJSD0+UHkgL562oQmBWwJ2XwgHwUp7XgxiziaqI9PRi56UYe1U5
+v9UDGkmPUYh8/dOL90X1/GbVFCuVjRd1q1c8Ih9Y2xvPZOVGjNkzRSJSkgiZ+5A6j4Tlcox5d+qw
+DiM7d/aguuq3h2oJRXTP75nDWETnZY8mxKXDrze53dKX4tjBmu3yPld7+xpQdPJtnPY8PbvEcD+e
+GYZ6Xok8iZeVajLpsBq7N2JzfVjGmax7hKivZ30HN8frbSbrwRG3xmiCOyn2HTITjXjbuxLPgRrV
+os455N0vyHmyTLKTmBd7+/J5YfS+hCxG70uIyLo5Zl+CK06W6qk0yAjFSOXVrpwGpx3kRK3VZD2o
+dpEwKX67c/WF5uYATz7lGNYVQuYgKk1W/WO4oruWy/xvUCnTYQCZZBrsMajsrZEU09WyjzbMn2Vi
+cGfvY+xsokTGJZkamxfVWB0aE1V7VWWDSTY/5UqnGjJMEqNDffc3MSJr8uDRlGEsRsQ+yIznvGg8
+/xZjrXObMRiLrslYz86aUmronA4D5JCrzo+yHDVBOtpGVjcbEEit5VEgcRFedaCI+AoBSB8rorO/
+b2FrKdXjvIpSfcA/trOwq5H90NOTMOyNPRF4N3uY9rqXTH0G8st0sfiTFII1eNKvO2pw2c1gZJis
+5EY4zhZSIef2eq7DAExWFZzkNXDydXfkXgnAmawa4G101JKj5J7JyrQ3VmISUDOzZctVGtkkPiXN
+3dg4L0mBM5HsBspBeD7WAyS1bvZ4csye3qgxiNOJ75PZxV6PkYsaXP7usAtNqimRkvPxLjSswWoY
+iAiB2In2GwRiBrfzJ/PaR0PbCI/RBYU5Q+hCU/X0FmROtBO9L15L2G7BewV8TN+JRnC6YUSPXDaL
+4yl2X/d0zwrHu9A0MLbvRDsZY6EfSnleTvFXzQoELjQTKVDe37jQ+CgPB5SWE+1oPPllIIEUI6D5
+PV/JHsWD2UDgnDUdUh34lJNHSRAxFi5vtIKIRUTnGUKPor7/Hijw4qhtklDyPu0sizIfl8axIDKZ
+8amEEdvbZJHkoKF/DksVb+w5bJftFeiW6q50hw1zAS2MOYzCmIocPoWwY89WrzLCewoDAJBGlz9N
+TZD2Iom6QMlPGylIMnsfAaUQt5reWHV9em//zGoRK03KUvd5q5j6iHwuIjINXeRjzarm0T0l8JYr
+z+hMe52T6fwnBHNSALdPrh+p8zFSmYsI+5pYu9i301VlJYLxliS0pnN6Edq8sXrtnmz39dDmsOt7
+4EnOHaYNhTePdH37HhJY4eFDTHqE0SY6RMPt1zTmUATGVSjCRCp98YikUTr5eBIaU4l9vP8ciF3l
+qnNSQWeyEog6tPu134SbdjbyHozHsEyrDstE48F50Y0V6o2o4tRA+qZD1HVM1n1tJwUcIUx4LAjS
+R5rP2EjBPPm3Z2P9rcPgdpRMGhkBBnC8woPWoqHyIBh1IoSE3OkZnRcjbBUEklPp3+QXiSrsjmAp
+KNfGdfz6dh5FGWEoPZMnyZf6ApsrBtGYU8lrpH4BnAm5HzjW5ZsIbbpRnr2wsYncdEFY1AwcI7Gk
+vWHc2T8q4pGCD3ero3ZNy58McBttvzTrhmYRAIQyx4NaFgHZycm8vckdqJpoM1kPkTtstyFGDJIv
+QB1KP+KJ61NP4BHqK4/gfXU17+HJNHZS7p26WMYV3GhEjWjDb2INiIU5sVg2WdUymYG5lAhxQiKW
+cU6vEd5DBDdNxmHIxfLbz1Fi2aTjiUAw+n4tljkO0zBILANIbjWxrBGzOHz4uuf3x2XPaXpIYH1G
+ieW3H8RhjPAjYmRpimVRhzlWLKvlc2mJZSSRhRw/MrH8sToglsN2cm5JIpYBuFc9Y324eb5WtZK0
+AqvNpkpm/8FsRfFsVyOaPPljZbjcbxor9z9WR8h9LX/V/nazhlriKG+IxLaXjKfl60ObrO8I2dEO
+icOPi+/rn32STFc1rx+TbLYS2Otnsioj882WsV4/lKck+v00CPbIVFKkQshZj0pkhCiVVEoWyeb3
++eGd5CMjxG5FAJTUqSxxKwLGNELDCMaNPPCvr8iosiju7LfIJTIJ6fbWMvX6YKb9oQ==
+
+
+ FCWEu2td9ZqnnJ2nV//sJ5sfuk4GZWI6xuK+3OfFlqhTJMOTd1czUXU1F4mnea+YdAcXjwo87e7Q
+kt+WxazHZve88mGyourpjNmd8L6b3YVQhi+cLoRaZtfnVw3940FtWVRqncL11ugGiZtE9Xs2yvQb
+sT5aSwZVZLbS3Wq0lHWs8si9arnMpr/d56iK2sdrSlyBdTlfK2eca69NlLTs7VfvLtNzx5XFtg+x
+J3GvDvQrX1N7da/aPSvhMkG/1bbjcav1M1mVPcM0yczn2XfVEZX9BtdkaznPfhHOvPQSrQVdkOUn
+GjHnDkn6aVXKrtZh51pyD4l2Ia+v+Vna3U+gVch7c27XLORFMQvJltAeAvCcN5HZky5w7MXFD7t9
+EyPv2nXGr2Q12jOdAnL+ZjAqu6jVCMCzlYafA/0i6KEMOLBeVevbHypNAtxRmYfXHMHGmqx7hf/a
+4FVOLoy+ur2W0BhxPTaqxo4cNanJKlk/um/olEl9jjI3Ke9aKDXj4ay1y8PAxZLY+bIav5lsmmjs
+54zzauBJPNKxBrRtz2Uq1oFwTHa70rX3RXNAW4NXM5rKtplWGkZa1Op0MoevCMsoFfWM+7afJJIo
+DZhqV40q3CkkwGlZSWWbAsv6hSqawCEOoyjY+k0Cf1rF4ErLK+uPMLnKl8R1OWQ1vEqd8DhS2Y/w
+lm0LshxxYHpkJcvOI/ItSYiPtDJlXyHUrvpWCWjrIBDnWx6q+iZKSNZDIJqFR6EiGviLAyJLLDtQ
+YXcAgWocreWaa3G0DHcjKIGlSsbRWi5Vxny8B/49c7yDhqvk0oq3w4iGJJYJu595a+nYuUQ+ypZb
+NRXvFIwdH5NRz7RHgRRSz45uJTQcYQOioggkwsg7CVB6WRLaXiFtjGlHIA7bw2qnl9t94fz2mIXW
++c3+5vSq5JD0GKL0cOIwSs97TpyjSFC6lcV+PbVTx98Hq+Ip1Pcxd7OkFfEmlaXrVvCAvh3XqOAZ
+5MQKnsM1I+Q1p7pFGfxQfDSBqFCSSK1U1dtU8/pyhLf1EJdyEuuW++dAu7ZYtYBxjyeTmBd7+6KU
+Pr/eF/1LgI7dFzKV9ah9IbsJ6JhqZXnYCnlIfnM5E6pW1q9kMh13DAmVVzkqd7fNqx0asjuBCFDJ
+6zAImbrRx2NRKdY0Ha5JPNow30R/1MSgWPcqF4SnG+abqFwMatHYTrVXp4Nx/iiTY3enimL384QM
+zsVpFx3mvaN5NAWMqZjPJxvPm5hczJ+MMZypbQjGyFiPqI9pEcManUqlnD5gOWqDdLSNrAmUMiBI
+BJLEo7gDioivEIAk2myHz/6+ha0RoERBJkXKjLp/TGZh611zsxxpX3PTXo/lSQwmq74RfqAImnCb
+TIRlsj9yq/Mo4GSR96+7w6mmx6qfMB5Sc0jvhdOr32LaG7v2DQvaPqUDNdrHMBe9XGtUtHyKB0jF
+uuF48t1hBnH8cmVaiOrtQCpy8UDJMoE8MymP+AEE6hxxTQSqarB3atWZRyJwT/cwWfnqTLqw1jLC
+C792oe1X1tNFhflxWl0vwf1jR51uGFHfhWYir860hGn5FQcnVT8BxnRKssgrocnzLvTKjomrMA7f
+cIgqoY0o7DJZEVC/z0HlQdJwoR1x24l0/wpb5VUIB3Lddtm2enlaTe0gIioJJazlIfLfF09MZpZm
+RAhFtDRJdhLxVQix58Cl4q6bo+4TlVXmal6FcFwtT/HEPGY1jFl13a+EldC7qxAkEd4Ty7NJzpqJ
+rDz7lynMvL2PgCJJAiVMAS2qR6yOzKRTTVwuzzQ1dHQXdPeDqBqf7OCimlKPXOk66ZYABPdRYStJ
+jZVmmWj113nFikphQ24DRmiLb0l3Xw9tpLErE1H58m/riThtHBcbE99TrFvprTCyT6axo25GMOkX
++qIRyct8VaU5N4uy0PdraNd8GYEa2G5J6vhEQbeT+5o3EHwNdS9M1g03cVrfDkaGvN5cHFGzfh3G
+uya+t0dzRLX69ZWarrO73RSVqCp8WGrHgih9BIlJSYhY4DCn1RmTXuRMHBlB1a6l7YkKj0alsDLW
+cmJxr9eYW5tw8bLCv6meaU9Svqx/BZTm+njOL5Yv65YqEFd6e4yjMY3AsSxsLIny6Ofpo6pvvTpM
+1VQCJMV0S0xAX4lGNQLHuEBVz+dgOiLikWstT9w1uT85ddR7CET1H5c/jJFZBCnN3J29LAKik9Na
+Kj2KJ90LlzrqUQTd4uX6gtTi01ufUXdDcZXeCu/hyTSm/zICuSWDx6NPei9JVyxvnIfuggat0Eix
+DIYiuXZxmIoaBGJ5V8VJKJa75x+EOXNSsXyoUtgYsQxo8xtzlxouXj4glmU3T+qVL58olhUeEly+
+bJBY7p7fG3TzJEaWnlhG9v5xlZ+AtqPFMrFHsXwonwsXsh4QyyapFUUklj9Wx9d9qq9lvxb4uGxF
+tbpPBU+Gnj2SV4vI5X7Y7jNU7gOE3xZSuU9w6zeq+T6i7pPAEv9YkSfxatR98r4+XN9PWvlJXPd5
+eVun9c/+EZmue16/3lrm9duzLFApq4FePybZHGx17xw+MpUUFX5rXFcgiYxoX1igQRa9Nalbkfj2
+uZbRt8/11sRuRZLrClKewBFnn6xk+ej7LrQ3+djrCgjOPlD/b68r4OU+J7ZE3hBlK97E0yLeTU4D
+xdmNk0q/qxyL3UPVyiep7U+WAKqYrqKK6ZLJanYH3R+qD1Vf1RLsiQ9Vy56pNln/5KFq2TPVmPMb
+/1C1rJ/J+icPVcueqT68lpMfqtZci6EPVcueqUY3UfzBQ9VqL30b/1C1DDiT9U8eqnbuP1MNa/mL
+h6plwGEfrPEPVcueqRZq3wx+qFr2TDXKUvuDh6plk6LXsf/goWoEg+SZ6p1XwdiHqvelj9QDb+RD
+1cdmDuuUUWo8VK0SSZRoNr98qFoLOLmVRPpQNWkB+Zqshve0h6pl4ynv6tQ1uUgeqj6qhpfsoWp9
+UuHWQvxQNXHJ8v4z1dr5lqTEp/pQtX6+5W8fqlZBoOZL30cmjx9GILqzi+iyTNIDslB7Y0etwo4Y
+gQrXid4tATpm76HybIOjPBrl2QR+O8WL0gbenycWZ5O+zqCXWXq4OPsYH6xGefYpGDPmylxZcfZv
+oqJ8ebYBWTcE5dkEIOF9+V15NkFxthbGTnRaaRRnCy9KG3m5grI4W+Mlo2PKs4lzFH9Vnk3gUdOM
+8pCXZxMUZ4un8uTybAIup7kW8vJs4lfLf1WerbKJ8uJsbR3miBF1axfVpNiR5dkSqtUqzj6wL6Tl
+2Ufsyy/Ks1WxuB9rMGRfdLXfI+/qVCvP/v0L7CTl2QTKhvgq08nl2QTF2dJowm8r3bWLs0+71Xyv
+PJsAlVr5yUeUZxMUZx8dFVWWZxOUGqvl9R1Znk1QnK1zLxxJeTZBcfZ+1s1J5dknY+zICkrd4my9
+80JQdkwgpU2EQB1ZfSkDaZdte3p5thIklbzxX5dnE1bW/7I8W784W5prjdY6lCcOEq9U7ead3dvZ
+and0S1/PJq9VP/R2NtF74sRl41qMSVZjRQrekW9n62XaG/N2tiiR1V/PPnk39t7OJr5J71dvZ6tp
+sIfqqIlUGsVyNd9G/yS7yEW3EB1XUWN7/wS/3nFvZ6ve1UmMQDJFhvxehU9FZRzx9SWgDkn8/MW/
+qxjXuKnV4IpxAi+cARXjylrRv6gY18aYkRXjBtxwSFAxTnrD4e8qxqU5V39XMU7yosHvK8ZNOglH
+xlSMKzOI/qJifFdhp1psbFTFuFgpHCA8aKdUjJ/6ht1xFeOHMWZUxTjKTz69doq0Ylwee/2binHV
+ynrDK8bJ7yL4TcX4flXaX1WMH8odNa5i/Ki7B0+uGNd8LcvQinFj6pL0KsaPqEv6RcW4Igf+TyrG
+DaAxgopxE7n0/UXF+B6N/VnF+DFv1p9eMa7xZr3BFeP4RlCGNLp6asW4yap889z4inGDaqx0KsYl
+lExemnZ0xTjn69NSeYyqGOe0C69RaNMoTTu+7vWUinF134XRFePG0Zgylq28e/DI0rQjK8ZNR5ku
+p1aMy+/s+puKce2bWo2sGN9VP10S3792QsX4b+66Ia8YNxE8eP17ZUN4tZygpOUXFeNa7/IYWzF+
+mMaUFePH1nfv3Q6k+uiDcRXj6A1utXxpYyvGuTdSf5+7dbhiXM5h/qZi3KTviTCgYnzHYehz0ldJ
+T6gYP/FuqCMrxg94SAysGAdtfFcz/icV41gsa78AYmTFuPgCyBFvBR9dMU4QGTGgYlzFSvqDinG8
++5rlxEZVjEuqnkkd1idUjJ92w+GxFeNHWeInV4yr3BHxBxXjuGKobuTbSHteP75i3GRVf+Le2Ipx
+WMuuZvzvKsZVIyOGV4yLkRFit+IJFeM4r0/ziXujKsZ3Zz/lCfxdxbhOpr1BFeNH3T92csW4xv1j
+hyvGlXg6UDGOasPRG9x/VR0u1obD2f+z6nCxH8LYX1WHi/1M1r+rDj+8FqOqw8V+JuvfVYeLxbbK
+l76Nqw4Xa8PFqgHjq8NF4PZeYTa4Opyssv631eGyyvo/qg7Xraw3pDpcLNMGnf/PqsPF2nBBvvxF
+dTgvEqbjLWDsz6rDRcWQt5L+pDpcKwfe2OpwmQ7zR9Xhcp/S31SHG/dS3qHq8BPqxU6oDj/4eqlh
+1eFibfgJOb3E1eHiclVfzTCoOlwlo/sPqsNVM7oNrw4Xw9g6dRa/qg5Xs5IMqw4XcKdWZ/EH1eEi
+Mky69HR6dbiihvdPqsPJ8sd+Wx0uzSL4u+pwZdXzX1SHH8pRNK46XC/Ca0x1uFgbrpNt+6vqcC2M
+GVsdLtaGk2QOn1odrpE9aHB1uCjr+WqOP6kOFxEtu1fB0OpwMRnJZP276nDNtRhaHS7WhstpzMjq
+cG0dxsjqcDUpZnx1+IF9MbA6XKwNN3ZftJ7u/sW+HPF09wGL79fV4eJmq+j8hlWHi5uNYuJ/VR2u
+V8VpTHX4ni32Z9XhRPcqUKOS7+0gKiV+A37h0jiyJEHCZBVSJGZD7Qd8k8334x8AvdM8++O8UYW8
+hLdqiNJeVcOD9X0TvQDcYd6R52pSbtI6pJRs/shvxT6qlFOBsSNLObUwRnrfhT7GlDf/HnFn197S
+NE34o0DCkcQPonQk/ffSNZmVdl6fJp6OLCLds15lQJ1wi5tWoAu/wE5a70mg86OVKnJ30Er3dH4V
+S11b04/Z0ystTf9OZqf/+hXmjKIMTYPzk1X7nuR01LwJHMBTGMW/cTrCeNYjXmbRdTreaTodD+fB
+au/G5VGHRsdKujvtSspDlfUqKWG/ewJ8JxBNViNuTvhUpLfvI1DjHd4DCDyQuK2JQE0dBhWv6yWH
+ESMQzYKK1/XsCR53KhJSJWN0PT5Q++a1hJYklQ1kPthZQW33T8gKLBj+6l/B2BcNgEsoDvZppc9i
+vvdvMab74B+Z3xJVTxv0RmoBZ3z/Pm8cg6SS6q12UysBnnT9TPspe1wtj1aKFipe/w==
+
+
+ 5fOoO+/oXrGbN1bbpDW8S8viiVne6j5Yb+zZKb8B5pRtCleEqKheTh2peA9XtI/ZCTdOF49P8NbE
+2K3DEIyZhXqxXyZSFwmSyMhe/ERA/Sa3WxLjK6r5Nk7EkyxqdDjKo6fko9J1knRA0/EFGssDCQuo
+NFbl4J584zSKCxEX+ZisejXFZDL3sMTdex853wnL3S2nXxSBSteF0yuJ8J700m73g+SCBxNhKTaR
+4NUkcfEVZlS3bsRtEVzV+v4RPvVWDVy17jKOxo6VvmqyV7Rf8Ig9Yho7Inm8Okc8WcOPiBw9RGXc
++oJO3P3qXPM6pOPD2AjCK5Fl6uqWkhG1yjzwiAev1TFZCUZUrU29SvhvtYpgnlU9JKfHQkFMEog3
+E8nZALizJMSn6bhX1lkAAyC9e4aoNvUqUVbePXhS+Vh9cbg2dW/3dUuxr040n2T+ZEwdxtSmovJr
+wVn6W/mCqtb1a1NJaSyiSJCQO5EOZSBovFmvwjfljhCCQrldYBzzZOGeDsDjlWayKJ15S5EYhWo+
+B9W11I+6KutgRTHh27XEUTMwfw294w7BeNx9D9rvI9ePui/rcCG2UF3760satFKUVC0+/ZfOT/E+
+qL1fierWT7o0Sw1ZavcoqrlICR/DRCNqhT/UaOyIKyO657mYllhuiGJZh1sSiuW3n8Ni+Qj50j1v
+kng11cSyxj0ksPuk545ELOO6154BPheENk2xrNx93ce7iTV98eip8uSGYWIZlV+DWDbgFk2uav2g
+WD6Kxu51L3jQEMuH3qw3TiwrPIoo7OrSFMsA4zOJaSYTy9praeqLZeLKVdFK+ljpKlaKN8/169cZ
+o+X+x8pguR+2k14oYd2LJB4or5//8qrFfUu8eYQjhB9RE3cyNwhB1bO+mET16/pnn6SCXcXr92E+
+5PXrSR4hOGyJk3n9RimPjo2I/DAaVy4cKmn+1LtwYT8D10Rwp0Hr125FxT2KajlJv3ArtlTzLU++
+fRiXrpNLZLLnzq+J1WuhlkdDbKmmFp1w4cL+2W+R+PmPsSZFoYXyLUs+j7bYaq/HOteD8cs49C7E
+vvX6HL7WnI8gYq453+5GHd7jiPBYqmV61/1ZYt53LxL+6fZeJgPwVMnpkKXiN9+Pb9kr26PAXPoJ
+W3q0dNCJYuOltNtnsJLEynv+FMm7dx7E7mJnrlaLx0npMTkNmunUQ6MyzN5k3jywvoY966gwifhP
+8t2OKlM4c2DXGutn0YjleKRW2aL66HzQbbZtM41kw7x/uMrpfrg7yPQ7mfJqxawT5qvxqnLttoZt
+3sa9P+FnnevPu+vFtmuyXuaHwdBV7NXycm6+2zjMiezT9XnrnQ1bqo2LtPV7Xi1dDj+XbrZa+vkI
+fA9K4/h35+GzOKyGQg9v+Z96lV4WR9XPymT6nLu+39Y/cg77x0fK6fhq+b8eZ2VnZGSyLp0v8c3K
+WrVfrlZei/l8MVxcWynLZ8TxUurXnSHnvT36Y5mVwkzn6TZB3dycr1axcNl81c7dm5nk49QZ6fvi
+VJaKRalsrZGlcheLByr3+PC5Wk1i7tX2Mwrccn3peuh5vKVQOFG9GF/iEnJY31vGHSjZvoKBWKqY
+nAYqTly8DSut1QCG4cCpcuGCSp4Dt5Mmq+qVC47JNGR2Tn0VNL1XJN0w072sxG/ceR9X0H6Z/HlS
+x/GU9lU/ny0/q/icfTBZzY2HolMHRduOx3JlszbLlmBkmrSWq7nCZad6d+sL2e5ZWFXSnKhd92Ko
+QL7mvL12NxBwgXik/T5NF+z2GH4du1WhMvXAx2o9LlxQTOXtIhFox4fpu1msGQ8v2zcyTz7wyPuf
+jCu49oTKhcpkd3oldA5yoZwSD4XJKhyL9r0o3ilmurlJfbKPLdir9XsC9qKxN86rVW1sOd6v2tmt
+2fX51UT3XdTfM2bXfaNptru75+iWiwL6J2J2J7xls/va9o62KWp2zytvZmffE0Lo8Ceeam+XmR4V
+CeCxAw0vNeCqsdF/RYbv5U/gvg07rOriBt0GnB+108PVypWYLUprWFXjB7UNsqmk+Tz+dZGYpibd
+a5qi1h1buvf48ZAIupYLZ6bezEPn5jnM5+wg9N8xH/mBi6LfL6zJ2WM7mE0ltt34ck33hBc/o2zf
+len3L67ikcI3HPticYONJorZbi7iq4vBKukOTh8o+tIxTlT7l9tE5SpYTywWnhJSVC1sqzgvxsOP
+qa9Mxz3exG9iPms6War30VoCJmu28/G4TNTSLwyQu+s2PaJa6FqPEI3Xiv7sxG9Y8wodC8eubXbj
+iJeqyen80o0Ge0Y76U9+/4StyUrCwiZ9G+dr1r7o0OmR+/URc/6OD4hqsEHjtNKjdiOQnManXjQi
+jgeZU5+v/W343ul9RXRQxMADebkL2cx9PZg1u56y2Q/Ha5HdLN/LsFcxFwBituc2H8serKrpQzy5
+sHXGIyUzulf36iJdLOYD8OsLz9449kthc9IrtPB1NjV0vyZ9/rkDk4Cwp01r6tN9N8hfeKwBcZ/R
+2e/cnQPwM9qZdlm3WXv+7i78kNy+pu/u4jaxLTJmWt/J/PP8h5uP2bbcsMjBudiFfWG/XhNPo/Eq
+Pbq2fGT6F98xPBWsBQBwZDM/b+HslcPlZC/CzWqm77px7y3ygYFJk3PsOhJhTH7fP10DHbyt0F0E
+Kczb0qNkI5hN+18YIKRWKZthHKDDSNDBXHx8x73J6y/uT3ocWAC0qQvJgoovuYUE+NvsTx7vGmzJ
+ayW+2mYvgRhadcprPg+mPY+fabyJoI+NZhFLomJujWEZgUK60FnbQN7dtinGNZwm2XjjB3GGLgAa
+/ck4rxo/Wftd8ymbGhVp2NrLe/58uuNIyaUs8XDW2r21u10dtlWq9SQYcwObvSwlK6/mj/TdlH7K
+dhzhNIp8Pe59uM1nLO7PBuWNVG3J8UulHhltyylEmoX0dbMSEITxCCjiaVbNtr2ZKdBQ8hnWMrxk
+y0gbeGEuo/a8tFMjNEqPncVuerRYRVFx80yA8fkm04+2L9JZm6upAOllOUFb7El+25/m+FCAzt9e
+9ypsY5bxsNun0JA9z35UoFOQThfvzDWY9K19+/aQus0m+uN+slJ5fEh5b2tRHEfFV/aEytZxk72g
+qcb1ffXbi1QIV9K3TVZS97fzFH9XJ0UvfvLpUa0cQMcwne4WCs/xSGy7EciL2aY+t3eN1OQ2GuY0
+4dHM+h2PVDdl4DpfzuTUM75KlPujEoKrCuQ8eMm8DAoAA9uOZpwlD37JiO3bU5P1DY2Vu30fnpqP
+OYlm2aZKi+9H0pnxzS2KuY+fmY0++x5AsG7BVGBfgqA2vqw4XYC+vgAau3E+R1ZcJ2BmdvybQL3y
+WgvUp6XcjsHDwWUiwcTjezGTdIeHS/5IFVvT1GDlekEKZj7T//4JcW3Dha+f+VgOvmAt536QLzz6
+AYC+H8jlYRyZhCfvwVH2Jkfb+ePqtm8Sj8lZlt9uIM7gopBpi3/e2rfMMJmvXbyj3QXqni1d8CHW
+BOpOzXCe0kUS0fw9MPirZmKev/qBT4HJ/ofC7qqShYDZ7ix991r7QXpUCxTRpzX3VUVJAG5JoCYI
+6nAtfuMafAJ/XV5EhrXOUzYx7c7kmnWtsNnK2tDZ5+6lKmwR37kBhXdjMztuHnwg8i/rSANImy3p
+4M1OIYihDwWz62f5iD7EkH4wAMWhmTdf/VysYF/u27zAuKq6YeQYBdxy/5hiaZicvoXCHPqRnwKf
+T8z2IqNpbpyNj+NvYOLUfJzlSCd7n4p++eta4jG0jvF33XA90V0x8Z/46gZf2cP/OjQxZy7ntgoA
+Rb/KtQtQF+wAaOY8Hm7aJ0nmy/ODrRa+n8szSz5uLyfZVL8aRrfQYPJ7T7j51uEWGFctMQQ9JOoH
+E7ZVyvQ8g2HGORlfYGYWnqTS62BocT1KVFf1HC9ik0kzqBDReOLxx9GHoew2TIFRWzU8QWe/tfAg
+PEXzF085DwirxpZtdn8KWFPK377XKTgq90EYLMTgqTgFJdeK9xLzmHkBhMZecE4b743dl/APcs/x
+n9F4zpeINDceIYNo4go7kSW3SNQalqtMh132JT0VkQPWAiBlkbhhv5AqtuL1rd0/yHgG1c/1Dhrq
+6wAw1rMOejISQHhKC8q0wy4cXMtlNv3tyt02Rqk4CNbvUcbx3h0navXaOvMy3Nh4fnA5AlXS/zVB
+gqAN0NxGuFOZEMzCzByzGdyW7dwz3ni4W5onPzv3b8lJ4q2T6VVaHmHSpBV2o+PNNjrRWnJ6Ps+G
+ptn+W4jNOfrAwrDQaqbxB5M1cNNgP5DqNEk8ppKVjKs2upZAhq4xAvr9WXPUj3V1OpQATTCf8qDB
+Islv5ta8212wtVzxeWoyqW2wuoQ49r00ysPp/GCfrrOO1gorbfPsTXZAc7z9br0YZTul7SXQztK6
+b7vn00Pz0oXOUD9er911s5lgZYjYSBZ/QLc0b2tjtOcefA8d5zMMMs/ZRHVzXkWbPEAqa5Tz84t6
+1OO48p5xfr6/CDJ1RCEe6UYUMZKozR+1TRt237n22nYsrJUsp5/OYS1lYMIpdxTrhOh6qQSytePI
+qKBSky/2mqN4cbCX/pBarW77NtEBdWufRibAEsdm4Pw/iYs44oIDfOyxgY9uGKtI4VbMV5dcmuWN
+fFrgtw++ePjhO5R8LC8noJmFbZypZN7Y1/j+sZ3qOxhXZPNRd28uj+Ah0sAJXsa2V/7RXCm+GQyv
+dXGltla1lZ6fR2O5gyt9lq0URUU11kplbh4zOisdnvuvCVaKbOTkNb5Bbb1TSgty3NrytrzUto3l
+nGmPh31BSjzLyTOQrq+7Dw2ZtIO1cN9n5z4A+QsYTq0Y4I3PaObKa4u80pGx2fqV6bc6THJauP6S
+GFIFvyeC3h8oZd9HGfXfgpKLfOOrftiWTVRm65391qdz72MKZM77Cil8dxnH892aU3JBEX3K2guh
+IXJgDLMdJuEXbbHIyLXqZBOvtBnkR/Jd9MqjWJJEtQchxOQft+lsIg2HePRcweNwN6jdMOMKRVPl
+Bej83SYAf72NULGRGd85t9p2bhlk51BwmLNv6cJVfy1+hX3ZdjxIOju2gInCGDSSp/NEeVYdg5R7
+SiGnR0tCMXvWxv0BkNLrqggS7IsCqLhXEyj4SnuOBwnbL50HTaCobJJ91MTT+jw7psRjFnqsjx+z
+72+LBb6/KPxATT/AkPA2TGDTsnfAD0dl/+56yge2tXx9TzyW8i+KSaWXID6AoPu4iIfX7gXKWrjL
+OB8WNTB2Hq721/dusiK2wIDynnTiafcm9X/u3bGZXgPbvrpI+hpMikfqel7VQDmH1CaeFDC2N+2b
+xk5Pn0h3WjlpmJZmD0rQispNRbSqrK+jiVTnTWTGg5TbBIZJf9pdR36Y3fdI//GeB6oQ6qqSlypI
+dGGtDdLrytsDK0kbKISJfaCkIE2fH0hBMlmlQIXLm8NAnQgS7MsxQElPBMpCJGRHag==
+
+
+ Z/8AQzqRHeGz3+4cRf2yI4cOXBQdyL7GpCEGzj46kIJKK90IfMeqyoGMHTznb2qnHHl6d/sbb1x1
+8e6rTYru5H3jdr9yFXlTIzk11oMzLExWAw+f5tFDNxsTE1VvfSKbwVLMeIGCSGookpSmFNMmqrbG
+sB1tShXXoj2sFp/udEkPAKIxcmj7msOC1Bxca8LKRUZetYYd/eK4tsXjarJqHtijj2sc1TM+qB1X
+bi2zQ2KZvUDs+Edl2AQy8TIaXKAl4QIgX1SG3bshWcpcpDEiKdW+a5yw4UZS/bTHEd7jMTV0aEzQ
++VCfoNwT76N+QF64nbbjeg/cqk3AtDfhAnYUBFYTqpy6j7+aeaV7E3Mi67UKijh1AbZRrJ4e1dqX
+qVE0ZwEE2e/EmMWmjmbMYyN1F4T5wX4YariJI+cIM8t23f7v1Kfz5WLnnEVtxfN4pNgcSbzy6K72
+UNnaTOEwJ/auYB+s4BdyB1dj7HgKBicPH/no4C0lDy15mZYjm/b756nR7WcZxRA4T/6Na5tu4EVy
+18LvAgBgv0wbnP2CvYcSWyxStLT6OO7AZ3dg58jXqJPpX5mr8KfXli4W2GrGbXY/C396weQoUtb0
+3ddPRmh7eUIOKJD7/GAAAPIJL1Kln2dLps86/Mn7Tn0siUl5HfMLMKSeLem7afNDDEftB6MUjs/v
+0hd6jbFzbwsIDt3GIjkdDByJWr3pgL18YlQDSjTsGpiH7dvse9vxisfhRhE3R7Rty7ERojFEBPsR
+HVfCP6j+ANI7FqHN60C26BzIon4rRqcyPdsMu4rduzZHLh6tOMX5blyW3BfmMBXnLjyExsnbuXBN
+tlrupSnLp1d0OecvPEwI7f6DaNZLw0T5uhP5fOfI2AuLgQKYhU2wTi7Uw1l8lTd3xlXr3yL7dJMa
+vhU+4DBYHCJ4IV/kPS/+Gay9JRvJb4d3F1Zt2oG1imtuzBDG+GDkfXL62l/yxJDdTvn3CcBmRdt4
+x1ndxZfvFFDo4zkfGSnbZnss5e2HohetKRz15ibxSLur2FeAvAqDZYXbHLwWOtkbIqHe4GM2rRwl
+LF0I/7zlS0PkTGshd1Jd8WFMFTDN7kJCcSSRh5YWEKfzgQsZ8W4NeUzqDQeEuYwe7FrYdUEu/k7u
+ZmnvKgNdV98Z5+RlAzz5IvX4oQCKHWwAdzELjH03R8eizkWV2sXMdXrstvcSQTbgyaZbNRfvlthE
+EjiqFCkk+41sbJ0rZzv1VgJ7t/loQqLqttyLESaK6ZfWKDr1nOzPt+8c15mP37yZXqWJeGnRw8bY
+Zi6VefJtpDGShquRHlXWH4gvPmcz9MqSdnV/6piPvbjT190bW3g8v3wGyPz29HAd8/G4M/tCnBnt
+ZUqb7IerHkapUxVpqppaPjRTavARm1SyjLQL5dxGzyxmdJeyqc9Aka8LQHH0xFMtW0N5FyH2+Tac
+SjzbIh3cBbnBGugXheTUWqulxuO1WXCf87EiLg61O1ImKx+dqsy62Zvcaw67bXCbelQJpk8PJ4vX
+nDX39gXHNeOXHFcU5WCb3WV9FyGqpodNh1cSS+rwjmEudSF/iZxtg+TU8+R0RnttB5JDNqB4XyZr
+H8baicXn45UgF3YfBl+vmW7XH4qG7pgFh9n7fP0bea5ys2m64HivwHHuM/g7DsGFH1LX7zB97CfM
+9K4nIM96xUy38wwcdDErybI7gksXs05+py8/d8kQz4juVtkru2MCu383TTVAPLQuBMhegsj51U7f
+DW5WO0ERSd/1b+v7/bAjMig8PcBzIs6jyD3lMLCOsb8cxV/8cz7RAkR+EKVh/OzSQvLXk/OybSfF
+P3BsACdsoH4zMZayE1BrsS3Bet8mIESYMbYrkfuj8naxF7ipUNmry9VWjO2gRIRO4mn07UjOnLYW
+N1gxtkQCehFGcjjPpN2vTmnAaDAuZJzrjA35lN6AZ1PRbQCTFz/VZrlFnL+fgR1ZAPpdWz5sflt+
+wpEmaeglmnHvQi98WTXjWpkR+XzjfsgW43vKL5EJrLz5SfLB9t3axXtSu+CuTYj3wOlFdtWto+Gc
+KEng85Wi2/egXST9DnYlU6duLtdDBgdhUE7Za3qYaV4CEkQ51ZhlO6WFF5TF88/kpBhf8xLQcr7O
+OsqTMEoPaaDdb0FbzgOzfP+4x1n7KPieHna2vWTFurySHDT/daiXHn4Vbih/rxhDB8mdYiy3nbRn
+u26CHKpthQ+UK1HL2Cbo6JXSo8u8FxSnRECSEXEVD2eugZsmezEclcEhFSFc0+jFa0/BajbtGFT4
+/RWiPLwgR2FVMa67+D9RUyAY8p4FWZrxBIPBwNn103Y6XD2uJuPJ/MxlipiuE3c0/TwfLLKr4bA2
+/J9NetHfzobzzVn47DpRTYGcBxbTXwyG0B2dGrclvnY0z0HF64/E3EcxESsyDFvnsjiRWCsuiR2p
+MdAXdvZist64O9kFn9XFRtYo59SemPfGa/430Z8ZZ7mtot15blr/6iU795VEwjWn25EYXQ+mLwbb
+TDqVf2vjofgwlewRLAJQjgDktpdwLR8K8WJoHQ3mbxqe7OLFByIws3p7odIv2VYte5u47avBw2Um
+88qc9Sv5uOmuj8Iict+LoMQCl2HbgvFlGsmfevx6c5V2hny962SGyceh7b4QHz3XHhJ5tvPgDPlv
+Y9mQ5WmQahcu8jhZMVB3n99zijBXwFP83mCVAiWgoP9OTOfnyO77wApC4Pk922Wjy9cH8UDgNl49
+tAU30jDr16TL2zWRSBizH9H4oV3jcRTTWMgOsmxyky4Wby6FDJ72KzrSJdD4Zi6kYZV5NYsTXe0A
+6Nz2IWI6iGPaJrxFMu2CZp/OU3xEnkq3cYQKGXKp12E2lQxdYSODS77Dxpiv426L2YQo/F3DqiD3
+586IEtvCRfr6es9eQakotZsLZPy42v7sRzTR1c6hQ2aSaCTd5KbRVqa3yIPN8bK4h2XkQnyKgds+
+2xkgIT4hACdtxFd9jw2r7ZlBODpT5sZhI+LFk2u/2cOpYbX8rDRkJKGyqpotZLKG77uVGNbTJTvd
+uF/eYeD3bQ4zlu7Stpn9Mmvvv+3C321QVssv19J8G7DHkDif3aJ0vWkLGeAhSTob4nDJ6TBJx2eP
+ywofJRzdhyQmFphqNi5DXYSwXik1QaZR3zjUjZCfxeJ8EUR5miyy9Z/BUly74qtJ3yGAl1il77Iv
+58KfNx5st0sX1P+x5paWd7eQHCDkcz6W2ArOEUSKqfsVJcFzz6/5hEwRnERbGqazNkcl6a9XNoK2
+L/FVREmT62D3VdLrjE6uw6dSkV5ndHIdCFqV9Dqjk+vwWhTpdUYn1xmV4nY4uQ4wRpjY95vkOs6Q
+k6fXGZ1ch+WLIr3O6OQ6zviRp9cZnVy3XwJ6TA7+Mcl1nDtSnl5ndHId3hdFep3RyXVcWpg8vc7o
+5DqcTKNIrzM6uQ72RSW9zujkOphFJb3O6OQ6k1Utvc7o5DpEY8r0OqOT60xWtfQ6o5PrUIqbMr3O
+6OQ6kPsq6XWGJNc9i+lVKJFOmV5ndHKdNGnjcMrZb5LrQFaqpNcZnVyHwvbaazUquQ4FCJXpdUYn
+1yl3n1uGscl16DFyZXqd0cl1qBREmV5ndHIdWHwq6XVGJ9chDmNYNotmch2cSqKkq9/lQuDkM9WI
+vZHJdSh4o0yvMzq5TjXR4d3o5LrfJG2QJ9epJaCEaaOT64DGjsnwOTG5TpZG+btMNs08NuzAPQiU
+Ecl1QGO/zfgjSK7bnf3Ts30J2JHm2Tc0uU6eeHpito5Ocp1uEq0hyXUqyTRhu8vo5Dph9088fITJ
+dcBh/kKgyEgKJToo0+uMTq5DEvmUYY9LrhM5zKnQkiTXISmmOqyhyXUoaUOZXmd0ch3SYNXz4IxM
+rhPX0lJNsjUmuW4vUXuXXmd0ct1OU9pLrzM6uQ7RmDK9Tp5cJ1xfcGpyncmqll5ndHId8pAo0+uM
+Tq4zqabXGZ1cBxxGJb3O6OQ6xPmV6XVGJ9eZrGrpdUYn16HEU2V6ndHJdVxygDy9ztDkOqAhkzU4
+277epe9mswup6+GdjeL95UKeoBWkkBOwzoV6Gr2wg0PHLoLEZR69BK563LUR+x9M1sCPJYYhuxci
+UewqXk0VnxKPNPWIg0K8h0RIvhNS77p17mgiJygOOOy6pJPfjMcpJs/tRazeBpY1HMNBRohoSYFS
+Zpd8v+H0uZu8PZbJJdrthiyghBJM3lHy3DtKDbl3WpQxqcx5YrG8rYqJdEIa3lvdGb24uUCrjyfH
+/elrsr9wlCkmli2j+MpyL3L5WsOhHFScyQVz9oIwzLRqzbhCjvd4hKpbsA9ajBHxiQawyTfd0WjI
+BQo4r+5+So7iWZddrGUvjGTUzCbVuYWZbZtEdWuxKONrk6V/U7YMc+2X4Bh1mQBcZUoIyz014uHl
+u4Pz46M8DuCWw8niCafcSS5aQWl4OEixY2a4ra2WPscH3pbhXqKWeh4lp8GL4I65nOMMHnT2Z9GU
+kAyXbSWnfuud8OeskwhFim4+tZK9tsE4d6309bkjQPdKdw4+bFVcF5L3DX95P9LPfyi5X15QEu1k
+yz3SjHFLfV5sJunh1dN5kmGmZQ7BQtxImcF+Xn4Dyf38ify75X05W0IpobeJea/bkSZqc/mHCXdq
+kChb+veSmA3gFuRLd/q1l0hHWRK+95fSXj8csdneJBbpd4uYcIei1Q/fgcTi59khtLov06PEZRkJ
+vboiSyS4aKP4cJrPtXMsFyiamRP6tX+EQMnlpRg8QVof3/qNE8gEPST6E568u264+Euy9NYAxlz1
+ZOPvrysU+bGjqSIgEhru+Noxc+esWe8ED5U1X3leKG8j7IXd7w/5i3LEzDkcfUxOZ4NzUFViFmWe
+X9OSHl0np4mqq7QAPJk/+Vug2VEAZNfVCITa+WfSHU5bAIG3PNEMy4Eb/inHUNl2MwICeh/v9ZRf
+l/qV+kpu/TiIhgWdkNSKsliFVFZ0em3I2HtDMa43TAJI7gMR8CQAeBJvXtsdn2m281G2sI3vB2RF
+oIvK6Odh0vdCbRO1xOJKEH6X9ky3e7FJ+vzjpZDttPjGOXLoVH4VvmHBXU5nCrG54GeqVBr8JMsp
++iXFWJ5fcQx+d9DMfPjnuVtJF24WFBykxHny86HaT04K9/dIH0tyH+iU9Qenv+CUUPopfd3NBPYg
+a9viNU9iiAitC9Q/RsqPawFTjbfZxPa1KQSJHZ9cNtCmuLnNfkw9Wy7pBenO4sWF/ydqigDW7mj6
+IzMfSBPnTFYrtFSHm+0SdfB/JIfjybzU/e9wZaLPuP9R8D/0fxm//ywQQv+POvOjxlLPZMddzxjH
+WWlusn5cJ1ab9KS/mSzm3dV/z8KoqXlfer5Ln4XPuL4f0DdyZgdgqA/oDZ8cKFnvAwD8MFFnCfj/
+zf/A3Ikl/NeTSQCgaKL4/4Lv/4U/CvAfX2eMx3f2nzPf2f3Za5s6G6AfP5m8Aa+HDQ==
+
+
+ BAJnPn/Q4/fR/rOZpM3HeLygKZ95Wcrjp73QwoQ8tDcELT6fhwn4fWJLyqRsK5m8TNBDeQO05Je0
+zxMM+CSDCw0CBDAS3+QPUB6v1x9CAwlNQdbjD/jgZ8LI/lDIE/AGgiJMuxYJTLs2GEpYjfhLYcXi
+6LsWAYSUCq5KprVpi3YCbcCjifIE/GfcP/C/bxPFb0LRxHiCZ/+BiX2eQAjG8gMErB9G4pEd9LJn
+fj/rCQaZ4NnU5A0yAAWgZtdvKunnDXn8IQr3U4w3NfV2ZPAN//W/M+fI9GwKndkdZ80GQocCC09K
+TDBeT4D2B898IehJsTSCCu0wEwRSCfk8viDtQ7NRfk/IG/SL/aZiPz9NewIBL+6nGA9hQvWQ2b0e
+GvYu5HWcXVc3q8l8fGZPJhN9OORPi00XdZWcMhky/xfAHhkBtrgfIRrI1+sXUoVDLIAstLmBmCkP
+TVM+oGT7g+PsiiNjno19m5hQwEP54Tcs7fUA7F74MW5jKT/XRvmA2YX8MIjPe8ZSAQ9Dw3lqmVBb
+gPHT0MZ6Aj6agV6sx0uHvLiF9jEsbmFZGvXxw8GiQ2d9PLqP8QahzedhGYrGvQBbPtzi9fItVIhG
+fbyeIAud+3g+ny/I4DZvCIgPtVAhfwBaGNgMKgAtaADGj/uEggw3H+YPITw62gDcgNaAGmjYU9wC
+e8TgFsbHIFbHhICbhliO+VAsixCI+gWDXi+0IVgoHwaUQdvrR91Z2oeBAo6C+tCeUAjG4kAIoSWj
+Nj/DINDhLFI+xLQQfQCpMEHgVCEWTh3gh6aADwIMQVgObALX5qUQl0RtPrRW1Eb5YF24JYTZJOsJ
+sXgsn8fvx+wPnX4fRl/QD5uDx/d70BpQpwDrY3EDi3cLWmiGoXELHfBzP/N6fAGgcz+sIQDYhl6A
+bJSajlqAJmjcAoviRqJDQCbodzRCVZAbnUU/owHKEAbJR/MNjJflF+fzIanABABRCK9cWxAWBy1B
+NsAtlw7AgP/gXoGQl0cVbDPu5WODQdzi9wNJoBYKM7tQENBJswgmzN3xjEFYcRAQhVuoEG4JAIpw
+C94P3AL/8L8L+DCCoS3oY3CvEOXjRwJyR+cBEBxCmELUiAmV2yw/kmCY1tEaET4pv5/BJ4kKsAzG
+QygA+8BSQGho1xAeAiAKGfS7ICAk4EVjBWAvKXQmaAoOEE8MwKGBcqAN0A2ykm+DKdGJBjgQKqCB
+CSIgEH8IUSxu8XlD3AEHxQzvF0jMIB7Jy/EL1BLye7mfhShMMbCFLDo4aGQWawRoPUEWcQYa6N4X
+EEg05PWj4flNKOF+LKJqBL3X6/PjNiAXry+IV8myQZiAFVDB8qDDB47v+NCiaHwwAc8+PCPg1M/h
+GdF0gMVNQfxD1IkCCHELC/ztH+6HfoRUaAtRgEDMZmAvuV5oeNTCMSdo8QIrwKcXEI/ZGqAmEAgC
+IqRMEzQH35mSjfY12TzjgV0EQiFi81usfTzxIheLqiIIqsIZA5reK0B9hjU9YAjAbIBT+0EbwlQI
+YguwSgNWfSwgB8QWllBeXlfzIRYPShMICcAwwOtjUAtsEGwcN5TPD9sNEgmW4mVBHaLhhPtYYPEB
+4NBe1s+dACTXaAZQ5/V74egFgQvAvEHKF0C/8wF9BoHQ/KDKAQkweGMAmeikUkCMQKb/NVU1EcWi
+KRgiRInaGUbSN1aKaYQkDkFAngyQGtJzQjTDYvzAIUPSxu8DrACpYbGOTgavDwX9nKQPwK4Dzwa2
+gk4NRqNsME5B4mamBZ0c/s/AxPJC+lneoAKvRKMH4Q2CAskHhLgAsG2AF81GIeaIFG2WRtMi5Re1
+eH2Ia2HYfCB7MUujQ7CzIbztitG0lRA38HIqAFySCOtuVKQEZxf4eYDlBczMBNQWQodcbBOUD9wf
+mkH6+YH3oa4hSvxb1s0PIpHx0rtuwt/73RDXwEyQ77b7W+hG77R33oL7xpsKZxbpuFirCPD0wLch
+wveD2QI8kQUxAWTNSSik4QF794stQOM08CgvG5D0YoCjU0jOCAOJDfxs8DOxLQRKJQMHbzdQgAHC
+AOVFnE5oQdMJQO16iXALIylWh7hRKckZtWDiYtvT7QZ7t9wdD2ur7mQKJu543f1neNadz9E+D5fw
+5Wy8Gq43i9XwbP25+A9qgZ8I3cFYfsya/l9rlydE
+
+
+
\ No newline at end of file
diff --git a/Nasal/canvas/map/boeingAirplane.svg b/Nasal/canvas/map/Images/boeingAirplane.svg
similarity index 97%
rename from Nasal/canvas/map/boeingAirplane.svg
rename to Nasal/canvas/map/Images/boeingAirplane.svg
index a877f76ec..064f3761e 100644
--- a/Nasal/canvas/map/boeingAirplane.svg
+++ b/Nasal/canvas/map/Images/boeingAirplane.svg
@@ -58,7 +58,7 @@
transform="translate(-364.652,-344.745)">
3)) {
+ color = [0,0,0,0];
+ }
+ me.icon_tcas.setColorFill(color);
+ }
+ if (me.style.scale_factor != me.element.getScale())
+ me.element.setScale(me.style.scale_factor);
};
diff --git a/Nasal/canvas/map/VOR.lcontroller b/Nasal/canvas/map/VOR.lcontroller
index c0edca10e..ea6985bab 100644
--- a/Nasal/canvas/map/VOR.lcontroller
+++ b/Nasal/canvas/map/VOR.lcontroller
@@ -5,21 +5,11 @@ var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
- parents: [SymbolLayer],
+ parents: [NavaidSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
});
var new = func(layer) {
-
-if(0) {
- # TODO: generalize and move to MapStructure.nas
- var required_controllers = [ {name: 'query_range',type:'func'}, ];
- foreach(var c; required_controllers) {
- if (!contains(layer.map.controller, c.name) or typeof(layer.map.controller[c.name]) !=c.type)
- die("Required controller is missing/invalid:"~ c.name ~ ' ['~c.type~']' );
- }
-}
-
var m = {
parents: [__self__],
layer: layer,
@@ -38,6 +28,8 @@ if(0) {
}
#call(debug.dump, keys(layer));
m.changed_freq(update:0);
+ m.addVisibilityListener();
+
return m;
};
var del = func() {
@@ -59,10 +51,6 @@ var changed_freq = func(update=1) {
me.active_vors[ navN.getIndex() ] = navN.getValue("frequencies/selected-mhz");
if (update) me.layer.update();
};
-var searchCmd = func {
- printlog(_MP_dbg_lvl, "Running query:", me.query_type);
- var range = me.map.getRange();
- if (range == nil) return;
- return positioned.findWithinRange(me.map.getPosCoord(), range, me.query_type);
-};
+
+var searchCmd = NavaidSymbolLayer.make('vor');
diff --git a/Nasal/canvas/map/VOR.scontroller b/Nasal/canvas/map/VOR.scontroller
deleted file mode 100644
index ec14ce929..000000000
--- a/Nasal/canvas/map/VOR.scontroller
+++ /dev/null
@@ -1,9 +0,0 @@
-# See: http://wiki.flightgear.org/MapStructure
-# Class things:
-var name = 'VOR';
-var parents = [Symbol.Controller];
-var __self__ = caller(0)[0];
-Symbol.Controller.add(name, __self__);
-Symbol.registry[name].df_controller = __self__;
-var new = func(model) ; # this controller doesn't need an instance
-
diff --git a/Nasal/canvas/map/VOR.symbol b/Nasal/canvas/map/VOR.symbol
index 1b30ee0c4..3bd2edb08 100644
--- a/Nasal/canvas/map/VOR.symbol
+++ b/Nasal/canvas/map/VOR.symbol
@@ -5,33 +5,31 @@ var parents = [DotSym];
var __self__ = caller(0)[0];
DotSym.makeinstance( name, __self__ );
+SymbolLayer.get(name).df_style = { # style to use by default
+ line_width: 3,
+ range_line_width: 3,
+ radial_line_width: 3,
+ range_dash_array: [5, 15, 5, 15, 5],
+ radial_dash_array: [15, 5, 15, 5, 15],
+ scale_factor: 1,
+ active_color: [0, 1, 0],
+ inactive_color: [0, 0.6, 0.85],
+};
+
var element_type = "group"; # we want a group, becomes "me.element"
var icon_vor = nil; # a handle to the cached icon
var range_vor = nil; # two elements that get drawn when needed
var radial_vor = nil; # if one is nil, the other has to be nil
var active = -1;
-###
-# this function returns a new function that renders the symbol
-# into a canvas group
-# the signature of the first func should contain all customizable
-# parameters (such as color/width etc)
-#
-# you will typically have one such function for each cacheable symbol
-# and only call it once during initialization (once for each cached style/variation)
-# the signature of the 2nd func remains untouched, it's internally used
+##
+# Callback for drawing a new VOR based on styling
#
# NOTE: callbacks that create symbols for caching MUST render them using a
# transparent background !!
#
-var drawVOR = func(color, width=3) return func(group) {
-
- # init_calls += 1; # TODO: doing this here is too fragile, this should be done by MapStructure ...
- # if( init_calls >= 2)
- # print("Warning: draw() routine for a cached element has been called more than once, should only happen during reset/reinit");
-
- # print("drawing vor");
- var symbol = group.createChild("path")
+var drawVOR = func(group) {
+ group.createChild("path")
.moveTo(-15,0)
.lineTo(-7.5,12.5)
.lineTo(7.5,12.5)
@@ -39,35 +37,16 @@ var drawVOR = func(color, width=3) return func(group) {
.lineTo(7.5,-12.5)
.lineTo(-7.5,-12.5)
.close()
- .setStrokeLineWidth(width)
- .setColor( color );
-
- return symbol; # make this explicit, not everybody knows Nasal internals inside/out ...
+ .setStrokeLineWidth(line_width)
+ .setColor(color);
};
-##
-# a vector with pre-created symbols that are cached during initialization
-# this needs to be done for each variation of each symbol, i.e. color/width etc
-# note that scaling should not be done here, likewise for positioning via setGeoPosition()
-#
-# FIXME: We still need to encode styling information as part of the key/name lookup
-# so that the cache entry's name contains styling info, or different maps/layers may
-# overwrite their symbols
-#
-# icon_vor_cache[0] - inactive symbol
-# icon_vor_cache[1] - active symbol
-var icon_vor_cached = [
- SymbolCache32x32.add(
- name: "VOR-INACTIVE",
- callback: drawVOR( color:[0, 0.6, 0.85], width:3 ),
- draw_mode: SymbolCache.DRAW_CENTERED
- ),
- SymbolCache32x32.add(
- name: "VOR-ACTIVE",
- callback: drawVOR( color:[0, 1, 0], width:3 ),
- draw_mode: SymbolCache.DRAW_CENTERED
- ),
-];
+var cache = StyleableCacheable.new(
+ name:name, draw_func: drawVOR,
+ cache: SymbolCache32x32,
+ draw_mode: SymbolCache.DRAW_CENTERED,
+ relevant_keys: ["line_width", "color"],
+);
##
# TODO: make this a part of the framework, for use by other layers/symbols etc
@@ -84,41 +63,39 @@ var controller_check = func(layer, controller, arg...) {
}
var draw = func {
- # Init
- if (0 and me.model.id == "SAC") # hack to test isActive() around KSMF
- setprop("instrumentation/nav[0]/frequencies/selected-mhz", me.model.frequency/100);
var active = controller_check(me.layer, 'isActive', me.model);
- #print(me.model.id,"/", me.model.frequency/100, " isActive:", active);
if (active != me.active) {
- #print("VOR.symbol: active != me.active: del/render event triggered");
if (me.icon_vor != nil) me.icon_vor.del();
# look up the correct symbol from the cache and render it into the group as a raster image
- me.icon_vor = icon_vor_cached[active or 0].render(me.element);
+ #me.icon_vor = icon_vor_cached[active or 0].render(me.element);
+ me.style.color = active ? me.style.active_color : me.style.inactive_color;
+ me.icon_vor = cache.render(me.element, me.style).setScale(me.style.scale_factor);
+
me.active = active; # update me.active flag
}
# Update (also handles non-cached stuff, such as text labels or animations)
# TODO: we can use a func generator to pre-create the callback/data structure for this
if (active) {
- if (me.range_vor == nil) {
+ if (me.range_vor == nil) {
# initialize me.range and me.radial_vor
- var rangeNm = me.layer.map.getRange();
+ var rangeNm = me.map.getRange();
# print("VOR is tuned:", me.model.id);
var radius = (me.model.range_nm/rangeNm)*345;
me.range_vor = me.element.createChild("path")
.moveTo(-radius,0)
.arcSmallCW(radius,radius,0,2*radius,0)
.arcSmallCW(radius,radius,0,-2*radius,0)
- .setStrokeLineWidth(3)
- .setStrokeDashArray([5, 15, 5, 15, 5])
- .setColor(0,1,0);
+ .setStrokeLineWidth(me.style.range_line_width)
+ .setStrokeDashArray(me.style.range_dash_array)
+ .setColor(me.style.active_color);
- var course = me.layer.map.controller.get_tuned_course(me.model.frequency/100);
+ var course = me.map.controller.get_tuned_course(me.model.frequency/100);
me.radial_vor = me.element.createChild("path")
.moveTo(0,-radius)
.vert(2*radius)
- .setStrokeLineWidth(3)
- .setStrokeDashArray([15, 5, 15, 5, 15])
- .setColor(0,1,0)
+ .setStrokeLineWidth(me.style.radial_line_width)
+ .setStrokeDashArray(me.style.radial_dash_array)
+ .setColor(me.style.active_color)
.setRotation(course*D2R);
}
me.range_vor.show();
diff --git a/Nasal/canvas/map/WPT.lcontroller b/Nasal/canvas/map/WPT.lcontroller
index f22c043d7..3fafa469f 100644
--- a/Nasal/canvas/map/WPT.lcontroller
+++ b/Nasal/canvas/map/WPT.lcontroller
@@ -5,17 +5,26 @@ var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
- parents: [SymbolLayer],
+ parents: [MultiSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
+ df_options: { # default configuration options
+ active_node: "/autopilot/route-manager/active",
+ current_wp_node: "/autopilot/route-manager/current-wp",
+ }
});
var new = func(layer) {
var m = {
parents: [__self__],
layer: layer,
+ options: layer.options,
map: layer.map,
listeners: [],
};
+ layer.searcher._equals = func(l,r) l.equals(r);
+ append(m.listeners, setlistener(layer.options.active_node, func m.layer.update() ));
+ m.addVisibilityListener();
+
return m;
};
var del = func() {
@@ -24,15 +33,37 @@ var del = func() {
removelistener(l);
};
+var WPT_model = {
+ new: func(fp, idx, offset=0) {
+ var m = { parents:[WPT_model], idx:(idx+offset) };
+ var wp = fp.getWP(idx);
+
+ m.name = wp.wp_name;
+ var alt = wp.alt_cstr;
+ if (alt != 0)
+ m.name ~= "\n"~alt;
+
+ if (idx) var n = wp.path()[-1];
+ else var n = fp.getWP(1).path()[0];
+ (m.lat,m.lon) = (n.lat,n.lon);
+ return m;
+ },
+ equals: func(other) {
+ # this is set on symbol init, so use this for equality...
+ me.name == other.name
+ },
+};
+
var searchCmd = func {
printlog(_MP_dbg_lvl, "Running query: "~name);
-
+
+ if (!getprop(me.options.active_node)) return [];
+
var fp = flightplan();
var fpSize = fp.getPlanSize();
var result = [];
- for (var i = 1; i beamBase) {
+ var tmp = geo.Coord.new();
+ tmp.set_latlon(stormLat, stormLon);
+ tmp.radiusNm = n.getNode("radius-nm").getValue();
+ tmp._node = n;
+ tmp.equals = func(r) me._node.equals(r._node);
+ append(results, tmp);
+ }
+ } # foreach
+
+ #print("WXR results:", size(results));
+ return results;
+} # searchCmd_default
diff --git a/Nasal/canvas/map/WXR.symbol b/Nasal/canvas/map/WXR.symbol
new file mode 100644
index 000000000..86d1dee53
--- /dev/null
+++ b/Nasal/canvas/map/WXR.symbol
@@ -0,0 +1,23 @@
+# See: http://wiki.flightgear.org/MapStructure
+# Class things:
+var name = 'WXR'; # storms/weather layer for LW/AW (use thunderstom scenario for testing)
+var parents = [DotSym];
+var __self__ = caller(0)[0];
+DotSym.makeinstance( name, __self__ );
+
+var element_type = "group"; # we want a group, becomes "me.element"
+
+# TODO: how to integrate both styling and caching?
+var draw = func {
+ # TODO: once this works properly, consider using caching here
+ # FIXME: scaling seems way off in comparison with the navdisplay - i.e. hard-coded assumptions about texture size/view port ?
+ me.element.createChild("image")
+ .setFile("Nasal/canvas/map/Images/storm.png")
+ .setSize(128*me.model.radiusNm,128*me.model.radiusNm)
+ .setTranslation(-64*me.model.radiusNm,-64*me.model.radiusNm)
+ .setCenter(0,0);
+ # .setScale(0.3);
+ # TODO: overlapping storms should probably set their z-index according to altitudes
+
+};
+
diff --git a/Nasal/canvas/map/aircraftpos.controller b/Nasal/canvas/map/aircraftpos.controller
index 18f7c91ea..fe59e5354 100644
--- a/Nasal/canvas/map/aircraftpos.controller
+++ b/Nasal/canvas/map/aircraftpos.controller
@@ -18,12 +18,17 @@ SOURCES["main"] = {
# Layers which get updated every frame
var update_instant = [
- "TFC",
+ "APS",
+];
+# Update at a slightly lower rate, but still
+# unconditionally
+var update_quickly = [
+ "TFC", "FLT",
];
var new = func(map, source='main') {
- if (source != 'main')
- die ("AI/MP traffic not yet supported (WIP)!");
+ if (!contains(SOURCES, source))
+ __die("AI/MP traffic not yet supported (WIP)!");
var m = {
parents: [__self__],
@@ -32,42 +37,56 @@ var new = func(map, source='main') {
_pos: nil, _time: nil, _range: nil,
};
m.timer1 = maketimer(0, m, update_pos);
- m.timer2 = maketimer(0, m, update_layers);
- m.timer1.start();
- m.timer2.start();
+ m.timer2 = maketimer(0.4, m, update_layers);
+ m.start();
m.update_pos();
return m;
};
-var del = func(map) {
- if (map != me.map) die();
+var start = func() {
+ me.timer1.start();
+ me.timer2.start();
+};
+var stop = func() {
me.timer1.stop();
me.timer2.stop();
};
+var del = func(map) {
+ if (map != me.map) die();
+ me.stop();
+};
# Controller methods
var update_pos = func {
var (lat,lon) = me.source.getPosition();
me.map.setPos(lat:lat, lon:lon,
- hdg:getprop("/orientation/heading-deg"),
+ hdg:me.source.getHeading(),
alt:me.source.getAltitude());
foreach (var t; update_instant)
if ((var l=me.map.getLayer(t)) != nil)
l.update();
};
var update_layers = func {
+ var do_all = 1;
var pos = me.map.getPosCoord();
var time = systime();
var range = me.map.getRange();
if (me._pos == nil)
me._pos = geo.Coord.new(pos);
# Always update if range changed
+ # FIXME: FIX doesn't update unless range is changed?
elsif (range == me._range) {
var dist_m = me._pos.direct_distance_to(pos);
# 2 NM until we update again
- if (dist_m < 2 * NM2M) return;
+ if (dist_m < 2 * NM2M) do_all = 0;
# Update at most every 4 seconds to avoid excessive stutter:
- elsif (time - me._time < 4) return;
+ elsif (time - me._time < 4) do_all = 0;
}
+ if (!do_all) {
+ foreach (var t; update_quickly)
+ if ((var l=me.map.getLayer(t)) != nil)
+ l.update();
+ return;
+ } else
printlog(_MP_dbg_lvl, "update aircraft position");
var (x,y,z) = pos.xyz();
me._pos.set_xyz(x,y,z);
diff --git a/Nasal/canvas/map/dme.draw b/Nasal/canvas/map/dme.draw
deleted file mode 100644
index bd1ea526d..000000000
--- a/Nasal/canvas/map/dme.draw
+++ /dev/null
@@ -1,35 +0,0 @@
-# WARNING: *.draw files will be deprecated, see: http://wiki.flightgear.org/MapStructure
-###
-#
-#
-
-var draw_dme = func (group, dme, controller=nil, lod=0) {
- var lat = dme.lat;
- var lon = dme.lon;
- var name = dme.id;
- var freq = dme.frequency;
-
- var dme_grp = group.createChild("group","dme");
- var icon_dme = dme_grp .createChild("path", name)
- .moveTo(-15,0)
- .line(-12.5,-7.5)
- .line(7.5,-12.5)
- .line(12.5,7.5)
- .lineTo(7.5,-12.5)
- .line(12.5,-7.5)
- .line(7.5,12.5)
- .line(-12.5,7.5)
- .lineTo(15,0)
- .lineTo(7.5,12.5)
- .vert(14.5)
- .horiz(-14.5)
- .vert(-14.5)
- .close()
- .setStrokeLineWidth(3)
- .setColor(0,0.6,0.85);
- dme_grp.setGeoPosition(lat, lon)
- .set("z-index",3);
-
- if( controller != nil and controller['is_tuned'](freq))
- icon_dme.setColor(0,1,0);
-}
diff --git a/Nasal/canvas/map/dme.layer b/Nasal/canvas/map/dme.layer
deleted file mode 100644
index 189e6b3b4..000000000
--- a/Nasal/canvas/map/dme.layer
+++ /dev/null
@@ -1,10 +0,0 @@
-# WARNING: *.layer files will be deprecated, see: http://wiki.flightgear.org/MapStructure
-var DMELayer = {};
-DMELayer.new = func(group,name,controller=nil) {
- var m=Layer.new(group, name, DMEModel, controller);
- m.setDraw (func draw_layer(layer:m, callback: draw_dme, lod:0) );
- return m;
-}
-
-register_layer("dme", DMELayer);
-
diff --git a/Nasal/canvas/map/dme.model b/Nasal/canvas/map/dme.model
deleted file mode 100644
index b2a999a3a..000000000
--- a/Nasal/canvas/map/dme.model
+++ /dev/null
@@ -1,21 +0,0 @@
-# WARNING: *.model files will be deprecated, see: http://wiki.flightgear.org/MapStructure
-var DMEModel = {};
-DMEModel.new = func make( LayerModel, DMEModel );
-
-DMEModel.init = func {
- me._view.reset();
-
- if(0) {
- debug.dump( me._controller );
- print(typeof(
- me._controller.query_range()
- ));
- }
-
- var results = positioned.findWithinRange(me._controller.query_range() ,"dme");
- foreach(result; results) {
- me.push(result);
- }
-
- me.notifyView();
-}
\ No newline at end of file
diff --git a/Nasal/canvas/map/fixes.model b/Nasal/canvas/map/fixes.model
index 739804808..650b2ce55 100644
--- a/Nasal/canvas/map/fixes.model
+++ b/Nasal/canvas/map/fixes.model
@@ -9,11 +9,11 @@ FixModel.init = func {
var numNum = 0;
foreach(result; results) {
# Skip airport fixes
- if(string.match(result.id,"*[^0-9]")) {
+ if(string.match(result.id,"*[^0-9]")) { # this may need to be moved to FIX.lcontroller?
me.push(result);
numNum = numNum + 1;
}
}
me.notifyView();
-}
\ No newline at end of file
+}
diff --git a/Nasal/canvas/map/navdisplay.mfd b/Nasal/canvas/map/navdisplay.mfd
index 1db9372fa..42d5cdb30 100644
--- a/Nasal/canvas/map/navdisplay.mfd
+++ b/Nasal/canvas/map/navdisplay.mfd
@@ -3,605 +3,24 @@
# See: http://wiki.flightgear.org/Canvas_ND_Framework
# ==============================================================================
-##
-# do we really need to keep track of each drawable here ??
-var i = 0;
+
##
-# pseudo DSL-ish: use these as placeholders in the config hash below
-var ALWAYS = func 1;
-var NOTHING = func nil;
-
-##
-# so that we only need to update a single line ...
+# this file contains a hash that declares features in a generic fashion
+# we want to get rid of the bloated update() method sooner than later
+# PLEASE DO NOT ADD any code to update() !!
+# Instead, help clean up the file and move things over to the navdisplay.styles file
+#
+# This is the only sane way to keep on generalizing the framework, so that we can
+# also support different makes/models of NDs in the future
#
-var trigger_update = func(layer) layer._model.init();
-
-##
-# TODO: move ND-specific implementation details into this lookup hash
-# so that other aircraft and ND types can be more easily supported
+# a huge bloated update() method is going to make that basically IMPOSSIBLE
#
-# any aircraft-specific ND behavior should be wrapped here,
-# to isolate/decouple things in the generic NavDisplay class
-#
-# TODO: move this to an XML config file
-#
-var NDStyles = {
- ##
- # this configures the 744 ND to help generalize the NavDisplay class itself
- 'Boeing': {
- font_mapper: func(family, weight) {
- if( family == "Liberation Sans" and weight == "normal" )
- return "LiberationFonts/LiberationSans-Regular.ttf";
- },
-
- # where all the symbols are stored
- # TODO: SVG elements should be renamed to use boeing/airbus prefix
- # aircraft developers should all be editing the same ND.svg image
- # the code can deal with the differences now
- svg_filename: "Nasal/canvas/map/boeingND.svg",
- ##
- ## this loads and configures existing layers (currently, *.layer files in Nasal/canvas/map)
- ##
-
- layers: [
- { name:'FIX', isMapStructure:1, update_on:['toggle_range','toggle_waypoints'],
- # FIXME: this is a really ugly place for controller code
- predicate: func(nd, layer) {
- # print("Running fix layer predicate");
- # toggle visibility here
- var visible=nd.get_switch('toggle_waypoints') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40);
- layer.group.setVisible( nd.get_switch('toggle_waypoints') );
- if (visible) {
- #print("Updating MapStructure ND layer: FIX");
- # (Hopefully) smart update
- layer.update();
- }
- }, # end of layer update predicate
- }, # end of FIX layer
-
- # Should redraw every 10 seconds
- { name:'storms', update_on:['toggle_range','toggle_weather','toggle_display_mode'],
- predicate: func(nd, layer) {
- # print("Running fixes predicate");
- var visible=nd.get_switch('toggle_weather') and nd.get_switch('toggle_display_mode') != "PLAN";
- if (visible) {
- #print("storms update requested!");
- trigger_update( layer );
- }
- layer._view.setVisible(visible);
- }, # end of layer update predicate
- }, # end of storms layer
-
- { name:'airplaneSymbol', disabled:1, update_on:['toggle_display_mode'],
- predicate: func(nd, layer) {
- var visible = nd.get_switch('toggle_display_mode') == "PLAN";
- if (visible) {
- trigger_update( layer );
- } layer._view.setVisible(visible);
- },
- },
- { name:'APS', isMapStructure:1, update_on:['toggle_display_mode'],
- predicate: func(nd, layer) {
- var visible = nd.get_switch('toggle_display_mode') == "PLAN";
- layer.group.setVisible( visible );
- if (visible) {
- layer.update();
- }
- },
- },
-
- { name:'APT', isMapStructure:1, update_on:['toggle_range','toggle_airports','toggle_display_mode'],
- predicate: func(nd, layer) {
- # toggle visibility here
- var visible=nd.get_switch('toggle_airports') and nd.in_mode('toggle_display_mode', ['MAP']);
- layer.group.setVisible( visible );
- if (visible) {
- #print("Updating MapStructure ND layer: APT");
- layer.update();
- }
- }, # end of layer update predicate
- }, # end of APT layer
-
- # Should distinct between low and high altitude navaids. Hiding above 40 NM for now, to prevent clutter/lag.
- { name:'VOR', isMapStructure:1, update_on:['toggle_range','toggle_stations','toggle_display_mode'],
- # FIXME: this is a really ugly place for controller code
- predicate: func(nd, layer) {
- # toggle visibility here
- var visible = nd.get_switch('toggle_stations') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40);
- layer.group.setVisible( visible );
- if (visible) {
- #print("Updating MapStructure ND layer: VOR");
- layer.update();
- }
- }, # end of layer update predicate
- }, # end of VOR layer
-
- { name:'DME', isMapStructure:1, update_on:['toggle_range','toggle_stations'],
- # FIXME: this is a really ugly place for controller code
- predicate: func(nd, layer) {
- var visible = nd.get_switch('toggle_stations') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40);
- # toggle visibility here
- layer.group.setVisible( visible );
- if (visible) {
- #print("Updating MapStructure ND layer: DME");
- layer.update();
- }
- }, # end of layer update predicate
- }, # end of DME layer
-
- { name:'TFC', isMapStructure:1, update_on:['toggle_range','toggle_traffic'],
- predicate: func(nd, layer) {
- var visible = nd.get_switch('toggle_traffic');
- layer.group.setVisible( visible );
- if (visible) {
- #print("Updating MapStructure ND layer: TFC");
- layer.update();
- }
- }, # end of layer update predicate
- }, # end of traffic layer
-
- { name:'runway-nd', update_on:['toggle_range','toggle_display_mode'],
- predicate: func(nd, layer) {
- var visible = (nd.rangeNm() <= 40) and getprop("autopilot/route-manager/active") and nd.in_mode('toggle_display_mode', ['MAP','PLAN']) ;
- if (visible)
- trigger_update( layer ); # clear & redraw
- layer._view.setVisible( visible );
- }, # end of layer update predicate
- }, # end of airports-nd layer
-
- { name:'route', update_on:['toggle_range','toggle_display_mode'],
- predicate: func(nd, layer) {
- var visible= (nd.in_mode('toggle_display_mode', ['MAP','PLAN']));
- if (visible)
- trigger_update( layer ); # clear & redraw
- layer._view.setVisible( visible );
- }, # end of layer update predicate
- }, # end of route layer
-
- ## add other layers here, layer names must match the registered names as used in *.layer files for now
- ## this will all change once we're using Philosopher's MapStructure framework
-
- ], # end of vector with configured layers
-
- # This is where SVG elements are configured by providing "behavior" hashes, i.e. for animations
-
- # to animate each SVG symbol, specify behavior via callbacks (predicate, and true/false implementation)
- # SVG identifier, callback etc
- # TODO: update_on([]), update_mode (update() vs. timers/listeners)
- # TODO: support putting symbols on specific layers
- features: [
- {
- # TODO: taOnly doesn't need to use getprop polling in update(), use a listener instead!
- id: 'taOnly', # the SVG ID
- impl: { # implementation hash
- init: func(nd, symbol), # for updateCenter stuff, called during initialization in the ctor
- predicate: func(nd) getprop("instrumentation/tcas/inputs/mode") == 2, # the condition
- is_true: func(nd) nd.symbols.taOnly.show(), # if true, run this
- is_false: func(nd) nd.symbols.taOnly.hide(), # if false, run this
- }, # end of taOnly behavior/callbacks
- }, # end of taOnly
- {
- id: 'tas',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.aircraft_source.get_spd() > 100,
- is_true: func(nd) {
- nd.symbols.tas.setText(sprintf("%3.0f",getprop("/velocities/airspeed-kt") ));
- nd.symbols.tas.show();
- },
- is_false: func(nd) nd.symbols.tas.hide(),
- },
- },
- {
- id: 'tasLbl',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.aircraft_source.get_spd() > 100,
- is_true: func(nd) nd.symbols.tasLbl.show(),
- is_false: func(nd) nd.symbols.tasLbl.hide(),
- },
- },
- {
- id: 'ilsFreq',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']),
- is_true: func(nd) {
- nd.symbols.ilsFreq.show();
- if(getprop("instrumentation/nav/in-range"))
- nd.symbols.ilsFreq.setText(getprop("instrumentation/nav/nav-id"));
- else
- nd.symbols.ilsFreq.setText(getprop("instrumentation/nav/frequencies/selected-mhz-fmt"));
- },
- is_false: func(nd) nd.symbols.ilsFreq.hide(),
- },
- },
- {
- id: 'ilsLbl',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']),
- is_true: func(nd) {
- nd.symbols.ilsLbl.show();
- },
- is_false: func(nd) nd.symbols.ilsLbl.hide(),
- },
- },
- {
- id: 'wpActiveId',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) getprop("/autopilot/route-manager/wp/id") != nil and getprop("autopilot/route-manager/active")
- and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
- is_true: func(nd) {
- nd.symbols.wpActiveId.setText(getprop("/autopilot/route-manager/wp/id"));
- nd.symbols.wpActiveId.show();
- },
- is_false: func(nd) nd.symbols.wpActiveId.hide(),
- }, # of wpActiveId.impl
- }, # of wpActiveId
- {
- id: 'wpActiveDist',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active")
- and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
- is_true: func(nd) {
- nd.symbols.wpActiveDist.setText(sprintf("%3.01f",getprop("/autopilot/route-manager/wp/dist")));
- nd.symbols.wpActiveDist.show();
- },
- is_false: func(nd) nd.symbols.wpActiveDist.hide(),
- },
- },
- {
- id: 'wpActiveDistLbl',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active")
- and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
- is_true: func(nd) {
- nd.symbols.wpActiveDistLbl.show();
- if(getprop("/autopilot/route-manager/wp/dist") > 1000)
- nd.symbols.wpActiveDistLbl.setText(" NM");
- },
- is_false: func(nd) nd.symbols.wpActiveDistLbl.hide(),
- },
- },
- {
- id: 'eta',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) getprop("autopilot/route-manager/wp/eta") != nil and getprop("autopilot/route-manager/active")
- and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
- is_true: func(nd) {
- var etaSec = getprop("/sim/time/utc/day-seconds")+getprop("autopilot/route-manager/wp/eta-seconds");
- var h = math.floor(etaSec/3600);
- etaSec=etaSec-3600*h;
- var m = math.floor(etaSec/60);
- etaSec=etaSec-60*m;
- var s = etaSec/10;
- if (h>24) h=h-24;
- nd.symbols.eta.setText(sprintf("%02.0f%02.0f.%01.0fz",h,m,s));
- nd.symbols.eta.show();
- },
- is_false: func(nd) nd.symbols.eta.hide(),
- }, # of eta.impl
- }, # of eta
- {
- id: 'gsGroup',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']),
- is_true: func(nd) {
- if(nd.get_switch('toggle_centered'))
- nd.symbols.gsGroup.setTranslation(0,0);
- else
- nd.symbols.gsGroup.setTranslation(0,150);
- nd.symbols.gsGroup.show();
- },
- is_false: func(nd) nd.symbols.gsGroup.hide(),
- },
- },
- {
- id:'hdg',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']),
- is_true: func(nd) {
- var hdgText = "";
- if((nd.in_mode('toggle_display_mode', ['MAP']) and nd.get_switch('toggle_display_type') == "CRT")
- or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
- {
- if(nd.get_switch('toggle_true_north'))
- hdgText = nd.aircraft_source.get_trk_tru();
- else
- hdgText = nd.aircraft_source.get_trk_mag();
- } else {
- if(nd.get_switch('toggle_true_north'))
- hdgText = nd.aircraft_source.get_hdg_tru();
- else
- hdgText = nd.aircraft_source.get_hdg_mag();
- }
- if(hdgText < 0.5) hdgText = 360 + hdgText;
- elsif(hdgText >= 360.5) hdgText = hdgText - 360;
- nd.symbols.hdg.setText(sprintf("%03.0f", hdgText));
- },
- is_false: NOTHING,
- },
- },
- {
- id:'hdgGroup',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']),
- is_true: func(nd) {
- nd.symbols.hdgGroup.show();
- if(nd.get_switch('toggle_centered'))
- nd.symbols.hdgGroup.setTranslation(0,100);
- else
- nd.symbols.hdgGroup.setTranslation(0,0);
- },
- is_false: func(nd) nd.symbols.hdgGroup.hide(),
- },
- },
- {
- id:'gs',
- impl: {
- init: func(nd,symbol),
- common: func(nd) nd.symbols.gs.setText(sprintf("%3.0f",nd.aircraft_source.get_gnd_spd() )),
- predicate: func(nd) nd.aircraft_source.get_gnd_spd() >= 30,
- is_true: func(nd) {
- nd.symbols.gs.setFontSize(36);
- },
- is_false: func(nd) nd.symbols.gs.setFontSize(52),
- },
- },
- {
- id:'rangeArcs',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) !nd.get_switch('toggle_centered') and nd.get_switch('toggle_rangearc'),
- is_true: func(nd) nd.symbols.rangeArcs.show(),
- is_false: func(nd) nd.symbols.rangeArcs.hide(),
- }, # of rangeArcs.impl
- }, # of rangeArcs
- {
- id:'rangePln1',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
- is_true: func(nd) {
- nd.symbols.rangePln1.show();
- nd.symbols.rangePln1.setText(sprintf("%3.0f",nd.rangeNm()));
- },
- is_false: func(nd) nd.symbols.rangePln1.hide(),
- },
- },
- {
- id:'rangePln2',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
- is_true: func(nd) {
- nd.symbols.rangePln2.show();
- nd.symbols.rangePln2.setText(sprintf("%3.0f",nd.rangeNm()/2));
- },
- is_false: func(nd) nd.symbols.rangePln2.hide(),
- },
- },
- {
- id:'rangePln3',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
- is_true: func(nd) {
- nd.symbols.rangePln3.show();
- nd.symbols.rangePln3.setText(sprintf("%3.0f",nd.rangeNm()/2));
- },
- is_false: func(nd) nd.symbols.rangePln3.hide(),
- },
- },
- {
- id:'rangePln4',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
- is_true: func(nd) {
- nd.symbols.rangePln4.show();
- nd.symbols.rangePln4.setText(sprintf("%3.0f",nd.rangeNm()));
- },
- is_false: func(nd) nd.symbols.rangePln4.hide(),
- },
- },
- {
- id:'crsLbl',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
- is_true: func(nd) nd.symbols.crsLbl.show(),
- is_false: func(nd) nd.symbols.crsLbl.hide(),
- },
- },
- {
- id:'crs',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
- is_true: func(nd) {
- nd.symbols.crs.show();
- if(getprop("instrumentation/nav/radials/selected-deg") != nil)
- nd.symbols.crs.setText(sprintf("%03.0f",getprop("instrumentation/nav/radials/selected-deg")));
- },
- is_false: func(nd) nd.symbols.crs.hide(),
- },
- },
- {
- id:'dmeLbl',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
- is_true: func(nd) nd.symbols.dmeLbl.show(),
- is_false: func(nd) nd.symbols.dmeLbl.hide(),
- },
- },
- {
- id:'dme',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
- is_true: func(nd) {
- nd.symbols.dme.show();
- if(getprop("instrumentation/dme/in-range"))
- nd.symbols.dme.setText(sprintf("%3.1f",getprop("instrumentation/dme/indicated-distance-nm")));
- },
- is_false: func(nd) nd.symbols.dme.hide(),
- },
- },
- {
- id:'trkInd2',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) (nd.in_mode('toggle_display_mode', ['MAP','APP','VOR']) and nd.get_switch('toggle_centered')),
- is_true: func(nd) {
- nd.symbols.trkInd2.show();
- },
- is_false: func(nd) nd.symbols.trkInd2.hide(),
- },
- },
- {
- id:'vorCrsPtr',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and !nd.get_switch('toggle_centered')),
- is_true: func(nd) {
- nd.symbols.vorCrsPtr.show();
- if((nd.in_mode('toggle_display_mode', ['MAP']) and nd.get_switch('toggle_display_type') == "CRT")
- or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
- nd.symbols.vorCrsPtr.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_trk_mag())*D2R);
- else
- nd.symbols.vorCrsPtr.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_hdg_mag())*D2R);
- },
- is_false: func(nd) nd.symbols.vorCrsPtr.hide(),
- },
- },
- {
- id:'vorCrsPtr2',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and nd.get_switch('toggle_centered')),
- is_true: func(nd) {
- nd.symbols.vorCrsPtr2.show();
- if((nd.in_mode('toggle_display_mode', ['MAP']) and nd.get_switch('toggle_display_type') == "CRT")
- or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
- nd.symbols.vorCrsPtr2.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_trk_mag())*D2R);
- else
- nd.symbols.vorCrsPtr2.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_hdg_mag())*D2R);
- },
- is_false: func(nd) nd.symbols.vorCrsPtr2.hide(),
- },
- },
- {
- id: 'gsDiamond',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']) and getprop("instrumentation/nav/gs-in-range"),
- is_true: func(nd) {
- var gs_deflection = getprop("instrumentation/nav/gs-needle-deflection-norm");
- if(gs_deflection != nil)
- nd.symbols.gsDiamond.setTranslation(gs_deflection*150,0);
- if(abs(gs_deflection) < 0.99)
- nd.symbols.gsDiamond.setColorFill(1,0,1,1);
- else
- nd.symbols.gsDiamond.setColorFill(0,0,0,1);
- },
- is_false: func(nd) nd.symbols.gsGroup.hide(),
- },
- },
- {
- id:'locPtr',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and !nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")),
- is_true: func(nd) {
- nd.symbols.locPtr.show();
- var deflection = getprop("instrumentation/nav/heading-needle-deflection-norm");
- nd.symbols.locPtr.setTranslation(deflection*150,0);
- if(abs(deflection) < 0.99)
- nd.symbols.locPtr.setColorFill(1,0,1,1);
- else
- nd.symbols.locPtr.setColorFill(0,0,0,1);
- },
- is_false: func(nd) nd.symbols.locPtr.hide(),
- },
- },
- {
- id:'locPtr2',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")),
- is_true: func(nd) {
- nd.symbols.locPtr2.show();
- var deflection = getprop("instrumentation/nav/heading-needle-deflection-norm");
- nd.symbols.locPtr2.setTranslation(deflection*150,0);
- if(abs(deflection) < 0.99)
- nd.symbols.locPtr2.setColorFill(1,0,1,1);
- else
- nd.symbols.locPtr2.setColorFill(0,0,0,1);
- },
- is_false: func(nd) nd.symbols.locPtr2.hide(),
- },
- },
- {
- id:'wind',
- impl: {
- init: func(nd,symbol),
- predicate: ALWAYS,
- is_true: func(nd) {
- var windDir = getprop("environment/wind-from-heading-deg");
- if(!nd.get_switch('toggle_true_north'))
- windDir = windDir - getprop("environment/magnetic-variation-deg");
- if(windDir < 0.5) windDir = 360 + windDir;
- elsif(windDir >= 360.5) windDir = windDir - 360;
- nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,getprop("environment/wind-speed-kt")));
- },
- is_false: NOTHING,
- },
- },
- {
- id:'windArrow',
- impl: {
- init: func(nd,symbol),
- predicate: func(nd) (!(nd.in_mode('toggle_display_mode', ['PLAN']) and (nd.get_switch('toggle_display_type') == "LCD")) and nd.aircraft_source.get_spd() > 100),
- is_true: func(nd) {
- nd.symbols.windArrow.show();
- var windArrowRot = getprop("environment/wind-from-heading-deg");
- if((nd.in_mode('toggle_display_mode', ['MAP','PLAN']) and nd.get_switch('toggle_display_type') == "CRT")
- or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
- windArrowRot = windArrowRot - nd.aircraft_source.get_trk_mag();
- else
- windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_mag();
- nd.symbols.windArrow.setRotation(windArrowRot*D2R);
- },
- is_false: func(nd) nd.symbols.windArrow.hide(),
- },
- },
-
- ], # end of vector with features
-
-
- }, # end of Boeing style
-#####
-##
-## add support for other aircraft/ND types and styles here (Airbus etc)
-##
-##
-
-}; # end of NDStyles
+io.include("Nasal/canvas/map/navdisplay.styles");
##
# encapsulate hdg/lat/lon source, so that the ND may also display AI/MP aircraft in a pilot-view at some point (aka stress-testing)
-#
+# TODO: this predates aircraftpos.controller (MapStructure) should probably be unified to some degree ...
var NDSourceDriver = {};
NDSourceDriver.new = func {
@@ -665,18 +84,10 @@ var default_switches = {
'toggle_display_mode': {path: '/mfd/display-mode', value:'MAP', type:'STRING'}, # valid values are: APP, MAP, PLAN or VOR
'toggle_display_type': {path: '/mfd/display-type', value:'CRT', type:'STRING'}, # valid values are: CRT or LCD
'toggle_true_north': {path: '/mfd/true-north', value:0, type:'BOOL'},
- 'toggle_rangearc': {path: '/mfd/rangearc', value:0, type:'BOOL'},
- 'toggle_track_heading': {path: '/trk-selected', value:0, type:'BOOL'},
+ 'toggle_rangearc': {path: '/mfd/rangearc', value:0, type:'BOOL'},
+ 'toggle_track_heading':{path: '/trk-selected', value:0, type:'BOOL'},
};
-# Hack to update weather radar once every 10 seconds
-var update_weather = func {
- if (getprop("/instrumentation/efis/inputs/wxr") != nil)
- setprop("/instrumentation/efis/inputs/wxr",getprop("/instrumentation/efis/inputs/wxr"));
- settimer(update_weather, 10);
-}
-update_weather();
-
##
# TODO:
# - introduce a MFD class (use it also for PFD/EICAS)
@@ -690,6 +101,8 @@ var NavDisplay = {
print("Cleaning up NavDisplay");
# shut down all timers and other loops here
me.update_timer.stop();
+ foreach(var t; me.timers)
+ t.stop();
foreach(var l; me.listeners)
removelistener(l);
# clean up MapStructure
@@ -701,6 +114,11 @@ var NavDisplay = {
NavDisplay.id -= 1;
},
+ addtimer: func(interval, cb) {
+ append(me.timers, var job=maketimer(interval, cb));
+ return job; # so that we can directly work with the timer (start/stop)
+ },
+
listen: func(p,c) {
append(me.listeners, setlistener(p,c));
},
@@ -741,6 +159,8 @@ var NavDisplay = {
};
}, # of connectAI
+ setTimerInterval: func(update_time=0.05) me.update_timer.restart(update_time),
+
# TODO: the ctor should allow customization, for different aircraft
# especially properties and SVG files/handles (747, 757, 777 etc)
new : func(prop1, switches=default_switches, style='Boeing') {
@@ -749,6 +169,7 @@ var NavDisplay = {
m.inited = 0;
+ m.timers=[];
m.listeners=[]; # for cleanup handling
m.aircraft_source = NDSourceDriver.new(); # uses the main aircraft as the driver/source (speeds, position, heading)
@@ -799,12 +220,11 @@ var NavDisplay = {
return m;
},
- newMFD: func(canvas_group, parent=nil, options=nil)
+ newMFD: func(canvas_group, parent=nil, options=nil, update_time=0.05)
{
if (me.inited) die("MFD already was added to scene");
me.inited = 1;
- #me.listen("/sim/signals/reinit", func(n) me.del() );
- me.update_timer = maketimer(0.05, func me.update() ); # TODO: make interval configurable via ctor
+ me.update_timer = maketimer(update_time, func me.update() );
me.nd = canvas_group;
me.canvas_handle = parent;
@@ -814,7 +234,6 @@ var NavDisplay = {
me.symbols = {}; # storage for SVG elements, to avoid namespace pollution (all SVG elements end up here)
foreach(var feature; me.nd_style.features ) {
- # print("Setting up SVG feature:", feature.id);
me.symbols[feature.id] = me.nd.getElementById(feature.id).updateCenter();
if(contains(feature.impl,'init')) feature.impl.init(me.nd, feature); # call The element's init code (i.e. updateCenter)
}
@@ -839,10 +258,9 @@ var NavDisplay = {
me.map = me.nd.createChild("map","map")
.set("clip", "rect(124, 1024, 1024, 0)")
- .set("screen-range", "700");
+ .set("screen-range", 700);
- # this callback will be passed onto the model via the controller hash, and used for the positioned queries, to specify max query range:
- var get_range = func me.get_switch('toggle_range');
+ me.update_sub(); # init some map properties based on switches
# predicate for the draw controller
var is_tuned = func(freq) {
@@ -876,7 +294,6 @@ var NavDisplay = {
var controller = {
parents: [canvas.Map.Controller],
_pos: nil, _time: nil,
- query_range: func get_range(),
is_tuned:is_tuned,
get_tuned_course:get_course_by_freq,
get_position: get_current_position,
@@ -919,18 +336,31 @@ var NavDisplay = {
foreach(var layer; me.nd_style.layers) {
if(layer['disabled']) continue; # skip this layer
#print("newMFD(): Setting up ND layer:", layer.name);
- # huge hack for the alt-arc, which is not rendered as a map group, but directly as part of the toplevel ND group
- var render_target = (!contains(layer,'not_a_map') or !layer.not_a_map) ? me.map : me.nd;
var the_layer = nil;
- if(!layer['isMapStructure']) # set up an old layer
- the_layer = me.layers[layer.name] = canvas.MAP_LAYERS[layer.name].new( render_target, layer.name, controller );
+ if(!layer['isMapStructure']) # set up an old INEFFICIENT and SLOW layer
+ the_layer = me.layers[layer.name] = canvas.MAP_LAYERS[layer.name].new( me.map, layer.name, controller );
else {
printlog(_MP_dbg_lvl, "Setting up MapStructure-based layer for ND, name:", layer.name);
var opt = options != nil and options[layer.name] != nil ? options[layer.name] :nil;
# print("Options is: ", opt!=nil?"enabled":"disabled");
- render_target.addLayer(factory: canvas.SymbolLayer, type_arg: layer.name, options:opt);
- the_layer = me.layers[layer.name] = render_target.getLayer(layer.name);
+ me.map.addLayer(
+ factory: canvas.SymbolLayer,
+ type_arg: layer.name,
+ options:opt,
+ visible:0,
+ priority: layer['z-index']
+ );
+ the_layer = me.layers[layer.name] = me.map.getLayer(layer.name);
+ if (1) (func {
+ var l = layer;
+ var _predicate = l.predicate;
+ l.predicate = func {
+ var t = systime();
+ call(_predicate, arg, me);
+ printlog(_MP_dbg_lvl, "Took "~((systime()-t)*1000)~"ms to update layer "~l.name);
+ }
+ })();
}
# now register all layer specific notification listeners and their corresponding update predicate/callback
@@ -938,6 +368,14 @@ var NavDisplay = {
# so that it can directly access the ND instance and its own layer (without having to know the layer's name)
var event_handler = make_event_handler(layer.predicate, the_layer);
foreach(var event; layer.update_on) {
+ # this handles timers
+ if (typeof(event)=='hash' and contains(event, 'rate_hz')) {
+ #print("FIXME: navdisplay.mfd timer handling is broken ATM");
+ var job=me.addtimer(1/event.rate_hz, event_handler);
+ job.start();
+ }
+ # and this listeners
+ else
# print("Setting up subscription:", event, " for ", layer.name, " handler id:", id(event_handler) );
me.listen_switch(event, event_handler);
} # foreach event subscription
@@ -950,17 +388,7 @@ var NavDisplay = {
# start the update timer, which makes sure that the update() will be called
me.update_timer.start();
-
- # next, radio & autopilot & listeners
- # TODO: move this to .init field in layers hash or to model files
- foreach(var n; var radios = [
- "instrumentation/nav/frequencies/selected-mhz",
- "instrumentation/nav[1]/frequencies/selected-mhz"])
- me.listen(n, func() {
- # me.drawvor();
- # me.drawdme();
- });
- # TODO: move this to the route.model
+ # TODO: move this to RTE.lcontroller ?
me.listen("/autopilot/route-manager/current-wp", func(activeWp) {
canvas.updatewp( activeWp.getValue() );
});
@@ -972,13 +400,10 @@ var NavDisplay = {
foreach(var m; modes) if(me.get_switch(switch)==m) return 1;
return 0;
},
- # each model should keep track of when it last got updated, using current lat/lon
- # in update(), we can then check if the aircraft has traveled more than 0.5-1 nm (depending on selected range)
- # and update each model accordingly
- update: func() # FIXME: This stuff is still too aircraft specific, cannot easily be reused by other aircraft
+ # Helper function for below (update()) and above (newMFD())
+ # to ensure position etc. are correct.
+ update_sub: func()
{
- var _time = systime();
-
# Variables:
var userLat = me.aircraft_source.get_lat();
var userLon = me.aircraft_source.get_lon();
@@ -1009,9 +434,9 @@ var NavDisplay = {
if (me.aircraft_source.get_gnd_spd() < 80)
userTrk = userHdg;
- if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
- or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
- {
+ if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
+ or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
+ {
userHdgTrk = userTrk;
userHdgTrkTru = userTrkTru;
me.symbols.hdgTrk.setText("TRK");
@@ -1044,12 +469,23 @@ var NavDisplay = {
pos.lon = userLon;
}
call(me.map.setPos, [pos.lat, pos.lon], me.map, pos);
+ },
+ # each model should keep track of when it last got updated, using current lat/lon
+ # in update(), we can then check if the aircraft has traveled more than 0.5-1 nm (depending on selected range)
+ # and update each model accordingly
+ # TODO: Hooray is still waiting for a really rainy weekend to clean up all the mess here... so plz don't add to it!
+ update: func() # FIXME: This stuff is still too aircraft specific, cannot easily be reused by other aircraft
+ {
+ var _time = systime();
+
+ call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables
# MapStructure update!
if (me.map.controller.should_update_all()) {
me.map.update();
} else {
# TODO: ugly list here
+ # FIXME: use a VOLATILE layer helper here that handles TFC, APS, WXR etc ?
me.map.update(func(layer) (var n=layer.type) == "TFC" or n == "APS");
}
@@ -1134,11 +570,11 @@ var NavDisplay = {
if (hdg_bug_active == nil)
hdg_bug_active = 1;
- if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
- or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
- {
+ if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
+ or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
+ {
me.symbols.trkInd.setRotation(0);
- me.symbols.trkInd2.setRotation(0);
+ me.symbols.trkInd2.setRotation(0);
me.symbols.curHdgPtr.setRotation((userHdg-userTrk)*D2R);
me.symbols.curHdgPtr2.setRotation((userHdg-userTrk)*D2R);
}
@@ -1174,26 +610,26 @@ var NavDisplay = {
me.symbols.compass.show();
}
- var staPtrVis = !me.in_mode('toggle_display_mode', ['PLAN']);
- if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
- or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
- {
- var vorheading = userTrkTru;
- var adfheading = userTrkMag;
- }
- else
- {
- var vorheading = userHdgTru;
- var adfheading = userHdgMag;
- }
+ var staPtrVis = !me.in_mode('toggle_display_mode', ['PLAN']);
+ if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
+ or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
+ {
+ var vorheading = userTrkTru;
+ var adfheading = userTrkMag;
+ }
+ else
+ {
+ var vorheading = userHdgTru;
+ var adfheading = userHdgMag;
+ }
if(me.in_mode('toggle_display_mode', ['APP','MAP','VOR','PLAN']))
{
if(getprop("instrumentation/nav/heading-deg") != nil)
- var nav0hdg=getprop("instrumentation/nav/heading-deg") - vorheading;
+ var nav0hdg=getprop("instrumentation/nav/heading-deg") - vorheading;
if(getprop("instrumentation/nav[1]/heading-deg") != nil)
- var nav1hdg=getprop("instrumentation/nav[1]/heading-deg") - vorheading;
- var adf0hdg=getprop("instrumentation/adf/indicated-bearing-deg") - adfheading;
- var adf1hdg=getprop("instrumentation/adf[1]/indicated-bearing-deg") - adfheading;
+ var nav1hdg=getprop("instrumentation/nav[1]/heading-deg") - vorheading;
+ var adf0hdg=getprop("instrumentation/adf/indicated-bearing-deg") - adfheading;
+ var adf1hdg=getprop("instrumentation/adf[1]/indicated-bearing-deg") - adfheading;
if(!me.get_switch('toggle_centered'))
{
if(me.in_mode('toggle_display_mode', ['PLAN']))
@@ -1345,8 +781,7 @@ var NavDisplay = {
me.symbols['status.arpt'].setVisible( me.get_switch('toggle_airports') and me.in_mode('toggle_display_mode', ['MAP']));
me.symbols['status.sta'].setVisible( me.get_switch('toggle_stations') and me.in_mode('toggle_display_mode', ['MAP']));
# Okay, _how_ do we hook this up with FGPlot?
- #print("ND update took "~(systime()-_time)~" seconds");
+ printlog(_MP_dbg_lvl, "Total ND update took "~((systime()-_time)*100)~"ms");
setprop("/instrumentation/navdisplay["~ NavDisplay.id ~"]/update-ms", systime() - _time);
-
- }
+ } # of update() method (50% of our file ...seriously?)
};
diff --git a/Nasal/canvas/map/navdisplay.styles b/Nasal/canvas/map/navdisplay.styles
new file mode 100644
index 000000000..1e52c946e
--- /dev/null
+++ b/Nasal/canvas/map/navdisplay.styles
@@ -0,0 +1,619 @@
+# ==============================================================================
+# Boeing Navigation Display by Gijs de Rooy
+# See: http://wiki.flightgear.org/Canvas_ND_Framework
+# ==============================================================================
+# This file makes use of the MapStructure framework, see: http://wiki.flightgear.org/Canvas_MapStructure
+#
+# Sooner or later, some parts will be revamped by coming up with a simple animation framework: http://wiki.flightgear.org/NavDisplay#mapping_vs._SVG_animation
+
+##
+# pseudo DSL-ish: use these as placeholders in the config hash below
+var ALWAYS = func 1;
+var NOTHING = func nil;
+
+##
+# TODO: move ND-specific implementation details into this lookup hash
+# so that other aircraft and ND types can be more easily supported
+#
+# any aircraft-specific ND behavior should be wrapped here,
+# to isolate/decouple things in the generic NavDisplay class
+#
+# TODO: move this to an XML config file (maybe supporting SGCondition and/or SGStateMachine markup for the logic?)
+#
+var NDStyles = {
+ ##
+ # this configures the 744 ND to help generalize the NavDisplay class itself
+ 'Boeing': {
+ font_mapper: func(family, weight) {
+ if( family == "Liberation Sans" and weight == "normal" )
+ return "LiberationFonts/LiberationSans-Regular.ttf";
+ },
+
+ # where all the symbols are stored
+ # TODO: SVG elements should be renamed to use boeing/airbus prefix
+ # aircraft developers should all be editing the same ND.svg image
+ # the code can deal with the differences now
+ svg_filename: "Nasal/canvas/map/Images/boeingND.svg",
+ ##
+ ## this loads and configures existing layers (currently, *.layer files in Nasal/canvas/map)
+ ##
+
+
+ # TODO: phase out isMapStructure flag once map.nas & *.draw files are killed
+ layers: [
+ # TODO: take z-indices from *.draw files -- now handled by MapStructure in the addLayer method.
+ { name:'FIX', isMapStructure:1, update_on:['toggle_range','toggle_waypoints'],
+ # FIXME: this is a really ugly place for controller code
+ predicate: func(nd, layer) {
+ # print("Running fix layer predicate");
+ # toggle visibility here
+ var visible=nd.get_switch('toggle_waypoints') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40);
+ layer.group.setVisible( nd.get_switch('toggle_waypoints') );
+ if (visible) {
+ #print("Updating MapStructure ND layer: FIX");
+ # (Hopefully) smart update
+ layer.update();
+ }
+ }, # end of layer update predicate
+ 'z-index': 3,
+ }, # end of FIX layer
+
+ # Should redraw every 10 seconds TODO: use new MapStructure/WXR here once that works properly (Gijs should check first!)
+ { name:'WXR', isMapStructure:1, update_on:[ {rate_hz: 0.1}, 'toggle_range','toggle_weather','toggle_display_mode'],
+ predicate: func(nd, layer) {
+ #print("Running storms predicate");
+ var visible=nd.get_switch('toggle_weather') and nd.get_switch('toggle_display_mode') != "PLAN";
+ layer.group.setVisible(visible);
+ if (visible) {
+ print("storms update requested! (timer issue when closing the dialog?)");
+ layer.update();
+ }
+ }, # end of layer update predicate
+ }, # end of storms/WXR layer
+
+ { name:'APS', isMapStructure:1, update_on:['toggle_display_mode'],
+ predicate: func(nd, layer) {
+ var visible = nd.get_switch('toggle_display_mode') == "PLAN";
+ layer.group.setVisible( visible );
+ if (visible) {
+ layer.update();
+ }
+ },
+ },
+
+ { name:'APT', isMapStructure:1, update_on:['toggle_range','toggle_airports','toggle_display_mode'],
+ predicate: func(nd, layer) {
+ # toggle visibility here
+ var visible=nd.get_switch('toggle_airports') and nd.in_mode('toggle_display_mode', ['MAP']);
+ layer.group.setVisible( visible );
+ if (visible) {
+ #print("Updating MapStructure ND layer: APT");
+ layer.update();
+ }
+ }, # end of layer update predicate
+ 'z-index': 1,
+ }, # end of APT layer
+
+ # Should distinct between low and high altitude navaids. Hiding above 40 NM for now, to prevent clutter/lag.
+ { name:'VOR', isMapStructure:1, update_on:['toggle_range','toggle_stations','toggle_display_mode'],
+ # FIXME: this is a really ugly place for controller code
+ predicate: func(nd, layer) {
+ # toggle visibility here
+ var visible = nd.get_switch('toggle_stations') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40);
+ layer.group.setVisible( visible );
+ if (visible) {
+ #print("Updating MapStructure ND layer: VOR");
+ layer.update();
+ }
+ }, # end of layer update predicate
+ 'z-index': 3,
+ }, # end of VOR layer
+
+ { name:'DME', isMapStructure:1, update_on:['toggle_range','toggle_stations'],
+ # FIXME: this is a really ugly place for controller code
+ predicate: func(nd, layer) {
+ var visible = nd.get_switch('toggle_stations') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40);
+ # toggle visibility here
+ layer.group.setVisible( visible );
+ if (visible) {
+ #print("Updating MapStructure ND layer: DME");
+ layer.update();
+ }
+ }, # end of layer update predicate
+ 'z-index': 3,
+ }, # end of DME layer
+
+ { name:'TFC', isMapStructure:1, update_on:['toggle_range','toggle_traffic'],
+ predicate: func(nd, layer) {
+ var visible = nd.get_switch('toggle_traffic');
+ layer.group.setVisible( visible );
+ if (visible) {
+ #print("Updating MapStructure ND layer: TFC");
+ layer.update();
+ }
+ }, # end of layer update predicate
+ 'z-index': 1,
+ }, # end of traffic layer
+
+ { name:'runway-nd', update_on:['toggle_range','toggle_display_mode'],
+ predicate: func(nd, layer) {
+ #print("runway-nd wants to be ported to MapStructure");
+ var visible = (nd.rangeNm() <= 40) and getprop("autopilot/route-manager/active") and nd.in_mode('toggle_display_mode', ['MAP','PLAN']) ;
+ if (visible)
+ layer._model.init(); # clear & redraw
+ layer._view.setVisible( visible );
+ }, # end of layer update predicate
+ }, # end of airports-nd layer
+
+ { name:'RTE', isMapStructure:1, update_on:['toggle_range','toggle_display_mode'],
+ predicate: func(nd, layer) {
+ var visible= (nd.in_mode('toggle_display_mode', ['MAP','PLAN']));
+ layer.group.setVisible( visible );
+ if (visible)
+ layer.update();
+ }, # end of layer update predicate
+ 'z-index': 2, # apparently route.draw doesn't have a z-index?
+ }, # end of route layer
+ { name:'WPT', isMapStructure:1, update_on:['toggle_range','toggle_display_mode'],
+ predicate: func(nd, layer) {
+ var visible= (nd.in_mode('toggle_display_mode', ['MAP','PLAN']));
+ layer.group.setVisible( visible );
+
+ if (visible)
+ layer.update();
+ }, # end of layer update predicate
+ 'z-index': 4,
+ }, # end of waypoint layer
+ { name:'ALT-profile', isMapStructure:1, update_on:['toggle_range','toggle_display_mode'],
+ predicate: func(nd, layer) {
+ var visible= (nd.in_mode('toggle_display_mode', ['MAP','PLAN']));
+ layer.group.setVisible( visible );
+
+ if (visible)
+ layer.update();
+ }, # end of layer update predicate
+ 'z-index': 4,
+ }, # end of altitude profile layer
+
+ ## add other layers here, layer names must match the registered names as used in *.layer files for now
+ ## this will all change once we're using Philosopher's MapStructure framework
+
+ ], # end of vector with configured layers
+
+ # This is where SVG elements are configured by providing "behavior" hashes, i.e. for animations
+
+ # to animate each SVG symbol, specify behavior via callbacks (predicate, and true/false implementation)
+ # SVG identifier, callback etc
+ # TODO: update_on([]), update_mode (update() vs. timers/listeners)
+ # TODO: support putting symbols on specific layers
+ features: [
+ {
+ # TODO: taOnly doesn't need to use getprop polling in update(), use a listener instead!
+ id: 'taOnly', # the SVG ID
+ impl: { # implementation hash
+ init: func(nd, symbol), # for updateCenter stuff, called during initialization in the ctor
+ predicate: func(nd) getprop("instrumentation/tcas/inputs/mode") == 2, # the condition
+ is_true: func(nd) nd.symbols.taOnly.show(), # if true, run this
+ is_false: func(nd) nd.symbols.taOnly.hide(), # if false, run this
+ }, # end of taOnly behavior/callbacks
+ }, # end of taOnly
+ {
+ id: 'tas',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.aircraft_source.get_spd() > 100,
+ is_true: func(nd) {
+ nd.symbols.tas.setText(sprintf("%3.0f",getprop("/velocities/airspeed-kt") ));
+ nd.symbols.tas.show();
+ },
+ is_false: func(nd) nd.symbols.tas.hide(),
+ },
+ },
+ {
+ id: 'tasLbl',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.aircraft_source.get_spd() > 100,
+ is_true: func(nd) nd.symbols.tasLbl.show(),
+ is_false: func(nd) nd.symbols.tasLbl.hide(),
+ },
+ },
+ {
+ id: 'ilsFreq',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']),
+ is_true: func(nd) {
+ nd.symbols.ilsFreq.show();
+ if(getprop("instrumentation/nav/in-range"))
+ nd.symbols.ilsFreq.setText(getprop("instrumentation/nav/nav-id"));
+ else
+ nd.symbols.ilsFreq.setText(getprop("instrumentation/nav/frequencies/selected-mhz-fmt"));
+ },
+ is_false: func(nd) nd.symbols.ilsFreq.hide(),
+ },
+ },
+ {
+ id: 'ilsLbl',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']),
+ is_true: func(nd) {
+ nd.symbols.ilsLbl.show();
+ },
+ is_false: func(nd) nd.symbols.ilsLbl.hide(),
+ },
+ },
+ {
+ id: 'wpActiveId',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) getprop("/autopilot/route-manager/wp/id") != nil and getprop("autopilot/route-manager/active")
+ and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
+ is_true: func(nd) {
+ nd.symbols.wpActiveId.setText(getprop("/autopilot/route-manager/wp/id"));
+ nd.symbols.wpActiveId.show();
+ },
+ is_false: func(nd) nd.symbols.wpActiveId.hide(),
+ }, # of wpActiveId.impl
+ }, # of wpActiveId
+ {
+ id: 'wpActiveDist',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active")
+ and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
+ is_true: func(nd) {
+ nd.symbols.wpActiveDist.setText(sprintf("%3.01f",getprop("/autopilot/route-manager/wp/dist")));
+ nd.symbols.wpActiveDist.show();
+ },
+ is_false: func(nd) nd.symbols.wpActiveDist.hide(),
+ },
+ },
+ {
+ id: 'wpActiveDistLbl',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active")
+ and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
+ is_true: func(nd) {
+ nd.symbols.wpActiveDistLbl.show();
+ if(getprop("/autopilot/route-manager/wp/dist") > 1000)
+ nd.symbols.wpActiveDistLbl.setText(" NM");
+ },
+ is_false: func(nd) nd.symbols.wpActiveDistLbl.hide(),
+ },
+ },
+ {
+ id: 'eta',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) getprop("autopilot/route-manager/wp/eta") != nil and getprop("autopilot/route-manager/active")
+ and nd.in_mode('toggle_display_mode', ['MAP','PLAN']),
+ is_true: func(nd) {
+ var etaSec = getprop("/sim/time/utc/day-seconds")+getprop("autopilot/route-manager/wp/eta-seconds");
+ var h = math.floor(etaSec/3600);
+ etaSec=etaSec-3600*h;
+ var m = math.floor(etaSec/60);
+ etaSec=etaSec-60*m;
+ var s = etaSec/10;
+ if (h>24) h=h-24;
+ nd.symbols.eta.setText(sprintf("%02.0f%02.0f.%01.0fz",h,m,s));
+ nd.symbols.eta.show();
+ },
+ is_false: func(nd) nd.symbols.eta.hide(),
+ }, # of eta.impl
+ }, # of eta
+ {
+ id: 'gsGroup',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']),
+ is_true: func(nd) {
+ if(nd.get_switch('toggle_centered'))
+ nd.symbols.gsGroup.setTranslation(0,0);
+ else
+ nd.symbols.gsGroup.setTranslation(0,150);
+ nd.symbols.gsGroup.show();
+ },
+ is_false: func(nd) nd.symbols.gsGroup.hide(),
+ },
+ },
+ {
+ id:'hdg',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']),
+ is_true: func(nd) {
+ var hdgText = "";
+ if((nd.in_mode('toggle_display_mode', ['MAP']) and nd.get_switch('toggle_display_type') == "CRT")
+ or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
+ {
+ if(nd.get_switch('toggle_true_north'))
+ hdgText = nd.aircraft_source.get_trk_tru();
+ else
+ hdgText = nd.aircraft_source.get_trk_mag();
+ } else {
+ if(nd.get_switch('toggle_true_north'))
+ hdgText = nd.aircraft_source.get_hdg_tru();
+ else
+ hdgText = nd.aircraft_source.get_hdg_mag();
+ }
+ if(hdgText < 0.5) hdgText = 360 + hdgText;
+ elsif(hdgText >= 360.5) hdgText = hdgText - 360;
+ nd.symbols.hdg.setText(sprintf("%03.0f", hdgText));
+ },
+ is_false: NOTHING,
+ },
+ },
+ {
+ id:'hdgGroup',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']),
+ is_true: func(nd) {
+ nd.symbols.hdgGroup.show();
+ if(nd.get_switch('toggle_centered'))
+ nd.symbols.hdgGroup.setTranslation(0,100);
+ else
+ nd.symbols.hdgGroup.setTranslation(0,0);
+ },
+ is_false: func(nd) nd.symbols.hdgGroup.hide(),
+ },
+ },
+ {
+ id:'gs',
+ impl: {
+ init: func(nd,symbol),
+ common: func(nd) nd.symbols.gs.setText(sprintf("%3.0f",nd.aircraft_source.get_gnd_spd() )),
+ predicate: func(nd) nd.aircraft_source.get_gnd_spd() >= 30,
+ is_true: func(nd) {
+ nd.symbols.gs.setFontSize(36);
+ },
+ is_false: func(nd) nd.symbols.gs.setFontSize(52),
+ },
+ },
+ {
+ id:'rangeArcs',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) !nd.get_switch('toggle_centered') and nd.get_switch('toggle_rangearc'),
+ is_true: func(nd) nd.symbols.rangeArcs.show(),
+ is_false: func(nd) nd.symbols.rangeArcs.hide(),
+ }, # of rangeArcs.impl
+ }, # of rangeArcs
+ {
+ id:'rangePln1',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
+ is_true: func(nd) {
+ nd.symbols.rangePln1.show();
+ nd.symbols.rangePln1.setText(sprintf("%3.0f",nd.rangeNm()));
+ },
+ is_false: func(nd) nd.symbols.rangePln1.hide(),
+ },
+ },
+ {
+ id:'rangePln2',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
+ is_true: func(nd) {
+ nd.symbols.rangePln2.show();
+ nd.symbols.rangePln2.setText(sprintf("%3.0f",nd.rangeNm()/2));
+ },
+ is_false: func(nd) nd.symbols.rangePln2.hide(),
+ },
+ },
+ {
+ id:'rangePln3',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
+ is_true: func(nd) {
+ nd.symbols.rangePln3.show();
+ nd.symbols.rangePln3.setText(sprintf("%3.0f",nd.rangeNm()/2));
+ },
+ is_false: func(nd) nd.symbols.rangePln3.hide(),
+ },
+ },
+ {
+ id:'rangePln4',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN",
+ is_true: func(nd) {
+ nd.symbols.rangePln4.show();
+ nd.symbols.rangePln4.setText(sprintf("%3.0f",nd.rangeNm()));
+ },
+ is_false: func(nd) nd.symbols.rangePln4.hide(),
+ },
+ },
+ {
+ id:'crsLbl',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
+ is_true: func(nd) nd.symbols.crsLbl.show(),
+ is_false: func(nd) nd.symbols.crsLbl.hide(),
+ },
+ },
+ {
+ id:'crs',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
+ is_true: func(nd) {
+ nd.symbols.crs.show();
+ if(getprop("instrumentation/nav/radials/selected-deg") != nil)
+ nd.symbols.crs.setText(sprintf("%03.0f",getprop("instrumentation/nav/radials/selected-deg")));
+ },
+ is_false: func(nd) nd.symbols.crs.hide(),
+ },
+ },
+ {
+ id:'dmeLbl',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
+ is_true: func(nd) nd.symbols.dmeLbl.show(),
+ is_false: func(nd) nd.symbols.dmeLbl.hide(),
+ },
+ },
+ {
+ id:'dme',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']),
+ is_true: func(nd) {
+ nd.symbols.dme.show();
+ if(getprop("instrumentation/dme/in-range"))
+ nd.symbols.dme.setText(sprintf("%3.1f",getprop("instrumentation/dme/indicated-distance-nm")));
+ },
+ is_false: func(nd) nd.symbols.dme.hide(),
+ },
+ },
+ {
+ id:'trkInd2',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) (nd.in_mode('toggle_display_mode', ['MAP','APP','VOR']) and nd.get_switch('toggle_centered')),
+ is_true: func(nd) {
+ nd.symbols.trkInd2.show();
+ },
+ is_false: func(nd) nd.symbols.trkInd2.hide(),
+ },
+ },
+ {
+ id:'vorCrsPtr',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and !nd.get_switch('toggle_centered')),
+ is_true: func(nd) {
+ nd.symbols.vorCrsPtr.show();
+ if((nd.in_mode('toggle_display_mode', ['MAP']) and nd.get_switch('toggle_display_type') == "CRT")
+ or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
+ nd.symbols.vorCrsPtr.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_trk_mag())*D2R);
+ else
+ nd.symbols.vorCrsPtr.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_hdg_mag())*D2R);
+ },
+ is_false: func(nd) nd.symbols.vorCrsPtr.hide(),
+ },
+ },
+ {
+ id:'vorCrsPtr2',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and nd.get_switch('toggle_centered')),
+ is_true: func(nd) {
+ nd.symbols.vorCrsPtr2.show();
+ if((nd.in_mode('toggle_display_mode', ['MAP']) and nd.get_switch('toggle_display_type') == "CRT")
+ or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
+ nd.symbols.vorCrsPtr2.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_trk_mag())*D2R);
+ else
+ nd.symbols.vorCrsPtr2.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_hdg_mag())*D2R);
+ },
+ is_false: func(nd) nd.symbols.vorCrsPtr2.hide(),
+ },
+ },
+ {
+ id: 'gsDiamond',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']) and getprop("instrumentation/nav/gs-in-range"),
+ is_true: func(nd) {
+ var gs_deflection = getprop("instrumentation/nav/gs-needle-deflection-norm");
+ if(gs_deflection != nil)
+ nd.symbols.gsDiamond.setTranslation(gs_deflection*150,0);
+ if(abs(gs_deflection) < 0.99)
+ nd.symbols.gsDiamond.setColorFill(1,0,1,1);
+ else
+ nd.symbols.gsDiamond.setColorFill(0,0,0,1);
+ },
+ is_false: func(nd) nd.symbols.gsGroup.hide(),
+ },
+ },
+ {
+ id:'locPtr',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and !nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")),
+ is_true: func(nd) {
+ nd.symbols.locPtr.show();
+ var deflection = getprop("instrumentation/nav/heading-needle-deflection-norm");
+ nd.symbols.locPtr.setTranslation(deflection*150,0);
+ if(abs(deflection) < 0.99)
+ nd.symbols.locPtr.setColorFill(1,0,1,1);
+ else
+ nd.symbols.locPtr.setColorFill(0,0,0,1);
+ },
+ is_false: func(nd) nd.symbols.locPtr.hide(),
+ },
+ },
+ {
+ id:'locPtr2',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")),
+ is_true: func(nd) {
+ nd.symbols.locPtr2.show();
+ var deflection = getprop("instrumentation/nav/heading-needle-deflection-norm");
+ nd.symbols.locPtr2.setTranslation(deflection*150,0);
+ if(abs(deflection) < 0.99)
+ nd.symbols.locPtr2.setColorFill(1,0,1,1);
+ else
+ nd.symbols.locPtr2.setColorFill(0,0,0,1);
+ },
+ is_false: func(nd) nd.symbols.locPtr2.hide(),
+ },
+ },
+ {
+ id:'wind',
+ impl: {
+ init: func(nd,symbol),
+ predicate: ALWAYS,
+ is_true: func(nd) {
+ var windDir = getprop("environment/wind-from-heading-deg");
+ if(!nd.get_switch('toggle_true_north'))
+ windDir = windDir - getprop("environment/magnetic-variation-deg");
+ if(windDir < 0.5) windDir = 360 + windDir;
+ elsif(windDir >= 360.5) windDir = windDir - 360;
+ nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,getprop("environment/wind-speed-kt")));
+ },
+ is_false: NOTHING,
+ },
+ },
+ {
+ id:'windArrow',
+ impl: {
+ init: func(nd,symbol),
+ predicate: func(nd) (!(nd.in_mode('toggle_display_mode', ['PLAN']) and (nd.get_switch('toggle_display_type') == "LCD")) and nd.aircraft_source.get_spd() > 100),
+ is_true: func(nd) {
+ nd.symbols.windArrow.show();
+ var windArrowRot = getprop("environment/wind-from-heading-deg");
+ if((nd.in_mode('toggle_display_mode', ['MAP','PLAN']) and nd.get_switch('toggle_display_type') == "CRT")
+ or (nd.get_switch('toggle_track_heading') and nd.get_switch('toggle_display_type') == "LCD"))
+ windArrowRot = windArrowRot - nd.aircraft_source.get_trk_mag();
+ else
+ windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_mag();
+ nd.symbols.windArrow.setRotation(windArrowRot*D2R);
+ },
+ is_false: func(nd) nd.symbols.windArrow.hide(),
+ },
+ },
+
+ ], # end of vector with features
+
+
+ }, # end of Boeing style
+#####
+##
+## add support for other aircraft/ND types and styles here (Airbus etc)
+## or move to other files.
+##
+## see: http://wiki.flightgear.org/NavDisplay#Custom_ND_Styles
+## and: http://wiki.flightgear.org/NavDisplay#Adding_new_features
+
+}; # end of NDStyles
+
diff --git a/Nasal/canvas/map/storm.draw b/Nasal/canvas/map/storm.draw
index ec4dc3bbf..77b706792 100644
--- a/Nasal/canvas/map/storm.draw
+++ b/Nasal/canvas/map/storm.draw
@@ -11,7 +11,7 @@ var draw_storm = func (group, storm, controller=nil, lod=0) {
var storm_grp = group.createChild("group","storm"); # one group for each storm
storm_grp.createChild("image")
- .setFile("Nasal/canvas/map/storm.png")
+ .setFile("Nasal/canvas/map/Images/storm.png")
.setSize(128*radiusNm,128*radiusNm)
.setTranslation(-64*radiusNm,-64*radiusNm)
.setCenter(0,0);
diff --git a/Nasal/canvas/map/storms.model b/Nasal/canvas/map/storms.model
index 5b4c19ad6..bc129bd9f 100644
--- a/Nasal/canvas/map/storms.model
+++ b/Nasal/canvas/map/storms.model
@@ -8,18 +8,20 @@ StormModel.init = func {
foreach (var n; props.globals.getNode("/instrumentation/wxradar",1).getChildren("storm")) {
# Model 3 degree radar beam
var stormLat = n.getNode("latitude-deg").getValue();
- stormLon = n.getNode("longitude-deg").getValue();
- acLat = getprop("/position/latitude-deg");
- acLon = getprop("/position/longitude-deg");
- stormGeo = geo.Coord.new();
- acGeo = geo.Coord.new();
+ var stormLon = n.getNode("longitude-deg").getValue();
+
+ # FIXME: once ported to MapStructure, these should use the encapsulated "aircraft source"/driver stuff
+ var acLat = getprop("/position/latitude-deg");
+ var acLon = getprop("/position/longitude-deg");
+ var stormGeo = geo.Coord.new();
+ var acGeo = geo.Coord.new();
stormGeo.set_latlon(stormLat, stormLon);
acGeo.set_latlon(acLat, acLon);
var directDistance = acGeo.direct_distance_to(stormGeo);
- beamH = 0.1719 * directDistance; # M2FT * tan(3deg)
- beamBase = getprop("position/altitude-ft") - beamH;
+ var beamH = 0.1719 * directDistance; # M2FT * tan(3deg)
+ var beamBase = getprop("position/altitude-ft") - beamH;
if (n.getNode("top-altitude-ft").getValue() > beamBase) {
me.push( { lat: stormLat, lon : stormLon, radiusNm : n.getNode("radius-nm").getValue() } );
diff --git a/Nasal/debug.nas b/Nasal/debug.nas
index 1c7137aa3..121ab32c9 100644
--- a/Nasal/debug.nas
+++ b/Nasal/debug.nas
@@ -67,22 +67,22 @@
# ANSI color code wrappers (see $ man console_codes)
#
-var _title = func(s) globals.string.color("33;42;1", s); # backtrace header
-var _section = func(s) globals.string.color("37;41;1", s); # backtrace frame
-var _error = func(s) globals.string.color("31;1", s); # internal errors
-var _bench = func(s) globals.string.color("37;45;1", s); # benchmark info
+var _title = func(s, color=nil) globals.string.color("33;42;1", s, color); # backtrace header
+var _section = func(s, color=nil) globals.string.color("37;41;1", s, color); # backtrace frame
+var _error = func(s, color=nil) globals.string.color("31;1", s, color); # internal errors
+var _bench = func(s, color=nil) globals.string.color("37;45;1", s); # benchmark info
-var _nil = func(s) globals.string.color("32", s); # nil
-var _string = func(s) globals.string.color("31", s); # "foo"
-var _num = func(s) globals.string.color("31", s); # 0.0
-var _bracket = func(s) globals.string.color("", s); # [ ]
-var _brace = func(s) globals.string.color("", s); # { }
-var _angle = func(s) globals.string.color("", s); # < >
-var _vartype = func(s) globals.string.color("33", s); # func ghost
-var _proptype = func(s) globals.string.color("34", s); # BOOL INT LONG DOUBLE ...
-var _path = func(s) globals.string.color("36", s); # /some/property/path
-var _internal = func(s) globals.string.color("35", s); # me parents
-var _varname = func(s) s; # variable_name
+var _nil = func(s, color=nil) globals.string.color("32", s, color); # nil
+var _string = func(s, color=nil) globals.string.color("31", s, color); # "foo"
+var _num = func(s, color=nil) globals.string.color("31", s, color); # 0.0
+var _bracket = func(s, color=nil) globals.string.color("", s, color); # [ ]
+var _brace = func(s, color=nil) globals.string.color("", s, color); # { }
+var _angle = func(s, color=nil) globals.string.color("", s, color); # < >
+var _vartype = func(s, color=nil) globals.string.color("33", s, color); # func ghost
+var _proptype = func(s, color=nil) globals.string.color("34", s, color); # BOOL INT LONG DOUBLE ...
+var _path = func(s, color=nil) globals.string.color("36", s, color); # /some/property/path
+var _internal = func(s, color=nil) globals.string.color("35", s, color); # me parents
+var _varname = func(s, color=nil) s; # variable_name
##
@@ -142,7 +142,7 @@ var _tree = func(n, graph = 1, prefix = "", level = 0) {
}
-var attributes = func(p, verbose = 1) {
+var attributes = func(p, verbose = 1, color=nil) {
var r = p.getAttribute("readable") ? "" : "r";
var w = p.getAttribute("writable") ? "" : "w";
var R = p.getAttribute("trace-read") ? "R" : "";
@@ -159,24 +159,24 @@ var attributes = func(p, verbose = 1) {
type ~= ", L" ~ l;
if (verbose and (var c = p.getAttribute("references")) > 2)
type ~= ", #" ~ (c - 2);
- return _proptype(type ~ ")");
+ return _proptype(type ~ ")", color);
}
-var _dump_prop = func(p) {
- _path(p.getPath()) ~ " = " ~ debug.string(p.getValue()) ~ " " ~ attributes(p);
+var _dump_prop = func(p, color=nil) {
+ _path(p.getPath(), color) ~ " = " ~ debug.string(p.getValue()) ~ " " ~ attributes(p);
}
-var _dump_var = func(v) {
+var _dump_var = func(v, color=nil) {
if (v == "me" or v == "parents")
- return _internal(v);
+ return _internal(v, color);
else
- return _varname(v);
+ return _varname(v, color);
}
-var _dump_string = func(str) {
+var _dump_string = func(str, color=nil) {
var s = "'";
for (var i = 0; i < size(str); i += 1) {
var c = str[i];
@@ -193,55 +193,55 @@ var _dump_string = func(str) {
else
s ~= sprintf("\\x%02x", c);
}
- return _string(s ~ "'");
+ return _string(s ~ "'", color);
}
# dump hash keys as variables if they are valid variable names, or as string otherwise
-var _dump_key = func(s) {
+var _dump_key = func(s, color=nil) {
if (num(s) != nil)
- return _num(s);
+ return _num(s, color);
if (!size(s))
- return _dump_string(s);
+ return _dump_string(s, color);
if (!globals.string.isalpha(s[0]) and s[0] != `_`)
- return _dump_string(s);
+ return _dump_string(s, color);
for (var i = 1; i < size(s); i += 1)
if (!globals.string.isalnum(s[i]) and s[i] != `_`)
- return _dump_string(s);
- _dump_var(s);
+ return _dump_string(s, color);
+ _dump_var(s, color);
}
-var string = func(o) {
+var string = func(o, color=nil) {
var t = typeof(o);
if (t == "nil") {
- return _nil("nil");
+ return _nil("nil", color);
} elsif (t == "scalar") {
- return num(o) == nil ? _dump_string(o) : _num(o~"");
+ return num(o) == nil ? _dump_string(o, color) : _num(o~"", color);
} elsif (t == "vector") {
var s = "";
forindex (var i; o)
- s ~= (i == 0 ? "" : ", ") ~ debug.string(o[i]);
- return _bracket("[") ~ s ~ _bracket("]");
+ s ~= (i == 0 ? "" : ", ") ~ debug.string(o[i], color);
+ return _bracket("[", color) ~ s ~ _bracket("]", color);
} elsif (t == "hash") {
if (contains(o, "parents") and typeof(o.parents) == "vector"
and size(o.parents) == 1 and o.parents[0] == props.Node)
- return _angle("<") ~ _dump_prop(o) ~ _angle(">");
+ return _angle("<", color) ~ _dump_prop(o, color) ~ _angle(">", color);
var k = keys(o);
var s = "";
forindex (var i; k)
- s ~= (i == 0 ? "" : ", ") ~ _dump_key(k[i]) ~ ": " ~ debug.string(o[k[i]]);
- return _brace("{") ~ " " ~ s ~ " " ~ _brace("}");
+ s ~= (i == 0 ? "" : ", ") ~ _dump_key(k[i], color) ~ ": " ~ debug.string(o[k[i]], color);
+ return _brace("{", color) ~ " " ~ s ~ " " ~ _brace("}", color);
} elsif (t == "ghost") {
- return _angle("<") ~ _nil(ghosttype(o)) ~ _angle(">");
+ return _angle("<", color) ~ _nil(ghosttype(o), color) ~ _angle(">", color);
} else {
- return _angle("<") ~ _vartype(t) ~ _angle(">");
+ return _angle("<", color) ~ _vartype(t, color) ~ _angle(">", color);
}
}
diff --git a/Nasal/failures.nas b/Nasal/failures.nas
deleted file mode 100644
index 7c13673e8..000000000
--- a/Nasal/failures.nas
+++ /dev/null
@@ -1,230 +0,0 @@
-# failures.nas a manager for failing systems based on MTBF/MCBF
-
-# Time between MTBF checks
-var dt = 10;
-
-# Root property for failure information
-var failure_root = "/sim/failure-manager";
-
-# Enumerations
-var type = { MTBF : 1, MCBF: 2 };
-var fail = { SERVICEABLE : 1, JAM : 2, ENGINE: 3};
-
-# This hash contains a mapping from property entry to a failure object
-# containing the following members:
-# type: MTBF|MCBF Mean Time Between Failures/Mean Cycle Between Failures
-# desc: Description of property for screen output
-# failure: SERVICEABLE Property has a "serviceable" child that can be set to false
-# failure: JAM Property is failed by marking as Read-Only
-# failure: ENGINE Special case for engines, where a variety of properties are set.
-# failure: Property is failed by setting another property to false
-var breakHash = {
- "/instrumentation/adf" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "ADF" },
- "/instrumentation/dme" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "DME" },
- "/instrumentation/airspeed-indicator" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "ASI" },
- "/instrumentation/altimeter" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Altimeter" },
- "/instrumentation/attitude-indicator" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Attitude Indicator" },
- "/instrumentation/heading-indicator" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Heading Indicator" },
- "/instrumentation/magnetic-compass" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Magnetic Compass" },
- "/instrumentation/nav[0]/gs" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Nav 1 Glideslope" },
- "/instrumentation/nav[0]/cdi" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Nav 1 CDI" },
- "/instrumentation/nav[1]/gs" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Nav 2 Glideslope" },
- "/instrumentation/nav[1]/cdi" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Nav 2 CDI" },
- "/instrumentation/slip-skid-ball" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Slip/Skid Ball" },
- "/instrumentation/turn-indicator" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Turn Indicator" },
- "/instrumentation/vertical-speed-indicator" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "VSI" },
- "/systems/electrical" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Electrical system" },
- "/systems/pitot" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Pitot system" },
- "/systems/static" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Static system" },
- "/systems/vacuum" : { type: type.MTBF, failure: fail.SERVICEABLE, desc: "Vacuum system" },
- "/controls/gear/gear-down" : { type: type.MCBF, failure: "/gear/serviceable", desc: "Gear" },
- "/controls/flight/aileron" : { type: type.MTBF, failure: fail.JAM, desc: "Aileron" },
- "/controls/flight/elevator" : { type: type.MTBF, failure: fail.JAM, desc: "Elevator" },
- "/controls/flight/rudder" : { type: type.MTBF, failure: fail.JAM, desc: "Rudder" },
- "/controls/flight/flaps" : { type: type.MCBF, failure: fail.JAM, desc: "Flaps" },
- "/controls/flight/speedbrake" : { type: type.MCBF, failure: fail.JAM, desc: "Speed Brake" }
-};
-
-# Return the failure entry for a given property
-var getFailure = func (prop) {
- var o = breakHash[prop];
-
- if (o.failure == fail.SERVICEABLE) {
- return prop ~ "/serviceable";
- } elsif (o.failure == fail.ENGINE) {
- return failure_root ~ prop ~ "/serviceable";
- } elsif (o.failure == fail.JAM) {
- return failure_root ~ prop ~ "/serviceable";
- } else {
- return o.failure;
- }
-}
-
-# Fail a given property, either using a serviceable flag, or by jamming the property
-var failProp = func(prop) {
-
- var o = breakHash[prop];
- var p = getFailure(prop);
-
- if (getprop(p) == 1) {
- setprop(p, 0);
-
- # We always print to the console
- print(getprop("/sim/time/gmt-string") ~ " : " ~ o.desc ~ " failed");
-
- if (getprop(failure_root ~ "/display-on-screen")) {
- # Display message to the screen in red
- screen.log.write(o.desc ~ " failed", 1.0, 0.0, 0.0);
- }
- }
-}
-
-# Unfail a given property, used for resetting a failure state.
-var unfailProp = func(prop)
-{
- var p = getFailure(prop);
- setprop(p, 1);
-}
-
-# Unfail all the failed properties
-var unfail = func {
- foreach(var prop; keys(breakHash)) {
- unfailProp(prop);
- }
-}
-
-# Listener to jam a property. Note that the property to jam is
-# encoded within the property name
-var jamListener = func(p) {
- var jamprop = string.replace(p.getParent().getPath(), failure_root, "");
-#jamprop = string.replace(jamprop, "/serviceable", "");
- var prop = props.globals.getNode(jamprop);
- if (p.getValue()) {
- prop.setAttribute("writable", 1);
- } else {
- prop.setAttribute("writable", 0);
- }
-}
-
-# Listener for an engine property. Note that the engine to set is
-# encoded within the property name. We set both the magnetos and
-# cutoff to handle different engine models.
-var engineListener = func(p) {
- var e = string.replace(p.getParent().getPath(), failure_root, "");
- var prop = props.globals.getNode(e);
- if (p.getValue()) {
- # Enable the properties, but don't set the magnetos, as they may
- # be off for a reason.
- var magnetos = props.globals.getNode("/controls/" ~ e ~ "/magnetos", 1);
- var cutoff = props.globals.getNode("/controls/" ~ e ~ "/cutoff", 1);
- magnetos.setAttribute("writable", 1);
- cutoff.setAttribute("writable", 1);
- cutoff.setValue(0);
- } else {
- # Switch off the engine, and disable writing to it.
- var magnetos = props.globals.getNode("/controls/" ~ e ~ "/magnetos", 1);
- var cutoff = props.globals.getNode("/controls/" ~ e ~ "/cutoff", 1);
- magnetos.setValue(0);
- cutoff.setValue(1);
- magnetos.setAttribute("writable", 0);
- cutoff.setAttribute("writable", 0);
- }
-}
-
-# Perform a MCBF check against a failure property.
-var checkMCBF = func(prop) {
- var mcbf = getprop(failure_root ~ prop.getPath() ~ "/mcbf");
- # mcbf == mean cycles between failures
- # hence 2*mcbf is the number of _half-cycles_ between failures,
- # which is relevant because we do this check on each half-cycle:
- if ((mcbf > 0) and !int(2 * mcbf * rand())) {
- # Get the property information.
- failProp(prop.getPath());
- }
-}
-
-# Timer based loop to check MTBF properties
-var checkMTBF = func {
- foreach(var prop; keys(breakHash)) {
- var o = breakHash[prop];
- if (o.type == type.MTBF) {
- var mtbf = getprop(failure_root ~ prop ~ "/mtbf");
- if (mtbf and !int(rand() * mtbf / dt)) {
- failProp(prop);
- }
- }
- }
- settimer(checkMTBF, dt);
-}
-
-# Function to set all MTBF failures to a give value. Mainly for testing.
-var setAllMTBF = func(mtbf) {
- foreach(var prop; keys(breakHash)) {
- var o = breakHash[prop];
- if (o.type == type.MTBF) {
- setprop(failure_root ~ prop ~ "/mtbf", mtbf);
- }
- }
-}
-
-# Function to set all MCBF failures to a give value. Mainly for testing.
-var setAllMCBF = func(mcbf) {
- foreach(var prop; keys(breakHash)) {
- var o = breakHash[prop];
- if (o.type == type.MCBF) {
- setprop(failure_root ~ prop ~ "/mcbf", mcbf);
- }
- }
-}
-
-# Initialization, called once Nasal and the FDM are loaded properly.
-var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", func {
- removelistener(fdm_init_listener); # uninstall, so we're only called once
- srand();
-
- # Engines are added dynamically because there may be an arbitrary number
- var i = 1;
- foreach (var e; props.globals.getNode("/engines").getChildren("engine")) {
- breakHash[e.getPath()] = { type: type.MTBF, failure: fail.ENGINE, desc : "Engine " ~ i };
- i = i+1;
- }
-
- # Set up serviceable, MCBF and MTBF properties.
- foreach(var prop; keys(breakHash)) {
- var o = breakHash[prop];
- var t = "/mcbf";
-
- if (o.type == type.MTBF) {
- t = "/mtbf";
- }
-
- # Set up the MTBF/MCFB properties to 0. Note that they are in a separate
- # subtree, as there's no guarantee that the property isn't a leaf.
- props.globals.initNode(failure_root ~ prop ~ t, 0);
-
- if (o.failure == fail.SERVICEABLE) {
- # If the property has a serviceable property, set it if appropriate.
- props.globals.initNode(prop ~ "/serviceable", 1, "BOOL");
- } elsif (o.failure == fail.JAM) {
- # In the JAM case, we actually have a dummy serviceable property for the GUI.
- props.globals.initNode(failure_root ~ prop ~ "/serviceable", 1, "BOOL");
- setlistener(failure_root ~ prop ~ "/serviceable", jamListener);
- } elsif (o.failure == fail.ENGINE) {
- # In the JAM case, we actually have a dummy serviceable property for the GUI.
- props.globals.initNode(failure_root ~ prop ~ "/serviceable", 1, "BOOL");
- setlistener(failure_root ~ prop ~ "/serviceable", engineListener);
- } else {
- # If the serviceable property is actually defined, check it is set.
- props.globals.initNode(o.failure, 1, "BOOL");
- }
-
- if (o.type == type.MCBF) {
- # Set up listener for MCBF properties, only when the value changes.
- setlistener(prop, checkMCBF, 0, 0);
- }
- }
-
- # Start checking for failures.
- checkMTBF();
-});
-
diff --git a/Nasal/globals.nas b/Nasal/globals.nas
index 4be967a86..273611797 100644
--- a/Nasal/globals.nas
+++ b/Nasal/globals.nas
@@ -27,6 +27,15 @@ var L2GAL = 1 / GAL2L;
# container for local variables, so as not to clutter the global namespace
var __ = {};
+##
+# Aborts execution if evaluates to false.
+# Prints an optional message if present, or just "assertion failed!"
+#
+var assert = func (condition, message=nil) {
+ message != nil or (message = "assertion failed!");
+ condition or die(message);
+}
+
##
# Returns true if the first object is an instance of the second
# (class) object. Example: isa(someObject, props.Node)
@@ -180,4 +189,3 @@ settimer(func {
if(size(file) > 4 and substr(file, -4) == ".nas")
io.load_nasal(path ~ "/" ~ file, substr(file, 0, size(file) - 4));
}, 0);
-
diff --git a/Nasal/gui.nas b/Nasal/gui.nas
index 65b160c96..55031909c 100644
--- a/Nasal/gui.nas
+++ b/Nasal/gui.nas
@@ -1381,11 +1381,6 @@ _setlistener("/sim/signals/fdm-initialized", func {
do_welcome = 0;
});
-# load ATC chatter module on demand
-setprop("/nasal/atc-chatter/enabled", getprop("/sim/sound/chatter/enabled"));
-_setlistener("/sim/sound/chatter/enabled", func {
- setprop("/nasal/atc-chatter/enabled", getprop("/sim/sound/chatter/enabled"));
-});
##
# overwrite custom shader settings when quality-level is set on startup
diff --git a/Nasal/io.nas b/Nasal/io.nas
index 179af84aa..b27e2aa36 100644
--- a/Nasal/io.nas
+++ b/Nasal/io.nas
@@ -47,8 +47,6 @@ var include = func(file) {
if (contains(ns, module))
return;
- ns[module] = "included";
-
var code = call(compile, [readfile(path), path], var err = []);
if (size(err)) {
if (find("Parse error:", err[0]) < 0)
@@ -57,6 +55,7 @@ var include = func(file) {
die(sprintf("%s\n in included file: %s", err[0], path));
}
+ ns[module] = "included";
call(bind(code, ns, fn), [], nil, ns);
}
@@ -425,4 +424,3 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
}
})();
});
-
diff --git a/Nasal/props.nas b/Nasal/props.nas
index cdef43256..4d58d3f2c 100644
--- a/Nasal/props.nas
+++ b/Nasal/props.nas
@@ -227,6 +227,11 @@ var wrapNode = func(node) { { parents : [Node], _g : node } }
#
var globals = wrapNode(_globals());
+##
+# Shortcut for props.globals.getNode().
+#
+var getNode = func return call(props.globals.getNode, arg, props.globals);
+
##
# Sets all indexed property children to a single value. arg[0]
# specifies a property name (e.g. /controls/engines/engine), arg[1] a
diff --git a/Nasal/route_manager.nas b/Nasal/route_manager.nas
index c6b59d4b7..79d67ae3a 100644
--- a/Nasal/route_manager.nas
+++ b/Nasal/route_manager.nas
@@ -15,7 +15,7 @@ var RouteManagerDelegate = {
departureChanged: func
{
- debug.dump('saw departure changed');
+ printlog('info', 'saw departure changed');
me.flightplan.clearWPType('sid');
if (me.flightplan.departure == nil)
return;
@@ -36,13 +36,13 @@ var RouteManagerDelegate = {
# and we have a SID
var sid = me.flightplan.sid;
- debug.dump('routing via SID ' ~ sid.id);
+ printlog('info', 'routing via SID ' ~ sid.id);
me.flightplan.insertWaypoints(sid.route(me.flightplan.departure_runway), 1);
},
arrivalChanged: func
{
- debug.dump('saw arrival changed');
+ printlog('info', 'saw arrival changed');
me.flightplan.clearWPType('star');
me.flightplan.clearWPType('approach');
if (me.flightplan.destination == nil)
@@ -57,17 +57,17 @@ var RouteManagerDelegate = {
}
if (me.flightplan.star != nil) {
- debug.dump('routing via STAR ' ~ me.flightplan.star.id);
+ printlog('info', 'routing via STAR ' ~ me.flightplan.star.id);
var wps = me.flightplan.star.route(me.flightplan.destination_runway);
me.flightplan.insertWaypoints(wps, -1);
}
if (me.flightplan.approach != nil) {
- debug.dump('routing via approach ' ~ me.flightplan.approach.id);
+ printlog('info', 'routing via approach ' ~ me.flightplan.approach.id);
var wps = me.flightplan.approach.route();
me.flightplan.insertWaypoints(wps, -1);
} else {
- debug.dump('routing direct to runway ' ~ me.flightplan.destination_runway.id);
+ printlog('info', 'routing direct to runway ' ~ me.flightplan.destination_runway.id);
# no approach, just use the runway waypoint
var wp = createWPFrom(me.flightplan.destination_runway);
wp.wp_role = 'approach';
@@ -77,14 +77,14 @@ var RouteManagerDelegate = {
cleared: func
{
- debug.dump("saw active flightplan cleared, deactivating");
+ printlog('info', "saw active flightplan cleared, deactivating");
# see http://https://code.google.com/p/flightgear-bugs/issues/detail?id=885
fgcommand("activate-flightplan", props.Node.new({"activate": 0}));
},
endOfFlightPlan: func
{
- debug.dump("end of flight-plan, deactivating");
+ printlog('info', "end of flight-plan, deactivating");
fgcommand("activate-flightplan", props.Node.new({"activate": 0}));
}
};
@@ -105,7 +105,7 @@ var FMSDelegate = {
var wow = getprop('gear/gear[0]/wow');
var gs = getprop('velocities/groundspeed-kt');
if (wow and (gs < 25)) {
- debug.dump('touchdown on destination runway, end of route.');
+ printlog('info', 'touchdown on destination runway, end of route.');
me.landingCheck.stop();
# record touch-down time?
me.flightplan.finish();
@@ -118,7 +118,7 @@ var FMSDelegate = {
endOfFlightPlan: func
{
- debug.dump('end of flight-plan');
+ printlog('info', 'end of flight-plan');
},
currentWaypointChanged: func
@@ -128,12 +128,12 @@ var FMSDelegate = {
me.landingCheck = nil; # delete timer
}
- #debug.dump('saw current WP changed, now ' ~ me.flightplan.current);
+ #printlog('info', 'saw current WP changed, now ' ~ me.flightplan.current);
var active = me.flightplan.currentWP();
if (active == nil) return;
if (active.alt_cstr_type == "at") {
- debug.dump('new WP has valid altitude restriction, setting on AP');
+ printlog('info', 'new WP has valid altitude restriction, setting on AP');
setprop('/autopilot/settings/target-altitude-ft', active.alt_cstr);
}
diff --git a/Nasal/string.nas b/Nasal/string.nas
index 6a1ca61f1..c0a057fc4 100644
--- a/Nasal/string.nas
+++ b/Nasal/string.nas
@@ -486,10 +486,11 @@ var scanf = func(test, format, result) {
# ANSI colors (see $ man console_codes)
#
var setcolors = func(enabled) {
- if (enabled and getprop("/sim/startup/stderr-to-terminal"))
- color = func(color, s) { "\x1b[" ~ color ~ "m" ~ s ~ "\x1b[m" }
- else
- color = func(dummy, s) { s }
+ color_enabled = (enabled and getprop("/sim/startup/stderr-to-terminal"));
+}
+var color = func(color, s, enabled=nil) {
+ if (enabled == nil) enabled = color_enabled;
+ return enabled ? "\x1b[" ~ color ~ "m" ~ s ~ "\x1b[m" : s;
}
@@ -499,10 +500,9 @@ var setcolors = func(enabled) {
#
# print(string.color("31;1", "this is red"));
#
-var color = func nil;
-setcolors(getprop("/sim/startup/terminal-ansi-colors"));
+var color_enabled = 0;
_setlistener("/sim/signals/nasal-dir-initialized", func {
- setlistener("/sim/startup/terminal-ansi-colors", func(n) setcolors(n.getBoolValue()));
+ setlistener("/sim/startup/terminal-ansi-colors", func(n) setcolors(n.getBoolValue()), 1, 0);
});
diff --git a/Textures/Runway/grass_rwy.dds b/Textures/Runway/grass_rwy.dds
deleted file mode 100644
index 71743c37a..000000000
Binary files a/Textures/Runway/grass_rwy.dds and /dev/null differ
diff --git a/Textures/Runway/pa_0l.dds b/Textures/Runway/pa_0l.dds
deleted file mode 100644
index 82e30e547..000000000
Binary files a/Textures/Runway/pa_0l.dds and /dev/null differ
diff --git a/Textures/Runway/pa_0l.png b/Textures/Runway/pa_0l.png
deleted file mode 100644
index e60794155..000000000
Binary files a/Textures/Runway/pa_0l.png and /dev/null differ
diff --git a/Textures/Runway/pa_0r.dds b/Textures/Runway/pa_0r.dds
deleted file mode 100644
index eb725feee..000000000
Binary files a/Textures/Runway/pa_0r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_0r.png b/Textures/Runway/pa_0r.png
deleted file mode 100644
index ffe8dee0e..000000000
Binary files a/Textures/Runway/pa_0r.png and /dev/null differ
diff --git a/Textures/Runway/pa_11.dds b/Textures/Runway/pa_11.dds
deleted file mode 100644
index 6a704e011..000000000
Binary files a/Textures/Runway/pa_11.dds and /dev/null differ
diff --git a/Textures/Runway/pa_11.png b/Textures/Runway/pa_11.png
deleted file mode 100644
index 2a2ba5376..000000000
Binary files a/Textures/Runway/pa_11.png and /dev/null differ
diff --git a/Textures/Runway/pa_1c.dds b/Textures/Runway/pa_1c.dds
deleted file mode 100644
index 9caf305b8..000000000
Binary files a/Textures/Runway/pa_1c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_1c.png b/Textures/Runway/pa_1c.png
deleted file mode 100644
index dde0d4818..000000000
Binary files a/Textures/Runway/pa_1c.png and /dev/null differ
diff --git a/Textures/Runway/pa_1l.dds b/Textures/Runway/pa_1l.dds
deleted file mode 100644
index 364ff2da6..000000000
Binary files a/Textures/Runway/pa_1l.dds and /dev/null differ
diff --git a/Textures/Runway/pa_1l.png b/Textures/Runway/pa_1l.png
deleted file mode 100644
index 6c6502ba2..000000000
Binary files a/Textures/Runway/pa_1l.png and /dev/null differ
diff --git a/Textures/Runway/pa_1r.dds b/Textures/Runway/pa_1r.dds
deleted file mode 100644
index 748b21bfb..000000000
Binary files a/Textures/Runway/pa_1r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_1r.png b/Textures/Runway/pa_1r.png
deleted file mode 100644
index 603db3c7a..000000000
Binary files a/Textures/Runway/pa_1r.png and /dev/null differ
diff --git a/Textures/Runway/pa_2c.dds b/Textures/Runway/pa_2c.dds
deleted file mode 100644
index e94166569..000000000
Binary files a/Textures/Runway/pa_2c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_2c.png b/Textures/Runway/pa_2c.png
deleted file mode 100644
index 9d3c68c50..000000000
Binary files a/Textures/Runway/pa_2c.png and /dev/null differ
diff --git a/Textures/Runway/pa_2l.dds b/Textures/Runway/pa_2l.dds
deleted file mode 100644
index 21c918032..000000000
Binary files a/Textures/Runway/pa_2l.dds and /dev/null differ
diff --git a/Textures/Runway/pa_2l.png b/Textures/Runway/pa_2l.png
deleted file mode 100644
index 1f1614f9c..000000000
Binary files a/Textures/Runway/pa_2l.png and /dev/null differ
diff --git a/Textures/Runway/pa_2r.dds b/Textures/Runway/pa_2r.dds
deleted file mode 100644
index c679af834..000000000
Binary files a/Textures/Runway/pa_2r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_2r.png b/Textures/Runway/pa_2r.png
deleted file mode 100644
index 45df60389..000000000
Binary files a/Textures/Runway/pa_2r.png and /dev/null differ
diff --git a/Textures/Runway/pa_3c.dds b/Textures/Runway/pa_3c.dds
deleted file mode 100644
index 0cb0d5c13..000000000
Binary files a/Textures/Runway/pa_3c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_3c.png b/Textures/Runway/pa_3c.png
deleted file mode 100644
index 7a03cf584..000000000
Binary files a/Textures/Runway/pa_3c.png and /dev/null differ
diff --git a/Textures/Runway/pa_3l.dds b/Textures/Runway/pa_3l.dds
deleted file mode 100644
index ca7ec2738..000000000
Binary files a/Textures/Runway/pa_3l.dds and /dev/null differ
diff --git a/Textures/Runway/pa_3l.png b/Textures/Runway/pa_3l.png
deleted file mode 100644
index 0c6510125..000000000
Binary files a/Textures/Runway/pa_3l.png and /dev/null differ
diff --git a/Textures/Runway/pa_3r.dds b/Textures/Runway/pa_3r.dds
deleted file mode 100644
index 6dbec786c..000000000
Binary files a/Textures/Runway/pa_3r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_3r.png b/Textures/Runway/pa_3r.png
deleted file mode 100644
index 19765011d..000000000
Binary files a/Textures/Runway/pa_3r.png and /dev/null differ
diff --git a/Textures/Runway/pa_4c.dds b/Textures/Runway/pa_4c.dds
deleted file mode 100644
index f7f4511ea..000000000
Binary files a/Textures/Runway/pa_4c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_4c.png b/Textures/Runway/pa_4c.png
deleted file mode 100644
index 89627b91a..000000000
Binary files a/Textures/Runway/pa_4c.png and /dev/null differ
diff --git a/Textures/Runway/pa_4r.dds b/Textures/Runway/pa_4r.dds
deleted file mode 100644
index e1ec30fb5..000000000
Binary files a/Textures/Runway/pa_4r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_4r.png b/Textures/Runway/pa_4r.png
deleted file mode 100644
index a09350c75..000000000
Binary files a/Textures/Runway/pa_4r.png and /dev/null differ
diff --git a/Textures/Runway/pa_5c.dds b/Textures/Runway/pa_5c.dds
deleted file mode 100644
index c4331af4a..000000000
Binary files a/Textures/Runway/pa_5c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_5c.png b/Textures/Runway/pa_5c.png
deleted file mode 100644
index 0baeee8ae..000000000
Binary files a/Textures/Runway/pa_5c.png and /dev/null differ
diff --git a/Textures/Runway/pa_5r.dds b/Textures/Runway/pa_5r.dds
deleted file mode 100644
index ea6c99cdb..000000000
Binary files a/Textures/Runway/pa_5r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_5r.png b/Textures/Runway/pa_5r.png
deleted file mode 100644
index 11c03cd2a..000000000
Binary files a/Textures/Runway/pa_5r.png and /dev/null differ
diff --git a/Textures/Runway/pa_6c.dds b/Textures/Runway/pa_6c.dds
deleted file mode 100644
index d84ddd983..000000000
Binary files a/Textures/Runway/pa_6c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_6c.png b/Textures/Runway/pa_6c.png
deleted file mode 100644
index 2c3d19195..000000000
Binary files a/Textures/Runway/pa_6c.png and /dev/null differ
diff --git a/Textures/Runway/pa_6r.dds b/Textures/Runway/pa_6r.dds
deleted file mode 100644
index a98143392..000000000
Binary files a/Textures/Runway/pa_6r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_6r.png b/Textures/Runway/pa_6r.png
deleted file mode 100644
index ba321b634..000000000
Binary files a/Textures/Runway/pa_6r.png and /dev/null differ
diff --git a/Textures/Runway/pa_7c.dds b/Textures/Runway/pa_7c.dds
deleted file mode 100644
index be2570727..000000000
Binary files a/Textures/Runway/pa_7c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_7c.png b/Textures/Runway/pa_7c.png
deleted file mode 100644
index 7e045f3e1..000000000
Binary files a/Textures/Runway/pa_7c.png and /dev/null differ
diff --git a/Textures/Runway/pa_7r.dds b/Textures/Runway/pa_7r.dds
deleted file mode 100644
index e75370414..000000000
Binary files a/Textures/Runway/pa_7r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_7r.png b/Textures/Runway/pa_7r.png
deleted file mode 100644
index 92a6beb5a..000000000
Binary files a/Textures/Runway/pa_7r.png and /dev/null differ
diff --git a/Textures/Runway/pa_8c.dds b/Textures/Runway/pa_8c.dds
deleted file mode 100644
index 5b00aac6b..000000000
Binary files a/Textures/Runway/pa_8c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_8c.png b/Textures/Runway/pa_8c.png
deleted file mode 100644
index 5dda6d430..000000000
Binary files a/Textures/Runway/pa_8c.png and /dev/null differ
diff --git a/Textures/Runway/pa_8r.dds b/Textures/Runway/pa_8r.dds
deleted file mode 100644
index 172e58a8c..000000000
Binary files a/Textures/Runway/pa_8r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_8r.png b/Textures/Runway/pa_8r.png
deleted file mode 100644
index 19f7e5158..000000000
Binary files a/Textures/Runway/pa_8r.png and /dev/null differ
diff --git a/Textures/Runway/pa_9c.dds b/Textures/Runway/pa_9c.dds
deleted file mode 100644
index 738c00e10..000000000
Binary files a/Textures/Runway/pa_9c.dds and /dev/null differ
diff --git a/Textures/Runway/pa_9c.png b/Textures/Runway/pa_9c.png
deleted file mode 100644
index 36424b67b..000000000
Binary files a/Textures/Runway/pa_9c.png and /dev/null differ
diff --git a/Textures/Runway/pa_9r.dds b/Textures/Runway/pa_9r.dds
deleted file mode 100644
index 8550d9d5c..000000000
Binary files a/Textures/Runway/pa_9r.dds and /dev/null differ
diff --git a/Textures/Runway/pa_9r.png b/Textures/Runway/pa_9r.png
deleted file mode 100644
index 5b0a59cdb..000000000
Binary files a/Textures/Runway/pa_9r.png and /dev/null differ
diff --git a/Textures/Runway/pa_C.dds b/Textures/Runway/pa_C.dds
deleted file mode 100644
index 8ff46641d..000000000
Binary files a/Textures/Runway/pa_C.dds and /dev/null differ
diff --git a/Textures/Runway/pa_C.png b/Textures/Runway/pa_C.png
deleted file mode 100644
index 9301893f2..000000000
Binary files a/Textures/Runway/pa_C.png and /dev/null differ
diff --git a/Textures/Runway/pa_L.dds b/Textures/Runway/pa_L.dds
deleted file mode 100644
index b721802a8..000000000
Binary files a/Textures/Runway/pa_L.dds and /dev/null differ
diff --git a/Textures/Runway/pa_L.png b/Textures/Runway/pa_L.png
deleted file mode 100644
index e8edaf621..000000000
Binary files a/Textures/Runway/pa_L.png and /dev/null differ
diff --git a/Textures/Runway/pa_R.dds b/Textures/Runway/pa_R.dds
deleted file mode 100644
index 7ae9bc69c..000000000
Binary files a/Textures/Runway/pa_R.dds and /dev/null differ
diff --git a/Textures/Runway/pa_R.png b/Textures/Runway/pa_R.png
deleted file mode 100644
index 9a806498e..000000000
Binary files a/Textures/Runway/pa_R.png and /dev/null differ
diff --git a/Textures/Runway/pa_aim.dds b/Textures/Runway/pa_aim.dds
deleted file mode 100644
index 3f86f2498..000000000
Binary files a/Textures/Runway/pa_aim.dds and /dev/null differ
diff --git a/Textures/Runway/pa_aim.png b/Textures/Runway/pa_aim.png
deleted file mode 100644
index 4362c4a6b..000000000
Binary files a/Textures/Runway/pa_aim.png and /dev/null differ
diff --git a/Textures/Runway/pa_aim_uk.png b/Textures/Runway/pa_aim_uk.png
deleted file mode 100644
index 0a9193944..000000000
Binary files a/Textures/Runway/pa_aim_uk.png and /dev/null differ
diff --git a/Textures/Runway/pa_centerline.dds b/Textures/Runway/pa_centerline.dds
deleted file mode 100644
index f9ac9aa87..000000000
Binary files a/Textures/Runway/pa_centerline.dds and /dev/null differ
diff --git a/Textures/Runway/pa_centerline.png b/Textures/Runway/pa_centerline.png
deleted file mode 100644
index 449fef277..000000000
Binary files a/Textures/Runway/pa_centerline.png and /dev/null differ
diff --git a/Textures/Runway/pa_dspl_arrows.dds b/Textures/Runway/pa_dspl_arrows.dds
deleted file mode 100644
index 7c9756a6b..000000000
Binary files a/Textures/Runway/pa_dspl_arrows.dds and /dev/null differ
diff --git a/Textures/Runway/pa_dspl_arrows.png b/Textures/Runway/pa_dspl_arrows.png
deleted file mode 100644
index eff9ca7aa..000000000
Binary files a/Textures/Runway/pa_dspl_arrows.png and /dev/null differ
diff --git a/Textures/Runway/pa_dspl_thresh.dds b/Textures/Runway/pa_dspl_thresh.dds
deleted file mode 100644
index 5fd5f5ba2..000000000
Binary files a/Textures/Runway/pa_dspl_thresh.dds and /dev/null differ
diff --git a/Textures/Runway/pa_dspl_thresh.png b/Textures/Runway/pa_dspl_thresh.png
deleted file mode 100644
index 23d2d355f..000000000
Binary files a/Textures/Runway/pa_dspl_thresh.png and /dev/null differ
diff --git a/Textures/Runway/pa_helipad.png b/Textures/Runway/pa_helipad.png
deleted file mode 100644
index df649f46f..000000000
Binary files a/Textures/Runway/pa_helipad.png and /dev/null differ
diff --git a/Textures/Runway/pa_rest.dds b/Textures/Runway/pa_rest.dds
deleted file mode 100644
index f9ac9aa87..000000000
Binary files a/Textures/Runway/pa_rest.dds and /dev/null differ
diff --git a/Textures/Runway/pa_rest.png b/Textures/Runway/pa_rest.png
deleted file mode 100644
index 167994b6d..000000000
Binary files a/Textures/Runway/pa_rest.png and /dev/null differ
diff --git a/Textures/Runway/pa_stopway.dds b/Textures/Runway/pa_stopway.dds
deleted file mode 100644
index a134da51c..000000000
Binary files a/Textures/Runway/pa_stopway.dds and /dev/null differ
diff --git a/Textures/Runway/pa_stopway.png b/Textures/Runway/pa_stopway.png
deleted file mode 100644
index 286f21051..000000000
Binary files a/Textures/Runway/pa_stopway.png and /dev/null differ
diff --git a/Textures/Runway/pa_taxiway.dds b/Textures/Runway/pa_taxiway.dds
deleted file mode 100644
index 09ca3be55..000000000
Binary files a/Textures/Runway/pa_taxiway.dds and /dev/null differ
diff --git a/Textures/Runway/pa_threshold.dds b/Textures/Runway/pa_threshold.dds
deleted file mode 100644
index 68303ba98..000000000
Binary files a/Textures/Runway/pa_threshold.dds and /dev/null differ
diff --git a/Textures/Runway/pa_threshold.png b/Textures/Runway/pa_threshold.png
deleted file mode 100644
index 26b48d31c..000000000
Binary files a/Textures/Runway/pa_threshold.png and /dev/null differ
diff --git a/Textures/Runway/pa_tiedown.dds b/Textures/Runway/pa_tiedown.dds
deleted file mode 100644
index dbde730fe..000000000
Binary files a/Textures/Runway/pa_tiedown.dds and /dev/null differ
diff --git a/Textures/Runway/pa_tiedown.png b/Textures/Runway/pa_tiedown.png
deleted file mode 100644
index ddf316042..000000000
Binary files a/Textures/Runway/pa_tiedown.png and /dev/null differ
diff --git a/Textures/Runway/pa_tz_one_a.dds b/Textures/Runway/pa_tz_one_a.dds
deleted file mode 100644
index f582373c5..000000000
Binary files a/Textures/Runway/pa_tz_one_a.dds and /dev/null differ
diff --git a/Textures/Runway/pa_tz_one_a.png b/Textures/Runway/pa_tz_one_a.png
deleted file mode 100644
index b94e9e5ec..000000000
Binary files a/Textures/Runway/pa_tz_one_a.png and /dev/null differ
diff --git a/Textures/Runway/pa_tz_one_b.dds b/Textures/Runway/pa_tz_one_b.dds
deleted file mode 100644
index bda826e9b..000000000
Binary files a/Textures/Runway/pa_tz_one_b.dds and /dev/null differ
diff --git a/Textures/Runway/pa_tz_one_b.png b/Textures/Runway/pa_tz_one_b.png
deleted file mode 100644
index 02d60f559..000000000
Binary files a/Textures/Runway/pa_tz_one_b.png and /dev/null differ
diff --git a/Textures/Runway/pa_tz_three.dds b/Textures/Runway/pa_tz_three.dds
deleted file mode 100644
index ae3f07aed..000000000
Binary files a/Textures/Runway/pa_tz_three.dds and /dev/null differ
diff --git a/Textures/Runway/pa_tz_three.png b/Textures/Runway/pa_tz_three.png
deleted file mode 100644
index 05365efe9..000000000
Binary files a/Textures/Runway/pa_tz_three.png and /dev/null differ
diff --git a/Textures/Runway/pa_tz_two_a.dds b/Textures/Runway/pa_tz_two_a.dds
deleted file mode 100644
index 44aa42a45..000000000
Binary files a/Textures/Runway/pa_tz_two_a.dds and /dev/null differ
diff --git a/Textures/Runway/pa_tz_two_a.png b/Textures/Runway/pa_tz_two_a.png
deleted file mode 100644
index 278b10620..000000000
Binary files a/Textures/Runway/pa_tz_two_a.png and /dev/null differ
diff --git a/Textures/Runway/pa_tz_two_b.dds b/Textures/Runway/pa_tz_two_b.dds
deleted file mode 100644
index 59316fcf5..000000000
Binary files a/Textures/Runway/pa_tz_two_b.dds and /dev/null differ
diff --git a/Textures/Runway/pa_tz_two_b.png b/Textures/Runway/pa_tz_two_b.png
deleted file mode 100644
index f28276162..000000000
Binary files a/Textures/Runway/pa_tz_two_b.png and /dev/null differ
diff --git a/Textures/Runway/pc_0l.dds b/Textures/Runway/pc_0l.dds
deleted file mode 100644
index 6f786c631..000000000
Binary files a/Textures/Runway/pc_0l.dds and /dev/null differ
diff --git a/Textures/Runway/pc_0l.png b/Textures/Runway/pc_0l.png
deleted file mode 100644
index 8276be07d..000000000
Binary files a/Textures/Runway/pc_0l.png and /dev/null differ
diff --git a/Textures/Runway/pc_0r.dds b/Textures/Runway/pc_0r.dds
deleted file mode 100644
index 6a7f8665a..000000000
Binary files a/Textures/Runway/pc_0r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_0r.png b/Textures/Runway/pc_0r.png
deleted file mode 100644
index 5dfbdc880..000000000
Binary files a/Textures/Runway/pc_0r.png and /dev/null differ
diff --git a/Textures/Runway/pc_11.dds b/Textures/Runway/pc_11.dds
deleted file mode 100644
index 46559d285..000000000
Binary files a/Textures/Runway/pc_11.dds and /dev/null differ
diff --git a/Textures/Runway/pc_11.png b/Textures/Runway/pc_11.png
deleted file mode 100644
index 9b4c521e3..000000000
Binary files a/Textures/Runway/pc_11.png and /dev/null differ
diff --git a/Textures/Runway/pc_1c.dds b/Textures/Runway/pc_1c.dds
deleted file mode 100644
index aa3b880af..000000000
Binary files a/Textures/Runway/pc_1c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_1c.png b/Textures/Runway/pc_1c.png
deleted file mode 100644
index 2035b157b..000000000
Binary files a/Textures/Runway/pc_1c.png and /dev/null differ
diff --git a/Textures/Runway/pc_1l.dds b/Textures/Runway/pc_1l.dds
deleted file mode 100644
index 767f5fe53..000000000
Binary files a/Textures/Runway/pc_1l.dds and /dev/null differ
diff --git a/Textures/Runway/pc_1l.png b/Textures/Runway/pc_1l.png
deleted file mode 100644
index 6bc5f49bd..000000000
Binary files a/Textures/Runway/pc_1l.png and /dev/null differ
diff --git a/Textures/Runway/pc_1r.dds b/Textures/Runway/pc_1r.dds
deleted file mode 100644
index fe66e7f96..000000000
Binary files a/Textures/Runway/pc_1r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_1r.png b/Textures/Runway/pc_1r.png
deleted file mode 100644
index 2bfef9132..000000000
Binary files a/Textures/Runway/pc_1r.png and /dev/null differ
diff --git a/Textures/Runway/pc_2c.dds b/Textures/Runway/pc_2c.dds
deleted file mode 100644
index 90475b84e..000000000
Binary files a/Textures/Runway/pc_2c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_2c.png b/Textures/Runway/pc_2c.png
deleted file mode 100644
index 218805475..000000000
Binary files a/Textures/Runway/pc_2c.png and /dev/null differ
diff --git a/Textures/Runway/pc_2l.dds b/Textures/Runway/pc_2l.dds
deleted file mode 100644
index 41a127fc4..000000000
Binary files a/Textures/Runway/pc_2l.dds and /dev/null differ
diff --git a/Textures/Runway/pc_2l.png b/Textures/Runway/pc_2l.png
deleted file mode 100644
index 5c1c2f9c0..000000000
Binary files a/Textures/Runway/pc_2l.png and /dev/null differ
diff --git a/Textures/Runway/pc_2r.dds b/Textures/Runway/pc_2r.dds
deleted file mode 100644
index 45a7aef19..000000000
Binary files a/Textures/Runway/pc_2r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_2r.png b/Textures/Runway/pc_2r.png
deleted file mode 100644
index c3ee3c638..000000000
Binary files a/Textures/Runway/pc_2r.png and /dev/null differ
diff --git a/Textures/Runway/pc_3c.dds b/Textures/Runway/pc_3c.dds
deleted file mode 100644
index 115ff6fe6..000000000
Binary files a/Textures/Runway/pc_3c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_3c.png b/Textures/Runway/pc_3c.png
deleted file mode 100644
index bdb278e9b..000000000
Binary files a/Textures/Runway/pc_3c.png and /dev/null differ
diff --git a/Textures/Runway/pc_3l.dds b/Textures/Runway/pc_3l.dds
deleted file mode 100644
index 0015e5dc2..000000000
Binary files a/Textures/Runway/pc_3l.dds and /dev/null differ
diff --git a/Textures/Runway/pc_3l.png b/Textures/Runway/pc_3l.png
deleted file mode 100644
index 8080751ad..000000000
Binary files a/Textures/Runway/pc_3l.png and /dev/null differ
diff --git a/Textures/Runway/pc_3r.dds b/Textures/Runway/pc_3r.dds
deleted file mode 100644
index 16e70cdbd..000000000
Binary files a/Textures/Runway/pc_3r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_3r.png b/Textures/Runway/pc_3r.png
deleted file mode 100644
index 5274ecb46..000000000
Binary files a/Textures/Runway/pc_3r.png and /dev/null differ
diff --git a/Textures/Runway/pc_4c.dds b/Textures/Runway/pc_4c.dds
deleted file mode 100644
index 148fdcf13..000000000
Binary files a/Textures/Runway/pc_4c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_4c.png b/Textures/Runway/pc_4c.png
deleted file mode 100644
index e445712f4..000000000
Binary files a/Textures/Runway/pc_4c.png and /dev/null differ
diff --git a/Textures/Runway/pc_4r.dds b/Textures/Runway/pc_4r.dds
deleted file mode 100644
index a2bc2a31c..000000000
Binary files a/Textures/Runway/pc_4r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_4r.png b/Textures/Runway/pc_4r.png
deleted file mode 100644
index 287772c65..000000000
Binary files a/Textures/Runway/pc_4r.png and /dev/null differ
diff --git a/Textures/Runway/pc_5c.dds b/Textures/Runway/pc_5c.dds
deleted file mode 100644
index 871040378..000000000
Binary files a/Textures/Runway/pc_5c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_5c.png b/Textures/Runway/pc_5c.png
deleted file mode 100644
index 2fdb5433a..000000000
Binary files a/Textures/Runway/pc_5c.png and /dev/null differ
diff --git a/Textures/Runway/pc_5r.dds b/Textures/Runway/pc_5r.dds
deleted file mode 100644
index f03d89c93..000000000
Binary files a/Textures/Runway/pc_5r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_5r.png b/Textures/Runway/pc_5r.png
deleted file mode 100644
index 3d4b22749..000000000
Binary files a/Textures/Runway/pc_5r.png and /dev/null differ
diff --git a/Textures/Runway/pc_6c.dds b/Textures/Runway/pc_6c.dds
deleted file mode 100644
index 77df4fedc..000000000
Binary files a/Textures/Runway/pc_6c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_6c.png b/Textures/Runway/pc_6c.png
deleted file mode 100644
index 71953cc7d..000000000
Binary files a/Textures/Runway/pc_6c.png and /dev/null differ
diff --git a/Textures/Runway/pc_6r.dds b/Textures/Runway/pc_6r.dds
deleted file mode 100644
index 35662bbd3..000000000
Binary files a/Textures/Runway/pc_6r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_6r.png b/Textures/Runway/pc_6r.png
deleted file mode 100644
index b6a54cc34..000000000
Binary files a/Textures/Runway/pc_6r.png and /dev/null differ
diff --git a/Textures/Runway/pc_7c.dds b/Textures/Runway/pc_7c.dds
deleted file mode 100644
index 710003f8b..000000000
Binary files a/Textures/Runway/pc_7c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_7c.png b/Textures/Runway/pc_7c.png
deleted file mode 100644
index e51ebd2ab..000000000
Binary files a/Textures/Runway/pc_7c.png and /dev/null differ
diff --git a/Textures/Runway/pc_7r.dds b/Textures/Runway/pc_7r.dds
deleted file mode 100644
index a2ac61400..000000000
Binary files a/Textures/Runway/pc_7r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_7r.png b/Textures/Runway/pc_7r.png
deleted file mode 100644
index f11bf1106..000000000
Binary files a/Textures/Runway/pc_7r.png and /dev/null differ
diff --git a/Textures/Runway/pc_8c.dds b/Textures/Runway/pc_8c.dds
deleted file mode 100644
index 6eb799866..000000000
Binary files a/Textures/Runway/pc_8c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_8c.png b/Textures/Runway/pc_8c.png
deleted file mode 100644
index 6a2df9556..000000000
Binary files a/Textures/Runway/pc_8c.png and /dev/null differ
diff --git a/Textures/Runway/pc_8r.dds b/Textures/Runway/pc_8r.dds
deleted file mode 100644
index 241888bc9..000000000
Binary files a/Textures/Runway/pc_8r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_8r.png b/Textures/Runway/pc_8r.png
deleted file mode 100644
index 9061cf2b1..000000000
Binary files a/Textures/Runway/pc_8r.png and /dev/null differ
diff --git a/Textures/Runway/pc_9c.dds b/Textures/Runway/pc_9c.dds
deleted file mode 100644
index d69dde99b..000000000
Binary files a/Textures/Runway/pc_9c.dds and /dev/null differ
diff --git a/Textures/Runway/pc_9c.png b/Textures/Runway/pc_9c.png
deleted file mode 100644
index c04ba59f5..000000000
Binary files a/Textures/Runway/pc_9c.png and /dev/null differ
diff --git a/Textures/Runway/pc_9r.dds b/Textures/Runway/pc_9r.dds
deleted file mode 100644
index 0018e7328..000000000
Binary files a/Textures/Runway/pc_9r.dds and /dev/null differ
diff --git a/Textures/Runway/pc_9r.png b/Textures/Runway/pc_9r.png
deleted file mode 100644
index d3ea1d5b8..000000000
Binary files a/Textures/Runway/pc_9r.png and /dev/null differ
diff --git a/Textures/Runway/pc_C.dds b/Textures/Runway/pc_C.dds
deleted file mode 100644
index 9a8f2ab85..000000000
Binary files a/Textures/Runway/pc_C.dds and /dev/null differ
diff --git a/Textures/Runway/pc_C.png b/Textures/Runway/pc_C.png
deleted file mode 100644
index 5182ddf63..000000000
Binary files a/Textures/Runway/pc_C.png and /dev/null differ
diff --git a/Textures/Runway/pc_L.dds b/Textures/Runway/pc_L.dds
deleted file mode 100644
index 677c352ef..000000000
Binary files a/Textures/Runway/pc_L.dds and /dev/null differ
diff --git a/Textures/Runway/pc_L.png b/Textures/Runway/pc_L.png
deleted file mode 100644
index 029df8924..000000000
Binary files a/Textures/Runway/pc_L.png and /dev/null differ
diff --git a/Textures/Runway/pc_R.dds b/Textures/Runway/pc_R.dds
deleted file mode 100644
index 636115322..000000000
Binary files a/Textures/Runway/pc_R.dds and /dev/null differ
diff --git a/Textures/Runway/pc_R.png b/Textures/Runway/pc_R.png
deleted file mode 100644
index 31f279340..000000000
Binary files a/Textures/Runway/pc_R.png and /dev/null differ
diff --git a/Textures/Runway/pc_aim.dds b/Textures/Runway/pc_aim.dds
deleted file mode 100644
index d398ee187..000000000
Binary files a/Textures/Runway/pc_aim.dds and /dev/null differ
diff --git a/Textures/Runway/pc_aim.png b/Textures/Runway/pc_aim.png
deleted file mode 100644
index 62472da20..000000000
Binary files a/Textures/Runway/pc_aim.png and /dev/null differ
diff --git a/Textures/Runway/pc_aim_uk.dds b/Textures/Runway/pc_aim_uk.dds
deleted file mode 100644
index b6c03c8e3..000000000
Binary files a/Textures/Runway/pc_aim_uk.dds and /dev/null differ
diff --git a/Textures/Runway/pc_aim_uk.png b/Textures/Runway/pc_aim_uk.png
deleted file mode 100644
index d80a9f569..000000000
Binary files a/Textures/Runway/pc_aim_uk.png and /dev/null differ
diff --git a/Textures/Runway/pc_centerline.dds b/Textures/Runway/pc_centerline.dds
deleted file mode 100644
index 028f3aacd..000000000
Binary files a/Textures/Runway/pc_centerline.dds and /dev/null differ
diff --git a/Textures/Runway/pc_centerline.png b/Textures/Runway/pc_centerline.png
deleted file mode 100644
index 9fde0ec3d..000000000
Binary files a/Textures/Runway/pc_centerline.png and /dev/null differ
diff --git a/Textures/Runway/pc_dspl_arrows.dds b/Textures/Runway/pc_dspl_arrows.dds
deleted file mode 100644
index 4c45fb8ae..000000000
Binary files a/Textures/Runway/pc_dspl_arrows.dds and /dev/null differ
diff --git a/Textures/Runway/pc_dspl_arrows.png b/Textures/Runway/pc_dspl_arrows.png
deleted file mode 100644
index 2c9bab7fc..000000000
Binary files a/Textures/Runway/pc_dspl_arrows.png and /dev/null differ
diff --git a/Textures/Runway/pc_dspl_thresh.dds b/Textures/Runway/pc_dspl_thresh.dds
deleted file mode 100644
index 5e141ca9a..000000000
Binary files a/Textures/Runway/pc_dspl_thresh.dds and /dev/null differ
diff --git a/Textures/Runway/pc_dspl_thresh.png b/Textures/Runway/pc_dspl_thresh.png
deleted file mode 100644
index 15a4e6c08..000000000
Binary files a/Textures/Runway/pc_dspl_thresh.png and /dev/null differ
diff --git a/Textures/Runway/pc_helipad.png b/Textures/Runway/pc_helipad.png
deleted file mode 100644
index 2578cba5d..000000000
Binary files a/Textures/Runway/pc_helipad.png and /dev/null differ
diff --git a/Textures/Runway/pc_rest.dds b/Textures/Runway/pc_rest.dds
deleted file mode 100644
index 028f3aacd..000000000
Binary files a/Textures/Runway/pc_rest.dds and /dev/null differ
diff --git a/Textures/Runway/pc_rest.png b/Textures/Runway/pc_rest.png
deleted file mode 100644
index a79b66e02..000000000
Binary files a/Textures/Runway/pc_rest.png and /dev/null differ
diff --git a/Textures/Runway/pc_stopway.dds b/Textures/Runway/pc_stopway.dds
deleted file mode 100644
index 95fe4d8a5..000000000
Binary files a/Textures/Runway/pc_stopway.dds and /dev/null differ
diff --git a/Textures/Runway/pc_stopway.png b/Textures/Runway/pc_stopway.png
deleted file mode 100644
index b7f5f32c4..000000000
Binary files a/Textures/Runway/pc_stopway.png and /dev/null differ
diff --git a/Textures/Runway/pc_taxiway.dds b/Textures/Runway/pc_taxiway.dds
deleted file mode 100644
index bb298cc37..000000000
Binary files a/Textures/Runway/pc_taxiway.dds and /dev/null differ
diff --git a/Textures/Runway/pc_threshold.dds b/Textures/Runway/pc_threshold.dds
deleted file mode 100644
index 45d4574f8..000000000
Binary files a/Textures/Runway/pc_threshold.dds and /dev/null differ
diff --git a/Textures/Runway/pc_threshold.png b/Textures/Runway/pc_threshold.png
deleted file mode 100644
index 58abd1021..000000000
Binary files a/Textures/Runway/pc_threshold.png and /dev/null differ
diff --git a/Textures/Runway/pc_tiedown.dds b/Textures/Runway/pc_tiedown.dds
deleted file mode 100644
index 86db777c9..000000000
Binary files a/Textures/Runway/pc_tiedown.dds and /dev/null differ
diff --git a/Textures/Runway/pc_tiedown.png b/Textures/Runway/pc_tiedown.png
deleted file mode 100644
index 54651c01e..000000000
Binary files a/Textures/Runway/pc_tiedown.png and /dev/null differ
diff --git a/Textures/Runway/pc_tz_one_a.dds b/Textures/Runway/pc_tz_one_a.dds
deleted file mode 100644
index 32e20f8bd..000000000
Binary files a/Textures/Runway/pc_tz_one_a.dds and /dev/null differ
diff --git a/Textures/Runway/pc_tz_one_a.png b/Textures/Runway/pc_tz_one_a.png
deleted file mode 100644
index f4e170a08..000000000
Binary files a/Textures/Runway/pc_tz_one_a.png and /dev/null differ
diff --git a/Textures/Runway/pc_tz_one_b.dds b/Textures/Runway/pc_tz_one_b.dds
deleted file mode 100644
index 85ec29b03..000000000
Binary files a/Textures/Runway/pc_tz_one_b.dds and /dev/null differ
diff --git a/Textures/Runway/pc_tz_one_b.png b/Textures/Runway/pc_tz_one_b.png
deleted file mode 100644
index 7304169e6..000000000
Binary files a/Textures/Runway/pc_tz_one_b.png and /dev/null differ
diff --git a/Textures/Runway/pc_tz_three.dds b/Textures/Runway/pc_tz_three.dds
deleted file mode 100644
index 8db763af6..000000000
Binary files a/Textures/Runway/pc_tz_three.dds and /dev/null differ
diff --git a/Textures/Runway/pc_tz_three.png b/Textures/Runway/pc_tz_three.png
deleted file mode 100644
index aa0c04a32..000000000
Binary files a/Textures/Runway/pc_tz_three.png and /dev/null differ
diff --git a/Textures/Runway/pc_tz_two_a.dds b/Textures/Runway/pc_tz_two_a.dds
deleted file mode 100644
index 82828b615..000000000
Binary files a/Textures/Runway/pc_tz_two_a.dds and /dev/null differ
diff --git a/Textures/Runway/pc_tz_two_a.png b/Textures/Runway/pc_tz_two_a.png
deleted file mode 100644
index bf39fd42c..000000000
Binary files a/Textures/Runway/pc_tz_two_a.png and /dev/null differ
diff --git a/Textures/Runway/pc_tz_two_b.dds b/Textures/Runway/pc_tz_two_b.dds
deleted file mode 100644
index ad0d21e63..000000000
Binary files a/Textures/Runway/pc_tz_two_b.dds and /dev/null differ
diff --git a/Textures/Runway/pc_tz_two_b.png b/Textures/Runway/pc_tz_two_b.png
deleted file mode 100644
index 0aa0319bb..000000000
Binary files a/Textures/Runway/pc_tz_two_b.png and /dev/null differ
diff --git a/Textures/Signs/black.png b/Textures/Signs/black.png
deleted file mode 100644
index 39682bf99..000000000
Binary files a/Textures/Signs/black.png and /dev/null differ
diff --git a/Textures/Signs/framed.png b/Textures/Signs/framed.png
deleted file mode 100644
index b9c2368c6..000000000
Binary files a/Textures/Signs/framed.png and /dev/null differ
diff --git a/Textures/Signs/red.png b/Textures/Signs/red.png
deleted file mode 100644
index 5e5a79f0e..000000000
Binary files a/Textures/Signs/red.png and /dev/null differ
diff --git a/Textures/Signs/special.png b/Textures/Signs/special.png
deleted file mode 100644
index b5560b24e..000000000
Binary files a/Textures/Signs/special.png and /dev/null differ
diff --git a/Textures/Signs/yellow.png b/Textures/Signs/yellow.png
deleted file mode 100644
index ce6510bf0..000000000
Binary files a/Textures/Signs/yellow.png and /dev/null differ
diff --git a/Textures/Terrain.winter/Town1.png b/Textures/Terrain.winter/Town1.png
deleted file mode 100644
index 9c7cad6fc..000000000
Binary files a/Textures/Terrain.winter/Town1.png and /dev/null differ
diff --git a/Textures/Terrain.winter/asphalt.png b/Textures/Terrain.winter/asphalt.png
deleted file mode 100644
index c78feb903..000000000
Binary files a/Textures/Terrain.winter/asphalt.png and /dev/null differ
diff --git a/Textures/Terrain.winter/builtup.png b/Textures/Terrain.winter/builtup.png
deleted file mode 100644
index db7d359d2..000000000
Binary files a/Textures/Terrain.winter/builtup.png and /dev/null differ
diff --git a/Textures/Terrain.winter/deciduous2.png b/Textures/Terrain.winter/deciduous2.png
deleted file mode 100644
index e1b1bf8e8..000000000
Binary files a/Textures/Terrain.winter/deciduous2.png and /dev/null differ
diff --git a/Textures/Terrain.winter/deciduous4.png b/Textures/Terrain.winter/deciduous4.png
deleted file mode 100644
index c8727c9eb..000000000
Binary files a/Textures/Terrain.winter/deciduous4.png and /dev/null differ
diff --git a/Textures/Terrain.winter/desert.png b/Textures/Terrain.winter/desert.png
deleted file mode 100644
index 11145e0c2..000000000
Binary files a/Textures/Terrain.winter/desert.png and /dev/null differ
diff --git a/Textures/Terrain.winter/desert1.png b/Textures/Terrain.winter/desert1.png
deleted file mode 100644
index f1b479b46..000000000
Binary files a/Textures/Terrain.winter/desert1.png and /dev/null differ
diff --git a/Textures/Terrain.winter/drycrop.png b/Textures/Terrain.winter/drycrop.png
deleted file mode 100644
index 83c282339..000000000
Binary files a/Textures/Terrain.winter/drycrop.png and /dev/null differ
diff --git a/Textures/Terrain.winter/forest1a.png b/Textures/Terrain.winter/forest1a.png
deleted file mode 100644
index d3dfd0cb3..000000000
Binary files a/Textures/Terrain.winter/forest1a.png and /dev/null differ
diff --git a/Textures/Terrain.winter/forest1b.png b/Textures/Terrain.winter/forest1b.png
deleted file mode 100644
index 9e449e187..000000000
Binary files a/Textures/Terrain.winter/forest1b.png and /dev/null differ
diff --git a/Textures/Terrain.winter/golfcourse1.png b/Textures/Terrain.winter/golfcourse1.png
deleted file mode 100644
index 6535caf21..000000000
Binary files a/Textures/Terrain.winter/golfcourse1.png and /dev/null differ
diff --git a/Textures/Terrain.winter/herbtundra2.png b/Textures/Terrain.winter/herbtundra2.png
deleted file mode 100644
index c0c1f66a3..000000000
Binary files a/Textures/Terrain.winter/herbtundra2.png and /dev/null differ
diff --git a/Textures/Terrain.winter/herbtundra3.png b/Textures/Terrain.winter/herbtundra3.png
deleted file mode 100644
index e8612a76d..000000000
Binary files a/Textures/Terrain.winter/herbtundra3.png and /dev/null differ
diff --git a/Textures/Terrain.winter/irrcrop.png b/Textures/Terrain.winter/irrcrop.png
deleted file mode 100644
index 17255e35b..000000000
Binary files a/Textures/Terrain.winter/irrcrop.png and /dev/null differ
diff --git a/Textures/Terrain.winter/irrcrop1.png b/Textures/Terrain.winter/irrcrop1.png
deleted file mode 100644
index 62d463c32..000000000
Binary files a/Textures/Terrain.winter/irrcrop1.png and /dev/null differ
diff --git a/Textures/Terrain.winter/irrcrop3.png b/Textures/Terrain.winter/irrcrop3.png
deleted file mode 100644
index 8e56cf46f..000000000
Binary files a/Textures/Terrain.winter/irrcrop3.png and /dev/null differ
diff --git a/Textures/Terrain.winter/marsh2.png b/Textures/Terrain.winter/marsh2.png
deleted file mode 100644
index 484ab6797..000000000
Binary files a/Textures/Terrain.winter/marsh2.png and /dev/null differ
diff --git a/Textures/Terrain.winter/marsh3.png b/Textures/Terrain.winter/marsh3.png
deleted file mode 100644
index 8450bef5b..000000000
Binary files a/Textures/Terrain.winter/marsh3.png and /dev/null differ
diff --git a/Textures/Terrain.winter/marsh4.png b/Textures/Terrain.winter/marsh4.png
deleted file mode 100644
index 78c378177..000000000
Binary files a/Textures/Terrain.winter/marsh4.png and /dev/null differ
diff --git a/Textures/Terrain.winter/mixedcrop.png b/Textures/Terrain.winter/mixedcrop.png
deleted file mode 100644
index 6e2f75678..000000000
Binary files a/Textures/Terrain.winter/mixedcrop.png and /dev/null differ
diff --git a/Textures/Terrain.winter/mixedcrop3.png b/Textures/Terrain.winter/mixedcrop3.png
deleted file mode 100644
index 002b05558..000000000
Binary files a/Textures/Terrain.winter/mixedcrop3.png and /dev/null differ
diff --git a/Textures/Terrain.winter/mixedforest2.png b/Textures/Terrain.winter/mixedforest2.png
deleted file mode 100644
index a8342631a..000000000
Binary files a/Textures/Terrain.winter/mixedforest2.png and /dev/null differ
diff --git a/Textures/Terrain.winter/packice.png b/Textures/Terrain.winter/packice.png
deleted file mode 100644
index 56ee60991..000000000
Binary files a/Textures/Terrain.winter/packice.png and /dev/null differ
diff --git a/Textures/Terrain.winter/resgrid.png b/Textures/Terrain.winter/resgrid.png
deleted file mode 100644
index ed03a4a70..000000000
Binary files a/Textures/Terrain.winter/resgrid.png and /dev/null differ
diff --git a/Textures/Terrain.winter/rocks-desert.png b/Textures/Terrain.winter/rocks-desert.png
deleted file mode 100644
index fe7afc3c4..000000000
Binary files a/Textures/Terrain.winter/rocks-desert.png and /dev/null differ
diff --git a/Textures/Terrain.winter/shrub.png b/Textures/Terrain.winter/shrub.png
deleted file mode 100644
index 9308f6f57..000000000
Binary files a/Textures/Terrain.winter/shrub.png and /dev/null differ
diff --git a/Textures/Terrain.winter/shrub3.png b/Textures/Terrain.winter/shrub3.png
deleted file mode 100644
index 67b21d5f9..000000000
Binary files a/Textures/Terrain.winter/shrub3.png and /dev/null differ
diff --git a/Textures/Terrain.winter/snow.png b/Textures/Terrain.winter/snow.png
deleted file mode 100644
index 698d0cc36..000000000
Binary files a/Textures/Terrain.winter/snow.png and /dev/null differ
diff --git a/Textures/Terrain.winter/tidal.png b/Textures/Terrain.winter/tidal.png
deleted file mode 100644
index 62d182db6..000000000
Binary files a/Textures/Terrain.winter/tidal.png and /dev/null differ
diff --git a/Textures/Terrain.winter/tundra2.png b/Textures/Terrain.winter/tundra2.png
deleted file mode 100644
index f87c187cf..000000000
Binary files a/Textures/Terrain.winter/tundra2.png and /dev/null differ
diff --git a/Textures/Terrain.winter/unknown.png b/Textures/Terrain.winter/unknown.png
deleted file mode 100644
index ebd887884..000000000
Binary files a/Textures/Terrain.winter/unknown.png and /dev/null differ
diff --git a/Textures/Terrain.winter/water.png b/Textures/Terrain.winter/water.png
deleted file mode 100644
index 5e51b6bbd..000000000
Binary files a/Textures/Terrain.winter/water.png and /dev/null differ
diff --git a/Textures/Terrain/18th_century_city.png b/Textures/Terrain/18th_century_city.png
deleted file mode 100644
index 4db4f6a48..000000000
Binary files a/Textures/Terrain/18th_century_city.png and /dev/null differ
diff --git a/Textures/Terrain/Town.dds b/Textures/Terrain/Town.dds
deleted file mode 100644
index eb95988cd..000000000
Binary files a/Textures/Terrain/Town.dds and /dev/null differ
diff --git a/Textures/Terrain/Town1.dds b/Textures/Terrain/Town1.dds
deleted file mode 100644
index f2764d5ef..000000000
Binary files a/Textures/Terrain/Town1.dds and /dev/null differ
diff --git a/Textures/Terrain/Town1.png b/Textures/Terrain/Town1.png
deleted file mode 100644
index d6a507b66..000000000
Binary files a/Textures/Terrain/Town1.png and /dev/null differ
diff --git a/Textures/Terrain/Town2.dds b/Textures/Terrain/Town2.dds
deleted file mode 100644
index f6048050e..000000000
Binary files a/Textures/Terrain/Town2.dds and /dev/null differ
diff --git a/Textures/Terrain/Town3.dds b/Textures/Terrain/Town3.dds
deleted file mode 100644
index a56b220d1..000000000
Binary files a/Textures/Terrain/Town3.dds and /dev/null differ
diff --git a/Textures/Terrain/airport.dds b/Textures/Terrain/airport.dds
deleted file mode 100644
index b8302b735..000000000
Binary files a/Textures/Terrain/airport.dds and /dev/null differ
diff --git a/Textures/Terrain/airport.png b/Textures/Terrain/airport.png
deleted file mode 100644
index b5a34ad5e..000000000
Binary files a/Textures/Terrain/airport.png and /dev/null differ
diff --git a/Textures/Terrain/asphalt.dds b/Textures/Terrain/asphalt.dds
deleted file mode 100644
index 43bfb6acd..000000000
Binary files a/Textures/Terrain/asphalt.dds and /dev/null differ
diff --git a/Textures/Terrain/builtup.dds b/Textures/Terrain/builtup.dds
deleted file mode 100644
index 7a4238eb1..000000000
Binary files a/Textures/Terrain/builtup.dds and /dev/null differ
diff --git a/Textures/Terrain/builtup.png b/Textures/Terrain/builtup.png
deleted file mode 100644
index ddd472e5c..000000000
Binary files a/Textures/Terrain/builtup.png and /dev/null differ
diff --git a/Textures/Terrain/city1.dds b/Textures/Terrain/city1.dds
deleted file mode 100644
index 8c36c179f..000000000
Binary files a/Textures/Terrain/city1.dds and /dev/null differ
diff --git a/Textures/Terrain/city1.png b/Textures/Terrain/city1.png
deleted file mode 100644
index d564851a4..000000000
Binary files a/Textures/Terrain/city1.png and /dev/null differ
diff --git a/Textures/Terrain/city2.dds b/Textures/Terrain/city2.dds
deleted file mode 100644
index 13429b38a..000000000
Binary files a/Textures/Terrain/city2.dds and /dev/null differ
diff --git a/Textures/Terrain/city2.png b/Textures/Terrain/city2.png
deleted file mode 100644
index a01af5203..000000000
Binary files a/Textures/Terrain/city2.png and /dev/null differ
diff --git a/Textures/Terrain/city3.dds b/Textures/Terrain/city3.dds
deleted file mode 100644
index 4e1358265..000000000
Binary files a/Textures/Terrain/city3.dds and /dev/null differ
diff --git a/Textures/Terrain/city3.png b/Textures/Terrain/city3.png
deleted file mode 100644
index 93cac85c6..000000000
Binary files a/Textures/Terrain/city3.png and /dev/null differ
diff --git a/Textures/Terrain/crop-colors.dds b/Textures/Terrain/crop-colors.dds
deleted file mode 100644
index 4c6ee61cd..000000000
Binary files a/Textures/Terrain/crop-colors.dds and /dev/null differ
diff --git a/Textures/Terrain/cropgrass-colors.dds b/Textures/Terrain/cropgrass-colors.dds
deleted file mode 100644
index 4c6ee61cd..000000000
Binary files a/Textures/Terrain/cropgrass-colors.dds and /dev/null differ
diff --git a/Textures/Terrain/cropgrass-hires.png b/Textures/Terrain/cropgrass-hires.png
deleted file mode 100644
index b79f3cad6..000000000
Binary files a/Textures/Terrain/cropgrass-hires.png and /dev/null differ
diff --git a/Textures/Terrain/cropgrass1.png b/Textures/Terrain/cropgrass1.png
deleted file mode 100644
index 0d7108d36..000000000
Binary files a/Textures/Terrain/cropgrass1.png and /dev/null differ
diff --git a/Textures/Terrain/cropgrass2.png b/Textures/Terrain/cropgrass2.png
deleted file mode 100644
index a56f42665..000000000
Binary files a/Textures/Terrain/cropgrass2.png and /dev/null differ
diff --git a/Textures/Terrain/cropgrass3.dds b/Textures/Terrain/cropgrass3.dds
deleted file mode 100644
index 2e04a10b0..000000000
Binary files a/Textures/Terrain/cropgrass3.dds and /dev/null differ
diff --git a/Textures/Terrain/cropgrass3.png b/Textures/Terrain/cropgrass3.png
deleted file mode 100644
index ccae851e7..000000000
Binary files a/Textures/Terrain/cropgrass3.png and /dev/null differ
diff --git a/Textures/Terrain/cropwood.dds b/Textures/Terrain/cropwood.dds
deleted file mode 100644
index 3a62e67e4..000000000
Binary files a/Textures/Terrain/cropwood.dds and /dev/null differ
diff --git a/Textures/Terrain/dec_evergreen-hires.png b/Textures/Terrain/dec_evergreen-hires.png
deleted file mode 100644
index 7727b53ed..000000000
Binary files a/Textures/Terrain/dec_evergreen-hires.png and /dev/null differ
diff --git a/Textures/Terrain/dec_evergreen.dds b/Textures/Terrain/dec_evergreen.dds
deleted file mode 100644
index 504307e60..000000000
Binary files a/Textures/Terrain/dec_evergreen.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous-hires.png b/Textures/Terrain/deciduous-hires.png
deleted file mode 100644
index 033f0d687..000000000
Binary files a/Textures/Terrain/deciduous-hires.png and /dev/null differ
diff --git a/Textures/Terrain/deciduous.dds b/Textures/Terrain/deciduous.dds
deleted file mode 100644
index ab3c6957c..000000000
Binary files a/Textures/Terrain/deciduous.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous1.dds b/Textures/Terrain/deciduous1.dds
deleted file mode 100644
index 4ecdea2b5..000000000
Binary files a/Textures/Terrain/deciduous1.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous1.png b/Textures/Terrain/deciduous1.png
deleted file mode 100644
index 2aa535286..000000000
Binary files a/Textures/Terrain/deciduous1.png and /dev/null differ
diff --git a/Textures/Terrain/deciduous1b.dds b/Textures/Terrain/deciduous1b.dds
deleted file mode 100644
index b88349c04..000000000
Binary files a/Textures/Terrain/deciduous1b.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous2.dds b/Textures/Terrain/deciduous2.dds
deleted file mode 100644
index f87f2de87..000000000
Binary files a/Textures/Terrain/deciduous2.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous2.png b/Textures/Terrain/deciduous2.png
deleted file mode 100644
index 001676a21..000000000
Binary files a/Textures/Terrain/deciduous2.png and /dev/null differ
diff --git a/Textures/Terrain/deciduous2b.dds b/Textures/Terrain/deciduous2b.dds
deleted file mode 100644
index 1e73d335d..000000000
Binary files a/Textures/Terrain/deciduous2b.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous3.dds b/Textures/Terrain/deciduous3.dds
deleted file mode 100644
index 6f0b0ca00..000000000
Binary files a/Textures/Terrain/deciduous3.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous3b.dds b/Textures/Terrain/deciduous3b.dds
deleted file mode 100644
index 85e5a2c3d..000000000
Binary files a/Textures/Terrain/deciduous3b.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous4.dds b/Textures/Terrain/deciduous4.dds
deleted file mode 100644
index 88ed6f972..000000000
Binary files a/Textures/Terrain/deciduous4.dds and /dev/null differ
diff --git a/Textures/Terrain/deciduous4.png b/Textures/Terrain/deciduous4.png
deleted file mode 100644
index bd1fbec84..000000000
Binary files a/Textures/Terrain/deciduous4.png and /dev/null differ
diff --git a/Textures/Terrain/desert.dds b/Textures/Terrain/desert.dds
deleted file mode 100644
index 4f0158357..000000000
Binary files a/Textures/Terrain/desert.dds and /dev/null differ
diff --git a/Textures/Terrain/desert1.dds b/Textures/Terrain/desert1.dds
deleted file mode 100644
index ac5bbc402..000000000
Binary files a/Textures/Terrain/desert1.dds and /dev/null differ
diff --git a/Textures/Terrain/drycrop.dds b/Textures/Terrain/drycrop.dds
deleted file mode 100644
index 6d1a348d7..000000000
Binary files a/Textures/Terrain/drycrop.dds and /dev/null differ
diff --git a/Textures/Terrain/drycrop.png b/Textures/Terrain/drycrop.png
deleted file mode 100644
index 7c0c49418..000000000
Binary files a/Textures/Terrain/drycrop.png and /dev/null differ
diff --git a/Textures/Terrain/drycrop1.dds b/Textures/Terrain/drycrop1.dds
deleted file mode 100644
index 87ac22e2a..000000000
Binary files a/Textures/Terrain/drycrop1.dds and /dev/null differ
diff --git a/Textures/Terrain/drycrop1.png b/Textures/Terrain/drycrop1.png
deleted file mode 100644
index b036e29ce..000000000
Binary files a/Textures/Terrain/drycrop1.png and /dev/null differ
diff --git a/Textures/Terrain/drycrop2.dds b/Textures/Terrain/drycrop2.dds
deleted file mode 100644
index 93b2e440f..000000000
Binary files a/Textures/Terrain/drycrop2.dds and /dev/null differ
diff --git a/Textures/Terrain/drycrop2.png b/Textures/Terrain/drycrop2.png
deleted file mode 100644
index 36b673a20..000000000
Binary files a/Textures/Terrain/drycrop2.png and /dev/null differ
diff --git a/Textures/Terrain/drycrop3.dds b/Textures/Terrain/drycrop3.dds
deleted file mode 100644
index 08982af5f..000000000
Binary files a/Textures/Terrain/drycrop3.dds and /dev/null differ
diff --git a/Textures/Terrain/drycrop3.png b/Textures/Terrain/drycrop3.png
deleted file mode 100644
index bac85807c..000000000
Binary files a/Textures/Terrain/drycrop3.png and /dev/null differ
diff --git a/Textures/Terrain/drycrop4.dds b/Textures/Terrain/drycrop4.dds
deleted file mode 100644
index dcf617fb6..000000000
Binary files a/Textures/Terrain/drycrop4.dds and /dev/null differ
diff --git a/Textures/Terrain/drycrop4.png b/Textures/Terrain/drycrop4.png
deleted file mode 100644
index 142401664..000000000
Binary files a/Textures/Terrain/drycrop4.png and /dev/null differ
diff --git a/Textures/Terrain/evergreen.dds b/Textures/Terrain/evergreen.dds
deleted file mode 100644
index 604d70cee..000000000
Binary files a/Textures/Terrain/evergreen.dds and /dev/null differ
diff --git a/Textures/Terrain/forest-colors.dds b/Textures/Terrain/forest-colors.dds
deleted file mode 100644
index f16d286f9..000000000
Binary files a/Textures/Terrain/forest-colors.dds and /dev/null differ
diff --git a/Textures/Terrain/forest1a.dds b/Textures/Terrain/forest1a.dds
deleted file mode 100644
index bef1520cf..000000000
Binary files a/Textures/Terrain/forest1a.dds and /dev/null differ
diff --git a/Textures/Terrain/forest1a.png b/Textures/Terrain/forest1a.png
deleted file mode 100644
index 8d5b4968c..000000000
Binary files a/Textures/Terrain/forest1a.png and /dev/null differ
diff --git a/Textures/Terrain/forest1b.dds b/Textures/Terrain/forest1b.dds
deleted file mode 100644
index 029a4c6e9..000000000
Binary files a/Textures/Terrain/forest1b.dds and /dev/null differ
diff --git a/Textures/Terrain/forest1b.png b/Textures/Terrain/forest1b.png
deleted file mode 100644
index 54e4672db..000000000
Binary files a/Textures/Terrain/forest1b.png and /dev/null differ
diff --git a/Textures/Terrain/forest1c.dds b/Textures/Terrain/forest1c.dds
deleted file mode 100644
index ef6c52929..000000000
Binary files a/Textures/Terrain/forest1c.dds and /dev/null differ
diff --git a/Textures/Terrain/forest1c.png b/Textures/Terrain/forest1c.png
deleted file mode 100644
index 596278711..000000000
Binary files a/Textures/Terrain/forest1c.png and /dev/null differ
diff --git a/Textures/Terrain/glacier.dds b/Textures/Terrain/glacier.dds
deleted file mode 100644
index 6379807fc..000000000
Binary files a/Textures/Terrain/glacier.dds and /dev/null differ
diff --git a/Textures/Terrain/glacier1.dds b/Textures/Terrain/glacier1.dds
deleted file mode 100644
index aa3b6db69..000000000
Binary files a/Textures/Terrain/glacier1.dds and /dev/null differ
diff --git a/Textures/Terrain/glacier1.png b/Textures/Terrain/glacier1.png
deleted file mode 100644
index 10d70f3ac..000000000
Binary files a/Textures/Terrain/glacier1.png and /dev/null differ
diff --git a/Textures/Terrain/glacier2.dds b/Textures/Terrain/glacier2.dds
deleted file mode 100644
index f7fe3a08a..000000000
Binary files a/Textures/Terrain/glacier2.dds and /dev/null differ
diff --git a/Textures/Terrain/glacier2.png b/Textures/Terrain/glacier2.png
deleted file mode 100644
index f638f89ba..000000000
Binary files a/Textures/Terrain/glacier2.png and /dev/null differ
diff --git a/Textures/Terrain/glacier3.dds b/Textures/Terrain/glacier3.dds
deleted file mode 100644
index 998cf4611..000000000
Binary files a/Textures/Terrain/glacier3.dds and /dev/null differ
diff --git a/Textures/Terrain/glacier3.png b/Textures/Terrain/glacier3.png
deleted file mode 100644
index 336c76742..000000000
Binary files a/Textures/Terrain/glacier3.png and /dev/null differ
diff --git a/Textures/Terrain/golfcourse1.png b/Textures/Terrain/golfcourse1.png
deleted file mode 100644
index 2db6af2af..000000000
Binary files a/Textures/Terrain/golfcourse1.png and /dev/null differ
diff --git a/Textures/Terrain/grass-caribbean.png b/Textures/Terrain/grass-caribbean.png
deleted file mode 100644
index 69b50203c..000000000
Binary files a/Textures/Terrain/grass-caribbean.png and /dev/null differ
diff --git a/Textures/Terrain/grass.dds b/Textures/Terrain/grass.dds
deleted file mode 100644
index 4e9d57d06..000000000
Binary files a/Textures/Terrain/grass.dds and /dev/null differ
diff --git a/Textures/Terrain/grassy.dds b/Textures/Terrain/grassy.dds
deleted file mode 100644
index bf2385f59..000000000
Binary files a/Textures/Terrain/grassy.dds and /dev/null differ
diff --git a/Textures/Terrain/gravel.dds b/Textures/Terrain/gravel.dds
deleted file mode 100644
index 9389784f2..000000000
Binary files a/Textures/Terrain/gravel.dds and /dev/null differ
diff --git a/Textures/Terrain/herbtundra.dds b/Textures/Terrain/herbtundra.dds
deleted file mode 100644
index 11ffa3f80..000000000
Binary files a/Textures/Terrain/herbtundra.dds and /dev/null differ
diff --git a/Textures/Terrain/herbtundra.png b/Textures/Terrain/herbtundra.png
deleted file mode 100644
index 95df8a9ec..000000000
Binary files a/Textures/Terrain/herbtundra.png and /dev/null differ
diff --git a/Textures/Terrain/herbtundra2.png b/Textures/Terrain/herbtundra2.png
deleted file mode 100644
index 27e1e7879..000000000
Binary files a/Textures/Terrain/herbtundra2.png and /dev/null differ
diff --git a/Textures/Terrain/herbtundra3.png b/Textures/Terrain/herbtundra3.png
deleted file mode 100644
index 9eb04a66f..000000000
Binary files a/Textures/Terrain/herbtundra3.png and /dev/null differ
diff --git a/Textures/Terrain/irrcrop-europe.png b/Textures/Terrain/irrcrop-europe.png
deleted file mode 100644
index 612da912e..000000000
Binary files a/Textures/Terrain/irrcrop-europe.png and /dev/null differ
diff --git a/Textures/Terrain/irrcrop.dds b/Textures/Terrain/irrcrop.dds
deleted file mode 100644
index d79df8522..000000000
Binary files a/Textures/Terrain/irrcrop.dds and /dev/null differ
diff --git a/Textures/Terrain/irrcrop.png b/Textures/Terrain/irrcrop.png
deleted file mode 100644
index afdfe2cdd..000000000
Binary files a/Textures/Terrain/irrcrop.png and /dev/null differ
diff --git a/Textures/Terrain/irrcrop1.png b/Textures/Terrain/irrcrop1.png
deleted file mode 100644
index 18f7ee253..000000000
Binary files a/Textures/Terrain/irrcrop1.png and /dev/null differ
diff --git a/Textures/Terrain/irrcrop2.png b/Textures/Terrain/irrcrop2.png
deleted file mode 100644
index 9b6989a1a..000000000
Binary files a/Textures/Terrain/irrcrop2.png and /dev/null differ
diff --git a/Textures/Terrain/irrcrop3.png b/Textures/Terrain/irrcrop3.png
deleted file mode 100644
index 6331b38c5..000000000
Binary files a/Textures/Terrain/irrcrop3.png and /dev/null differ
diff --git a/Textures/Terrain/lava.png b/Textures/Terrain/lava.png
deleted file mode 100644
index 9f77e2332..000000000
Binary files a/Textures/Terrain/lava.png and /dev/null differ
diff --git a/Textures/Terrain/marsh1.dds b/Textures/Terrain/marsh1.dds
deleted file mode 100644
index cea14df21..000000000
Binary files a/Textures/Terrain/marsh1.dds and /dev/null differ
diff --git a/Textures/Terrain/marsh2.png b/Textures/Terrain/marsh2.png
deleted file mode 100644
index 0bc4cfd67..000000000
Binary files a/Textures/Terrain/marsh2.png and /dev/null differ
diff --git a/Textures/Terrain/marsh2a.png b/Textures/Terrain/marsh2a.png
deleted file mode 100644
index a27858953..000000000
Binary files a/Textures/Terrain/marsh2a.png and /dev/null differ
diff --git a/Textures/Terrain/marsh3.png b/Textures/Terrain/marsh3.png
deleted file mode 100644
index fc21f06e2..000000000
Binary files a/Textures/Terrain/marsh3.png and /dev/null differ
diff --git a/Textures/Terrain/marsh3a.png b/Textures/Terrain/marsh3a.png
deleted file mode 100644
index 0e8bb65ae..000000000
Binary files a/Textures/Terrain/marsh3a.png and /dev/null differ
diff --git a/Textures/Terrain/marsh4.png b/Textures/Terrain/marsh4.png
deleted file mode 100644
index ae4f2bd30..000000000
Binary files a/Textures/Terrain/marsh4.png and /dev/null differ
diff --git a/Textures/Terrain/marsh4a.png b/Textures/Terrain/marsh4a.png
deleted file mode 100644
index bd8a00833..000000000
Binary files a/Textures/Terrain/marsh4a.png and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop-caribbean.png b/Textures/Terrain/mixedcrop-caribbean.png
deleted file mode 100644
index 3c7adb2e7..000000000
Binary files a/Textures/Terrain/mixedcrop-caribbean.png and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop.dds b/Textures/Terrain/mixedcrop.dds
deleted file mode 100644
index 3ac4a06d5..000000000
Binary files a/Textures/Terrain/mixedcrop.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop.png b/Textures/Terrain/mixedcrop.png
deleted file mode 100644
index 22135ecd6..000000000
Binary files a/Textures/Terrain/mixedcrop.png and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop1.png b/Textures/Terrain/mixedcrop1.png
deleted file mode 100644
index 9b102b46f..000000000
Binary files a/Textures/Terrain/mixedcrop1.png and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop2.dds b/Textures/Terrain/mixedcrop2.dds
deleted file mode 100644
index 1d0fa498f..000000000
Binary files a/Textures/Terrain/mixedcrop2.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop3.png b/Textures/Terrain/mixedcrop3.png
deleted file mode 100644
index 613fe5e12..000000000
Binary files a/Textures/Terrain/mixedcrop3.png and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop3b.dds b/Textures/Terrain/mixedcrop3b.dds
deleted file mode 100644
index aa4dc0b4a..000000000
Binary files a/Textures/Terrain/mixedcrop3b.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedcrop4.png b/Textures/Terrain/mixedcrop4.png
deleted file mode 100644
index dbce0604e..000000000
Binary files a/Textures/Terrain/mixedcrop4.png and /dev/null differ
diff --git a/Textures/Terrain/mixedforest-hires.png b/Textures/Terrain/mixedforest-hires.png
deleted file mode 100644
index 645d61898..000000000
Binary files a/Textures/Terrain/mixedforest-hires.png and /dev/null differ
diff --git a/Textures/Terrain/mixedforest.dds b/Textures/Terrain/mixedforest.dds
deleted file mode 100644
index 31fcf4835..000000000
Binary files a/Textures/Terrain/mixedforest.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedforest.png b/Textures/Terrain/mixedforest.png
deleted file mode 100644
index 22c429e2e..000000000
Binary files a/Textures/Terrain/mixedforest.png and /dev/null differ
diff --git a/Textures/Terrain/mixedforest2.dds b/Textures/Terrain/mixedforest2.dds
deleted file mode 100644
index 7ac0411db..000000000
Binary files a/Textures/Terrain/mixedforest2.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedforest2.png b/Textures/Terrain/mixedforest2.png
deleted file mode 100644
index a14f24637..000000000
Binary files a/Textures/Terrain/mixedforest2.png and /dev/null differ
diff --git a/Textures/Terrain/mixedforest2b.dds b/Textures/Terrain/mixedforest2b.dds
deleted file mode 100644
index 888e4b58d..000000000
Binary files a/Textures/Terrain/mixedforest2b.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedforest3.dds b/Textures/Terrain/mixedforest3.dds
deleted file mode 100644
index 701957b71..000000000
Binary files a/Textures/Terrain/mixedforest3.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedforest3.png b/Textures/Terrain/mixedforest3.png
deleted file mode 100644
index d8a87b549..000000000
Binary files a/Textures/Terrain/mixedforest3.png and /dev/null differ
diff --git a/Textures/Terrain/mixedforest3b.dds b/Textures/Terrain/mixedforest3b.dds
deleted file mode 100644
index 5bf23c10b..000000000
Binary files a/Textures/Terrain/mixedforest3b.dds and /dev/null differ
diff --git a/Textures/Terrain/mixedforestb.dds b/Textures/Terrain/mixedforestb.dds
deleted file mode 100644
index 696381a72..000000000
Binary files a/Textures/Terrain/mixedforestb.dds and /dev/null differ
diff --git a/Textures/Terrain/naturalcrop1.png b/Textures/Terrain/naturalcrop1.png
deleted file mode 100644
index c508d5f5b..000000000
Binary files a/Textures/Terrain/naturalcrop1.png and /dev/null differ
diff --git a/Textures/Terrain/orchard.dds b/Textures/Terrain/orchard.dds
deleted file mode 100644
index 46e3b0139..000000000
Binary files a/Textures/Terrain/orchard.dds and /dev/null differ
diff --git a/Textures/Terrain/orchard.png b/Textures/Terrain/orchard.png
deleted file mode 100644
index 5d834b1e8..000000000
Binary files a/Textures/Terrain/orchard.png and /dev/null differ
diff --git a/Textures/Terrain/packice.dds b/Textures/Terrain/packice.dds
deleted file mode 100644
index 5894cfc0d..000000000
Binary files a/Textures/Terrain/packice.dds and /dev/null differ
diff --git a/Textures/Terrain/packice1.dds b/Textures/Terrain/packice1.dds
deleted file mode 100644
index c9491f2d7..000000000
Binary files a/Textures/Terrain/packice1.dds and /dev/null differ
diff --git a/Textures/Terrain/packice1.png b/Textures/Terrain/packice1.png
deleted file mode 100644
index ac85c5870..000000000
Binary files a/Textures/Terrain/packice1.png and /dev/null differ
diff --git a/Textures/Terrain/packice2.dds b/Textures/Terrain/packice2.dds
deleted file mode 100644
index c86b24b09..000000000
Binary files a/Textures/Terrain/packice2.dds and /dev/null differ
diff --git a/Textures/Terrain/packice2.png b/Textures/Terrain/packice2.png
deleted file mode 100644
index 4b76f789c..000000000
Binary files a/Textures/Terrain/packice2.png and /dev/null differ
diff --git a/Textures/Terrain/pond.dds b/Textures/Terrain/pond.dds
deleted file mode 100644
index 00de2e74a..000000000
Binary files a/Textures/Terrain/pond.dds and /dev/null differ
diff --git a/Textures/Terrain/rainforest-hawaii.png b/Textures/Terrain/rainforest-hawaii.png
deleted file mode 100644
index f9a37ff75..000000000
Binary files a/Textures/Terrain/rainforest-hawaii.png and /dev/null differ
diff --git a/Textures/Terrain/reservoir.dds b/Textures/Terrain/reservoir.dds
deleted file mode 100644
index 8201a6079..000000000
Binary files a/Textures/Terrain/reservoir.dds and /dev/null differ
diff --git a/Textures/Terrain/rice1.png b/Textures/Terrain/rice1.png
deleted file mode 100644
index 3d475d8fa..000000000
Binary files a/Textures/Terrain/rice1.png and /dev/null differ
diff --git a/Textures/Terrain/rock-colors.dds b/Textures/Terrain/rock-colors.dds
deleted file mode 100644
index fd0ac61d8..000000000
Binary files a/Textures/Terrain/rock-colors.dds and /dev/null differ
diff --git a/Textures/Terrain/rock.dds b/Textures/Terrain/rock.dds
deleted file mode 100644
index 23d712471..000000000
Binary files a/Textures/Terrain/rock.dds and /dev/null differ
diff --git a/Textures/Terrain/rocks-desert.dds b/Textures/Terrain/rocks-desert.dds
deleted file mode 100644
index c52338b06..000000000
Binary files a/Textures/Terrain/rocks-desert.dds and /dev/null differ
diff --git a/Textures/Terrain/sand.dds b/Textures/Terrain/sand.dds
deleted file mode 100644
index 1281cf7e2..000000000
Binary files a/Textures/Terrain/sand.dds and /dev/null differ
diff --git a/Textures/Terrain/sand1.png b/Textures/Terrain/sand1.png
deleted file mode 100644
index 3f0b52218..000000000
Binary files a/Textures/Terrain/sand1.png and /dev/null differ
diff --git a/Textures/Terrain/sand2.png b/Textures/Terrain/sand2.png
deleted file mode 100644
index 0b9c479e2..000000000
Binary files a/Textures/Terrain/sand2.png and /dev/null differ
diff --git a/Textures/Terrain/sand3.png b/Textures/Terrain/sand3.png
deleted file mode 100644
index feca13fac..000000000
Binary files a/Textures/Terrain/sand3.png and /dev/null differ
diff --git a/Textures/Terrain/shrub.dds b/Textures/Terrain/shrub.dds
deleted file mode 100644
index cada9d834..000000000
Binary files a/Textures/Terrain/shrub.dds and /dev/null differ
diff --git a/Textures/Terrain/shrub.png b/Textures/Terrain/shrub.png
deleted file mode 100644
index c15564b14..000000000
Binary files a/Textures/Terrain/shrub.png and /dev/null differ
diff --git a/Textures/Terrain/shrub1.png b/Textures/Terrain/shrub1.png
deleted file mode 100644
index 85d62ca73..000000000
Binary files a/Textures/Terrain/shrub1.png and /dev/null differ
diff --git a/Textures/Terrain/shrub2.png b/Textures/Terrain/shrub2.png
deleted file mode 100644
index 2e399c4af..000000000
Binary files a/Textures/Terrain/shrub2.png and /dev/null differ
diff --git a/Textures/Terrain/shrub3.png b/Textures/Terrain/shrub3.png
deleted file mode 100644
index 611df9517..000000000
Binary files a/Textures/Terrain/shrub3.png and /dev/null differ
diff --git a/Textures/Terrain/snow.dds b/Textures/Terrain/snow.dds
deleted file mode 100644
index 97bc24996..000000000
Binary files a/Textures/Terrain/snow.dds and /dev/null differ
diff --git a/Textures/Terrain/snow1.dds b/Textures/Terrain/snow1.dds
deleted file mode 100644
index 39cd3abd5..000000000
Binary files a/Textures/Terrain/snow1.dds and /dev/null differ
diff --git a/Textures/Terrain/snow1.png b/Textures/Terrain/snow1.png
deleted file mode 100644
index 1cc6d9e1b..000000000
Binary files a/Textures/Terrain/snow1.png and /dev/null differ
diff --git a/Textures/Terrain/snow2.dds b/Textures/Terrain/snow2.dds
deleted file mode 100644
index 3f42283ba..000000000
Binary files a/Textures/Terrain/snow2.dds and /dev/null differ
diff --git a/Textures/Terrain/snow2.png b/Textures/Terrain/snow2.png
deleted file mode 100644
index dd430d00a..000000000
Binary files a/Textures/Terrain/snow2.png and /dev/null differ
diff --git a/Textures/Terrain/snow3.dds b/Textures/Terrain/snow3.dds
deleted file mode 100644
index 660f1565c..000000000
Binary files a/Textures/Terrain/snow3.dds and /dev/null differ
diff --git a/Textures/Terrain/snow3.png b/Textures/Terrain/snow3.png
deleted file mode 100644
index 9f7b6d25e..000000000
Binary files a/Textures/Terrain/snow3.png and /dev/null differ
diff --git a/Textures/Terrain/snow4.dds b/Textures/Terrain/snow4.dds
deleted file mode 100644
index 2c7e02b0e..000000000
Binary files a/Textures/Terrain/snow4.dds and /dev/null differ
diff --git a/Textures/Terrain/snow4.png b/Textures/Terrain/snow4.png
deleted file mode 100644
index 7051e179f..000000000
Binary files a/Textures/Terrain/snow4.png and /dev/null differ
diff --git a/Textures/Terrain/tidal.dds b/Textures/Terrain/tidal.dds
deleted file mode 100644
index 815f31219..000000000
Binary files a/Textures/Terrain/tidal.dds and /dev/null differ
diff --git a/Textures/Terrain/town-europe.png b/Textures/Terrain/town-europe.png
deleted file mode 100644
index 615609b38..000000000
Binary files a/Textures/Terrain/town-europe.png and /dev/null differ
diff --git a/Textures/Terrain/tundra.dds b/Textures/Terrain/tundra.dds
deleted file mode 100644
index 47001d2b8..000000000
Binary files a/Textures/Terrain/tundra.dds and /dev/null differ
diff --git a/Textures/Terrain/tundra.png b/Textures/Terrain/tundra.png
deleted file mode 100644
index 600eeb8a3..000000000
Binary files a/Textures/Terrain/tundra.png and /dev/null differ
diff --git a/Textures/Terrain/tundra2.dds b/Textures/Terrain/tundra2.dds
deleted file mode 100644
index 4c15a3140..000000000
Binary files a/Textures/Terrain/tundra2.dds and /dev/null differ
diff --git a/Textures/Terrain/tundra2.png b/Textures/Terrain/tundra2.png
deleted file mode 100644
index dcfba3e90..000000000
Binary files a/Textures/Terrain/tundra2.png and /dev/null differ
diff --git a/Textures/Terrain/tundra3.dds b/Textures/Terrain/tundra3.dds
deleted file mode 100644
index 91d416f11..000000000
Binary files a/Textures/Terrain/tundra3.dds and /dev/null differ
diff --git a/Textures/Terrain/tundra3.png b/Textures/Terrain/tundra3.png
deleted file mode 100644
index 9bb6889ce..000000000
Binary files a/Textures/Terrain/tundra3.png and /dev/null differ
diff --git a/Textures/Terrain/uk_countryside1.dds b/Textures/Terrain/uk_countryside1.dds
deleted file mode 100644
index a0f3cc0ae..000000000
Binary files a/Textures/Terrain/uk_countryside1.dds and /dev/null differ
diff --git a/Textures/Terrain/uk_countryside2.dds b/Textures/Terrain/uk_countryside2.dds
deleted file mode 100644
index 3448b1087..000000000
Binary files a/Textures/Terrain/uk_countryside2.dds and /dev/null differ
diff --git a/Textures/Terrain/unknown.dds b/Textures/Terrain/unknown.dds
deleted file mode 100644
index bbf33f02f..000000000
Binary files a/Textures/Terrain/unknown.dds and /dev/null differ
diff --git a/Textures/Terrain/water-lake.dds b/Textures/Terrain/water-lake.dds
deleted file mode 100644
index 33be88285..000000000
Binary files a/Textures/Terrain/water-lake.dds and /dev/null differ
diff --git a/Textures/Trees/coniferous-alt.png b/Textures/Trees/coniferous-alt.png
deleted file mode 100644
index d8aaea46c..000000000
Binary files a/Textures/Trees/coniferous-alt.png and /dev/null differ
diff --git a/Textures/Trees/coniferous-tree-strip4.dds b/Textures/Trees/coniferous-tree-strip4.dds
deleted file mode 100644
index 7ea8f7e82..000000000
Binary files a/Textures/Trees/coniferous-tree-strip4.dds and /dev/null differ
diff --git a/Textures/Trees/coniferous.dds b/Textures/Trees/coniferous.dds
deleted file mode 100644
index 87857e9eb..000000000
Binary files a/Textures/Trees/coniferous.dds and /dev/null differ
diff --git a/Textures/Trees/coniferous.png b/Textures/Trees/coniferous.png
deleted file mode 100644
index 313f6d221..000000000
Binary files a/Textures/Trees/coniferous.png and /dev/null differ
diff --git a/Textures/Trees/deciduous-alt.png b/Textures/Trees/deciduous-alt.png
deleted file mode 100644
index 54b23f723..000000000
Binary files a/Textures/Trees/deciduous-alt.png and /dev/null differ
diff --git a/Textures/Trees/deciduous-autumn.dds b/Textures/Trees/deciduous-autumn.dds
deleted file mode 100644
index f98617672..000000000
Binary files a/Textures/Trees/deciduous-autumn.dds and /dev/null differ
diff --git a/Textures/Trees/deciduous-autumn.png b/Textures/Trees/deciduous-autumn.png
deleted file mode 100644
index baf433b2a..000000000
Binary files a/Textures/Trees/deciduous-autumn.png and /dev/null differ
diff --git a/Textures/Trees/deciduous-tree-strip8.dds b/Textures/Trees/deciduous-tree-strip8.dds
deleted file mode 100644
index b7fabe496..000000000
Binary files a/Textures/Trees/deciduous-tree-strip8.dds and /dev/null differ
diff --git a/Textures/Trees/deciduous.dds b/Textures/Trees/deciduous.dds
deleted file mode 100644
index bc541f3c9..000000000
Binary files a/Textures/Trees/deciduous.dds and /dev/null differ
diff --git a/Textures/Trees/deciduous.png b/Textures/Trees/deciduous.png
deleted file mode 100644
index 0b16ba11d..000000000
Binary files a/Textures/Trees/deciduous.png and /dev/null differ
diff --git a/Textures/Trees/mixed-alt.png b/Textures/Trees/mixed-alt.png
deleted file mode 100644
index aee5532cb..000000000
Binary files a/Textures/Trees/mixed-alt.png and /dev/null differ
diff --git a/Textures/Trees/mixed-autumn.dds b/Textures/Trees/mixed-autumn.dds
deleted file mode 100644
index 1c4120790..000000000
Binary files a/Textures/Trees/mixed-autumn.dds and /dev/null differ
diff --git a/Textures/Trees/mixed-autumn.png b/Textures/Trees/mixed-autumn.png
deleted file mode 100644
index 3a2961a06..000000000
Binary files a/Textures/Trees/mixed-autumn.png and /dev/null differ
diff --git a/Textures/Trees/mixed-tree-strip8.dds b/Textures/Trees/mixed-tree-strip8.dds
deleted file mode 100644
index 20d56f4a8..000000000
Binary files a/Textures/Trees/mixed-tree-strip8.dds and /dev/null differ
diff --git a/Textures/Trees/mixed.dds b/Textures/Trees/mixed.dds
deleted file mode 100644
index b1270c783..000000000
Binary files a/Textures/Trees/mixed.dds and /dev/null differ
diff --git a/Textures/Trees/mixed.png b/Textures/Trees/mixed.png
deleted file mode 100644
index f163b7787..000000000
Binary files a/Textures/Trees/mixed.png and /dev/null differ
diff --git a/Textures/Trees/tropical-alt.dds b/Textures/Trees/tropical-alt.dds
deleted file mode 100644
index f256da0ff..000000000
Binary files a/Textures/Trees/tropical-alt.dds and /dev/null differ
diff --git a/Textures/Trees/tropical-alt.png b/Textures/Trees/tropical-alt.png
deleted file mode 100644
index 3249babf6..000000000
Binary files a/Textures/Trees/tropical-alt.png and /dev/null differ
diff --git a/Textures/Trees/tropical.dds b/Textures/Trees/tropical.dds
deleted file mode 100644
index 5d7b93884..000000000
Binary files a/Textures/Trees/tropical.dds and /dev/null differ
diff --git a/Textures/Trees/tropical.png b/Textures/Trees/tropical.png
deleted file mode 100644
index d649afbab..000000000
Binary files a/Textures/Trees/tropical.png and /dev/null differ
diff --git a/Textures/Splash1.png b/Textures/Unused/Splash1a.png
similarity index 100%
rename from Textures/Splash1.png
rename to Textures/Unused/Splash1a.png
diff --git a/Textures/Splash2.png b/Textures/Unused/Splash2.png
similarity index 100%
rename from Textures/Splash2.png
rename to Textures/Unused/Splash2.png
diff --git a/Textures/Splash3.png b/Textures/Unused/Splash3.png
similarity index 100%
rename from Textures/Splash3.png
rename to Textures/Unused/Splash3.png
diff --git a/Textures/Splash4.png b/Textures/Unused/Splash4.png
similarity index 100%
rename from Textures/Splash4.png
rename to Textures/Unused/Splash4.png
diff --git a/Textures/Splash5.png b/Textures/Unused/Splash5.png
similarity index 100%
rename from Textures/Splash5.png
rename to Textures/Unused/Splash5.png
diff --git a/Textures/Unused/Terrain.high/builtup.png b/Textures/Unused/Terrain.high/builtup.png
new file mode 100644
index 000000000..b58cce7d9
Binary files /dev/null and b/Textures/Unused/Terrain.high/builtup.png differ
diff --git a/Textures/Unused/Terrain.high/city3.png b/Textures/Unused/Terrain.high/city3.png
new file mode 100644
index 000000000..bb8264dfd
Binary files /dev/null and b/Textures/Unused/Terrain.high/city3.png differ
diff --git a/Textures/Unused/Terrain.high/glacier2.png b/Textures/Unused/Terrain.high/glacier2.png
new file mode 100644
index 000000000..c9c17510a
Binary files /dev/null and b/Textures/Unused/Terrain.high/glacier2.png differ
diff --git a/Textures/Unused/Terrain.high/lava.png b/Textures/Unused/Terrain.high/lava.png
new file mode 100644
index 000000000..1f955357f
Binary files /dev/null and b/Textures/Unused/Terrain.high/lava.png differ
diff --git a/Textures/Unused/Terrain.high/resgrid.png b/Textures/Unused/Terrain.high/resgrid.png
new file mode 100644
index 000000000..1ae0ccf95
Binary files /dev/null and b/Textures/Unused/Terrain.high/resgrid.png differ
diff --git a/Textures/Unused/Terrain.winter.high/drycrop.png b/Textures/Unused/Terrain.winter.high/drycrop.png
new file mode 100644
index 000000000..39e7c3d4c
Binary files /dev/null and b/Textures/Unused/Terrain.winter.high/drycrop.png differ
diff --git a/Textures/Unused/Terrain.winter.high/irrcrop.png b/Textures/Unused/Terrain.winter.high/irrcrop.png
new file mode 100644
index 000000000..501e186d8
Binary files /dev/null and b/Textures/Unused/Terrain.winter.high/irrcrop.png differ
diff --git a/Textures/Unused/Terrain.winter.high/mixedcrop.png b/Textures/Unused/Terrain.winter.high/mixedcrop.png
new file mode 100644
index 000000000..18d7f7de4
Binary files /dev/null and b/Textures/Unused/Terrain.winter.high/mixedcrop.png differ
diff --git a/Textures/Unused/Terrain.winter.high/resgrid.png b/Textures/Unused/Terrain.winter.high/resgrid.png
new file mode 100644
index 000000000..3aa01ceae
Binary files /dev/null and b/Textures/Unused/Terrain.winter.high/resgrid.png differ
diff --git a/Textures/Terrain.winter/Town.png b/Textures/Unused/Terrain.winter/Town.png
similarity index 100%
rename from Textures/Terrain.winter/Town.png
rename to Textures/Unused/Terrain.winter/Town.png
diff --git a/Textures/Terrain.winter/cropgrass.png b/Textures/Unused/Terrain.winter/cropgrass.png
similarity index 100%
rename from Textures/Terrain.winter/cropgrass.png
rename to Textures/Unused/Terrain.winter/cropgrass.png
diff --git a/Textures/Terrain.winter/cropgrass1.png b/Textures/Unused/Terrain.winter/cropgrass1.png
similarity index 100%
rename from Textures/Terrain.winter/cropgrass1.png
rename to Textures/Unused/Terrain.winter/cropgrass1.png
diff --git a/Textures/Terrain.winter/cropgrass2.png b/Textures/Unused/Terrain.winter/cropgrass2.png
similarity index 100%
rename from Textures/Terrain.winter/cropgrass2.png
rename to Textures/Unused/Terrain.winter/cropgrass2.png
diff --git a/Textures/Terrain.winter/cropgrass3.png b/Textures/Unused/Terrain.winter/cropgrass3.png
similarity index 100%
rename from Textures/Terrain.winter/cropgrass3.png
rename to Textures/Unused/Terrain.winter/cropgrass3.png
diff --git a/Textures/Terrain.winter/deciduous.png b/Textures/Unused/Terrain.winter/deciduous.png
similarity index 100%
rename from Textures/Terrain.winter/deciduous.png
rename to Textures/Unused/Terrain.winter/deciduous.png
diff --git a/Textures/Terrain.winter/deciduous1.png b/Textures/Unused/Terrain.winter/deciduous1.png
similarity index 100%
rename from Textures/Terrain.winter/deciduous1.png
rename to Textures/Unused/Terrain.winter/deciduous1.png
diff --git a/Textures/Terrain.winter/drycrop1.png b/Textures/Unused/Terrain.winter/drycrop1.png
similarity index 100%
rename from Textures/Terrain.winter/drycrop1.png
rename to Textures/Unused/Terrain.winter/drycrop1.png
diff --git a/Textures/Terrain.winter/drycrop2.png b/Textures/Unused/Terrain.winter/drycrop2.png
similarity index 100%
rename from Textures/Terrain.winter/drycrop2.png
rename to Textures/Unused/Terrain.winter/drycrop2.png
diff --git a/Textures/Terrain.winter/drycrop3.png b/Textures/Unused/Terrain.winter/drycrop3.png
similarity index 100%
rename from Textures/Terrain.winter/drycrop3.png
rename to Textures/Unused/Terrain.winter/drycrop3.png
diff --git a/Textures/Terrain.winter/drycrop4.png b/Textures/Unused/Terrain.winter/drycrop4.png
similarity index 100%
rename from Textures/Terrain.winter/drycrop4.png
rename to Textures/Unused/Terrain.winter/drycrop4.png
diff --git a/Textures/Terrain.winter/forest1.png b/Textures/Unused/Terrain.winter/forest1.png
similarity index 100%
rename from Textures/Terrain.winter/forest1.png
rename to Textures/Unused/Terrain.winter/forest1.png
diff --git a/Textures/Terrain.winter/forest1c.png b/Textures/Unused/Terrain.winter/forest1c.png
similarity index 100%
rename from Textures/Terrain.winter/forest1c.png
rename to Textures/Unused/Terrain.winter/forest1c.png
diff --git a/Textures/Terrain.winter/glacier.png b/Textures/Unused/Terrain.winter/glacier.png
similarity index 100%
rename from Textures/Terrain.winter/glacier.png
rename to Textures/Unused/Terrain.winter/glacier.png
diff --git a/Textures/Terrain.winter/grass.png b/Textures/Unused/Terrain.winter/grass.png
similarity index 100%
rename from Textures/Terrain.winter/grass.png
rename to Textures/Unused/Terrain.winter/grass.png
diff --git a/Textures/Terrain.winter/gravel.png b/Textures/Unused/Terrain.winter/gravel.png
similarity index 100%
rename from Textures/Terrain.winter/gravel.png
rename to Textures/Unused/Terrain.winter/gravel.png
diff --git a/Textures/Terrain.winter/herbtundra.png b/Textures/Unused/Terrain.winter/herbtundra.png
similarity index 100%
rename from Textures/Terrain.winter/herbtundra.png
rename to Textures/Unused/Terrain.winter/herbtundra.png
diff --git a/Textures/Terrain.winter/irrcrop2.png b/Textures/Unused/Terrain.winter/irrcrop2.png
similarity index 100%
rename from Textures/Terrain.winter/irrcrop2.png
rename to Textures/Unused/Terrain.winter/irrcrop2.png
diff --git a/Textures/Terrain.winter/marsh1.png b/Textures/Unused/Terrain.winter/marsh1.png
similarity index 100%
rename from Textures/Terrain.winter/marsh1.png
rename to Textures/Unused/Terrain.winter/marsh1.png
diff --git a/Textures/Terrain.winter/mixedcrop1.png b/Textures/Unused/Terrain.winter/mixedcrop1.png
similarity index 100%
rename from Textures/Terrain.winter/mixedcrop1.png
rename to Textures/Unused/Terrain.winter/mixedcrop1.png
diff --git a/Textures/Terrain.winter/mixedcrop4.png b/Textures/Unused/Terrain.winter/mixedcrop4.png
similarity index 100%
rename from Textures/Terrain.winter/mixedcrop4.png
rename to Textures/Unused/Terrain.winter/mixedcrop4.png
diff --git a/Textures/Terrain.winter/mixedforest.png b/Textures/Unused/Terrain.winter/mixedforest.png
similarity index 100%
rename from Textures/Terrain.winter/mixedforest.png
rename to Textures/Unused/Terrain.winter/mixedforest.png
diff --git a/Textures/Terrain.winter/mixedforest3.png b/Textures/Unused/Terrain.winter/mixedforest3.png
similarity index 100%
rename from Textures/Terrain.winter/mixedforest3.png
rename to Textures/Unused/Terrain.winter/mixedforest3.png
diff --git a/Textures/Terrain.winter/naturalcrop1.png b/Textures/Unused/Terrain.winter/naturalcrop1.png
similarity index 100%
rename from Textures/Terrain.winter/naturalcrop1.png
rename to Textures/Unused/Terrain.winter/naturalcrop1.png
diff --git a/Textures/Terrain.winter/rock.png b/Textures/Unused/Terrain.winter/rock.png
similarity index 100%
rename from Textures/Terrain.winter/rock.png
rename to Textures/Unused/Terrain.winter/rock.png
diff --git a/Textures/Terrain.winter/shrub2.png b/Textures/Unused/Terrain.winter/shrub2.png
similarity index 100%
rename from Textures/Terrain.winter/shrub2.png
rename to Textures/Unused/Terrain.winter/shrub2.png
diff --git a/Textures/Terrain.winter/tundra.png b/Textures/Unused/Terrain.winter/tundra.png
similarity index 100%
rename from Textures/Terrain.winter/tundra.png
rename to Textures/Unused/Terrain.winter/tundra.png
diff --git a/Textures/Terrain.winter/tundra3.png b/Textures/Unused/Terrain.winter/tundra3.png
similarity index 100%
rename from Textures/Terrain.winter/tundra3.png
rename to Textures/Unused/Terrain.winter/tundra3.png
diff --git a/Textures/Terrain/Town.png b/Textures/Unused/Terrain/Town.png
similarity index 100%
rename from Textures/Terrain/Town.png
rename to Textures/Unused/Terrain/Town.png
diff --git a/Textures/Terrain/Town2.png b/Textures/Unused/Terrain/Town2.png
similarity index 100%
rename from Textures/Terrain/Town2.png
rename to Textures/Unused/Terrain/Town2.png
diff --git a/Textures/Terrain/Town3.png b/Textures/Unused/Terrain/Town3.png
similarity index 100%
rename from Textures/Terrain/Town3.png
rename to Textures/Unused/Terrain/Town3.png
diff --git a/Textures/Terrain/cropgrass1.mask.png b/Textures/Unused/Terrain/cropgrass1.mask.png
similarity index 100%
rename from Textures/Terrain/cropgrass1.mask.png
rename to Textures/Unused/Terrain/cropgrass1.mask.png
diff --git a/Textures/Terrain/cropgrass2.mask.png b/Textures/Unused/Terrain/cropgrass2.mask.png
similarity index 100%
rename from Textures/Terrain/cropgrass2.mask.png
rename to Textures/Unused/Terrain/cropgrass2.mask.png
diff --git a/Textures/Terrain/cropgrass3.mask.png b/Textures/Unused/Terrain/cropgrass3.mask.png
similarity index 100%
rename from Textures/Terrain/cropgrass3.mask.png
rename to Textures/Unused/Terrain/cropgrass3.mask.png
diff --git a/Textures/Terrain/deciduous.png b/Textures/Unused/Terrain/deciduous.png
similarity index 100%
rename from Textures/Terrain/deciduous.png
rename to Textures/Unused/Terrain/deciduous.png
diff --git a/Textures/Terrain/deciduous1b.png b/Textures/Unused/Terrain/deciduous1b.png
similarity index 100%
rename from Textures/Terrain/deciduous1b.png
rename to Textures/Unused/Terrain/deciduous1b.png
diff --git a/Textures/Terrain/deciduous2b.png b/Textures/Unused/Terrain/deciduous2b.png
similarity index 100%
rename from Textures/Terrain/deciduous2b.png
rename to Textures/Unused/Terrain/deciduous2b.png
diff --git a/Textures/Terrain/deciduous3.png b/Textures/Unused/Terrain/deciduous3.png
similarity index 100%
rename from Textures/Terrain/deciduous3.png
rename to Textures/Unused/Terrain/deciduous3.png
diff --git a/Textures/Terrain/deciduous3b.png b/Textures/Unused/Terrain/deciduous3b.png
similarity index 100%
rename from Textures/Terrain/deciduous3b.png
rename to Textures/Unused/Terrain/deciduous3b.png
diff --git a/Textures/Terrain/desert.png b/Textures/Unused/Terrain/desert.png
similarity index 100%
rename from Textures/Terrain/desert.png
rename to Textures/Unused/Terrain/desert.png
diff --git a/Textures/Terrain/desert1.png b/Textures/Unused/Terrain/desert1.png
similarity index 100%
rename from Textures/Terrain/desert1.png
rename to Textures/Unused/Terrain/desert1.png
diff --git a/Textures/Terrain/glacier.png b/Textures/Unused/Terrain/glacier.png
similarity index 100%
rename from Textures/Terrain/glacier.png
rename to Textures/Unused/Terrain/glacier.png
diff --git a/Textures/Terrain/marsh1.png b/Textures/Unused/Terrain/marsh1.png
similarity index 100%
rename from Textures/Terrain/marsh1.png
rename to Textures/Unused/Terrain/marsh1.png
diff --git a/Textures/Terrain/mixedcrop2.mask.png b/Textures/Unused/Terrain/mixedcrop2.mask.png
similarity index 100%
rename from Textures/Terrain/mixedcrop2.mask.png
rename to Textures/Unused/Terrain/mixedcrop2.mask.png
diff --git a/Textures/Terrain/mixedcrop2.png b/Textures/Unused/Terrain/mixedcrop2.png
similarity index 100%
rename from Textures/Terrain/mixedcrop2.png
rename to Textures/Unused/Terrain/mixedcrop2.png
diff --git a/Textures/Terrain/mixedcrop3b.mask.png b/Textures/Unused/Terrain/mixedcrop3b.mask.png
similarity index 100%
rename from Textures/Terrain/mixedcrop3b.mask.png
rename to Textures/Unused/Terrain/mixedcrop3b.mask.png
diff --git a/Textures/Terrain/mixedcrop3b.png b/Textures/Unused/Terrain/mixedcrop3b.png
similarity index 100%
rename from Textures/Terrain/mixedcrop3b.png
rename to Textures/Unused/Terrain/mixedcrop3b.png
diff --git a/Textures/Terrain/mixedforest2b.png b/Textures/Unused/Terrain/mixedforest2b.png
similarity index 100%
rename from Textures/Terrain/mixedforest2b.png
rename to Textures/Unused/Terrain/mixedforest2b.png
diff --git a/Textures/Terrain/mixedforest3b.png b/Textures/Unused/Terrain/mixedforest3b.png
similarity index 100%
rename from Textures/Terrain/mixedforest3b.png
rename to Textures/Unused/Terrain/mixedforest3b.png
diff --git a/Textures/Terrain/mixedforestb.png b/Textures/Unused/Terrain/mixedforestb.png
similarity index 100%
rename from Textures/Terrain/mixedforestb.png
rename to Textures/Unused/Terrain/mixedforestb.png
diff --git a/Textures/Terrain/mud-seamless.png b/Textures/Unused/Terrain/mud-seamless.png
similarity index 100%
rename from Textures/Terrain/mud-seamless.png
rename to Textures/Unused/Terrain/mud-seamless.png
diff --git a/Textures/Terrain/packice.png b/Textures/Unused/Terrain/packice.png
similarity index 100%
rename from Textures/Terrain/packice.png
rename to Textures/Unused/Terrain/packice.png
diff --git a/Textures/Terrain/pond.png b/Textures/Unused/Terrain/pond.png
similarity index 100%
rename from Textures/Terrain/pond.png
rename to Textures/Unused/Terrain/pond.png
diff --git a/Textures/Terrain/reservoir.png b/Textures/Unused/Terrain/reservoir.png
similarity index 100%
rename from Textures/Terrain/reservoir.png
rename to Textures/Unused/Terrain/reservoir.png
diff --git a/Textures/Terrain/rock-colors.png b/Textures/Unused/Terrain/rock-colors.png
similarity index 100%
rename from Textures/Terrain/rock-colors.png
rename to Textures/Unused/Terrain/rock-colors.png
diff --git a/Textures/Terrain/sand.png b/Textures/Unused/Terrain/sand.png
similarity index 100%
rename from Textures/Terrain/sand.png
rename to Textures/Unused/Terrain/sand.png
diff --git a/Textures/Terrain/snow.png b/Textures/Unused/Terrain/snow.png
similarity index 100%
rename from Textures/Terrain/snow.png
rename to Textures/Unused/Terrain/snow.png
diff --git a/Textures/Unused/Trees.high/deciduous-autumn.png b/Textures/Unused/Trees.high/deciduous-autumn.png
new file mode 100644
index 000000000..a0b10df71
Binary files /dev/null and b/Textures/Unused/Trees.high/deciduous-autumn.png differ
diff --git a/Textures/Unused/Trees.high/mixed-autumn.png b/Textures/Unused/Trees.high/mixed-autumn.png
new file mode 100644
index 000000000..8f40c28fa
Binary files /dev/null and b/Textures/Unused/Trees.high/mixed-autumn.png differ
diff --git a/Textures/Trees/coniferous-tree-strip4.png b/Textures/Unused/Trees/coniferous-tree-strip4.png
similarity index 100%
rename from Textures/Trees/coniferous-tree-strip4.png
rename to Textures/Unused/Trees/coniferous-tree-strip4.png
diff --git a/Textures/Trees/deciduous-tree-strip8.png b/Textures/Unused/Trees/deciduous-tree-strip8.png
similarity index 100%
rename from Textures/Trees/deciduous-tree-strip8.png
rename to Textures/Unused/Trees/deciduous-tree-strip8.png
diff --git a/Textures/Trees/mixed-tree-strip8.png b/Textures/Unused/Trees/mixed-tree-strip8.png
similarity index 100%
rename from Textures/Trees/mixed-tree-strip8.png
rename to Textures/Unused/Trees/mixed-tree-strip8.png
diff --git a/Textures/Water/dudvmap2.png b/Textures/Unused/Water/dudvmap2.png
similarity index 100%
rename from Textures/Water/dudvmap2.png
rename to Textures/Unused/Water/dudvmap2.png
diff --git a/Textures/Water/normalmap2.png b/Textures/Unused/Water/normalmap2.png
similarity index 100%
rename from Textures/Water/normalmap2.png
rename to Textures/Unused/Water/normalmap2.png
diff --git a/Textures/Water/water-dudv.png b/Textures/Unused/Water/water-dudv.png
similarity index 100%
rename from Textures/Water/water-dudv.png
rename to Textures/Unused/Water/water-dudv.png
diff --git a/Textures/Water/water-normalmap.png b/Textures/Unused/Water/water-normalmap.png
similarity index 100%
rename from Textures/Water/water-normalmap.png
rename to Textures/Unused/Water/water-normalmap.png
diff --git a/Textures/Water/water-reflection-inland.png b/Textures/Unused/Water/water-reflection-inland.png
similarity index 100%
rename from Textures/Water/water-reflection-inland.png
rename to Textures/Unused/Water/water-reflection-inland.png
diff --git a/Textures/Water/water-normalmap2.dds b/Textures/Water/water-normalmap2.dds
deleted file mode 100644
index ddd54c00e..000000000
Binary files a/Textures/Water/water-normalmap2.dds and /dev/null differ
diff --git a/Textures/Water/water-reflection-inland.dds b/Textures/Water/water-reflection-inland.dds
deleted file mode 100644
index 7a94d5fec..000000000
Binary files a/Textures/Water/water-reflection-inland.dds and /dev/null differ
diff --git a/Textures/Water/waves2.dds b/Textures/Water/waves2.dds
deleted file mode 100644
index 47646d45b..000000000
Binary files a/Textures/Water/waves2.dds and /dev/null differ
diff --git a/Translations/en/menu.xml b/Translations/en/menu.xml
index 5e241bad8..9194be5d5 100644
--- a/Translations/en/menu.xml
+++ b/Translations/en/menu.xml
@@ -12,8 +12,10 @@
Screenshot
Screenshot Directory
Sound Configuration
- Input Configuration
- Quit
+ Input Configuration
+ Scenery Download
+ Aircraft Center (Experimental)
+ Quit
View
@@ -48,11 +50,11 @@
Environment Settings
Time Settings
Wildfire Settings
- Scenery Download
Equipment
Map
+ Map (Canvas)
Stopwatch
Fuel and Payload
Radio Settings
diff --git a/gui/dialogs/devel-extensions.xml b/gui/dialogs/devel-extensions.xml
index d1f64b6ba..6d6fcd3df 100644
--- a/gui/dialogs/devel-extensions.xml
+++ b/gui/dialogs/devel-extensions.xml
@@ -33,6 +33,13 @@
+
+ New Canvas Map
+
+ nasal
+
+
+
Close
diff --git a/gui/dialogs/instrument-failures.xml b/gui/dialogs/instrument-failures.xml
index 1dc4cb1dd..8e67cc9d9 100644
--- a/gui/dialogs/instrument-failures.xml
+++ b/gui/dialogs/instrument-failures.xml
@@ -80,7 +80,7 @@
1
1
- /instrumentation/nav[0]/cdi/serviceable
+ /sim/failure-manager/instrumentation/nav[0]/cdi/serviceable
@@ -101,7 +101,7 @@
1
5
- /instrumentation/nav[1]/cdi/serviceable
+ /sim/failure-manager/instrumentation/nav[1]/cdi/serviceable
@@ -122,7 +122,7 @@
2
1
- /instrumentation/nav[0]/gs/serviceable
+ /sim/failure-manager/instrumentation/nav[0]/gs/serviceable
@@ -141,7 +141,7 @@
2
5
- /instrumentation/nav[1]/gs/serviceable
+ /sim/failure-manager/instrumentation/nav[1]/gs/serviceable
@@ -160,7 +160,7 @@
3
1
- /instrumentation/dme/serviceable
+ /sim/failure-manager/instrumentation/dme/serviceable
@@ -179,7 +179,7 @@
3
5
- /instrumentation/adf/serviceable
+ /sim/failure-manager/instrumentation/adf/serviceable
@@ -198,7 +198,7 @@
4
1
- /instrumentation/airspeed-indicator/serviceable
+ /sim/failure-manager/instrumentation/airspeed-indicator/serviceable
@@ -217,7 +217,7 @@
4
5
- /instrumentation/attitude-indicator/serviceable
+ /sim/failure-manager/instrumentation/attitude-indicator/serviceable
@@ -236,7 +236,7 @@
5
1
- /instrumentation/altimeter/serviceable
+ /sim/failure-manager/instrumentation/altimeter/serviceable
@@ -255,7 +255,7 @@
5
5
- /instrumentation/turn-indicator/serviceable
+ /sim/failure-manager/instrumentation/turn-indicator/serviceable
@@ -274,7 +274,7 @@
6
1
- /instrumentation/slip-skid-ball/serviceable
+ /sim/failure-manager/instrumentation/slip-skid-ball/serviceable
@@ -293,7 +293,7 @@
6
5
- /instrumentation/heading-indicator/serviceable
+ /sim/failure-manager/instrumentation/heading-indicator/serviceable
@@ -312,7 +312,7 @@
7
1
- /instrumentation/vertical-speed-indicator/serviceable
+ /sim/failure-manager/instrumentation/vertical-speed-indicator/serviceable
@@ -331,7 +331,7 @@
7
5
- /instrumentation/magnetic-compass/serviceable
+ /sim/failure-manager/instrumentation/magnetic-compass/serviceable
@@ -380,7 +380,7 @@
- Reset
+ Refresh
true
dialog-update
diff --git a/gui/dialogs/map-canvas.xml b/gui/dialogs/map-canvas.xml
new file mode 100644
index 000000000..64753256f
--- /dev/null
+++ b/gui/dialogs/map-canvas.xml
@@ -0,0 +1,498 @@
+
+
+
+ map-canvas
+ vbox
+ true
+
+
+ 0.41
+ 0.4
+ 0.42
+ 1.0
+
+
+
+
+
+
+
+
+
+ hbox
+ 1
+
+
+ Map (Canvas)
+
+
+ 1
+
+
+ 16
+ 16
+
+ 27
+ 2
+
+
+ dialog-close
+
+
+
+
+
+
+ hbox
+ true
+
+
+
+ vbox
+
+ Display:
+
+
+
+ Airports
+ 100
+ /sim/gui/dialogs/map-canvas/draw-APT
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ Fixes
+ 100
+ /sim/gui/dialogs/map-canvas/draw-FIX
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ VORs
+ 100
+ /sim/gui/dialogs/map-canvas/draw-VOR
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ DMEs
+ 100
+ /sim/gui/dialogs/map-canvas/draw-DME
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ NDBs
+ 100
+ /sim/gui/dialogs/map-canvas/draw-NDB
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+
+
+ Traffic
+ 100
+ /sim/gui/dialogs/map-canvas/draw-TFC
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+
+
+ Data
+ 100
+ /sim/gui/dialogs/map-canvas/draw-data
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ Flight History
+ 100
+ /sim/gui/dialogs/map-canvas/draw-FLT
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+
+
+ /sim/gui/dialogs/metar/mode/local-weather
+ 1
+
+
+ Weather
+ 100
+ /sim/gui/dialogs/map-canvas/draw-WXR
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+
+
+ true
+
+
+ Magnetic Hdgs
+ 100
+ /sim/gui/dialogs/map-canvas/magnetic-headings
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ Center on Acft
+ 100
+ /sim/gui/dialogs/map-canvas/centre-on-aircraft
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ Aircraft Hdg Up
+ 100
+ /sim/gui/dialogs/map-canvas/aircraft-heading-up
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+
+
+ Transparent
+ 100
+ /sim/gui/dialogs/map-canvas/transparent
+ true
+
+ dialog-apply
+
+
+ property-toggle
+
+
+ nasal
+
+
+
+
+ true
+
+
+ close
+ Close
+ 100
+ true
+
+ dialog-close
+
+
+
+
+
+
+
+
+ vbox
+ true
+
+
+
+ canvas-map
+ fill
+ fill
+ true
+ 600
+ 400
+
+
+ hbox
+
+
+
+
+ hbox
+
+
+ zoomout
+ out
+ 52
+ 22
+
+
+ nasal
+
+
+
+
+
+ zoomdisplay
+ MMM
+ Zoom %0.1f NM
+ /gui/radar-mapstructure/zoom
+ true
+
+
+
+ zoomin
+ in
+ 52
+ 22
+
+
+ nasal
+
+
+
+
+
+
+
+
diff --git a/gui/dialogs/random-failures.xml b/gui/dialogs/random-failures.xml
index 3366a53c2..e302c7e19 100644
--- a/gui/dialogs/random-failures.xml
+++ b/gui/dialogs/random-failures.xml
@@ -326,8 +326,8 @@
nasal
@@ -344,8 +344,8 @@
nasal
diff --git a/gui/dialogs/route-manager.xml b/gui/dialogs/route-manager.xml
index 1b72bb38e..2167917d3 100644
--- a/gui/dialogs/route-manager.xml
+++ b/gui/dialogs/route-manager.xml
@@ -17,7 +17,7 @@ command interface /autopilot/route-manager/input:
true
-
+
+ ]]>
file_selector.del();
diff --git a/gui/dialogs/sound.xml b/gui/dialogs/sound.xml
index f7042bc95..647ba4c80 100644
--- a/gui/dialogs/sound.xml
+++ b/gui/dialogs/sound.xml
@@ -151,40 +151,6 @@
3
0
- Chatter
- left
-
- /sim/sound/enabled
-
-
-
-
- 3
- 1
- /sim/sound/chatter/enabled
-
- dialog-apply
-
-
- /sim/sound/enabled
-
-
-
-
- 3
- 2
- /sim/sound/chatter/volume
-
- dialog-apply
-
-
- /sim/sound/enabled
-
-
-
-
- 4
- 0
Avionics
left
@@ -193,7 +159,7 @@
- 4
+ 3
1
/sim/sound/avionics/enabled
@@ -205,7 +171,7 @@
- 4
+ 3
2
/sim/sound/avionics/volume
@@ -217,7 +183,7 @@
- 4
+ 3
3
/sim/sound/avionics/external-view
@@ -229,7 +195,7 @@
- 5
+ 4
0
ATC
left
@@ -239,7 +205,7 @@
- 5
+ 4
1
/sim/sound/atc/enabled
@@ -251,7 +217,7 @@
- 5
+ 4
2
/sim/sound/atc/volume
@@ -263,7 +229,7 @@
- 5
+ 4
3
/sim/sound/atc/external-view
@@ -275,7 +241,7 @@
- 6
+ 5
0
AI/MP
left
@@ -285,7 +251,7 @@
- 6
+ 5
1
/sim/sound/aimodels/enabled
@@ -297,7 +263,7 @@
- 6
+ 5
2
/sim/sound/aimodels/volume
diff --git a/gui/dialogs/system-failures.xml b/gui/dialogs/system-failures.xml
index 64be83cc4..3385bd5de 100644
--- a/gui/dialogs/system-failures.xml
+++ b/gui/dialogs/system-failures.xml
@@ -30,40 +30,44 @@
i += 1;
foreach (var e; engines.getChildren("engine")) {
- if (((e.getChild("starter") != nil) and (e.getChild("starter") != "")) or
- ((e.getChild("running") != nil) and (e.getChild("running") != "")) ) {
- row = row + 1;
+ var starter = e.getChild("starter");
+ var running = e.getChild("running");
- # Set up the label
- target = group.getNode("text[" ~ i ~ "]", 1);
- props.copy(group.getNode("text-template"), target);
- target.getNode("row").setValue(row);
+ (starter != nil and starter != "" and starter.getType() != "NONE")
+ or (running != nil and running != "" and running.getType() != "NONE")
+ or continue;
- if (size(engines.getChildren("engine")) == 1) {
- target.getNode("label").setValue("Engine");
- } else {
- # Engines are indexed from 1 in the GUI.
- target.getNode("label").setValue("Engine " ~ (engine + 1));
- }
+ row = row + 1;
- # Now the checkbox
- target = group.getNode("checkbox[" ~ i ~ "]", 1);
- props.copy(group.getChild("checkbox-template"), target);
- target.getNode("row").setValue(row);
+ # Set up the label
+ target = group.getNode("text[" ~ i ~ "]", 1);
+ props.copy(group.getNode("text-template"), target);
+ target.getNode("row").setValue(row);
- var failure = "/sim/failure-manager/engines/engine[" ~ engine ~ "]/serviceable";
- target.getNode("property").setValue(failure);
-
- # Finally the MTBF
- target = group.getNode("input[" ~ i ~ "]", 1);
- props.copy(group.getChild("input-template"), target);
- target.getNode("row").setValue(row);
- i += 1;
-
- var mtbf = "/sim/failure-manager/engines/engine[" ~ engine ~ "]/mtbf";
- target.getNode("property").setValue(mtbf);
- engine += 1;
+ if (size(engines.getChildren("engine")) == 1) {
+ target.getNode("label").setValue("Engine");
+ } else {
+ # Engines are indexed from 1 in the GUI.
+ target.getNode("label").setValue("Engine " ~ (engine + 1));
}
+
+ # Now the checkbox
+ target = group.getNode("checkbox[" ~ i ~ "]", 1);
+ props.copy(group.getChild("checkbox-template"), target);
+ target.getNode("row").setValue(row);
+
+ var failure = "/sim/failure-manager/engines/engine[" ~ engine ~ "]/serviceable";
+ target.getNode("property").setValue(failure);
+
+ # Finally the MTBF
+ target = group.getNode("input[" ~ i ~ "]", 1);
+ props.copy(group.getChild("input-template"), target);
+ target.getNode("row").setValue(row);
+ i += 1;
+
+ var mtbf = "/sim/failure-manager/engines/engine[" ~ engine ~ "]/mtbf";
+ target.getNode("property").setValue(mtbf);
+ engine += 1;
}
@@ -132,7 +136,7 @@
1
1
- /systems/vacuum/serviceable
+ /sim/failure-manager/systems/vacuum/serviceable
@@ -151,7 +155,7 @@
2
1
- /systems/static/serviceable
+ /sim/failure-manager/systems/static/serviceable
@@ -170,7 +174,7 @@
3
1
- /systems/pitot/serviceable
+ /sim/failure-manager/systems/pitot/serviceable
@@ -189,7 +193,7 @@
4
1
- /systems/electrical/serviceable
+ /sim/failure-manager/systems/electrical/serviceable
@@ -287,13 +291,13 @@
1
1
- /gear/serviceable
+ /sim/failure-manager/controls/gear/serviceable
1
2
- /sim/failure-manager/controls/gear/gear-down/mcbf
+ /sim/failure-manager/controls/gear/mcbf
@@ -402,7 +406,7 @@
- Reset
+ Refresh
true
dialog-update
diff --git a/gui/menubar.xml b/gui/menubar.xml
index e45f1474a..50ed57300 100644
--- a/gui/menubar.xml
+++ b/gui/menubar.xml
@@ -75,6 +75,16 @@
+ -
+
aircraft-center
+
+ nasal
+
+
+
+
-
exit
Esc
@@ -322,13 +332,23 @@
-
map
- Ctrl-M
+ Ctrl-M
dialog-show
map
+ -
+
map-canvas
+
+
+ dialog-show
+ map-canvas
+
+
+
+
-
stopwatch
diff --git a/gui/styles/AmbianceClassic/style.xml b/gui/styles/AmbianceClassic/style.xml
index 6ec09432d..42ef16fa8 100644
--- a/gui/styles/AmbianceClassic/style.xml
+++ b/gui/styles/AmbianceClassic/style.xml
@@ -78,6 +78,12 @@
0.988
+
+ 0.89
+ 0.89
+ 0.89
+
+
diff --git a/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png b/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png
new file mode 100644
index 000000000..2ed947c2e
Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png differ
diff --git a/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png b/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png
new file mode 100644
index 000000000..27285e28c
Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png differ
diff --git a/gui/styles/AmbianceClassic/widgets/button-active-disabled.png b/gui/styles/AmbianceClassic/widgets/button-active-disabled.png
new file mode 100644
index 000000000..9dc667036
Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/button-active-disabled.png differ
diff --git a/gui/styles/AmbianceClassic/widgets/button-disabled.png b/gui/styles/AmbianceClassic/widgets/button-disabled.png
new file mode 100644
index 000000000..6dde09451
Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/button-disabled.png differ