From c22de5d83a67df8009ab63ed925a80719782558b Mon Sep 17 00:00:00 2001 From: naceee Date: Sun, 23 Mar 2025 21:30:44 +0100 Subject: [PATCH 1/3] Added normalization and MOArchiveBase class --- .idea/.gitignore | 8 + .idea/inspectionProfiles/Project_Default.xml | 38 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/moarchiving.iml | 12 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + README.md | 284 +- index.html | 17084 +++++----------- moarchiving.ipynb | 511 +- moarchiving/__init__.py | 2 +- moarchiving/constrained_moarchive.py | 122 +- moarchiving/get_archive.py | 52 +- moarchiving/moarchiving.py | 289 +- moarchiving/moarchiving3obj.py | 64 +- moarchiving/moarchiving4obj.py | 76 +- moarchiving/moarchiving_base.py | 261 + moarchiving/moarchiving_parent.py | 133 +- moarchiving/moarchiving_utils.py | 23 + moarchiving/test.py | 18 +- moarchiving/tests/__init__.py | 3 +- moarchiving/tests/test_normalization.py | 284 + readme_files/README_31_0.png | Bin 30055 -> 0 bytes readme_files/README_34_0.png | Bin 0 -> 30938 bytes readme_files/README_35_1.png | Bin 39749 -> 0 bytes readme_files/README_37_1.png | Bin 35823 -> 0 bytes readme_files/README_38_1.png | Bin 0 -> 39756 bytes readme_files/README_40_1.png | Bin 0 -> 35640 bytes 28 files changed, 6470 insertions(+), 12821 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/moarchiving.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 moarchiving/moarchiving_base.py create mode 100644 moarchiving/tests/test_normalization.py delete mode 100644 readme_files/README_31_0.png create mode 100644 readme_files/README_34_0.png delete mode 100644 readme_files/README_35_1.png delete mode 100644 readme_files/README_37_1.png create mode 100644 readme_files/README_38_1.png create mode 100644 readme_files/README_40_1.png diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..8498417 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,38 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..49a70d7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/moarchiving.iml b/.idea/moarchiving.iml new file mode 100644 index 0000000..8b8c395 --- /dev/null +++ b/.idea/moarchiving.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..62edb1e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index a16179d..81c2e1e 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ The implementation of the two-objective archive is heavily based on the [`bisect ## Releases +- 1.1.0 added possibility of normalization of the indicators by adding `ideal_point` and `weights` methods to the archive - [1.0.0](https://github.com/CMA-ES/moarchiving/releases/tag/r1.0.0) addition of MOArchive classes for 3 and 4 objectives, as well as a class for handling solutions to constrained problems - 0.7.0 reimplementation of `BiobjectiveNondominatedSortedList.hypervolume_improvement` by extracting a sublist first. - 0.6.0 the `infos` attribute is a `list` with corresponding (arbitrary) information, e.g. for keeping the respective solutions. @@ -75,7 +76,7 @@ The implementation of the two-objective archive is heavily based on the [`bisect 3. [Accessing solution information](#3-accessing-solution-information) 4. [Adding solutions](#4-adding-solutions) 5. [Archive size](#5-archive-size) -6. [Performance indicators](#6-performance-indicators) +6. [Performance indicators and normalization](#6-performance-indicators-and-normalization) 7. [Contributing hypervolumes](#7-contributing-hypervolumes) 8. [Hypervolume improvement](#8-hypervolume-improvement) 9. [Distance to the Pareto front](#9-distance-to-the-pareto-front) @@ -104,7 +105,7 @@ print("points in the 4 objective archive:", list(moa4obj)) points in the 2 objective archive: [[1, 5], [2, 3], [5, 0]] points in the 3 objective archive: [[3, 3, 0], [2, 2, 1], [1, 2, 3]] points in the 4 objective archive: [[1, 3, 0, 1], [1, 2, 3, 4]] - + MOArchive objects can also be initialized empty. @@ -115,10 +116,10 @@ print("points in the empty archive:", list(moa)) ``` points in the empty archive: [] - + ### 2. Constrained MOArchive -Constrained MOArchive supports all the functionalities of a non-constrained MOArchive, with the added capability of handling constraints when adding or initializing the archive. In addition to the objective values of a solution, constraint values must be provided in the form of a list or a number. A solution is deemed feasible when all its constraint values are less than or equal to zero. +Constrained MOArchive supports all the functionalities of a non-constrained MOArchive, with the added capability of handling constraints when adding or initializing the archive. In addition to the objective values of a solution, constraint values must be provided in the form of a list or a number. A solution is deemed feasible and added to the archive when all its constraint values are less than or equal to zero. ```python @@ -130,7 +131,7 @@ print("points in the archive:", list(cmoa)) ``` points in the archive: [[4, 3, 2], [1, 3, 4]] - + ### 3. Accessing solution information `archive.infos` is used to get the information on solutions in the archive. @@ -144,7 +145,7 @@ print("infos of the constrained archive", cmoa.infos) infos of the empty archive [] infos of the constrained archive ['c', 'b'] - + ### 4. Adding solutions Solutions can be added to the MOArchive at any time using the `add` function (for a single solution) or the `add_list` function (for multiple solutions). @@ -164,7 +165,7 @@ print("infos:", moa.infos) infos: ['a'] points: [[3, 2, 1], [2, 2, 2], [1, 2, 3]] infos: ['b', 'd', 'a'] - + When adding to the constrained archive, constraint values must be added as well. @@ -177,7 +178,7 @@ print("infos:", cmoa.infos) points: [[4, 3, 2], [3, 3, 3], [1, 3, 4]] infos: ['c', 'e', 'b'] - + ### 5. Archive size The MOArchive implements some functionality of a list (in the 2 objective case, it actually extends the `list` class, though this is not the case in 3 and 4 objectives). In particular, it includes the `len` method to get the number of solutions in the archive as well as the `in` keyword to check if a point is in the archive. @@ -194,26 +195,45 @@ print("[3, 2, 0] in moa:", [3, 2, 0] in moa) Length of the archive: 3 [2, 2, 2] in moa: True [3, 2, 0] in moa: False + - -### 6. Performance indicators +### 6. Performance indicators and normalization An archive provides the following performance indicators: - `hypervolume` - `hypervolume_plus`, providing additionally the closest distance to the reference area for an empty archive, see [here](https://doi.org/10.1145/3321707.3321852) and [here](https://doi.org/10.1109/TEVC.2022.3210897) - `hypervolume_plus_constr` (for CMOArchive), based on, but not completely equal to the one defined [here](https://doi.org/10.1016/j.ins.2022.05.106) -Indicators are defined for maximization (the original `hypervolume_plus_constr` indicator is multiplied by -1). When the archive is not empty, all the indicators are positive and have the same value. As the archive does not (yet) support an ideal point, the values of indicators are not normalized. +Indicators are defined for maximization (the original `hypervolume_plus_constr` indicator is multiplied by -1). When the archive is not empty, all the indicators are positive and have the same value. The values of indicators are normalized, if the user specifies the ideal point, which can be done at the initialization using `ideal_point` keyword or later using `ideal_point` method. Custom weights for each dimension can be set in the same way using `weights` keyword or method. The default weights are equal to 1 for all objectives. ```python +# not normalized values print("Hypervolume of the archive:", moa.hypervolume) print("Hypervolume plus of the archive:", moa.hypervolume_plus) + +# add ideal point +moa.ideal_point([0, 0, 0]) +print("Hypervolume of the normalized archive:", moa.hypervolume) + +# add also weights +moa.weights([2, 3, 5]) +print("Hypervolume of the normalized archive with weights:", moa.hypervolume) ``` Hypervolume of the archive: 12 Hypervolume plus of the archive: 12 + Hypervolume of the normalized archive: 0.1875 + Hypervolume of the normalized archive with weights: 5.625 + +When using constrained moarchive, the constraint violations can be normalized as well, if the list of max violations is provided. + + +```python +cmoa = get_cmo_archive([[1, 2, 3], [4, 4, 2], [3, 3, 3]], [[0, 10], [0.3, 4], [1, 0]], + reference_point=[5, 5, 5], ideal_point=[0, 0, 0], max_g_vals=[1, 10], tau=1) +``` In case of a constrained MOArchive, the `hypervolume_plus_constr` attribute can be accessed as well. @@ -224,11 +244,24 @@ print("Hypervolume plus of the constrained archive:", cmoa.hypervolume_plus) print("Hypervolume plus constr of the constrained archive:", cmoa.hypervolume_plus_constr) ``` - Hyperolume of the constrained archive: 14 - Hypervolume plus of the constrained archive: 14 - Hypervolume plus constr of the constrained archive: 14 + Hyperolume of the constrained archive: 0.0 + Hypervolume plus of the constrained archive: -inf + Hypervolume plus constr of the constrained archive: -1.7 + +```python +cmoa.add([6, 6, 6], [0, 0]) +print("Hyperolume of the constrained archive:", cmoa.hypervolume) +print("Hypervolume plus of the constrained archive:", cmoa.hypervolume_plus) +print("Hypervolume plus constr of the constrained archive:", cmoa.hypervolume_plus_constr) +``` + + Hyperolume of the constrained archive: 0.0 + Hypervolume plus of the constrained archive: -0.3464101615137755 + Hypervolume plus constr of the constrained archive: -0.3464101615137755 + + ### 7. Contributing hypervolumes The `contributing_hypervolumes` attribute provides a list of hypervolume contributions for each point of the archive. Alternatively, the contribution for a single point can be computed using the `contributing_hypervolume(point)` method. @@ -241,11 +274,11 @@ for i, objectives in enumerate(moa): print("All contributing hypervolumes:", moa.contributing_hypervolumes) ``` - contributing hv of point [3, 2, 1] is 2 - contributing hv of point [2, 2, 2] is 2 - contributing hv of point [1, 2, 3] is 2 - All contributing hypervolumes: [Fraction(2, 1), Fraction(2, 1), Fraction(2, 1)] - + contributing hv of point [3, 2, 1] is 0.9375 + contributing hv of point [2, 2, 2] is 0.9375 + contributing hv of point [1, 2, 3] is 0.9375 + All contributing hypervolumes: [0.9375, 0.9375, 0.9375] + ### 8. Hypervolume improvement The `hypervolume_improvement(point)` method returns the improvement of the hypervolume if we would add the point to the archive. @@ -259,10 +292,10 @@ moa.add(point) print(f"hypervolume after adding {point}: {moa.hypervolume}") ``` - hypervolume before adding [1, 3, 0]: 12 - hypervolume improvement of point [1, 3, 0]: 6 - hypervolume after adding [1, 3, 0]: 18 - + hypervolume before adding [1, 3, 0]: 5.625 + hypervolume improvement of point [1, 3, 0]: 2.8125 + hypervolume after adding [1, 3, 0]: 8.4375 + ### 9. Distance to the empirical Pareto front The `distance_to_pareto_front(point)` method returns the distance between the given point and the Pareto front. @@ -276,8 +309,8 @@ print("Distance of [3, 2, 2] to pareto front:", moa.distance_to_pareto_front([3, Current archive: [[1, 3, 0], [3, 2, 1], [2, 2, 2], [1, 2, 3]] Distance of [3, 2, 1] to pareto front: 0.0 - Distance of [3, 2, 2] to pareto front: 1.0 - + Distance of [3, 2, 2] to pareto front: 0.5 + ### 10. Enabling or disabling fractions To avoid loss of precision, fractions are used by default. This can be changed to floats by setting the `hypervolume_final_float_type` and `hypervolume_computation_float_type` function attributes. @@ -300,5 +333,206 @@ print(moa3_nofr.hypervolume) 161245156349030777798724819133399/10141204801825835211973625643008 15.899999999999999 + + +### 11. Additional functions +MOArchive also implements additional functions to check whether a given point is in the archive: +- `in_domain`: Is the point in the domain? +- `dominates`: Is the point dominated by the archive? +- `dominators`: Which points (and how many) dominate the given point? + + +```python +points_list = [[5, 5, 0], [2, 2, 3], [0, 2, 3]] +print("archive:", list(moa), "\n") +print("point | in domain | dominates | num of dominators | dominators") +print("----------|-----------|-----------|-------------------|-----------") +for point in points_list: + print(f"{point} | {moa.in_domain(point):9} | {moa.dominates(point):9} | " + f"{moa.dominators(point, number_only=True):17} | {moa.dominators(point)}") +``` + + archive: [[1, 3, 0], [3, 2, 1], [2, 2, 2], [1, 2, 3]] + + point | in domain | dominates | num of dominators | dominators + ----------|-----------|-----------|-------------------|----------- + [5, 5, 0] | 0 | 1 | 1 | [[1, 3, 0]] + [2, 2, 3] | 1 | 1 | 2 | [[2, 2, 2], [1, 2, 3]] + [0, 2, 3] | 1 | 0 | 0 | [] + + +### 12. Visualization of indicator values +By saving the values of indicators for each solution added to the archive, we can visualize their change over time. + + +```python +import matplotlib.pyplot as plt +import random + +n_obj = 3 + +indicators_cmoa = [] +indicators_moa = [] +cmoa = get_cmo_archive(reference_point=[0.5] * n_obj, n_obj=n_obj, tau=0.2) +moa = get_mo_archive(reference_point=[0.1] * n_obj, n_obj=n_obj) + +for i in range(2000): + objectives = [random.random() for _ in range(n_obj)] + constraints = [max(random.random() - 0.1, 0), max(random.random() - 0.1, 0)] + + cmoa.add(objectives, constraints, info=f"point_{i}") + moa.add(objectives, info=f"point_{i}") + + indicators_cmoa.append((cmoa.hypervolume_plus_constr, cmoa.hypervolume_plus, cmoa.hypervolume)) + indicators_moa.append((moa.hypervolume_plus, moa.hypervolume)) + +``` + + +```python +fig, axs = plt.subplots(1, 2, figsize=(10, 5)) +axs[0].plot([x[2] for x in indicators_cmoa], label="hypervolume") +axs[0].plot([x[1] for x in indicators_cmoa], label="hypervolume_plus") +axs[0].plot([x[0] for x in indicators_cmoa], label="hypervolume_plus_constr") +axs[0].axhline(0, color="black", linestyle="--", zorder=0) +axs[0].axhline(-cmoa.tau, color="black", linestyle="--", zorder=0) +axs[0].set_title("Constrained MOArchive") +axs[0].legend() + +axs[1].plot([x[1] for x in indicators_moa], label="hypervolume") +axs[1].plot([x[0] for x in indicators_moa], label="hypervolume_plus") +axs[1].set_title("MOArchive") +axs[1].axhline(0, color="black", linestyle="--", zorder=0) +axs[1].legend() +plt.show() +``` + + + +![png](README_files/README_34_0.png) + + + +### 13. Performance tests + + +```python +import time +from moarchiving.tests.point_sampling import get_non_dominated_points +test_archive_sizes = [0] + [2 ** i for i in range(21)] + +get_mo_archive.hypervolume_computation_float_type = fractions.Fraction +get_mo_archive.hypervolume_final_float_type = fractions.Fraction +``` + +#### 13.1. Initializing the archive + + +```python +n_repeats = 100 +time_limit = 10 + +for n_obj in [2, 3, 4]: + print(f"Testing {n_obj} objectives") + times = [] + archive_sizes = [] + + for archive_size in test_archive_sizes: + points = get_non_dominated_points(archive_size, n_dim=n_obj) + t0 = time.time() + moa = [get_mo_archive(points, [1] * n_obj, n_obj=n_obj) + for _ in range(n_repeats)] + hv = [m.hypervolume for m in moa] + t1 = time.time() + + times.append(max((t1 - t0) / n_repeats, 10e-4)) + print(".", end="") + archive_sizes.append(archive_size) + + if t1 - t0 > time_limit: + break + print() + + plt.plot(archive_sizes, times, '-o', label=f"{n_obj} objectives") + +plt.title("Initialization and hypervolume computation") +plt.xlabel("Archive size") +plt.ylabel("Time [s]") +plt.yscale("log") +plt.xscale("log") +plt.grid(True) +plt.legend() +plt.show() +``` + + Testing 2 objectives + .............. + Testing 3 objectives + ............. + Testing 4 objectives + ......... + + + + +![png](README_files/README_38_1.png) + + + +#### 13.2. Adding a solution to an existing archive + + +```python +n_repeats = 10 +time_limit = 10 + +for n_obj in [2, 3, 4]: + print(f"Testing {n_obj} objectives") + times = [] + archive_sizes = [] + + for archive_size in test_archive_sizes: + + points = get_non_dominated_points(archive_size, n_dim=n_obj) + add_points = get_non_dominated_points(n_repeats, n_dim=n_obj) + moa = [get_mo_archive(points, [1] * n_obj, n_obj=n_obj) for _ in range(n_repeats)] + + t0 = time.time() + for i, m in enumerate(moa): + m.add(add_points[i]) + t1 = time.time() + + times.append(max((t1 - t0) / n_repeats, 10e-4)) + print(".", end="") + archive_sizes.append(archive_size) + + if t1 - t0 > time_limit: + break + print() + time.sleep(1) + + plt.plot(archive_sizes, times, '-o', label=f"{n_obj} objectives") + +plt.title("Adding a point to the archive") +plt.xlabel("Archive size") +plt.ylabel("Time [s]") +plt.yscale("log") +plt.xscale("log") +plt.grid(True) +plt.legend() +plt.show() +``` + + Testing 2 objectives + ...................... + Testing 3 objectives + ................ + Testing 4 objectives + ........... + + + +![png](README_files/README_40_1.png) + diff --git a/index.html b/index.html index 968fc3d..150f355 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,9 @@ - - - + + + moarchiving - - - - - - - - - - - - - - + + - - + + + + +
- - - - - - - diff --git a/moarchiving.ipynb b/moarchiving.ipynb index ec149b0..f3a7add 100644 --- a/moarchiving.ipynb +++ b/moarchiving.ipynb @@ -69,6 +69,7 @@ "\n", "\n", "## Releases\n", + "- 1.1.0 added possibility of normalization of the indicators by adding `ideal_point` and `weights` methods to the archive\n", "- [1.0.0](https://github.com/CMA-ES/moarchiving/releases/tag/r1.0.0) addition of MOArchive classes for 3 and 4 objectives, as well as a class for handling solutions to constrained problems\n", "- 0.7.0 reimplementation of `BiobjectiveNondominatedSortedList.hypervolume_improvement` by extracting a sublist first.\n", "- 0.6.0 the `infos` attribute is a `list` with corresponding (arbitrary) information, e.g. for keeping the respective solutions.\n", @@ -81,7 +82,7 @@ "3. [Accessing solution information](#3-accessing-solution-information)\n", "4. [Adding solutions](#4-adding-solutions)\n", "5. [Archive size](#5-archive-size)\n", - "6. [Performance indicators](#6-performance-indicators)\n", + "6. [Performance indicators and normalization](#6-performance-indicators-and-normalization)\n", "7. [Contributing hypervolumes](#7-contributing-hypervolumes)\n", "8. [Hypervolume improvement](#8-hypervolume-improvement)\n", "9. [Distance to the Pareto front](#9-distance-to-the-pareto-front)\n", @@ -102,13 +103,23 @@ }, { "cell_type": "code", - "execution_count": 1, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.006989Z", - "start_time": "2025-02-11T10:02:12.953105Z" + "end_time": "2025-04-16T08:24:40.129982Z", + "start_time": "2025-04-16T08:24:40.121997Z" } }, + "source": [ + "from moarchiving import get_mo_archive\n", + "\n", + "moa2obj = get_mo_archive([[1, 5], [2, 3], [4, 5], [5, 0]], reference_point=[10, 10], infos=[\"a\", \"b\", \"c\", \"d\"])\n", + "moa3obj = get_mo_archive([[1, 2, 3], [3, 2, 1], [3, 3, 0], [2, 2, 1]], [10, 10, 10], [\"a\", \"b\", \"c\", \"d\"])\n", + "moa4obj = get_mo_archive([[1, 2, 3, 4], [1, 3, 4, 5], [4, 3, 2, 1], [1, 3, 0, 1]], reference_point=[10, 10, 10, 10], infos=[\"a\", \"b\", \"c\", \"d\"])\n", + "\n", + "print(\"points in the 2 objective archive:\", list(moa2obj))\n", + "print(\"points in the 3 objective archive:\", list(moa3obj))\n", + "print(\"points in the 4 objective archive:\", list(moa4obj))" + ], "outputs": [ { "name": "stdout", @@ -120,17 +131,7 @@ ] } ], - "source": [ - "from moarchiving import get_mo_archive\n", - "\n", - "moa2obj = get_mo_archive([[1, 5], [2, 3], [4, 5], [5, 0]], reference_point=[10, 10], infos=[\"a\", \"b\", \"c\", \"d\"])\n", - "moa3obj = get_mo_archive([[1, 2, 3], [3, 2, 1], [3, 3, 0], [2, 2, 1]], [10, 10, 10], [\"a\", \"b\", \"c\", \"d\"])\n", - "moa4obj = get_mo_archive([[1, 2, 3, 4], [1, 3, 4, 5], [4, 3, 2, 1], [1, 3, 0, 1]], reference_point=[10, 10, 10, 10], infos=[\"a\", \"b\", \"c\", \"d\"])\n", - "\n", - "print(\"points in the 2 objective archive:\", list(moa2obj))\n", - "print(\"points in the 3 objective archive:\", list(moa3obj))\n", - "print(\"points in the 4 objective archive:\", list(moa4obj))" - ] + "execution_count": 23 }, { "cell_type": "markdown", @@ -141,13 +142,16 @@ }, { "cell_type": "code", - "execution_count": 2, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.021921Z", - "start_time": "2025-02-11T10:02:13.008956Z" + "end_time": "2025-04-16T08:24:40.238685Z", + "start_time": "2025-04-16T08:24:40.214755Z" } }, + "source": [ + "moa = get_mo_archive(reference_point=[4, 4, 4])\n", + "print(\"points in the empty archive:\", list(moa))" + ], "outputs": [ { "name": "stdout", @@ -157,28 +161,31 @@ ] } ], - "source": [ - "moa = get_mo_archive(reference_point=[4, 4, 4])\n", - "print(\"points in the empty archive:\", list(moa))" - ] + "execution_count": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Constrained MOArchive\n", - "Constrained MOArchive supports all the functionalities of a non-constrained MOArchive, with the added capability of handling constraints when adding or initializing the archive. In addition to the objective values of a solution, constraint values must be provided in the form of a list or a number. A solution is deemed feasible when all its constraint values are less than or equal to zero. " + "Constrained MOArchive supports all the functionalities of a non-constrained MOArchive, with the added capability of handling constraints when adding or initializing the archive. In addition to the objective values of a solution, constraint values must be provided in the form of a list or a number. A solution is deemed feasible and added to the archive when all its constraint values are less than or equal to zero. " ] }, { "cell_type": "code", - "execution_count": 3, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.037529Z", - "start_time": "2025-02-11T10:02:13.022929Z" + "end_time": "2025-04-16T08:24:40.254643Z", + "start_time": "2025-04-16T08:24:40.241678Z" } }, + "source": [ + "from moarchiving import get_cmo_archive\n", + "\n", + "cmoa = get_cmo_archive([[1, 2, 3], [1, 3, 4], [4, 3, 2], [1, 3, 0]], [[3, 0], [0, 0], [0, 0], [0, 1]], \n", + " reference_point=[5, 5, 5], infos=[\"a\", \"b\", \"c\", \"d\"])\n", + "print(\"points in the archive:\", list(cmoa))" + ], "outputs": [ { "name": "stdout", @@ -188,13 +195,7 @@ ] } ], - "source": [ - "from moarchiving import get_cmo_archive\n", - "\n", - "cmoa = get_cmo_archive([[1, 2, 3], [1, 3, 4], [4, 3, 2], [1, 3, 0]], [[3, 0], [0, 0], [0, 0], [0, 1]], \n", - " reference_point=[5, 5, 5], infos=[\"a\", \"b\", \"c\", \"d\"])\n", - "print(\"points in the archive:\", list(cmoa))" - ] + "execution_count": 25 }, { "cell_type": "markdown", @@ -206,13 +207,17 @@ }, { "cell_type": "code", - "execution_count": 4, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.052920Z", - "start_time": "2025-02-11T10:02:13.040522Z" + "end_time": "2025-04-16T08:24:40.270599Z", + "start_time": "2025-04-16T08:24:40.256637Z" } }, + "source": [ + "# infos of the previously defined empty archive\n", + "print(\"infos of the empty archive\", moa.infos)\n", + "print(\"infos of the constrained archive\", cmoa.infos)" + ], "outputs": [ { "name": "stdout", @@ -223,11 +228,7 @@ ] } ], - "source": [ - "# infos of the previously defined empty archive\n", - "print(\"infos of the empty archive\", moa.infos)\n", - "print(\"infos of the constrained archive\", cmoa.infos)" - ] + "execution_count": 26 }, { "cell_type": "markdown", @@ -239,13 +240,21 @@ }, { "cell_type": "code", - "execution_count": 5, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.067856Z", - "start_time": "2025-02-11T10:02:13.054891Z" + "end_time": "2025-04-16T08:24:40.333098Z", + "start_time": "2025-04-16T08:24:40.321464Z" } }, + "source": [ + "moa.add([1, 2, 3], \"a\")\n", + "print(\"points:\", list(moa))\n", + "print(\"infos:\", moa.infos)\n", + "\n", + "moa.add_list([[3, 2, 1], [2, 3, 2], [2, 2, 2]], [\"b\", \"c\", \"d\"])\n", + "print(\"points:\", list(moa))\n", + "print(\"infos:\", moa.infos)" + ], "outputs": [ { "name": "stdout", @@ -258,15 +267,7 @@ ] } ], - "source": [ - "moa.add([1, 2, 3], \"a\")\n", - "print(\"points:\", list(moa))\n", - "print(\"infos:\", moa.infos)\n", - "\n", - "moa.add_list([[3, 2, 1], [2, 3, 2], [2, 2, 2]], [\"b\", \"c\", \"d\"])\n", - "print(\"points:\", list(moa))\n", - "print(\"infos:\", moa.infos)" - ] + "execution_count": 27 }, { "cell_type": "markdown", @@ -277,13 +278,17 @@ }, { "cell_type": "code", - "execution_count": 6, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.082815Z", - "start_time": "2025-02-11T10:02:13.069850Z" + "end_time": "2025-04-16T08:24:40.380989Z", + "start_time": "2025-04-16T08:24:40.362040Z" } }, + "source": [ + "cmoa.add_list([[3, 3, 3], [1, 1, 1]], [[0, 0], [42, 0]], [\"e\", \"f\"])\n", + "print(\"points:\", list(cmoa))\n", + "print(\"infos:\", cmoa.infos)" + ], "outputs": [ { "name": "stdout", @@ -294,11 +299,7 @@ ] } ], - "source": [ - "cmoa.add_list([[3, 3, 3], [1, 1, 1]], [[0, 0], [42, 0]], [\"e\", \"f\"])\n", - "print(\"points:\", list(cmoa))\n", - "print(\"infos:\", cmoa.infos)" - ] + "execution_count": 28 }, { "cell_type": "markdown", @@ -310,13 +311,18 @@ }, { "cell_type": "code", - "execution_count": 7, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.098772Z", - "start_time": "2025-02-11T10:02:13.084811Z" + "end_time": "2025-04-16T08:24:40.476153Z", + "start_time": "2025-04-16T08:24:40.463189Z" } }, + "source": [ + "print(\"Points in the archive:\", list(moa))\n", + "print(\"Length of the archive:\", len(moa))\n", + "print(\"[2, 2, 2] in moa:\", [2, 2, 2] in moa)\n", + "print(\"[3, 2, 0] in moa:\", [3, 2, 0] in moa)" + ], "outputs": [ { "name": "stdout", @@ -329,49 +335,75 @@ ] } ], - "source": [ - "print(\"Points in the archive:\", list(moa))\n", - "print(\"Length of the archive:\", len(moa))\n", - "print(\"[2, 2, 2] in moa:\", [2, 2, 2] in moa)\n", - "print(\"[3, 2, 0] in moa:\", [3, 2, 0] in moa)" - ] + "execution_count": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 6. Performance indicators\n", + "### 6. Performance indicators and normalization\n", "An archive provides the following performance indicators:\n", "- `hypervolume`\n", "- `hypervolume_plus`, providing additionally the closest distance to the reference area for an empty archive, see [here](https://doi.org/10.1145/3321707.3321852) and [here](https://doi.org/10.1109/TEVC.2022.3210897)\n", "- `hypervolume_plus_constr` (for CMOArchive), based on, but not completely equal to the one defined [here](https://doi.org/10.1016/j.ins.2022.05.106)\n", "\n", - "Indicators are defined for maximization (the original `hypervolume_plus_constr` indicator is multiplied by -1). When the archive is not empty, all the indicators are positive and have the same value. As the archive does not (yet) support an ideal point, the values of indicators are not normalized.\n" + "Indicators are defined for maximization (the original `hypervolume_plus_constr` indicator is multiplied by -1). When the archive is not empty, all the indicators are positive and have the same value. The values of indicators are normalized, if the user specifies the ideal point, which can be done at the initialization using `ideal_point` keyword or later using `ideal_point` method. Custom weights for each dimension can be set in the same way using `weights` keyword or method. The default weights are equal to 1 for all objectives.\n" ] }, { "cell_type": "code", - "execution_count": 8, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.113735Z", - "start_time": "2025-02-11T10:02:13.101772Z" + "end_time": "2025-04-16T08:24:40.537987Z", + "start_time": "2025-04-16T08:24:40.524025Z" } }, + "source": [ + "# not normalized values\n", + "print(\"Hypervolume of the archive:\", moa.hypervolume)\n", + "print(\"Hypervolume plus of the archive:\", moa.hypervolume_plus)\n", + "\n", + "# add ideal point\n", + "moa.ideal_point([0, 0, 0])\n", + "print(\"Hypervolume of the normalized archive:\", moa.hypervolume)\n", + "\n", + "# add also weights\n", + "moa.weights([2, 3, 5])\n", + "print(\"Hypervolume of the normalized archive with weights:\", moa.hypervolume)" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hypervolume of the archive: 12\n", - "Hypervolume plus of the archive: 12\n" + "Hypervolume plus of the archive: 12\n", + "Hypervolume of the normalized archive: 0.1875\n", + "Hypervolume of the normalized archive with weights: 5.625\n" ] } ], + "execution_count": 30 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "When using constrained moarchive, the constraint violations can be normalized as well, if the list of max violations is provided." + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-04-16T08:24:40.616136Z", + "start_time": "2025-04-16T08:24:40.604811Z" + } + }, + "cell_type": "code", "source": [ - "print(\"Hypervolume of the archive:\", moa.hypervolume)\n", - "print(\"Hypervolume plus of the archive:\", moa.hypervolume_plus)" - ] + "cmoa = get_cmo_archive([[1, 2, 3], [4, 4, 2], [3, 3, 3]], [[0, 10], [0.3, 4], [1, 0]], \n", + " reference_point=[5, 5, 5], ideal_point=[0, 0, 0], max_g_vals=[1, 10], tau=1)" + ], + "outputs": [], + "execution_count": 31 }, { "cell_type": "markdown", @@ -381,30 +413,57 @@ ] }, { - "cell_type": "code", - "execution_count": 9, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.128695Z", - "start_time": "2025-02-11T10:02:13.115740Z" + "end_time": "2025-04-16T08:24:40.710883Z", + "start_time": "2025-04-16T08:24:40.696918Z" } }, + "cell_type": "code", + "source": [ + "print(\"Hyperolume of the constrained archive:\", cmoa.hypervolume)\n", + "print(\"Hypervolume plus of the constrained archive:\", cmoa.hypervolume_plus)\n", + "print(\"Hypervolume plus constr of the constrained archive:\", cmoa.hypervolume_plus_constr)" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Hyperolume of the constrained archive: 14\n", - "Hypervolume plus of the constrained archive: 14\n", - "Hypervolume plus constr of the constrained archive: 14\n" + "Hyperolume of the constrained archive: 0.0\n", + "Hypervolume plus of the constrained archive: -inf\n", + "Hypervolume plus constr of the constrained archive: -1.7\n" ] } ], + "execution_count": 32 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-04-16T08:24:40.818704Z", + "start_time": "2025-04-16T08:24:40.805739Z" + } + }, + "cell_type": "code", "source": [ + "cmoa.add([6, 6, 6], [0, 0])\n", "print(\"Hyperolume of the constrained archive:\", cmoa.hypervolume)\n", "print(\"Hypervolume plus of the constrained archive:\", cmoa.hypervolume_plus)\n", "print(\"Hypervolume plus constr of the constrained archive:\", cmoa.hypervolume_plus_constr)" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hyperolume of the constrained archive: 0.0\n", + "Hypervolume plus of the constrained archive: -0.3464101615137755\n", + "Hypervolume plus constr of the constrained archive: -0.3464101615137755\n" + ] + } + ], + "execution_count": 33 }, { "cell_type": "markdown", @@ -416,32 +475,32 @@ }, { "cell_type": "code", - "execution_count": 10, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.144651Z", - "start_time": "2025-02-11T10:02:13.131685Z" + "end_time": "2025-04-16T08:24:40.880637Z", + "start_time": "2025-04-16T08:24:40.860691Z" } }, + "source": [ + "for i, objectives in enumerate(moa):\n", + " assert moa.contributing_hypervolume(objectives) == moa.contributing_hypervolumes[i]\n", + " print(\"contributing hv of point\", objectives, \"is\", moa.contributing_hypervolume(objectives))\n", + "\n", + "print(\"All contributing hypervolumes:\", moa.contributing_hypervolumes)" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "contributing hv of point [3, 2, 1] is 2\n", - "contributing hv of point [2, 2, 2] is 2\n", - "contributing hv of point [1, 2, 3] is 2\n", - "All contributing hypervolumes: [Fraction(2, 1), Fraction(2, 1), Fraction(2, 1)]\n" + "contributing hv of point [3, 2, 1] is 0.9375\n", + "contributing hv of point [2, 2, 2] is 0.9375\n", + "contributing hv of point [1, 2, 3] is 0.9375\n", + "All contributing hypervolumes: [0.9375, 0.9375, 0.9375]\n" ] } ], - "source": [ - "for i, objectives in enumerate(moa):\n", - " assert moa.contributing_hypervolume(objectives) == moa.contributing_hypervolumes[i]\n", - " print(\"contributing hv of point\", objectives, \"is\", moa.contributing_hypervolume(objectives))\n", - "\n", - "print(\"All contributing hypervolumes:\", moa.contributing_hypervolumes)" - ] + "execution_count": 34 }, { "cell_type": "markdown", @@ -453,31 +512,31 @@ }, { "cell_type": "code", - "execution_count": 11, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.159612Z", - "start_time": "2025-02-11T10:02:13.145649Z" + "end_time": "2025-04-16T08:24:40.928217Z", + "start_time": "2025-04-16T08:24:40.915135Z" } }, + "source": [ + "point = [1, 3, 0]\n", + "print(f\"hypervolume before adding {point}: {moa.hypervolume}\")\n", + "print(f\"hypervolume improvement of point {point}: {moa.hypervolume_improvement(point)}\")\n", + "moa.add(point)\n", + "print(f\"hypervolume after adding {point}: {moa.hypervolume}\")" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "hypervolume before adding [1, 3, 0]: 12\n", - "hypervolume improvement of point [1, 3, 0]: 6\n", - "hypervolume after adding [1, 3, 0]: 18\n" + "hypervolume before adding [1, 3, 0]: 5.625\n", + "hypervolume improvement of point [1, 3, 0]: 2.8125\n", + "hypervolume after adding [1, 3, 0]: 8.4375\n" ] } ], - "source": [ - "point = [1, 3, 0]\n", - "print(f\"hypervolume before adding {point}: {moa.hypervolume}\")\n", - "print(f\"hypervolume improvement of point {point}: {moa.hypervolume_improvement(point)}\")\n", - "moa.add(point)\n", - "print(f\"hypervolume after adding {point}: {moa.hypervolume}\")" - ] + "execution_count": 35 }, { "cell_type": "markdown", @@ -489,13 +548,17 @@ }, { "cell_type": "code", - "execution_count": 12, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.175569Z", - "start_time": "2025-02-11T10:02:13.161608Z" + "end_time": "2025-04-16T08:24:40.960132Z", + "start_time": "2025-04-16T08:24:40.945173Z" } }, + "source": [ + "print(f\"Current archive: {list(moa)}\")\n", + "print(\"Distance of [3, 2, 1] to pareto front:\", moa.distance_to_pareto_front([3, 2, 1]))\n", + "print(\"Distance of [3, 2, 2] to pareto front:\", moa.distance_to_pareto_front([3, 3, 3]))" + ], "outputs": [ { "name": "stdout", @@ -503,15 +566,11 @@ "text": [ "Current archive: [[1, 3, 0], [3, 2, 1], [2, 2, 2], [1, 2, 3]]\n", "Distance of [3, 2, 1] to pareto front: 0.0\n", - "Distance of [3, 2, 2] to pareto front: 1.0\n" + "Distance of [3, 2, 2] to pareto front: 0.5\n" ] } ], - "source": [ - "print(f\"Current archive: {list(moa)}\")\n", - "print(\"Distance of [3, 2, 1] to pareto front:\", moa.distance_to_pareto_front([3, 2, 1]))\n", - "print(\"Distance of [3, 2, 2] to pareto front:\", moa.distance_to_pareto_front([3, 3, 3]))" - ] + "execution_count": 36 }, { "cell_type": "markdown", @@ -523,23 +582,12 @@ }, { "cell_type": "code", - "execution_count": 13, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.191547Z", - "start_time": "2025-02-11T10:02:13.176566Z" + "end_time": "2025-04-16T08:24:41.023755Z", + "start_time": "2025-04-16T08:24:41.013655Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "161245156349030777798724819133399/10141204801825835211973625643008\n", - "15.899999999999999\n" - ] - } - ], "source": [ "import fractions\n", "get_mo_archive.hypervolume_computation_float_type = fractions.Fraction\n", @@ -553,7 +601,18 @@ "\n", "moa3_nofr = get_mo_archive([[1, 2, 3], [2, 1, 3], [3, 3, 1.32], [1.3, 1.3, 3], [1.7, 1.1, 2]], reference_point=[4, 4, 4])\n", "print(moa3_nofr.hypervolume)" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "161245156349030777798724819133399/10141204801825835211973625643008\n", + "15.899999999999999\n" + ] + } + ], + "execution_count": 37 }, { "cell_type": "markdown", @@ -568,13 +627,21 @@ }, { "cell_type": "code", - "execution_count": 14, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:13.206978Z", - "start_time": "2025-02-11T10:02:13.192523Z" + "end_time": "2025-04-16T08:24:41.054700Z", + "start_time": "2025-04-16T08:24:41.041716Z" } }, + "source": [ + "points_list = [[5, 5, 0], [2, 2, 3], [0, 2, 3]]\n", + "print(\"archive:\", list(moa), \"\\n\")\n", + "print(\"point | in domain | dominates | num of dominators | dominators\")\n", + "print(\"----------|-----------|-----------|-------------------|-----------\")\n", + "for point in points_list:\n", + " print(f\"{point} | {moa.in_domain(point):9} | {moa.dominates(point):9} | \"\n", + " f\"{moa.dominators(point, number_only=True):17} | {moa.dominators(point)}\")" + ], "outputs": [ { "name": "stdout", @@ -590,15 +657,7 @@ ] } ], - "source": [ - "points_list = [[5, 5, 0], [2, 2, 3], [0, 2, 3]]\n", - "print(\"archive:\", list(moa), \"\\n\")\n", - "print(\"point | in domain | dominates | num of dominators | dominators\")\n", - "print(\"----------|-----------|-----------|-------------------|-----------\")\n", - "for point in points_list:\n", - " print(f\"{point} | {moa.in_domain(point):9} | {moa.dominates(point):9} | \"\n", - " f\"{moa.dominators(point, number_only=True):17} | {moa.dominators(point)}\")" - ] + "execution_count": 38 }, { "cell_type": "markdown", @@ -610,14 +669,12 @@ }, { "cell_type": "code", - "execution_count": 15, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:14.715856Z", - "start_time": "2025-02-11T10:02:13.208974Z" + "end_time": "2025-04-16T09:15:13.388152Z", + "start_time": "2025-04-16T09:15:13.299125Z" } }, - "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import random\n", @@ -639,29 +696,18 @@ " indicators_cmoa.append((cmoa.hypervolume_plus_constr, cmoa.hypervolume_plus, cmoa.hypervolume))\n", " indicators_moa.append((moa.hypervolume_plus, moa.hypervolume))\n", " " - ] + ], + "outputs": [], + "execution_count": 48 }, { "cell_type": "code", - "execution_count": 16, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:15.047297Z", - "start_time": "2025-02-11T10:02:14.716857Z" + "end_time": "2025-04-16T09:15:14.807477Z", + "start_time": "2025-04-16T09:15:14.496281Z" } }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAHBCAYAAABTx5viAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB01ElEQVR4nO3deVxU5f4H8M/MAMOiDAkOiwtoiSvuorikmeKSWZpbGu6WGXXd08okW/BamqWZ5YKmtt3MfqZGeVWsLouocTUl8pqGpYgLgopsM8/vD+DIOAsMzJlh+bxfr3npOfM9M88cZs5zvudZjkIIIUBERERERERQOroARERERERE1QUTJCIiIiIiohJMkIiIiIiIiEowQSIiIiIiIirBBImIiIiIiKgEEyQiIiIiIqISTJCIiIiIiIhKMEEiIiIiIiIqwQSJiIiIiIioBBMkMuvEiROYMmUKmjVrBldXV9SrVw+dO3fGihUrcP36dYeWLT4+HlFRUbhx44Ysrz958mQEBQXJ8trliYuLg0KhQFxcnMW4LVu2QKFQmI0VQuCBBx6AQqFAv379jJ6/du0aFi9ejDZt2sDd3R2enp7o0aMHPvjgAxQWFpp93927d0OhUMDb2xv5+flWfrrylX6uo0ePlhvbr18/k5+NiKgmqMpxnMdwIvkwQSKTNmzYgC5duiA5ORkLFixAbGwsdu3ahdGjR2P9+vWYNm2aQ8sXHx+P1157TbYEacmSJdi1a5csr21r9evXx6ZNm4zWHz58GGfPnkX9+vWNnvvtt9/QqVMnfPTRR5gwYQL27t2Lzz//HJ07d8Y//vEPDBw4ELm5uSbfr/S9rl+/jm+++camn8Va69atw7p16xxaBiKiqrL2OM5jOJG8nBxdAKp+EhIS8Oyzz2LgwIH45ptvoFarpecGDhyIefPmITY21oEltN6dO3fg5uZW4fj7779fxtLY1tixY7Fjxw588MEH8PT0lNZv2rQJYWFhyMnJMYjX6XR44oknkJOTgyNHjiA4OFh6bujQoejbty/GjRuHuXPnYv369QbbZmRkYN++fejfvz/i4+OxadMmjB07ttwyCiGQl5dn1d+gItq0aWPT1yMicgRrjuM8hhPJjy1IZOStt96CQqHAxx9/bJAclXJxccHw4cOlZb1ejxUrVqBVq1ZQq9XQarWYOHEi/vrrL4Pt+vXrh3bt2iE5ORl9+vSBu7s7mjdvjuXLl0Ov1xu83htvvIGWLVvCzc0NXl5eaN++Pd577z0AQFRUFBYsWAAAaNasmVH3hKCgIAwbNgxff/01OnXqBFdXV7z22msAgA8++AAPPvggtFotPDw8EBISghUrVhh1RzDVxU6hUCAyMhLbtm1D69at4e7ujg4dOmDPnj1G++jMmTMYP348tFot1Go1WrdujQ8++MAo7rfffsPgwYPh7u4OHx8fzJw5Ezdv3jT3pzHpySefBAB89tln0rrs7Gzs3LkTU6dONYrftWsXTp8+jUWLFhlUrKXGjh2L8PBwbNq0CRkZGQbPbd26FUVFRZgzZw5GjhyJAwcO4M8//zR6jdJ9tX79erRu3RpqtRpbt26VPvOTTz4JX19fqNVqNG3aFBMnTjTq6nHz5k08++yz8PHxgbe3N0aOHImLFy8axJTtnlFYWAitVouIiAij8ty4cQNubm6YO3eutC4nJwfz589Hs2bN4OLigkaNGmH27Nm4ffu20fZERHKy5jjOY3gxHsNJVoKojKKiIuHu7i66d+9e4W2efvppAUBERkaK2NhYsX79etGwYUPRpEkTceXKFSmub9++wtvbW7Ro0UKsX79e7N+/X8yaNUsAEFu3bpXioqOjhUqlEkuXLhUHDhwQsbGxYvXq1SIqKkoIIcSFCxfE888/LwCIr7/+WiQkJIiEhASRnZ0thBAiMDBQ+Pv7i+bNm4vNmzeLQ4cOiSNHjgghhJgzZ4748MMPRWxsrDh48KB49913hY+Pj5gyZYrBZ5o0aZIIDAw0WAdABAUFidDQUPHll1+Kffv2iX79+gknJydx9uxZKe7UqVNCo9GIkJAQ8cknn4gffvhBzJs3TyiVSukzCCFERkaG0Gq1olGjRiImJkbs27dPTJgwQTRt2lQAEIcOHbK432NiYgQAkZycLCIiIkRoaKj03Icffig8PDxETk6OaNu2rejbt6/R3ys1NdXsa69bt04AEJ999pnB+uDgYOHv7y+KiorEv//9bwHA4DOV3VeNGjUS7du3F59++qk4ePCg+PXXX0VKSoqoV6+eCAoKEuvXrxcHDhwQ27dvF2PGjBE5OTkGn6t58+bi+eefF99//73YuHGjuO+++8RDDz1k8D59+/Y1+Gxz5swRbm5u0nfh3s9z4sQJIYQQt2/fFh07dhQ+Pj5i1apV4t///rd47733hEajEf379xd6vd7ivicisoXKHMd5DOcxnOTHBIkMZGRkCABi3LhxFYpPTU0VAMSsWbMM1iclJQkA4qWXXpLW9e3bVwAQSUlJBrFt2rQRgwYNkpaHDRsmOnbsaPF93377bQFAnDt3zui5wMBAoVKpRFpamsXX0Ol0orCwUHzyySdCpVKJ69evS8+ZS5B8fX2lSkCI4v2lVCpFdHS0tG7QoEGicePGRgf4yMhI4erqKr3Piy++KBQKhUhJSTGIGzhwoNUJ0qFDhwQA8euvvwohhOjWrZuYPHmyEEIYJUiDBw8WAEReXp7Z1/7uu+8EAPHPf/5TWvfjjz8KAGLRokVCCCH0er1o1qyZCAwMNKqMAAiNRmOwT4UQon///sLLy0tkZmaW+7nu/U6tWLFCABCXLl2S1t1buZ44cUIAEB9//LHBtqGhoaJLly7ScnR0tFAqlSI5Odkg7quvvhIAxL59+8yWj4jIVipzHOcxnMdwkh+72FGVHDp0CEBxl7SyQkND0bp1axw4cMBgvZ+fH0JDQw3WtW/f3qCJPzQ0FP/9738xa9YsfP/990ZjaCqiffv2Jrse/PLLLxg+fDi8vb2hUqng7OyMiRMnQqfT4ffffy/3dR966CGDwbK+vr7QarVS+fPy8nDgwAGMGDEC7u7uKCoqkh5Dhw5FXl4eEhMTARTvu7Zt26JDhw4G7zF+/HirP2/fvn1x//33Y/PmzTh58iSSk5NNdq+rKCEEgOJuFqVKB/aWvq5CocDkyZPx559/Gv2dAaB///647777pOXc3FwcPnwYY8aMQcOGDcstQ9lunEDx3xSAye4gpUJCQtClSxfExMRI61JTU3HkyBGD/bFnzx60a9cOHTt2NPgbDRo0qEIzCBIR2Zotj+M8hseVWz4iS5ggkQEfHx+4u7vj3LlzFYq/du0aAMDf39/ouYCAAOn5Ut7e3kZxarUad+7ckZYXL16Md955B4mJiRgyZAi8vb3x8MMPV2jK0FKmypOeno4+ffrg77//xnvvvYeffvoJycnJ0tigsmUwp7zyX7t2DUVFRVizZg2cnZ0NHkOHDgUAXL16VYr18/Mzej1T68qjUCgwZcoUbN++HevXr0dwcDD69OljMrZp06YAYPFvfP78eQBAkyZNABT3Jf/Xv/6F0NBQNGzYEDdu3MCNGzcwYsQIKBQKk7Mv3fs3yMrKgk6nQ+PGjSv0me7d16Xj4cr7O02dOhUJCQn47bffAAAxMTFQq9VSH38AuHz5Mk6cOGH0N6pfvz6EENLfiIjIXip6HOcxnMdwkh8TJDKgUqnw8MMP49ixY0aTLJhSegC8dOmS0XMXL16Ej4+P1WVwcnLC3Llzcfz4cVy/fh2fffYZLly4gEGDBpmdtvReZa+alfrmm29w+/ZtfP3113jqqafQu3dvdO3aFS4uLlaX0Zz77rsPKpUKkydPRnJysslHaaLk7e1tNIAWgMl1FTF58mRcvXoV69evx5QpU8zGDRw4EAAsTu/6zTffwMnJSRo8+9lnnyE3NxdHjhzBfffdJz3at28PIQR27dqFrKwsg9e492/QoEEDqFSqCn2vquLJJ5+EWq3Gli1boNPpsG3bNjz++OMGV0J9fHwQEhJi9m+0ZMkSWctIRGRKRY7jPIbzGE7yY4JERhYvXgwhBGbMmIGCggKj5wsLC/Htt98CKG6CB4Dt27cbxCQnJyM1NRUPP/xwlcri5eWFUaNG4bnnnsP169elq2IVvRJVVunBvuzMfEIIbNiwoUplLMvd3R0PPfQQfvnlF7Rv3x5du3Y1epQmlQ899BBOnTqF//73vwav8emnn1bqvRs1aoQFCxbg0UcfxaRJk8zGjRgxAm3atMHy5ctNdiv84osv8MMPP2D69OlSa9amTZtQv359HDhwAIcOHTJ4vP3228jPz8eOHTssls/NzQ19+/bFv/71L1mv7t133314/PHH8cknn2DPnj3IyMgw6qYybNgwnD17Ft7e3ib/Ro66STAR1W0VOY7zGM5jOMmP90EiI2FhYfjwww8xa9YsdOnSBc8++yzatm2LwsJC/PLLL/j444/Rrl07PProo2jZsiWefvpprFmzBkqlEkOGDMH58+exZMkSNGnSBHPmzLH6/R999FG0a9cOXbt2RcOGDfHnn39i9erVCAwMRIsWLQAU91MGgPfeew+TJk2Cs7MzWrZsafKmqKUGDhwIFxcXPPnkk1i4cCHy8vLw4YcfGl01q6r33nsPvXv3Rp8+ffDss88iKCgIN2/exP/+9z98++23OHjwIABg9uzZ2Lx5Mx555BG88cYb8PX1xY4dO6RuBZWxfPnycmNUKhV27tyJgQMHIiwsDPPmzUNYWBjy8/Px7bff4uOPP0bfvn2xcuVKAMCvv/6KI0eO4Nlnn5US4rJ69eqFlStXYtOmTYiMjLT43qtWrULv3r3RvXt3LFq0CA888AAuX76M3bt346OPPrL497PG1KlT8cUXXyAyMhKNGzfGgAEDDJ6fPXs2du7ciQcffBBz5sxB+/btodfrkZ6ejh9++AHz5s1D9+7dbVIWIiJrlHcc5zGcx3CyA8fND0HVXUpKipg0aZJo2rSpcHFxER4eHqJTp07i1VdfNZjBRqfTiX/+858iODhYODs7Cx8fH/HUU0+JCxcuGLxe3759Rdu2bY3e594Z41auXCl69uwpfHx8hIuLi2jatKmYNm2aOH/+vMF2ixcvFgEBAUKpVBrM+hYYGCgeeeQRk5/p22+/FR06dBCurq6iUaNGYsGCBdJsP2VnjTM3i91zzz1n9JqBgYFi0qRJBuvOnTsnpk6dKho1aiScnZ1Fw4YNRc+ePcUbb7xhEHf69GkxcOBA4erqKho0aCCmTZsm/u///s/qWewsuXcWu1JXr14VixYtEq1atRKurq6iXr16IjQ0VKxdu1YUFBRIcbNnzxYAjGbbK2vRokUCgDh27JgQwvy+Kv3Mo0ePFt7e3tLfd/LkydKMTOY+V+kMT2X3y70zIJXS6XSiSZMmAoB4+eWXTZbj1q1b4pVXXhEtW7YULi4u0tTsc+bMERkZGWY/KxGRrVTlOM5jOI/hJB+FECVTnRAREREREdVxHINERERERERUggkSERERERFRCSZIREREREREJZggERERERERlWCCREREREREVIIJEhERERERUYlad6NYvV6Pixcvon79+lAoFI4uDhFRnSKEwM2bNxEQEAClktfgSrFuIiJyjMrUS7UuQbp48SKaNGni6GIQEdVpFy5cQOPGjR1djGqDdRMRkWNZUy/VugSpfv36AIp3gqenp4NLQ0RUt+Tk5KBJkybSsZiKsW4iInKMytRLtS5BKu264OnpyUqIiMhB2I3MEOsmIiLHsqZeYgdxIiIiIiKiEkyQiIiIiIiISjBBIiIiIiIiKsEEiYiIiIiIqAQTJCIiIiIiohJMkIiIiIiIiEowQSIiIiIiIirBBImIiIiIiKgEEyQiIiIiIqISTJCIiIiIiIhKMEEiIiIiIiIqwQSJiIjqnHXr1qFZs2ZwdXVFly5d8NNPP1mMP3z4MLp06QJXV1c0b94c69evt1NJiYjI3pggERFRnfLFF19g9uzZePnll/HLL7+gT58+GDJkCNLT003Gnzt3DkOHDkWfPn3wyy+/4KWXXsILL7yAnTt32rnkRERkDwohhHB0IWwpJycHGo0G2dnZ8PT0dHRxiKgaKSoqxL74T3Drzg1HF6Va8/JoiKG9J1Zq25pwDO7evTs6d+6MDz/8UFrXunVrPP7444iOjjaKf/HFF7F7926kpqZK62bOnIn//ve/SEhIqNB7lu6XixcvmtwvKpUKrq6u0vLt27fNvpZSqYSbm1ulYnNzc2Gu2lcoFHB3d69U7J07d6DX682Ww8PDo1KxeXl50Ol0Nol1d3eHQqEAAOTn56OoqMgmsW5ublAqi683FxQUoLCw0Caxrq6uUKlUVscWFhaioKDAbKxarYaTk5MUm5V1HZl//Bem/tLOTk5QKotfV6/XobDAfBmcnJygciqO1el0KLJQXpVKJZVXLwQKC/Itx5aUV6/ToajIwusq75ZB6PUoKKcMTlIZ9BY/m1KphLOTEwQEhBAW969SqYKzs1Pxb0cIFBRaiFUopb8FAIuvq1AorIgFnJ2cy8Sa378KhQJOzndft7CgEMLktwFQAHB2vvu6hYWFZo8REICLy72xpuKKjwXOLuq7sUUFgN44WBPwAPwCW1p9jKhMveRUfggRUe2w/LOp+EKf4uhiVHvB+cpKJ0jVXUFBAY4dO4ZFixYZrA8PD0d8fLzJbRISEhAeHm6wbtCgQdi0aRMKCwsNThhK5efnIz//7klJTk4OACAgIMDkewwdOhR79+6VlrVaLXJzc6Vl33FvwalBIwDFJ7je3t7ScxkZGWYTDhcXF/j4+EjLmZmXUVRk+mTC2dkZDRs2lJavXLli9qTcyUkFrdZXWr569arZEzalUgk/Pz9p+dq1awb7piyFQgF/f39p+fr168jLyzMZCxjuz6ysLNy5c8dsrL+/v5T03Lhxw2D/3svPz09KZLKzsy0mob6+vtLJfk5ODm7dumU2VqvVSie5N2/exM2bN83GNmzYUPpu3bp1S/oOmeLj4wMXFxcAxQlzdna22Vhvb2+o1cUno7l3chGjfB3dlL+bjSeqLpb/0QKv70w1+D0+8cQT2Ldvn9ltKtsOxASJiOqMK3mXABfAS6eHRscexuZ4o56jiyCbq1evQqfTwdfX12C9r68vMjIyTG6TkZFhMr6oqAhXr141OKEvFR0djddee81m5Va6a+BUvzgp0gHIvHk3wVB63Ge2v7z+nli4eZmt+MW9sa6ecHI1E3xvrLo+nNQVjHWpBycX898xg1hnDzg5e1Qs1skdTvXdzcZeuVUmgVO5wam+m9nYq7fLJIZKVzjVN78jruUWAShpYVKo4VTf/I64fkeH4r8gALhIf1NTsvL0QF7p53O2GHsjXwBS0ulkMTa7AIDUoqDCA+qLAIAMnScKoTKIVSlVUlIphIBOfze5FkJhGKtSQlGSVAq9MLiqf+8pqkqlkhJQIYRRC52Aokys8p5Y3T2xpl8XQqDQqOXv7usqlUopsTVdBtwT6yQ9Y+rCQel5uLJMy5QAUGjiwkHp51MqlQatNwX5pmJRJtb5nljjk38BBZRKBZydXcrE5ptsExIAFAqlQUtPQUGByaRCQAGFQgG1y93XzTcXK4ovdpQm4qWva7blWKGAq/rubyy/IN9kbMZN8y1FtsYEiYjqDIHiA25vxQOInvF/Di4NOVLpSV8pIYTRuvLiTa0vtXjxYsydO1dazsnJQZMmTSx2sSsrMzPTYPmPq7eRX1T8/VUqlQYnHpZaTe6NzcvLs9htrmw3P2ti8/NNn9CUKtvNz5rYgvwCg5PyKsW6uknnx4UFhSjSWeg2Z0Wsq9oVCmVxcGFhkcUuYNbEql3UUKqUVscWFRVZ7I7n4uIifd+KiopQf7sKKAA8Z3wL4d3C8HXLdMcrKioy2/JX+rqlLV7WxOp0OouthM7OzlLrmDWxer3e4m/DmlgnJyfpdySEsNj6aE2sNV1r2Q0XeLPkUdbOnTstdrGrLCZIRFRn6EuuoSk4P02d5ePjA5VKZdRalJmZadRKVMrPz89kvJOTk0FXt7LUarVBYlLKw8PD4ETAnHtjQixuoyn39eSPpRqr5HDo7u4BWPieOTk5GYyBscSaWJVKVaHfhLWxSqVSlliFQiFLLGD8u3dEbNmkxpaxZZMwW8aWTRptiWcJRFRnlF7pUvLQV2e5uLigS5cu2L9/v8H6/fv3o2fPnia3CQsLM4r/4Ycf0LVrV5Pjj4hqFKkBwHwLKlFdw7MEIqozSrvYKRQ89NVlc+fOxcaNG7F582akpqZizpw5SE9Px8yZMwEUd4+bOPHuJBUzZ87En3/+iblz5yI1NRWbN2/Gpk2bMH/+fEd9BCIbKsmQLHQxJapr2MWOiOoMqYsdTwTqtLFjx+LatWtYtmwZLl26hHbt2mHfvn0IDAwEAFy6dMngnkjNmjXDvn37MGfOHHzwwQcICAjA+++/jyeeeMJRH4HIdmrX3V6IbIIJEhHVIexiR8VmzZqFWbNmmXxuy5YtRuv69u2L48ePy1wqIkdgCxLRvXiWQER1RmkLkpJd7IiIikktSEyQiErxLIGI6gwhdbHjoY+IqBhbkIjuxbMEIqozBKf5JiIyxBYkIiM8SyCiOqN0mm+Vkoc+IqJibEEiuhfPEoiozuCNYomI7sEWJCIjPEsgojqDY5CIiO7FFiSie/EsgYjqDCHNYqdycEmIiKoJtiARGWGCRER1Bqf5JiK6F1uQiO7FswQiqjOk66RMkIiIirEFiciIk6MLQETyysvPReSWh3FFecvRRXG4DBc9ACW72BERSdiCRHQvJkhEtdyhozuR5MrkqFhxy1GjBsEOLgcRUTXBFiQiI0yQiGq5/MI7AADvIj2m+k9wcGkcz+++ZggPe9LRxSAiqibYgkR0LyZIRLVcka4QAOAmFJg49CUHl4aIiKonJkhEpThSmaiWK9IVAACUgpUfERGVIXWvA1uQiMpggkRUyxXpi1uQ+GMnIiIDZRMktiARSXjORFTL6XRMkIiIyBS2IBGZIvs507p169CsWTO4urqiS5cu+OmnnyzGHz58GF26dIGrqyuaN2+O9evXy11EolpNpy8CAKjYxY6IiMoyaEEiolKyJkhffPEFZs+ejZdffhm//PIL+vTpgyFDhiA9Pd1k/Llz5zB06FD06dMHv/zyC1566SW88MIL2Llzp5zFJKrViqQWJCZIRERUFluQiEyRNUFatWoVpk2bhunTp6N169ZYvXo1mjRpgg8//NBk/Pr169G0aVOsXr0arVu3xvTp0zF16lS88847chaTqFbTieIWJCZIRERkgGOQiEySbZrvgoICHDt2DIsWLTJYHx4ejvj4eJPbJCQkIDw83GDdoEGDsGnTJhQWFsLZ2bnC73/79m2oVCqj9SqVCq6urgZxZf1x9TYuZucDAJQKBVzUaum5vLw8s+93b2x+Xh7MNVwrAKjLlMGa2IL8fOgtNIm7Vja2oAB6vd4msWq1GoqSK1GFhYXQ6XS2iXVxgUJZnNMXFRaiyEaxLi7OUCpVVsfqiopQWFRkNtbZ2Vn6DloVq9OhsLDQfKyTE1ROThWOTb+WAzgXJ0j3ft/vLYOLi4v0upa+72Vj9Xo97ty5Y5NYJycnqEt+R0II5Obm2iS2vN99ZWOVSiXc3NwqFZubmwth5vepUCjg7u5eqdg7d+5Y/H16eHhUKjYvL8/i77NsLBHVFGxBIjJFtgTp6tWr0Ol08PX1NVjv6+uLjIwMk9tkZGSYjC8qKsLVq1fh7+9vtE1+fj7y8/Ol5ZycHABAQECAyfcYOnQo9u7dKy1rtVqDE6v7+k+HZ7fHLX84ohqkh1cO4A8oBFCvXj2zcStWrMCCBQsAAMePH0doaKjZ2KVLlyIqKgoAkJqainbt2pmNnT9/Pt5++20AQHp6Opo1a2Y2dtasWfjggw8AFB9DtFqt2dhJkyZhy5YtAIoTCEufbdSoUfjXv/4lLVuKLe8YUVbfvn0RFxcnLQcFBeHq1asmY7t27Yrk5GRpuU2bNvjzzz9NxrZp0wanTp2Slrt164bTp0+bjA0MDMT58+el5QcffBBHjx41Gevj44MrV65Iy0OGDMHhw4dNxrq7uxskfE888QT27dtnMhaA2QSOiKoxtiARmST7jWIV91yREEIYrSsv3tT6UtHR0XjttdeqWMq7dLeuIT/jfwCA+vXro0WLFtJzJ06cQJGZVgAPdw+0bNVSWj7166/ILygwGevm5obWrVtLy6mpqWavqqtdXNC2zMln2m9puJ1r+iq1k5MT2rdvLy2fOXMGN2/eNBmrVCrRsWNHafns2bPIzs42GQsAnTt3lv5/7tw5ZGVlmY3t2LEjlCWtN3/++SeuXbtmNrZ9+/ZwKmkNuXDhgsHJ273atWsntUT8/fffuHz5stnYNm3aSK0Aly5dwqVLl8zGtmrVSroCf/nyZfz9999mY4ODg6WT6ytXruDChQtmYx+4/wF4ajwBANeuXTN7MgwAzZs1h9d9XgCAG1k38Me5P8zGBgYGwtvbGwCQk52D/539n9nYJk2aoIFH8f51VbLyIyKistiCRGSKbAmSj48PVCqVUWtRZmamUStRKT8/P5PxTk5O0gnhvRYvXoy5c+dKyzk5OWjSpAkuXrwIT09Po/h7u91lZmaa/QzG3Wc6Vzg2N7eLFd1nKh57505XK7rPVDw2L69bhbvPlBfr7u4uJbT5+aFmk0rj2HyLsW5ublLiVVBQYLFrmTWxrq6u0vfCmtjCwkIUmEmCgeLug6XJnzWxRUVFBq2i93JxcZG6mxbH9rMYuzvuP/jpIuChVuPWrVtmY8t2Ye3cuXOFY1u3bl3h2KZNm1qMLd0HQPExpKKx7u7uFmPv/d1bE1veMaKssi055cWePn3a4u++rOTk5ArH/vjjjxZ/92V99913FY7duXOnxd89EdVAbEEiMkm2BMnFxQVdunTB/v37MWLECGn9/v378dhjj5ncJiwsDN9++63Buh9++AFdu3Y1O/5IrVZL4xDK8vDwqFCfeGv6zVsTWzapsWVs2STMlrFlx1zYMtbc36eqsS4uLlJrkqNinZ2dKzwuzppYJycng5P/qsaWTvPtpFBW+DusUqkqHKtUVvx1rYlVKBSyxALy/e55jCCimoUtSESmyDqL3dy5c7Fx40Zs3rwZqampmDNnDtLT0zFz5kwAxa0/EydOlOJnzpyJP//8E3PnzkVqaio2b96MTZs2Yf78+XIWk6hWK5JmseOtYomIqAy2IBGZJOsYpLFjx+LatWtYtmwZLl26hHbt2mHfvn0IDAwEUDw2pOw9kZo1a4Z9+/Zhzpw5+OCDDxAQEID3338fTzzxhJzFJKrV9KK4W5STggkSERGVxRYkIlNkn6Rh1qxZmDVrlsnnSmegKqtv3744fvy4zKUiqjt0+uIEScUEiYiIymILEpFJPGMiquWKSsYgqRTG9wUjIqK6jC1IRKYwQSKq5XTi7iQNREREErYgEZnEMyaiWq60i52SCRIRERlgCxKRKbKPQaK6S+j1OJ/+I+7k3XB0Ueq0y3euAuAYJCIiugdbkIhMYoJEsvnih3/gzctxji4GlXDiGCQiIjKHLUhEEiZIJJuz2WcBAB56gXqinGCSlTuUGNhytKOLQUS1WV4OIPSOLgVZIy+7zAITJKJSTJBINqU5UYRXCJ4b8ZlDy0JERDLavxT4z2pHl4Kqgi1IRBIOSiD5lPRt5iGXiKiWO3vQ0SWgqnhgIBMkojLYgkSyESVtSAoedImIarfCO8X/TtwNBPZ0bFnIekqeDhKVxV8EyebusCMmSEREdiUEcCMd0BXa5/3yc4r/dfUEVM72eU8iIpkwQSLZsAWJiMjOcq8D+iLg8AogeYP939/Z3f7vSURkY0yQSDaiZAySkgkSEZH8floFHHjNeL2rxj7v79ceaHC/fd6LiEhGTJBINlILErvYERHJLz3RcFnTBJhxEKindUx5iIhqKCZIJBsmSERE9lQy8vOxD4BOTzm2KERENRin+SbZiNJZGtjFjohIfoJ35CYisgUmSCQbKT9iCxIRkR3cPeoSEVHlMUEi2bCLHRGRA7DVnoioSpggkWzuzmLHrxkRkewEW5CIiGyBZ64kG94HiYjInjgGiYjIFpggkWzuVtVMkIiIZFfagsSLUkREVcIEiWRztwXJwQUhIqpTeNAlIqoKJkgkm9IxSJykgYjIHtiCRERkC0yQSHYcg0REZAe8DxIRkU0wQSLZ6KVpvvk1IyKSH2exIyKyBZ65kmw4ix0RkQPwmEtEVCVMkEg20oRKvJpJRCQ/drEjIrIJJkgkI07SQEREREQ1CxMkko3UG57dPYiI5Mf7IBER2QQTJJKNYAsSEZED8JhLRFQVTJBINvq7TUgOLQcRUamsrCxERERAo9FAo9EgIiICN27csLjN119/jUGDBsHHxwcKhQIpKSl2Kav12IJERGQLTJBINqUtSEoFv2ZEVD2MHz8eKSkpiI2NRWxsLFJSUhAREWFxm9u3b6NXr15Yvny5nUpZSZykgYjIJpwcXQCq/djFjoiqg9TUVMTGxiIxMRHdu3cHAGzYsAFhYWFIS0tDy5YtTW5XmkCdP3/eXkWtJN4HiYjIFnhpn2TD+yARUXWSkJAAjUYjJUcA0KNHD2g0GsTHxzuwZDbCSRqIiGyCLUgkm7vXMllZE5HjZWRkQKvVGq3XarXIyMiw6Xvl5+cjPz9fWs7JybHp61vGYy4RUVWwBYlkIzhgmIjsICoqCgqFwuLj6NGjAEy3aAshbN7SHR0dLU0EodFo0KRJE5u+vmk85hIR2QJbkEg2esFpvolIfpGRkRg3bpzFmKCgIJw4cQKXL182eu7KlSvw9fW1aZkWL16MuXPnSss5OTnyJ0mcpIGIyCaYIJHslAqVo4tARLWYj48PfHx8yo0LCwtDdnY2jhw5gtDQUABAUlISsrOz0bNnT5uWSa1WQ61W2/Q1y8dJGoiIbIFd7Eg2nKSBiKqT1q1bY/DgwZgxYwYSExORmJiIGTNmYNiwYQYz2LVq1Qq7du2Slq9fv46UlBScPn0aAJCWloaUlBSbj1uyGR5ziYiqhAkSyeZuZw9W1kRUPezYsQMhISEIDw9HeHg42rdvj23bthnEpKWlITs7W1revXs3OnXqhEceeQQAMG7cOHTq1Anr16+3a9nLJdiCRERkC+xiRxWy47tnEX8lxaptUvW5gFLBFiQiqjYaNGiA7du3W4wR94zlmTx5MiZPnixjqWyFY5CIiGyBCRKVqyD/FlZc/gl6axMdZXG8d/1GMpSKiIgM8D5IREQ2wQSJylVYeEtKjpb494ez0qXC2/p4NkH3jtPlKhoRERlhgkREVBVMkKhcRUV3b3Y48qHlcHJ2c2BpiIjINLYgERHZAidpoHIV6u4mSCqVvaetJSKiCuF9kIiIbIIJEpVLpysAADgJAYWSXxkiouqJs9gREdmCbGe7WVlZiIiIgEajgUajQUREBG7cuGE2vrCwEC+++CJCQkLg4eGBgIAATJw4ERcvXpSriFRBRUV5AAAnXpwkIqr+2MWOiKhKZEuQxo8fj5SUFMTGxiI2NhYpKSmIiIgwG5+bm4vjx49jyZIlOH78OL7++mv8/vvvGD58uFxFpAoqHYOk4hSyRETVF++DRERkE7JM0pCamorY2FgkJiaie/fuAIANGzYgLCwMaWlpBncsL6XRaLB//36DdWvWrEFoaCjS09PRtGlTq8pw+/ZtqFQqo/UqlQqurq4GceYolUq4ublVKjY3N9foXhqlFAoF3N3dKxV7584d6PV6s+Xw8PCoVGxeXh50Op3JuFu5OQDuflksxQKAu7u7dO+j/Px8FBUV2STWzc0NypIufgUFBSgsLLRJrKurq/RdsSa2sLAQBQUFZmPVajWcnJysji0qKkJ+fr7ZWBcXFzg7O1sdq9PpkJeXZzbW2dkZLi4uVsfq9XrcuXPHJrFOTk5Qq4vHuQkhkJuba5NYa373PEaYji3vd182lhyFF7GIiGxBlgQpISEBGo1GSo4AoEePHtBoNIiPjzeZIJmSnZ0NhUIBLy8vszH5+fkGJ4g5OcUn8wEBASbjhw4dir1790rLWq3W7IlV3759ERcXJy0HBQXh6tWr0nKDAQ3g2ckTAODp6Yluod2k5/7z83/MnmB6eHigR1gPaTkxIdHsiZWrqyt69e4lLScfSZY+472cnZ3xYN8HpeXjx44jKyvLZKxSpcRDDz0kLaekpODa1Wumy1tPCUWgO1SiOJGJiIjAV199ZTIWAG7duiWdLD3zzDPYunWr2djMzEw0bNgQADB37lysW7fObOy5c+cQFBQEAHj55ZfxzjvvmI399ddf0bZtWwDAW2+9hddee81s7JEjR9CtW/Hf7r333sPChQvNxh46dAj9+vUDAHz88ceIjIw0G7tnzx488sgjAIAdO3ZgypQpZmO//PJLjB49GgCwa9cujBkzxmxsTEyMdNPK77//HsOGDTMbu3btWjz33HMAgJ9++sngb36vFStWYMGCBQCA48ePIzQ01Gzs0qVLERUVBaD4gki7du3Mxs6fPx9vv/02ACA9PR3NmjUzGztr1ix88MEHAICrV69Cq9WajZ00aRK2bNkCoDiBqFevntnYUaNG4V//+pe0bCnWlseIsrp27Yrk5GRpuU2bNvjzzz9NxrZp0wanTp2Slrt164bTp0+bjA0MDMT58+el5QcffBBHjx41Gevj44MrV65Iy0OGDMHhw4dNxrq7uxscl5544gns27fPZCxgfHNVcgA2IBER2YQsCVJGRobJExutVouMjIwKvUZeXh4WLVqE8ePHw9PT02xcdHS0xZNfOfmN84PSqbiVQg89ki4lSc853e+EejB/ElY2VhGkqHAsmqDisQFAvYAKxvoC9XzNxwKAn54nQERE1R8zJCKiqlAIKy77RUVFlZuMJCcn44cffsDWrVuRlpZm8FyLFi0wbdo0LFq0yOJrFBYWYvTo0UhPT0dcXJzFBMlUC1KTJk1w8eJFk9vZqvtMkb4Ivb/uDQBY3GUx3J3d4eJ89waq+QX55ns7KAC1i7pSsYVXz8L58FtmyywXBYAujXpDO/5f7GLHLnbsYleCXeyMY3NycqDRaJCdnW3x2F3X2GW/fNgLuPwrELELuL+/PO9BRFTDVOb4a1ULUmRkJMaNG2cxJigoCCdOnMDly5eNnrty5Qp8fX0tbl9YWIgxY8bg3LlzOHjwYLkfRK1WSydJZXl4eFSoT7w1/ebLxuYW3j0Ze7zl43B3dje1ie25/gLczgXq+QLT/22f9wQAKADPRsVFKHPyWB5zf5+qxrq4uEgn3Y6KdXZ2lpIPW8Y6OTlJyZItY1UqVYW/79bEKpVKWWIVCoUssUDlf/e2jC2b1NgytmwSZstYa3735CDs5khEZBNWJUg+Pj7w8fEpNy4sLAzZ2dk4cuSINI4hKSkJ2dnZ6Nmzp9ntSpOjM2fO4NChQ/D29rameHZVqL/byuCiqtgJtU2UVoBKZ8DLuokriIioNuMgJCIiW5Blmu/WrVtj8ODBmDFjBhITE5GYmIgZM2Zg2LBhBhM0tGrVCrt27QJQ3FVo1KhROHr0KHbs2AGdToeMjAxkZGRY7JrkKAUlN09VQAGVwni2PNmUJkgK3rCViIjKkOoHJkhERFUhyyQNQPGsXS+88ALCw8MBAMOHD8fatWsNYtLS0pCdnQ0A+Ouvv7B7924AQMeOHQ3iys4c5mhCCHye9jl+u/4bgOLWI4VdK6PSCtCOb0lERDUIKwgioqqQLUFq0KABtm/fbjGm7KDjoKCgGjFN7O9Zv+OtpLuTJGjUGvsWQJQMqGYLEhERGWALEhGRLciWINVWNwtuAihOjEYHj0afRn3sWwDeKZ2IiEypARcZiYhqAiZIVtKXtOD4uPrgH53/Yf8CsAWJiIhM4gU0IiJb4Fm2lXSi+D4gpffYsT92oSAiIgtYPxARVQkTJCuVtiDZdea6stiCREREprALNhGRTfAs20qlLUiOS5BYARIRkSkcg0REZAtMkKyk0zs6QSptQWKCREREZfA+SERENsEEyUqlXeyUDuvixhvFEhGRJUyQiIiqgmfZVpImaXBUgsIudkREZBJbkIiIbIHTfFtJmqRB6egudsxtiYjqFCGA5I3A9T9MP3/7mn3LQ0RUSzFBspLDW5CkK4QOensiInKMy6eAffPLj1N7yl8WIqJajAmSlRw/zTfHIBER1UkFt4r/ddUAXaeajmlwP6Btbb8yERHVQkyQrKAXesRdiAPAMUhEROQg7j7AgChHl4KIqNZiM4QVjmQcwQ9//gAAcFW5OqYQHINERERERCQbnmVb4eqdq9L/J7eb7KBScJYiIqI6SfBGsERE9sAEyQqipHIK8w9Dh4YdHFQItiAREREREcmFZ9mVoHBk6w3HIBER1W3sQUBEJCsmSDUNW5CIiIiIiGTDs2wriJLxPwqHtt5wDBIRUd3EMUhERPbABMkKQlSDm7SyBYmIiIiISDY8y7ZCtWhB4hgkIqI6jsd/IiI58UaxVihtQZISpJRP7T/t6t9Hi/9lFzsiIiIiIptjglQJ0ix2/xcJCJ1jCqFyccz7EhGRY/A+SEREdsEEyQpGXeweGHB3TJA9qZyBHrPs/75ERERERLUcEyQrGHWxm/ClA0tDRER1ErtYExHJipM0VAbrJiIiIiKiWokJkhUE70FBREQOwzqIiMgemCBZoVpM801ERERERLJhgmQFozFIREREdsc6iIhITkyQKkHBAbJERGRvnOabiMgumCBZgS1IRERERES1GxMkK0hjkNiCREREjsI6iIhIVkyQrMBZ7IiIiIiIajcmSFZgFzsiInIcXqQjIrIHJkiVwC52RERERES1ExMkK7CLHREROR4v0hERyYkJUiWwix0RERERUe3EBMkKHINEREQOw/sgERHZBRMkK0hd7JgfERERERHVSkyQrMAWJCIicjhOFEREJCsmSFbgjWKJiIiIiGo3JkiVwBYkIiKyP45BIiKyByZIVmAXOyKimi0rKwsRERHQaDTQaDSIiIjAjRs3zMYXFhbixRdfREhICDw8PBAQEICJEyfi4sWL9is0ERHZFROkSmAXOyKimmn8+PFISUlBbGwsYmNjkZKSgoiICLPxubm5OH78OJYsWYLjx4/j66+/xu+//47hw4fbsdT3Yh1ERCQnJ0cXoCbhjWKJiGqu1NRUxMbGIjExEd27dwcAbNiwAWFhYUhLS0PLli2NttFoNNi/f7/BujVr1iA0NBTp6elo2rSpXcpORET2I1sLkrXdGO71zDPPQKFQYPXq1XIV0WpMkIiIaq6EhARoNBopOQKAHj16QKPRID4+vsKvk52dDYVCAS8vL7Mx+fn5yMnJMXhUGe+DRERkF7IlSNZ2Yyjrm2++QVJSEgICAuQqXqVwDBIRUc2VkZEBrVZrtF6r1SIjI6NCr5GXl4dFixZh/Pjx8PT0NBsXHR0tXSDUaDRo0qRJpctNRET2JUuCVNqNYePGjQgLC0NYWBg2bNiAPXv2IC0tzeK2f//9NyIjI7Fjxw44OzvLUbxK4zTfRETVT1RUFBQKhcXH0aNHAZg+fgshKnRcLywsxLhx46DX67Fu3TqLsYsXL0Z2drb0uHDhQuU+nCmsg4iIZCXLGKTyujGY6ucNAHq9HhEREViwYAHatm0rR9Fsgi1IRETVR2RkJMaNG2cxJigoCCdOnMDly5eNnrty5Qp8fX0tbl9YWIgxY8bg3LlzOHjwoMXWIwBQq9VQq9XlF56IiKodWRKkynZj+Oc//wknJye88MILFX6v/Px85OfnS8s26edthtTFjlfviIiqDR8fH/j4+JQbFxYWhuzsbBw5cgShoaEAgKSkJGRnZ6Nnz55mtytNjs6cOYNDhw7B29vbZmW3DscgERHZg1Vd7OTsxnDs2DG899572LJli1UJiD37eUtd7NiCRERU47Ru3RqDBw/GjBkzkJiYiMTERMyYMQPDhg0z6NnQqlUr7Nq1CwBQVFSEUaNG4ejRo9ixYwd0Oh0yMjKQkZGBgoICR30UIiKSkVUtSHJ2Y/jpp5+QmZlpMGWqTqfDvHnzsHr1apw/f97kdosXL8bcuXOl5ZycHNmSJMEZhIiIarQdO3bghRdeQHh4OABg+PDhWLt2rUFMWloasrOzAQB//fUXdu/eDQDo2LGjQdyhQ4fQr18/2ctsjBfpiIjkZFWCJGc3hoiICAwYMMBg3aBBgxAREYEpU6aYfS9H9PNmFzsiopqpQYMG2L59u8WYshfDgoKCeHGMiKiOkWUMUtluDB999BEA4OmnnzbZjSE6OhojRoyAt7e3Ub9uZ2dn+Pn5mZ3Uwd7YxY6IiByGiRoRkV3Idh+kHTt2ICQkBOHh4QgPD0f79u2xbds2g5iy3RhqAt4oloiIiIiodpOlBQmwvhuDKebGHTlMSXHZgkRERA7DKoiISFaytSDVRrxRLBERERFR7cYEyQrsYkdERI7DOoiIyB6YIFXQqWuncC77HAB2sSMiIkdiHUREJCfZxiDVdEIIpN9MR74uH2nX0/DSzy9JzzkpuduIiIiIiGojnumbsenXTXjv+HtG68P8w/DYA485oERERERERCQ3JkhmnMk6AwBwd3KHm5MbXFQuWNBtAQYGDnRwyYiIqE7iECQiIrtggmSGXugBAC90fgETWk9wcGmIiIhKcCZVIiJZcZIGM3RCBwBQKriLiIiIiIjqCp79m1HagqRSqBxcEiIiIiIishcmSGbo9MUtSEyQiIioeuAgJCIie2CCZAa72BERUfXEMUhERHLi2b8ZUhc7JVuQiIiIiIjqCiZIZrAFiYiIqhXBLnZERPbAs38zOEkDEREREVHdwwTJjCJ9EQAmSEREVM3wPkhERLJigmQGW5CIiIiIiOoeJkhmpGWlAeAYJCIiqi44BomIyB549m/CofRDuFN0BwDgpHRycGmIiIiIiMhemCCZcOHmBen/nX07O7AkRERE9+IYJCIiOTFBsmBos6HwcPZwdDGIiIiIiMhOmCARERHVBLwPEhGRXTBBMkFwICwRERERUZ3EBMkCBe81QURE1Q3rJiIiWTFBIiIiIiIiKsEEiYiIqEZg928iIntggkRERERERFSCCRIREVGNwjFIRERyYoJkgYKVEBERERFRncIEiYiIqCbgfZCIiOyCCRIREREREVEJJkgmCF6lIyKi6or3QSIikhUTJAs4BomIiIiIqG5hgkRERFQjsHcDEZE9MEEiIiKqUdi7gYhITkyQTBC8SkdEREREVCcxQbJAwYGwRERERER1ChMkIiKimoAzrBIR2QUTJCIiopqEvRuIiGTFBMkEjkEiIiIiIqqbmCARERERERGVYIJERERUI7B3AxGRPTBBIiIiqlE4BomISE5MkEwQnCmIiIiIiKhOYoJkgYJX6YiIiIiI6hQmSERERDUBezcQEdmFbAlSVlYWIiIioNFooNFoEBERgRs3bpS7XWpqKoYPHw6NRoP69eujR48eSE9Pl6uYRERENQvvg0REJCvZEqTx48cjJSUFsbGxiI2NRUpKCiIiIixuc/bsWfTu3RutWrVCXFwc/vvf/2LJkiVwdXWVq5gm8T5IRERERER1k5McL5qamorY2FgkJiaie/fuAIANGzYgLCwMaWlpaNmypcntXn75ZQwdOhQrVqyQ1jVv3lyOIlaIglfpiIio2uDFOyIie5ClBSkhIQEajUZKjgCgR48e0Gg0iI+PN7mNXq/H3r17ERwcjEGDBkGr1aJ79+745ptvLL5Xfn4+cnJyDB5ERERERESVIUuClJGRAa1Wa7Req9UiIyPD5DaZmZm4desWli9fjsGDB+OHH37AiBEjMHLkSBw+fNjse0VHR0vjnDQaDZo0aWKzz0FERFT9sHcDEZGcrEqQoqKioFAoLD6OHj0KwHT3NCGE2W5rer0eAPDYY49hzpw56NixIxYtWoRhw4Zh/fr1Zsu0ePFiZGdnS48LFy5Y85GIiIiIiIgkVo1BioyMxLhx4yzGBAUF4cSJE7h8+bLRc1euXIGvr6/J7Xx8fODk5IQ2bdoYrG/dujV+/vlns++nVquhVqsrUHrr8T5IRERUbXCabyIiu7AqQfLx8YGPj0+5cWFhYcjOzsaRI0cQGhoKAEhKSkJ2djZ69uxpchsXFxd069YNaWlpBut///13BAYGWlNMIiIiIiKiSpFlDFLr1q0xePBgzJgxA4mJiUhMTMSMGTMwbNgwgxnsWrVqhV27dknLCxYswBdffIENGzbgf//7H9auXYtvv/0Ws2bNkqOYRERUx1TmHn1RUVFo1aoVPDw8cN9992HAgAFISkqyT4FN4QyrRESyku0+SDt27EBISAjCw8MRHh6O9u3bY9u2bQYxaWlpyM7OlpZHjBiB9evXY8WKFQgJCcHGjRuxc+dO9O7dW65imiTYjYGIqFaqzD36goODsXbtWpw8eRI///wzgoKCEB4ejitXrtip1EREZE+y3AcJABo0aIDt27dbjDGViEydOhVTp06Vq1hW4X2QiIhqj8reo2/8+PEGy6tWrcKmTZtw4sQJPPzww7KX+y5evCMisgfZWpCIiIiqk8rco+9eBQUF+Pjjj6HRaNChQwe5ikpERA4kWwsSERFRdVKZe/SV2rNnD8aNG4fc3Fz4+/tj//79Fictys/PR35+vrRs25uYs3cDEZGc2IJkgmA3BiKiGkPOe/SVeuihh5CSkoL4+HgMHjwYY8aMQWZmptl43sSciKjmYguSBbwPEhFR9SfnPfpKeXh44IEHHsADDzyAHj16oEWLFti0aRMWL15sMn7x4sWYO3eutJyTk1P1JIkTCBER2QUTJCIiqtHkvEefOUIIgy5095LzJuac5puISF7sYkdERHVCZe7Rd/v2bbz00ktITEzEn3/+iePHj2P69On466+/MHr0aEd9FCIikhETJCIiqjOsvUefSqXCb7/9hieeeALBwcEYNmwYrly5gp9++glt27Z1xEcgIiKZsYudCbxRLBFR7WTtPfpcXV3x9ddfy12sCmLdRERkD2xBIiIiIiIiKsEEiYiIiIiIqAQTJCIiIiIiohJMkEzgjWKJiKja4fhYIiK7YIJkQXl3ViciIrI71k1ERLJigkRERERERFSCCRIREREREVEJJkgmcAwSEREREVHdxATJAgXYz5uIiKob1k1ERHJigkRERERERFSCCRIREREREVEJJkimcAgSERFVN7wPEhGRXTBBsoBjkIiIqNrhfZCIiGTFBImIiIiIiKgEEyQiIiIiIqISTJBM4H2QiIio+mHdRERkD0yQLFCwnzcREVU7rJuIiOTEBImIiIiIiKgEEyQiIqKagNN8ExHZBRMkEzgGiYiIiIiobmKCREREVJNwfCwRkayYIBEREREREZVggkRERFQjsPs3EZE9MEEyQXAgLBERERFRncQEyQIF7zVBRETVDusmIiI5MUEiIiIiIiIqwQSJiIioJmD3byIiu2CCZALvg0RERNUWp/kmIpIVEyQLFKyEiIiIiIjqFCZIREREREREJZggERER1Qjs/k1EZA9MkEzgfZCIiKj6YvdvIiI5MUGygPdBIiIiIiKqW5ggERERERERlWCCREREVBOw+zcRkV0wQSIiIqpJeAsKIiJZyZYgZWVlISIiAhqNBhqNBhEREbhx44bFbW7duoXIyEg0btwYbm5uaN26NT788EO5ikhERERERGRAtgRp/PjxSElJQWxsLGJjY5GSkoKIiAiL28yZMwexsbHYvn07UlNTMWfOHDz//PP4v//7P7mKaRFvFEtEREREVLfIkiClpqYiNjYWGzduRFhYGMLCwrBhwwbs2bMHaWlpZrdLSEjApEmT0K9fPwQFBeHpp59Ghw4dcPToUTmKSUREVINwDBIRkT3IkiAlJCRAo9Gge/fu0roePXpAo9EgPj7e7Ha9e/fG7t278ffff0MIgUOHDuH333/HoEGD5CgmERFRDcTeDUREcnKS40UzMjKg1WqN1mu1WmRkZJjd7v3338eMGTPQuHFjODk5QalUYuPGjejdu7fZbfLz85Gfny8t5+TkVK3wAASv0hERERER1UlWtSBFRUVBoVBYfJR2hzM1fkcIYXFcz/vvv4/ExETs3r0bx44dw8qVKzFr1iz8+9//NrtNdHS0NBGERqNBkyZNrPlIFvFGsUREREREdYtVLUiRkZEYN26cxZigoCCcOHECly9fNnruypUr8PX1NbndnTt38NJLL2HXrl145JFHAADt27dHSkoK3nnnHQwYMMDkdosXL8bcuXOl5ZycHJsmSURERNUC74NERGQXViVIPj4+8PHxKTcuLCwM2dnZOHLkCEJDQwEASUlJyM7ORs+ePU1uU1hYiMLCQiiVho1aKpUKer3e7Hup1Wqo1WorPgUREVENxhlWiYhkJcskDa1bt8bgwYMxY8YMJCYmIjExETNmzMCwYcPQsmVLKa5Vq1bYtWsXAMDT0xN9+/bFggULEBcXh3PnzmHLli345JNPMGLECDmKaZbgVToiIiIiojpJlkkaAGDHjh144YUXEB4eDgAYPnw41q5daxCTlpaG7Oxsafnzzz/H4sWLMWHCBFy/fh2BgYF48803MXPmTLmKSUREREREJJEtQWrQoAG2b99uMebelho/Pz/ExMTIVSQiIqIajL0biIjsQZYudkRERCQXjkEiIpITEyQTeB8kIiIiIqK6iQmSBZbu2URERGQ3OZeA3c87uhRERHUCEyQiIqLq7s//3P1/w5bm44iIqMqYIBEREVV3pZMa1fcHBkQ5tChERLUd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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "fig, axs = plt.subplots(1, 2, figsize=(10, 5))\n", "axs[0].plot([x[2] for x in indicators_cmoa], label=\"hypervolume\")\n", @@ -678,7 +724,20 @@ "axs[1].axhline(0, color=\"black\", linestyle=\"--\", zorder=0)\n", "axs[1].legend()\n", "plt.show()" - ] + ], + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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9qXKP4OcnBxoNBq0adOmRsdUua7L74er7uc0depUJCcn45dffgEAxMTEQKVSSWP8AeDmzZs4ffq03s+oefPmEEJIPyMiooelpudxnsN5Dif5MUEiHUqlEkOGDMHJkyf1JlmoSvkJMDMzU2/djRs34OrqWusyWFtbY+7cuTh16hT+/PNPfPXVV7h69SqGDx9ucNrSyipeNSv33Xff4f79+9i1axdeeOEFPP744+jTpw9sbW1rXUZDWrRoAaVSiSlTpuD48eNVvsoTJRcXF70baAFUuawmpkyZgtu3b2P9+vV48cUXDcYNGzYMAIxO7/rdd9/B2tpaunn2q6++Qn5+Po4dO4YWLVpIr27dukEIgbi4OOTk5Ojso/LPoGXLllAqlTX6XtXH888/D5VKhS1btkCj0WDbtm149tlnda6Eurq6IiAgwODPaPHixbKWkYioKjU5j/McznM4yY8JEulZtGgRhBAIDw9HUVGR3vri4mJ8//33AEq74AFg+/btOjHHjx9Heno6hgwZUq+yODs7Y8yYMfj73/+OP//8U7oqVtMrURWVn+wrzswnhMDGjRvrVcaKHBwc8OSTT+Knn35Ct27d0KdPH71XeVL55JNP4ty5c/j555919vHll1/W6bNbt26N119/HX/5y18wefJkg3HPPfccunTpguXLl1c5rPDrr7/GDz/8gOnTp0u9WZs2bULz5s1x8OBBJCYm6rw++ugjFBYWIjY21mj57O3tMWjQIPy///f/ZL2616JFCzz77LP44osvsGfPHmRlZekNUwkJCcGlS5fg4uJS5c/IXA8JJqKmrSbncZ7DeQ4n+fE5SKQnKCgIn376KWbMmIHevXvj1VdfRdeuXVFcXIyffvoJn332Gfz9/fGXv/wFfn5+eOmll7B27VpYWVnh6aefxpUrV7B48WJ4e3tjzpw5tf78v/zlL/D390efPn3QqlUr/P7771izZg18fHzQoUMHAKXjlAHg448/xuTJk2FjYwM/P78qH4pabtiwYbC1tcXzzz+PBQsWoKCgAJ9++qneVbP6+vjjj/H4449j4MCBePXVV+Hr64u7d+/iv//9L77//nscOnQIADB79mxs3rwZzzzzDN577z24u7sjNjZWGlZQF8uXL682RqlUYufOnRg2bBiCgoIwb948BAUFobCwEN9//z0+++wzDBo0CCtXrgQAnD17FseOHcOrr74qJcQVDRgwACtXrsSmTZsQERFh9LNXrVqFxx9/HH379sXChQvx6KOP4ubNm9i9ezc2bNhg9OdXG1OnTsXXX3+NiIgItGnTBkOHDtVZP3v2bOzcuRNPPPEE5syZg27dukGr1SIjIwM//PAD5s2bh759+5qkLEREtVHdeZzncJ7D6SEw3/wQ1NClpaWJyZMni7Zt2wpbW1vh6OgoevbsKd555x2dGWw0Go348MMPRceOHYWNjY1wdXUVL7zwgrh69arO/gYNGiS6du2q9zmVZ4xbuXKl6N+/v3B1dRW2traibdu2Ytq0aeLKlSs62y1atEh4eXkJKysrnVnffHx8xDPPPFPlMX3//feie/fuws7OTrRu3Vq8/vrr0mw/FWeNMzSL3d///ne9ffr4+IjJkyfrLLt8+bKYOnWqaN26tbCxsRGtWrUS/fv3F++9955O3Pnz58WwYcOEnZ2daNmypZg2bZr4v//7v1rPYmdM5Vnsyt2+fVssXLhQdOrUSdjZ2YlmzZqJwMBAER0dLYqKiqS42bNnCwB6s+1VtHDhQgFAnDx5UghhuK7Kj3ns2LHCxcVF+vlOmTJFmpHJ0HGVz/BUsV4qz4BUTqPRCG9vbwFAvPXWW1WW4969e+Ltt98Wfn5+wtbWVpqafc6cOSIrK8vgsRIRmUp9zuM8h/McTvJRCFE21QkREREREVETx3uQiIiIiIiIyjBBIiIiIiIiKsMEiYiIiIiIqAwTJCIiIiIiojJMkIiIiIiIiMowQSIiIiIiIirT6B4Uq9VqcePGDTRv3hwKhcLcxSEialKEELh79y68vLxgZcVrcOXYNhERmUdd2qVGlyDduHED3t7e5i4GEVGTdvXqVbRp08bcxWgw2DYREZlXbdqlRpcgNW/eHEBpJTg5OZm5NERETUteXh68vb2lczGVYttERGQedWmXGl2CVD50wcnJiY0QEZGZcBiZLrZNRETmVZt2iQPEiYiIiIiIyjBBIiIiIiIiKsMEiYiIiIiIqAwTJCIiIiIiojJMkIiIiIiIiMowQSIiIiIiIirDBImIiIiIiKgMEyQiIiIiIqIyTJCIiIiIiIjKMEEiIiIiIiIqwwSJiIgalXXr1qFdu3aws7ND79698eOPPxqNP3LkCHr37g07Ozu0b98e69ev14vZuXMnunTpApVKhS5duiAuLk6u4hMRkZnJniDJ0VARERFV5euvv8bs2bPx1ltv4aeffsLAgQPx9NNPIyMjo8r4y5cvY+TIkRg4cCB++uknvPnmm5g1axZ27twpxSQnJ2PcuHEICwvDzz//jLCwMISGhiI1NfVhHRYRET1ECiGEkGvnX3/9NcLCwrBu3ToMGDAAGzZswOeff47z58+jbdu2evGXL1+Gv78/wsPD8fLLL+M///kPZsyYga+++gp/+9vfavSZeXl5UKvVyM3NhZOTk6kPiYiIjDD3Obhv377o1asXPv30U2lZ586d8eyzzyIqKkov/o033sDu3buRnp4uLXvllVfw888/Izk5GQAwbtw45OXl4V//+pcUM2LECLRo0QJfffVVjcpl7nohImqq6nL+tZazQKtWrcK0adMwffp0AMCaNWuwf/9+fPrpp1U2VOvXr0fbtm2xZs0aAKWN2okTJ/CPf/yjxglSufv370OpVOotVyqVsLOz04kzxMrKCvb29nWKzc/Ph6HcU6FQwMHBoU6xDx48gFarNVgOR0fHOsUWFBRAo9GYJNbBwQEKhQIAUFhYiJKSEpPE2tvbw8qqtNOzqKgIxcXFJom1s7OTviu1iS0uLkZRUZHBWJVKBWtr61rHlpSUoLCw0GCsra0tbGxsah2r0WhQUFBgMNbGxga2tra1jtVqtXjw4IFJYq2traFSqQAAQgjk5+ebJLY2v/d1PUfcvpON+KStEFoDvxtWCiiV/zvlakpKAEPXpxQKKK3rGKspAbSGr3spy74PxmKbO7piWODzdT5HmEtRURFOnjyJhQsX6iwPDg5GUlJSldskJycjODhYZ9nw4cOxadMmFBcXw8bGBsnJyZgzZ45eTHlbVRt1bZt+vXkPBSWl53MrKyvpuw/A6O9U5diCggKD7Q0AnTLonQOEFg53LsBKU3rOKf+9BkrPceX7rWr/thXKUFxcDKHXNv1vm4rlLS4qgVYY/t7Z2lbcbwlE5VhRMdYWQGl7U6IphlajhaGasLW1LYsEiktK9NvSCsdoa2sjtWMlJRqjvyc2tjawQoXYKs8Xpfu2traB0up/sSUaw+2jjY0trMpiNRqNgba0dL821jawUlpVKK/h/Vpb20htqVarRUmJfvuoKKsKpVIpfbc1Gg1KjNRDxdjS/VZRhrI6Lo8VAITQorjYcHmVSqv/nWeFFkVVxCrK6kFpZQWltTWEKN+v4bbfysoK1tbl505hoD0XUqx0ThZAUbHhtt9KYQVrm/+dvw39naCAgEJhJf2dYCwWKP3b0abCud5grAAUClSKNVwPQOn3vfrYsu+aTYVzREmR0bbJpuLvsoFYtdej8PDxeyhtk2wJklwNVWWFhYU6fyDm5eUBALy8vKr8jJEjR2Lv3r3Sezc3N50/rBwDhsHhkccAAK6tXDFw4EBp3d69e1FUWPWXzLlFCzz55GDp/f74/Qb/YGvu1BxDhw6V3h84cAB38+5WGevg4IDhI4ZL7xMTD+NOTk6VsbYqWzzzzDPS+x9//BG3b92uMlZprcSoUaOk90lJybiZlVVlLAA8N/o56f+pqcdw4/p1g7GjRo2C0rr0xHfy5Elk/F710BYAGPnMM1CpSn+B0tJ+xuXffjMYO3zEcClZPHv2LC7+etFg7JChQ+Hk1BwAkJ7+C36pcHW4ssFPPokWLZwBABcvXsTZM2cNxg58YiBcXV0BAL/99ht+TvvZYGxQ//7w8HAHAPz+ewZOnTxpMDawbyBat24NALh+/TqOpR4zGNurd2/4+JT2wGZl3USygd8nAOjeozvat28PALh9+zZ+/LfhIa7+Af7o0KEDACAn5w4OJyYajO3UuTM6d+4EAMjLu4uDBw4YjO3QsQP8/f0BlF4M2B+/32Bsu/bt0aNHdwBAYWER9lX4Xa2srU9b9O7dGwCgKdFg9+7dBmO9WrdG376B0vu4XYbvH3H38ED//kHS+927d0NTUvXJt+I5IjfvZZxrZrjBsiSPXBWYGPKazh/pf/vb37Bv3z6D28g4GKHGbt++DY1GA3d3d53l7u7uyDJwfsvKyqoyvqSkBLdv34anp6fBGEP7BEzfNnlO/QS2rXwMft7DMN/6a0RY/59Zy0BETdfy3zrg3Z3pD6Vtki1BkquhqiwqKgpLly41WbltW/nAwa8/ACAfwP5zN6V11r59DFZYUaVYePeAg4FYTeVYzwA46B+aRCfWrTMc3GoY27IjHFp2rFmsuj0c1O1rFtvMBw5+hhvqAxcqJGV2beDg18Zg7OH/Vkj2bDzg4OdhMPbHy3cBlCWSilZw8GtlMDb5aj5Kf4IA0EL6mVbl2I1C4Eb58TkZjT15UwPcLI91NBr78x/Az3+Ux6qMxp69A5y9Ux5rbTT2l3vALxV+HsZiLz4ALtYw9rci4LcaxmZogYwaxl4HcL2GsTeh+10zFnu7FrF3ahF7t1Ks6pG+BmMrniO6tC8EoIB7sRaqKjtuFdJVZqD0iqVhlWMFYPBaN6BQWJk01uGBrIMLZFex7oDS46y8rLr4ystru09Tt02ae3+gxLa0d0dlZwcP9/+dK69evQqtgZ5LW1uVTtt5/fo13av1Ff54sLG1lS7UlMZeR3GFK8/tnC8D1kCO1gF3hb3O1eySkhKjIyFqGgsodK6oazQaaI1dda5hrIDuVfLSWMO/gxVjtRoNNAZjS4+t/LtQ3X5rGitQ2ntTHqvVGu+ZKt2vVbWxolJ5tVptaQ+1kf3q9iBVHVu+XylWaFFirKfH2hpKZfl+BUoM9N4IKbb0oqvQGu/pUSqtpQu0QitQbKz3RmkN6/JYYbxHRqlUSt9hIQz1IJXt10qp8x02NsrDyspK57tmLFZhpYSNjY3Us1lgbL8KhU4Pb2FhocFWQaGw0o819LtspYCqQk9PYVEhhKHfT4UCdio7nVhD33dFDWOz7hr+HTA12VtBORqqihYtWoS5c+dK7/Py8uDt7Y0bN25UOc6w8tCG7Oxsnfc/Xc3Fxez70mfaVOxKNNB7VGVsUZHhv1EUukMTahNbXFRsNBu2VdUxtrjY8Je8trG2tuWjGFBSXMXQhDrG2tjYQFE+hKC6YQy1iLW2+d9JvVaxGo3BngWgrGFR1j5WqzHcCAGlvX/S0ITaxGqrabCUSqlhqU1saSNkrMGqeayVVYXhBtU0WLWJVVhVGm5g7He5NrEVfu93nC39vi0J+Dt6+U+usryWNAx348u673fu3Gn0d6MhcHV1hVKp1LsIl52drXfxrZyHh0eV8dbW1nBxcTEaY2ifgOnbporMNfxb9d0B4OJpOAQvhqrXFA7/LsPh36U4/Lv2sQ9j+HdtYxty2/R+2asiudom2RIkuRqqylQqlc545XKOjo41GndYOebxTo54vFO1mxER6dhxTgFAwF7lUKNzT8WGw5SxFRs6U8ZWbJgbKltbW/Tu3RsJCQl47rn/DQtOSEjAX//61yq3CQoKwvfff6+z7IcffkCfPn2kP+CCgoKQkJCgcx/SDz/8gP79DfdEmrptMlVsvb53ZRdxVCpboNK6hvC9q02soZ9PfWNtbW11LmqaI9bGxqbKWxLqG2ttba3TE2iqWKVSWePvcG1iraysZIlVKBSyxALy/d4/tHOEEQ3hHFEbsk3zXbGhqighIcFgo1LeCFVUuaEiImqItNKNv5Y9PM3SzZ07F59//jk2b96M9PR0zJkzBxkZGXjllVcAlPbsTJo0SYp/5ZVX8Pvvv2Pu3LlIT0/H5s2bsWnTJsyfP1+Kee211/DDDz/gww8/xC+//IIPP/wQBw4cwOzZsx/24TUQhkeBEBE1BrK25HPnzkVYWBj69OmDoKAgfPbZZ3oN1fXr1/HFF18AKG2ooqOjMXfuXISHhyM5ORmbNm2q8TSqRETmUt7Br7Di87fNady4cfjjjz+wbNkyZGZmwt/fH/v27YOPT+l9k5mZmTrPRGrXrh327duHOXPm4JNPPoGXlxf++c9/6syc2r9/f+zYsQNvv/02Fi9ejEceeQRff/01+vY1fH9ao2ZkmDwRUWMga4IkR0NFRNQQlfYgKaBUsLfb3GbMmIEZM2ZUuW7Lli16ywYNGoRTp04Z3eeYMWMwZswYUxTPcjWAmQqJiB4G2ceCyNFQERE1NOW3k1pV8YwbosaFPUhE1LhxLAgRkQmUJ0hKBe9BosaqrAeJQ+yIqJFjgkREZAKasr8ZrZQcYkeNFIfYEVETwQSJiMgE2INETQd7kIiocWOCRERkAuUJksKK9yBRY8UhdkTUNDBBIiIyAakHyYpD7KiRkobYMUEiosaNCRIRkQmUPwfJig+KJSIismhsyYnIJP7887848tNn0GhLzF0Usyguu6iu5CQN1GhxiB0RNQ1MkIjIJD7YNxX7NTnmLob5lP3RaGvbzMwFIZIJh9gRURPBBImITOJacR5gBXTX2qCl0t7cxTGLbs6PwtW1k7mLQURERPXABIkanDs5l/H37/6GbFFk7qJQLdy2AgAF5vWei57dXjB3cYjI5DjEjoiaBiZI1OCcTP8Gp62KwWEclsdOK+DTpp+5i0FEcuAQOyJqIpggUYOj1ZbOB9ZJa4XIfu+YuTRUGx6tAtCy5aPmLgYRERFRnTFBoganfBa0ZgobdO38NzOXhoiISnGIHRE1DXwOEjU4QpQ+cpNfTiKiBoRD7IioieDfoNTgaMsSJAWvUhIRNSCi+hAiokaACRI1OOUJkpJXKYmIGh5evCKiRo4JEjU45UPsFEyQiIgaDg6xI6ImggkSNThaUTqLnRWvUhIRNSCcpIGImgYmSNTg/G+SBjbCRERERPRwMUGiBkdT1oPEIXZERA2I4CQNRNQ0MEGiBqd8kgYOsSMiaoB4biaiRo4JEjU4HGJHRERERObCBIkaHPYgERE1QJzFjoiaCCZI1OBo2YNERNQAcRY7ImoamCBRgyPA5yARERERkXkwQaIG539D7Pj1JCJqMDjEjoiaCP4FSg2OVsshdkREDQ+H2BFR08AEiRqc8h4kBRthIiIiInrIrM1dgMbsypUj+DL1IxRpi8xdFItyoeAWYMUeJCKiBoVD7IioiWCCJKNNSe/iu+Kb5i6G5Snr11TbNDNvOYiIqAIOsSOipoEJkozul/UcDVI0QzfnR81cGsuiUtrjL0ELzF0MIiLSwwSJiBo3Jkgy0pRdbXvCrQ9CR6w1c2mIiIjqQRpiR0TUuHGSBhlpyxIkJYcjEBGRxeMQOyJqGpggyUhTdrXNitVMRESNBhMkImrc+Je7jLRl/7IHiYiILB6H2BFRE8EESUYlYA8SERE1FhxiR0RNA/9yl1H5PUjWVqxmIiK55eTkICwsDGq1Gmq1GmFhYbhz547RbYQQiIyMhJeXF+zt7TF48GCcO3dOJ2bw4MFQKBQ6r/Hjx8t4JA0dEyQiatz4l7uMNFIPEhsTIiK5TZgwAWlpaYiPj0d8fDzS0tIQFhZmdJsVK1Zg1apViI6OxvHjx+Hh4YFhw4bh7t27OnHh4eHIzMyUXhs2bJDzUBomDrEjoiZCtgSptlfyiouL8cYbbyAgIACOjo7w8vLCpEmTcOPGDbmKKDttWVuiZB5KRCSr9PR0xMfH4/PPP0dQUBCCgoKwceNG7NmzBxcuXKhyGyEE1qxZg7feegujR4+Gv78/tm7divz8fHz55Zc6sQ4ODvDw8JBearX6YRxWA8MhdkTUNMj2l3ttr+Tl5+fj1KlTWLx4MU6dOoVdu3bh119/xahRo+QqouykHiQ2JkREskpOToZarUbfvn2lZf369YNarUZSUlKV21y+fBlZWVkIDg6WlqlUKgwaNEhvm9jYWLi6uqJr166YP3++Xg9T08I2jYgaN1keFFt+JS8lJUVqrDZu3IigoCBcuHABfn5+etuo1WokJCToLFu7di0CAwORkZGBtm3b1qoM9+/fh1Kp1FuuVCphZ2enE2eIlZUV7O3t6xSbn5+PElE6j522RKuzrUKhgIODg06sMDB0oXLsgwcPoNVqq4wFAEdHxzrFFhQUQKPRmCTWwcEBirKksLCwECUlJSaJtbe3h1XZ/VxFRUUoLi42SaydnZ30XalNbHFxMYqKigzGqlQqWFtb1zq2pKQEhYWFBmNtbW1hY2NT61iNRoOCggKDsTY2NrC1ta11rFarxYMHD0wSa21tDZVKBaD06n5+fr5JYmvze/8wzxE1/b23tHOEOWRlZcHNzU1vuZubG7KysgxuAwDu7u46y93d3fH7779L7ydOnIh27drBw8MDZ8+exaJFi/Dzzz/rtVkVFRYW6vxu5uXl1ep4GiTBHiQiaiKEDDZt2iTUarXecrVaLTZv3lzj/SQkJAiFQiFyc3MNxhQUFIjc3FzpdfXqVYHScQBVvkaOHKmzvYODg856G1cb8cjSR4TfKj/R7ZNu4qlvnpJendd0Fn6r/Kp8+Uf768R2+biL6La5q/Df4i/GjVbrfEaXLl10ytClSxeD5fXx8dGJ7dOnj8FYV1dXndhBgwYZjHVwcNCJHTlypNF6q2jMmDFGY+/duyfFTp482Whsdna2FDtjxgyjsZcvX5Zi58+fbzT27NmzUuySJUuMxh47dkyKXbFihdHYxMREKTY6Otpo7J49e6TYmJgYo7HffPONFPvNN98YjY2JiZFi9+zZYzQ2Ojpaik1MTDQau2LFCin22LFjRmOXLFkixZ49e9Zo7Pz586XYy5cvG42dMWOGFJudnW00dvLkyVLsvXv3jMaOGTNG5ztsLLa6c0TF16BBg3RiXV1dDcb26dNHJ9bHx8dgrCWfI3JzcwUAo+ft2qju9xeAOH78uHj//fdFx44d9bZ/9NFHRVRUVJX7/s9//iMAiBs3bugsnz59uhg+fLjBMp04cUIAECdPnqx1uU1VL2axfqAQS5yE+PUHc5eEiKjG6tIuydKDVJcreZUVFBRg4cKFmDBhApycnAzGRUVFYenSpXUua2XNujaDvU/pVV4ttMjOz5bWKZ2VUEK/V6pcxVgrtRW0AKyFgF2O4R4JIiIyLCIiotoZ43x9fXH69GncvHlTb92tW7f0eojKeXh4AChtszw9PaXl2dnZBrcBgF69esHGxgYXL15Er169qoxZtGgR5s6dK73Py8uDt7e30eOwHOxBIqLGTSFEzaeliYyMrDYZOX78OH744Qds3bpV78bYDh06YNq0aVi4cKHRfRQXF2Ps2LHIyMjA4cOHjSZIVQ1j8Pb2xo0bN6rcrrrhM3G/xeHDUx+iV6temNNjjjSEB4DRoUFWVlY6sQUFBbBJjITHb/9G8yEfoKTHJGmdpQ+f4RA7DrHjELtSHGKnH5uXlwe1Wo3c3Fyj525TS09PR5cuXZCamorAwEAAQGpqKvr164dffvmlyqHdQgh4eXlhzpw5WLBgAYDSc4Cbmxs+/PBDvPzyy1V+1tmzZxEQEIAjR47giSeeqFH5zFUvJrV+IJB1GnhhJ/DoUHOXhoioRupy/q1VD5KcV/LKFRcXIzQ0FJcvX8ahQ4eqPRCVSqWTmJRzdHSs0Zj4yjHlf8g52zmjh1eParc3yroZoNUCtrZQGSlLxT9uqlPxDyxTxlb8g9CUsYZ+PvWNtbW1lX5W5oq1sbGRkg9TxlpbW0vJkiljlUplje8TqU2slZWVLLEKhUKWWKB298vIFVub33tLO0eYQ+fOnTFixAiEh4dLU3C/9NJLCAkJ0UmOOnXqhKioKDz33HNQKBSYPXs2PvjgA3To0AEdOnTABx98AAcHB0yYMAEAcOnSJcTGxmLkyJFwdXXF+fPnMW/ePPTs2RMDBgwwy7GaT42vpxIRWbRaJUiurq5wdXWtNi4oKAi5ubk4duyYzpW83Nxc9O/f3+B25cnRxYsXkZiYCBcXl9oUr+HiDa1ERLKLjY3FrFmzpFnpRo0ahejoaJ2YCxcuIDc3V3q/YMECPHjwADNmzEBOTg769u2LH374Ac2bNwdQetHk4MGD+Pjjj3Hv3j14e3vjmWeewZIlS6qcCKhpYJtGRI2bLPcg1eVKXklJCcaMGYNTp05hz5490Gg00v1KLVu2rPFVfSIiappatmyJ7du3G42pPFRRoVAgMjISkZGRVcZ7e3vjyJEjpiqiZSuvOl70I6JGTrbnIMXGxiIgIADBwcEIDg5Gt27dsG3bNp2Yilfyrl27ht27d+PatWvo0aMHPD09pZehZ1g0eFJDzMaEiIgsHYfYEVHTIEsPElD7K3m+vr4Gb0ImIiIiM+NFPyJqImTrQSJAutrG4QhERNRYsE0jokaOCRIRERHVAEd5EFHTINsQO0unMOkVMl5tIyIiEyu6D5QYfg6ayWnLn1PHNo2IGjcmSHLiPVVERCSHiwnAV88DWsMPtpYNh9gRUSPHIXZERESW5uox8yRHam/A3f/hfy4R0UPEHiRZcZIGIiKSQ1n78th04OmPHt7HKhRs04io0WOCREREZGnKh3ArrAArDgYhIjIlnlUrMemzmPjMCCIikhXbFyIiU2OCREREZHE4hJuISC5MkAxQmPKqHBswIiIiIiKLwARJVpzmm4iIZMAh3EREsmGCREREZHE4xI6ISC5MkOTEK3xERERERBaFCRIREZGl4QU4IiLZMEGSFYdAEBGRHNi+EBHJhQlSJYITKxARERERNVlMkOTEIRBERCQHUz7UnIiIdDBBMkDBYQtERNRgcYgdEZFcmCA9DGzAiIiIiIgsAhMkWXEIBBERyYBDuImIZMMEiYiIyFJxhAIRkckxQZITr/AREREREVkUJkiVcJpvIiJq8HgBjohINkyQZMVZhoiISA5sX4iI5MIEiYiIiIiIqAwTJDlxCAQREcmB7QsRkWyYIBEREVkcDrEjIpILEyQiIiIiIqIyTJBkxSt8REQkAw6xIyKSDROkSoTgNN9ERNTQ8QIcEZFcmCDJickWEREREZFFYYJkgILDFoiIqKHiEDsiItkwQXoYOASCiIhMikPsiIjkwgSJiIjIYjFBIiIyNSZIDwUbMCIiMiHe40pEJBsmSHJiA0ZE9NDk5OQgLCwMarUaarUaYWFhuHPnjtFtdu3aheHDh8PV1RUKhQJpaWl6MYWFhZg5cyZcXV3h6OiIUaNG4dq1a/IcRI1xiB0RkVyYIBERUaMwYcIEpKWlIT4+HvHx8UhLS0NYWJjRbe7fv48BAwZg+fLlBmNmz56NuLg47NixA0ePHsW9e/cQEhICjUZj6kOoAyZIRESmJluCVJcreRW9/PLLUCgUWLNmjVxFrJKAKXt9eIWPiOhhSE9PR3x8PD7//HMEBQUhKCgIGzduxJ49e3DhwgWD24WFheGdd97B0KFDq1yfm5uLTZs2YeXKlRg6dCh69uyJ7du348yZMzhw4IBch1M9jlAgIpKNbAlSXa7klfvuu++QmpoKLy8vuYpHRESNSHJyMtRqNfr27Sst69evH9RqNZKSkuq835MnT6K4uBjBwcHSMi8vL/j7+9drv/XHC3BERHKxlmOn5VfyUlJSpMZq48aNCAoKwoULF+Dn52dw2+vXryMiIgL79+/HM888I0fxakRhikaHz6kgInoosrKy4Obmprfczc0NWVlZ9dqvra0tWrRoobPc3d3d6H4LCwtRWFgovc/Ly6tzGYxj+0JEZGqy9CDV9UqeVqtFWFgYXn/9dXTt2lWOohERkQWJjIyEQqEw+jpx4gSAqi9sCSFMc8GrlvuNioqShpir1Wp4e3ubugCm3R8REUlk6UGq65W8Dz/8ENbW1pg1a1aNP+vhXaWrCw6BICKqj4iICIwfP95ojK+vL06fPo2bN2/qrbt16xbc3d3r/PkeHh4oKipCTk6OTi9SdnY2+vfvb3C7RYsWYe7cudL7vLw8EydJ5e2LCXdJREQAapkgRUZGYunSpUZjjh8/DqD2V/JOnjyJjz/+GKdOnarV1b6oqKhqy0RERJbJ1dUVrq6u1cYFBQUhNzcXx44dQ2BgIAAgNTUVubm5RhOZ6vTu3Rs2NjZISEhAaGgoACAzMxNnz57FihUrDG6nUqmgUqnq/Lk1xwyJiMjUapUgyXkl78cff0R2djbatm0rLdNoNJg3bx7WrFmDK1euVLmd/FfpTIENGBGRnDp37owRI0YgPDwcGzZsAAC89NJLCAkJ0bnvtVOnToiKisJzzz0HAPjzzz+RkZGBGzduAIA0452Hhwc8PDygVqsxbdo0zJs3Dy4uLmjZsiXmz5+PgIAAgzPfPRQcYkdEJJtaJUhyXskLCwvTa2yGDx+OsLAwvPjiiwY/6+FdpasDNmBERA9NbGwsZs2aJc04N2rUKERHR+vEXLhwAbm5udL73bt367Qx5RcBlyxZgsjISADA6tWrYW1tjdDQUDx48ABDhgzBli1boFQqZT4iYziEm4hILrLcg1SXK3kuLi5wcXHR2Y+NjQ08PDyMznpHREQEAC1btsT27duNxohKF66mTJmCKVOmGN3Gzs4Oa9euxdq1a+tbRBkwQSIiMjXZnoMUGxuLgIAABAcHIzg4GN26dcO2bdt0YipfyWtIFCZpdHiFj4iIZMABCkREspGlBwmo25W8ygzdd0RERNS08QIcEZFcZOtBIvBBsUREJDO2L0REpsYEiYiIyNJwEiAiItkwQXoYOASCiIhMikPsiIjkwgRJVrzCR0REcmKCRERkakyQKqlu4ggiIiKzY1tFRCQbJkgGmGSab07SQEREsuAQOyIiuTBBIiIislhMkIiITI0Jkqx4hY+IiGTAIXZERLJhgkRERGRxeAGOiEguTJDkxHuQiIhIVmxfiIhMjQkSERGRpeEQOyIi2TBBqkTI8ewiDoEgIiKT4hA7IiK5MEGSFa/wERGRnJggERGZGhMkQ9jmEBFRQyXYg0REJBcmSHLiJA1ERCQLjlAgIpILEyQiIiKLxQtwRESmZm3uAjRuHAJBREQmdOtX4N8rgIyU0vdsX4iITI4JEhERkaU4sRk48//+997BxXxlISJqpJggVSJM+WwJ3oNERESmpCks/bfjCKDHBMDvGfOWh4ioEWKCREREZGm8egFd/mruUhARNUqcpMEABXt9iIiIiIiaHCZIsiqfpMG8pSAiIiIiopphgkRERGQpTHmfLBERVYkJkpykdoxdSEREREREloAJEhERkaXh84+IiGTDWewqK7pX+m/+n8C1k/XbV/H90n/ZkBERERERWQQmSJWIm+dL/3PpIJDyjYn2ygSJiIiIiMgSMEGqzFoFAFDYOALOjvXfn7ot0KZP/fdDRERERESyY4JUmWc34PoPQOdngIHLzV0aIiKiCjiLHRGR3DhJAxERERERURkmSERERBaH97YSEcmFCRIREREREVEZJkhERERERERlmCARERFZCsFJGoiI5MYEiYiIiIiIqAwTJAMUvAGWiMii5OTkICwsDGq1Gmq1GmFhYbhz547RbXbt2oXhw4fD1dUVCoUCaWlpejGDBw+GQqHQeY0fP16egyAiIrNjgkRERI3ChAkTkJaWhvj4eMTHxyMtLQ1hYWFGt7l//z4GDBiA5cuNP/cuPDwcmZmZ0mvDhg2mLHrt8RoeEZFs+KBYIiKyeOnp6YiPj0dKSgr69u0LANi4cSOCgoJw4cIF+Pn5VbldeQJ15coVo/t3cHCAh4eHSctMREQNk2w9SHUZ6gCUNnKjRo2CWq1G8+bN0a9fP2RkZMhVTCIiagSSk5OhVqul5AgA+vXrB7VajaSkpHrvPzY2Fq6urujatSvmz5+Pu3fv1nufRETUMMnWgzRhwgRcu3YN8fHxAICXXnoJYWFh+P777w1uc+nSJTz++OOYNm0ali5dCrVajfT0dNjZ2clVTCIiagSysrLg5uamt9zNzQ1ZWVn12vfEiRPRrl07eHh44OzZs1i0aBF+/vlnJCQkGNymsLAQhYWF0vu8vLx6leF/OIsdEZHcZEmQ6jrU4a233sLIkSOxYsUKaVn79u3lKKJBglOoEhE1GJGRkVi6dKnRmOPHjwMAFAr9G3OEEFUur43w8HDp//7+/ujQoQP69OmDU6dOoVevXlVuExUVVW25iYioYZJliF1dhjpotVrs3bsXHTt2xPDhw+Hm5oa+ffviu+++k6OIRERkASIiIpCenm705e/vDw8PD9y8eVNv+1u3bsHd3d2kZerVqxdsbGxw8eJFgzGLFi1Cbm6u9Lp69apJy8BZGoiI5CNLD1JdhjpkZ2fj3r17WL58Od577z18+OGHiI+Px+jRo5GYmIhBgwZVuZ1cwxg4zTcRkfm5urrC1dW12rigoCDk5ubi2LFjCAwMBACkpqYiNzcX/fv3N2mZzp07h+LiYnh6ehqMUalUUKlUJv1cIiJ6OGrVgxQZGan3LIjKrxMnTgCo/VAHrVYLAPjrX/+KOXPmoEePHli4cCFCQkKwfv16g2WKioqSJoJQq9Xw9vauzSEREVEj0LlzZ4wYMQLh4eFISUlBSkoKwsPDERISojOsu1OnToiLi5Pe//nnn0hLS8P58+cBABcuXEBaWpp0Me/SpUtYtmwZTpw4gStXrmDfvn0YO3YsevbsiQEDBjzcgyQiooeiVj1IERER1T4cz9fXF6dPn671UAdXV1dYW1ujS5cuOss7d+6Mo0ePGvy8RYsWYe7cudL7vLw8JklERE1QbGwsZs2aheDgYADAqFGjEB0drRNz4cIF5ObmSu93796NF198UXpf3sYtWbIEkZGRsLW1xcGDB/Hxxx/j3r178Pb2xjPPPIMlS5ZAqVQ+hKMiIqKHrVYJkpxDHWxtbfHYY4/hwoULOst//fVX+Pj4GPwsDmMgIiIAaNmyJbZv3240pvJEPFOmTMGUKVMMxnt7e+PIkSOmKJ5pcCIhIiLZyTJJQ12HOrz++uv4+uuvsXHjRvz3v/9FdHQ0vv/+e8yYMUOOYhIREREREemQ7UGxsbGxCAgIQHBwMIKDg9GtWzds27ZNJ6byUIfnnnsO69evx4oVKxAQEIDPP/8cO3fuxOOPPy5XMYmIiCxPPacuJyIiw2R7UGxdhjoAwNSpUzF16lS5ilUtwYfwERERERE1WbL1IFm6+j5YkIiIiIiILA8TJCIiIovBUQ5ERHJjgkRERERERFSGCRIREZHF4TBwIiK5MEEiIiIiIiIqwwSJiIiIiIioDBOkSjjNNxERERFR08UEiYiIyFLwGh4RkeyYIBEREREREZVhgkRERGRp+DBzIiLZMEEiIiIiIiIqwwSJiIiIiIioDBMkIiIii8FZGoiI5MYEqRIh2PgQERERETVVTJCIiIgsDidpICKSCxMkAxRsfIiIiIiImhwmSERERERERGWYIBEREREREZVhgkRERGQpOJEQEZHsmCARERERERGVYYJERERkaRScSIiISC5MkCoRfAgfEREREVGTxQTJAAWvzhERERERNTlMkIiIiCwGRzkQEcmNCRIREREREVEZJkhEREQWh8PAiYjkwgSJiIiIiIioDBMkIiIiIiKiMkyQiIiIiIiIyjBBIiIishSCs9gREcmNCZIBCt4AS0RERETU5DBBIiIisjR8mDkRkWyYIBEREREREZVhgkRERERERFSGCRIRETUKOTk5CAsLg1qthlqtRlhYGO7cuWMwvri4GG+88QYCAgLg6OgILy8vTJo0CTdu3NCJKywsxMyZM+Hq6gpHR0eMGjUK165dk/loDOEkDUREcmOCVIngDEFERBZpwoQJSEtLQ3x8POLj45GWloawsDCD8fn5+Th16hQWL16MU6dOYdeuXfj1118xatQonbjZs2cjLi4OO3bswNGjR3Hv3j2EhIRAo9HIfUhERGQG1uYuABERUX2lp6cjPj4eKSkp6Nu3LwBg48aNCAoKwoULF+Dn56e3jVqtRkJCgs6ytWvXIjAwEBkZGWjbti1yc3OxadMmbNu2DUOHDgUAbN++Hd7e3jhw4ACGDx8u/8FViZM0EBHJhT1IBig4QxARkcVITk6GWq2WkiMA6NevH9RqNZKSkmq8n9zcXCgUCjg7OwMATp48ieLiYgQHB0sxXl5e8Pf3r9V+iYjIcsiWINV2LDgA3Lt3DxEREWjTpg3s7e3RuXNnfPrpp3IVkYiIGomsrCy4ubnpLXdzc0NWVlaN9lFQUICFCxdiwoQJcHJykvZra2uLFi1a6MS6u7sb3W9hYSHy8vJ0XkREZBlkS5BqOxYcAObMmYP4+Hhs374d6enpmDNnDmbOnIn/+7//k6uYRETUgEVGRkKhUBh9nThxAkDVPf9CiBqNCCguLsb48eOh1Wqxbt26auOr229UVJR0gVCtVsPb27vafRIRUcMgyz1IdRkLDpQOkZg8eTIGDx4MAHjppZewYcMGnDhxAn/961/lKCoRETVgERERGD9+vNEYX19fnD59Gjdv3tRbd+vWLbi7uxvdvri4GKGhobh8+TIOHTok9R4BgIeHB4qKipCTk6PTi5SdnY3+/fsb3OeiRYswd+5c6X1eXp5pkiROJEREJDtZepDqOhb88ccfx+7du3H9+nUIIZCYmIhff/3VjDfBEhGRObm6uqJTp05GX3Z2dggKCkJubi6OHTsmbZuamorc3FyjiUx5cnTx4kUcOHAALi4uOut79+4NGxsbnckcMjMzcfbsWaP7ValUcHJy0nkREZFlkKUHqa5jwf/5z38iPDwcbdq0gbW1NaysrPD555/j8ccfN7hNYWEhCgsLpfcc501E1PR07twZI0aMQHh4ODZs2ACgdBRCSEiIzqiFTp06ISoqCs899xxKSkowZswYnDp1Cnv27IFGo5HaqJYtW8LW1hZqtRrTpk3DvHnz4OLigpYtW2L+/PkICAiQZrUzC04kREQkm1r1IMk9Fvyf//wnUlJSsHv3bpw8eRIrV67EjBkzcODAAYPbmHqct+BD+IiILFJsbCwCAgIQHByM4OBgdOvWDdu2bdOJuXDhAnJzcwEA165dw+7du3Ht2jX06NEDnp6e0qviaIfVq1fj2WefRWhoKAYMGAAHBwd8//33UCqVD/X4iIjo4ahVD5KcY8EfPHiAN998E3FxcXjmmWcAAN26dUNaWhr+8Y9/GLxSJ9c4bwWfMUFEZFFatmyJ7du3G42p+DBwX1/fGj0c3M7ODmvXrsXatWvrXUYiImr4apUgubq6wtXVtdq4imPBAwMDAVQ/Fry4uBjFxcWwstLt1FIqldBqtQY/S6VSQaVS1eIoiIiILBVHORARyU2WSRoqjgVPSUlBSkoKwsPDqxwLHhcXBwBwcnLCoEGD8Prrr+Pw4cO4fPkytmzZgi+++ALPPfecHMUkIiIiIiLSIcskDUDpWPBZs2ZJTx8fNWoUoqOjdWIqjgUHgB07dmDRokWYOHEi/vzzT/j4+OD999/HK6+8IlcxiYiIiIiIJLIlSLUdCw6UPm8iJiZGriIRERE1ErxPlohILrIMsSMiIiIiIrJETJAqqcmMRkRERERE1DgxQSIiIrIUvIhHRCQ7JkhERERERERlmCARERFZGgUnaSAikgsTJCIiIiIiojJMkIiIiIiIiMowQSIiIiIiIirDBImIiMhicBY7IiK5MUGqRLDxISIiIiJqspggGaDgDEFERNRgsY0iIpILEyQiIiIiIqIyTJCIiIiIiIjKMEEiIiKyFIL3yRIRyY0JEhERERERURkmSERERJaGEwkREcmGCVIlnOabiIiIiKjpYoJkgIJTqBIRERERNTlMkIiIiIiIiMowQSIiIrIYHAZORCQ3JkhERERERERlmCARERFZHN4nS0QkFyZIREREREREZZggVcbh3URERERETRYTJCIiIksheBWPiEhuTJAM4HOQiIiIiIiaHiZIRERElkbBi3hERHJhgkRERERERFSGCRIREREREVEZJkhERERERERlmCARERFZDM5iR0QkNyZIlQg2PkRERERETRYTJAMUnCGIiIiIiKjJYYJERESNQk5ODsLCwqBWq6FWqxEWFoY7d+4YjC8uLsYbb7yBgIAAODo6wsvLC5MmTcKNGzd04gYPHgyFQqHzGj9+vMxHQ0RE5sIEiYiIGoUJEyYgLS0N8fHxiI+PR1paGsLCwgzG5+fn49SpU1i8eDFOnTqFXbt24ddff8WoUaP0YsPDw5GZmSm9NmzYIOehEBGRGVmbuwBERET1lZ6ejvj4eKSkpKBv374AgI0bNyIoKAgXLlyAn5+f3jZqtRoJCQk6y9auXYvAwEBkZGSgbdu20nIHBwd4eHjIexA1IXifLBGR3NiDREREFi85ORlqtVpKjgCgX79+UKvVSEpKqvF+cnNzoVAo4OzsrLM8NjYWrq6u6Nq1K+bPn4+7d++aquhERNTAsAeJiIgsXlZWFtzc3PSWu7m5ISsrq0b7KCgowMKFCzFhwgQ4OTlJyydOnIh27drBw8MDZ8+exaJFi/Dzzz/r9T5VVFhYiMLCQul9Xl5eLY6mBjiREBGRbGTrQXr//ffRv39/ODg46F2JM0QIgcjISHh5ecHe3h6DBw/GuXPn5Cpi1WXgNN9ERA1GZGSk3gQJlV8nTpwAUPXso0KIGs1KWlxcjPHjx0Or1WLdunU668LDwzF06FD4+/tj/Pjx+Pbbb3HgwAGcOnXK4P6ioqKkySLUajW8vb1reeRERGQusiVIRUVFGDt2LF599dUab7NixQqsWrUK0dHROH78ODw8PDBs2DAOZSAiaqIiIiKQnp5u9OXv7w8PDw/cvHlTb/tbt27B3d3d6GcUFxcjNDQUly9fRkJCgk7vUVV69eoFGxsbXLx40WDMokWLkJubK72uXr1aswMmIiKzk22I3dKlSwEAW7ZsqVG8EAJr1qzBW2+9hdGjRwMAtm7dCnd3d3z55Zd4+eWX5SoqERE1UK6urnB1da02LigoCLm5uTh27BgCAwMBAKmpqcjNzUX//v0NbleeHF28eBGJiYlwcXGp9rPOnTuH4uJieHp6GoxRqVRQqVTV7ouIiBqeBjNJw+XLl5GVlYXg4GBpmUqlwqBBg4zeYFtYWIi8vDydFxERNS2dO3fGiBEjEB4ejpSUFKSkpCA8PBwhISE6M9h16tQJcXFxAICSkhKMGTMGJ06cQGxsLDQaDbKyspCVlYWioiIAwKVLl7Bs2TKcOHECV65cwb59+zB27Fj07NkTAwYMMMORchg4EZHcGkyCVH4TbeWhEO7u7kZvsOU4byIiAkpnmgsICEBwcDCCg4PRrVs3bNu2TSfmwoULyM3NBQBcu3YNu3fvxrVr19CjRw94enpKr/ILc7a2tjh48CCGDx8OPz8/zJo1C8HBwThw4ACUSuVDP0YiIpJfrYbYRUZGSkPnDDl+/Dj69OlT5wJVvpm2uhtsFy1ahLlz50rv8/LymCQRETVBLVu2xPbt243GiArPEfL19dV5XxVvb28cOXLEJOUzLc5iR0Qkl1olSBERERg/frzRGF9f3zoVpPwBfFlZWTrjurOzs43eYMtx3kREREREZCq1SpBqerNsXZQ/YyIhIQE9e/YEUDoT3pEjR/Dhhx/K8plVqe5qIhERERERNV6y3YOUkZGBtLQ0ZGRkQKPRIC0tDWlpabh3754UU/FmWYVCgdmzZ+ODDz5AXFwczp49iylTpsDBwQETJkyQq5hERESWgxfxiIhkJ9s03++88w62bt0qvS/vFUpMTMTgwYMB6N4sCwALFizAgwcPMGPGDOTk5KBv37744Ycf0Lx5c7mKaZCC47uJiIiIiJoc2RKkLVu2VPsMpMrD2RQKBSIjIxEZGSlXsYiIiCyfkcmLiIiofhrMNN9ERERERETmxgSJiIiIiIioDBMkIiIiIiKiMkyQiIiIiIiIyjBBqkSAU6gSERERETVVTJAMUHCGICIiarDYRhERyYUJEhERERERURkmSERERERERGWYIBEREREREZVhgkRERGQpBCcSIiKSGxMkIiIiIiKiMkyQKhG8OkdERA0dZ1olIpINEyQDFJxClYiIiIioyWGCREREREREVIYJEhERkcXgMHAiIrkxQSIiIiIiIirDBImIiMji8D5ZIiK5MEEiIiIiIiIqwwSJiIiIiIioDBMkIiIiIiKiMkyQDFDwIXxERNTQ8GHmRESyY4JERERERERUhgkSERGRpeEoByIi2TBBIiIiIiIiKsMEiYiIiIiIqAwTJCIiIovBSRqIiOTGBKkSwcaHiIiIiKjJYoJkgAK8AZaIiBoqtlFERHJhgkRERERERFSGCRIREREREVEZJkhERERERERlmCARERFZCsGJhIiI5MYEiYiIGoWcnByEhYVBrVZDrVYjLCwMd+7cMbpNZGQkOnXqBEdHR7Ro0QJDhw5FamqqTkxhYSFmzpwJV1dXODo6YtSoUbh27ZqMR0JERObEBKkSwatzREQWacKECUhLS0N8fDzi4+ORlpaGsLAwo9t07NgR0dHROHPmDI4ePQpfX18EBwfj1q1bUszs2bMRFxeHHTt24OjRo7h37x5CQkKg0WjkPiTDFJzFjohILtbmLgAREVF9paenIz4+HikpKejbty8AYOPGjQgKCsKFCxfg5+dX5XYTJkzQeb9q1Sps2rQJp0+fxpAhQ5Cbm4tNmzZh27ZtGDp0KABg+/bt8Pb2xoEDBzB8+HB5D4yIiB469iAREZHFS05OhlqtlpIjAOjXrx/UajWSkpJqtI+ioiJ89tlnUKvV6N69OwDg5MmTKC4uRnBwsBTn5eUFf3//Gu+XiIgsC3uQiIjI4mVlZcHNzU1vuZubG7Kysoxuu2fPHowfPx75+fnw9PREQkICXF1dpf3a2tqiRYsWOtu4u7sb3W9hYSEKCwul93l5ebU5HCM4DJyISG7sQSIiogYrMjISCoXC6OvEiRMAAEUV9+UIIapcXtGTTz6JtLQ0JCUlYcSIEQgNDUV2drbRbarbb1RUlDRZhFqthre3dw2OloiIGgLZEqT3338f/fv3h4ODA5ydnauNLy4uxhtvvIGAgAA4OjrCy8sLkyZNwo0bN+QqIhERNXARERFIT083+vL394eHhwdu3rypt/2tW7fg7u5u9DMcHR3x6KOPol+/fti0aROsra2xadMmAICHhweKioqQk5Ojs012drbR/S5atAi5ubnS6+rVq3U4emM4SQMRkVxkG2JXVFSEsWPHIigoSGpojMnPz8epU6ewePFidO/eHTk5OZg9ezZGjRolXR0kIqKmxdXVVRruZkxQUBByc3Nx7NgxBAYGAgBSU1ORm5uL/v371+ozhRDS8LjevXvDxsYGCQkJCA0NBQBkZmbi7NmzWLFihcF9qFQqqFSqWn0uERE1DLIlSEuXLgUAbNmypUbxarUaCQkJOsvWrl2LwMBAZGRkoG3btqYuYpUEx3cTEVmczp07Y8SIEQgPD8eGDRsAAC+99BJCQkJ0ZrDr1KkToqKi8Nxzz+H+/ft4//33MWrUKHh6euKPP/7AunXrcO3aNYwdOxZAads0bdo0zJs3Dy4uLmjZsiXmz5+PgIAAaVY7IiJqXBr0JA25ublQKBRGh+jJdyMsNVQajQbFxcXmLgZRk2RjYwOlUmnuYlQpNjYWs2bNkmacGzVqFKKjo3ViLly4gNzcXACAUqnEL7/8gq1bt+L27dtwcXHBY489hh9//BFdu3aVtlm9ejWsra0RGhqKBw8eYMiQIdiyZUuDrQciIqqfBpsgFRQUYOHChZgwYQKcnJwMxkVFRUm9VaZU3U299PAJIZCVlYU7d+6YuyhETZqzszM8PDwa3HmyZcuW2L59u9GYig8Dt7Ozw65du6rdr52dHdauXYu1a9fWu4z1xoeZExHJrlYJUmRkZLXJyPHjx9GnT596Faq4uBjjx4+HVqvFunXrjMYuWrQIc+fOld7n5eVxtqBGqjw5cnNzg4ODQ4P744yosRNCID8/X5rhzdPT08wlIiIiMr1aJUgREREYP3680RhfX9/6lAfFxcUIDQ3F5cuXcejQIaO9RwBvhG0qNBqNlBy5uLiYuzhETZa9vT2A0lnc3NzcOMzMXHiBiIhINrVKkGo6m1BdlSdHFy9eRGJiIv8QJkn5PUcODg5mLgkRlf8eFhcXM0EiIqJGR7bnIGVkZCAtLQ0ZGRnQaDRIS0tDWloa7t27J8V06tQJcXFxAICSkhKMGTMGJ06cQGxsLDQaDbKyspCVlYWioiK5ikkWhsPqiMyPv4dERNSYyTZJwzvvvIOtW7dK73v27AkASExMxODBgwHoziZ07do17N69GwDQo0cPnX1V3IaIiKjp4iQNRERyk60HacuWLRBC6L0qJjpCCEyZMgVA6b1LVcVX3kZufA4SmdrgwYMxe/ZscxdDNr6+vlizZo25i0FERERkErIlSJZOAQ4hISKihoptFBGRXJggETVBGo0GWq3W3MUgIiIianCYIBE9BFqtFgsWLEDLli3h4eGByMhIAMDUqVMREhKiE1tSUgIPDw9s3rwZQOkQvYiICERERMDZ2RkuLi54++23dR54WVRUhAULFqB169ZwdHRE3759cfjwYWn9li1b4OzsjD179qBLly5QqVTYuHEj7Ozs9B68O2vWLAwaNEh6v3PnTnTt2hUqlQq+vr5YuXKlweO8cuUKFAoF0tLSpGV37tyBQqGQynP48GEoFArs378fPXv2hL29PZ566ilkZ2fjX//6Fzp37gwnJyc8//zzyM/Pl/YjhMCKFSvQvn172Nvbo3v37vj2229rUv1ERERENSbbJA1EchNC4EGxxiyfbW+jrNVMXlu3bsXcuXORmpqK5ORkTJkyBQMGDMD06dPxxBNPIDMzU3ro5r59+3Dv3j2EhobqbD9t2jSkpqbixIkTeOmll+Dj44Pw8HAAwIsvvogrV65gx44d8PLyQlxcHEaMGIEzZ86gQ4cOAID8/HxERUXh888/h4uLC9q0aYMlS5Zg586dmDZtGoDSnqVvvvkGy5YtAwCcPHkSoaGhiIyMxLhx45CUlIQZM2bAxcVFun+wriIjIxEdHQ0HBweEhoYiNDQUKpUKX375Je7du4fnnnsOa9euxRtvvAEAePvtt7Fr1y58+umn6NChA/7973/jhRdeQKtWrXQSOiIiIqL6YIJEFutBsQZd3tlvls8+v2w4HGxr/uvTrVs3LFmyBADQoUMHREdH4+DBg1i+fDn8/Pywbds2LFiwAAAQExODsWPHolmzZtL23t7eWL16NRQKBfz8/HDmzBmsXr0a4eHhuHTpEr766itcu3YNXl5eAID58+cjPj4eMTEx+OCDDwCUPrNm3bp16N69u7TfcePG4csvv5QSpIMHDyInJwdjx44FAKxatQpDhgzB4sWLAQAdO3bE+fPn8dFHH9U7QXrvvfcwYMAAAMC0adOwaNEiXLp0Ce3btwcAjBkzBomJiXjjjTdw//59rFq1CocOHUJQUBAAoH379jh69Cg2bNjABImaDsGJhIiI5MYhdkQPQbdu3XTee3p6Ijs7GwAwffp0xMTEAACys7Oxd+9eTJ06VSe+X79+Oj1WQUFBuHjxIjQaDU6dOgUhBDp27IhmzZpJryNHjuDSpUvSNra2tnrlmDhxIg4fPowbN24AAGJjYzFy5Ei0aNECAJCeni4lMeUGDBggfXZ9VCyLu7s7HBwcpOSofFl5HZ0/fx4FBQUYNmyYzjF+8cUXOsdIREREVF/sQaqMF+cshr2NEueXDTfbZ9eGjY2NznuFQiFNkjBp0iQsXLgQycnJSE5Ohq+vLwYOHFjjfWu1WiiVSpw8eRJKpW65KvZC2dvb6w0LDAwMxCOPPIIdO3bg1VdfRVxcnJSsAaXDGCtvI4xcwbaystKLKS4urjK2Yp0oFAqjdVT+7969e9G6dWudOJVKZbA8RI0WH9ZLRCQbJkgGcJrvhk+hUNRqmFtD5eLigmeffRYxMTFITk7Giy++qBeTkpKi975Dhw5QKpXo2bMnNBoNsrOza5VYlZswYQJiY2PRpk0bWFlZ4ZlnnpHWdenSBUePHtWJT0pKQseOHfWSMQBo1aoVACAzM1N6OHTFCRvqqnxiiYyMDA6nIyIiIllZ/l+XRI3A9OnTERISAo1Gg8mTJ+utv3r1KubOnYuXX34Zp06dwtq1a6XZ5Dp27IiJEydi0qRJWLlyJXr27Inbt2/j0KFDCAgIwMiRI41+9sSJE7F06VK8//77GDNmDOzs7KR18+bNw2OPPYZ3330X48aNQ3JyMqKjo7Fu3boq92Vvb49+/fph+fLl8PX1xe3bt/H222/Xo2ZKNW/eHPPnz8ecOXOg1Wrx+OOPIy8vD0lJSWjWrFmVdUZERERUF0yQiBqAoUOHwtPTE127dpUmWqho0qRJePDgAQIDA6FUKjFz5ky89NJL0vqYmBi89957mDdvHq5fvw4XFxcEBQVVmxwBpZNGPPbYYzh+/DjWrFmjs65Xr1745ptv8M477+Ddd9+Fp6cnli1bZnSChs2bN2Pq1Kno06cP/Pz8sGLFCgQHB9e4Lgx599134ebmhqioKPz2229wdnZGr1698Oabb9Z730SWg+PAiYjkphDGbiiwQHl5eVCr1cjNzYWTk1Ott191YhVizsVgcpfJmP/YfBlKSHVRUFCAy5cvo127djo9HI1Ffn4+vLy8sHnzZowePVpn3eDBg9GjRw+95IXIXIz9Ptb3HNxYmaxetj0HXDoEPLcB6D7edAUkImqk6nL+ZQ8SkRlptVpkZWVh5cqVUKvVGDVqlLmLREQWgffJEhHJhQkSkRllZGSgXbt2aNOmDbZs2QJra/5KEhEREZkT/xojMiNfX1+j02YDwOHDhx9OYYiIqMnTaDQGH89A1FDZ2NhUObtuXTFBqkTwBlgiIiJqYoQQyMrKwp07d8xdFKI6cXZ2hoeHh97zG+uCCZIBpqhcIiIik2pc8ypRA1KeHLm5ucHBwYF/B5HFEEIgPz8f2dnZAABPT89675MJEhEREVETptFopOTIxcXF3MUhqjV7e3sAQHZ2Ntzc3Oo93M7KFIUiIiKih4hX98mEyu85cnBwMHNJiOqu/PtrinvomCAREREREYfVkUUz5feXCRIREREREVEZJkhEMhs8eDBmz55t7mLIxtfXF2vWrDF3Mepty5YtcHZ2NncxiIioFtjGkhyYIFVS3TNpiIiIzIdtFBGR3JggGaAAx+FS46XRaKDVas1dDCIiokaHbazlY4JE9BBotVosWLAALVu2hIeHByIjIwEAU6dORUhIiE5sSUkJPDw8sHnzZgClwwciIiIQEREBZ2dnuLi44O2339bp7SwqKsKCBQvQunVrODo6om/fvjh8+LC0vnz42J49e9ClSxeoVCps3LgRdnZ2eg8FnDVrFgYNGiS937lzJ7p27QqVSgVfX1+sXLnS4HFeuXIFCoUCaWlp0rI7d+5AoVBI5Tl8+DAUCgX279+Pnj17wt7eHk899RSys7Pxr3/9C507d4aTkxOef/555OfnS/sRQmDFihVo37497O3t0b17d3z77bc1qX7pM/fu3Yvu3bvDzs4Offv2xZkzZwxuM2XKFDz77LM6y2bPno3BgwdL77/99lsEBATA3t4eLi4uGDp0KO7fv1+jMhHVDy/iEZVjG2veNrYxYoJElksIoOi+eV61HIq5detWODo6IjU1FStWrMCyZcuQkJCA6dOnIz4+HpmZmVLsvn37cO/ePYSGhupsb21tjdTUVPzzn//E6tWr8fnnn0vrX3zxRfznP//Bjh07cPr0aYwdOxYjRozAxYsXpZj8/HxERUXh888/x7lz5/DCCy/A2dkZO3fulGI0Gg2++eYbTJw4EQBw8uRJhIaGYvz48Thz5gwiIyOxePFibNmypbY/LT2RkZGIjo5GUlISrl69itDQUKxZswZffvkl9u7di4SEBKxdu1aKf/vttxETE4NPP/0U586dw5w5c/DCCy/gyJEjNf7M119/Hf/4xz9w/PhxuLm5YdSoUXWeDjQzMxPPP/88pk6divT0dBw+fBijR4/mMF0iahSEEMgvKjHLq7bnUbax+szRxjYmfFAsWa7ifOADL/N89ps3AFvHGod369YNS5YsAQB06NAB0dHROHjwIJYvXw4/Pz9s27YNCxYsAADExMRg7NixaNasmbS9t7c3Vq9eDYVCAT8/P5w5cwarV69GeHg4Ll26hK+++grXrl2Dl1dpfcyfPx/x8fGIiYnBBx98AKD0uQDr1q1D9+7dpf2OGzcOX375JaZNmwYAOHjwIHJycjB27FgAwKpVqzBkyBAsXrwYANCxY0ecP38eH330EaZMmVLHyiv13nvvYcCAAQCAadOmYdGiRbh06RLat28PABgzZgwSExPxxhtv4P79+1i1ahUOHTqEoKAgAED79u1x9OhRbNiwQedqnDFLlizBsGHDAJQ2iG3atEFcXJxOQ1lTmZmZKCkpwejRo+Hj4wMACAgIqPV+iIgaogfFGnR5Z79ZPvv8suFwsK35n6hsY/WZo41tTNiDRPQQdOvWTee9p6cnsrOzAQDTp09HTEwMgNInQO/duxdTp07Vie/Xr5/O/P5BQUG4ePEiNBoNTp06BSEEOnbsiGbNmkmvI0eO4NKlS9I2tra2euWYOHEiDh8+jBs3bgAAYmNjMXLkSLRo0QIAkJ6eLp1gyw0YMED67PqoWBZ3d3c4ODhIJ+7yZeV1dP78eRQUFGDYsGE6x/jFF1/oHGN1yk/8ANCyZUv4+fkhPT29TuXv3r07hgwZgoCAAIwdOxYbN25ETk5OnfZFVGPsoSTSwzZWnzna2MaEPUhkuWwcSntyzPXZtQm3sdF5r1AopBs4J02ahIULFyI5ORnJycnw9fXFwIEDa7xvrVYLpVKJkydPQqlU6qyreIXM3t5e7yFqgYGBeOSRR7Bjxw68+uqriIuLkxoSoHSIReVtjA19sLKy0osxNIStYp0oFAqjdVT+7969e9G6dWudOJVKZbA8NWHowXJWVlZ6x1rxWJRKJRISEpCUlIQffvgBa9euxVtvvYXU1FS0a9euXmUiIjI3exslzi8bbrbPrg22sfoaShtrqZggVSI4harlUChqNcytoXJxccGzzz6LmJgYJCcn48UXX9SLSUlJ0XvfoUMHKJVK9OzZExqNBtnZ2bU66ZebMGECYmNj0aZNG1hZWeGZZ56R1nXp0gVHjx7ViU9KSkLHjh31GgoAaNWqFYDS4Wc9e/YEAJ2bSeuq/KbXjIyMenX1p6SkoG3btgCAnJwc/Prrr+jUqVOVsa1atcLZs2d1lqWlpek1OgMGDMCAAQPwzjvvwMfHB3FxcZg7d26dy0hUIyZ8YjxRVRQKRa2GuTVUbGOrZ6o2tjGx/G++XNj20EM0ffp0hISEQKPRYPLkyXrrr169irlz5+Lll1/GqVOnsHbtWmmmm44dO2LixImYNGkSVq5ciZ49e+L27ds4dOgQAgICMHLkSKOfPXHiRCxduhTvv/8+xowZAzs7O2ndvHnz8Nhjj+Hdd9/FuHHjkJycjOjoaKxbt67Kfdnb26Nfv35Yvnw5fH19cfv2bbz99tv1qJlSzZs3x/z58zFnzhxotVo8/vjjyMvLQ1JSEpo1a1ZlnVVl2bJlcHFxgbu7O9566y24urrqzVRX7qmnnsJHH32EL774AkFBQdi+fTvOnj0rNUqpqak4ePAggoOD4ebmhtTUVNy6dQudO3eu9/ESEZHpsI01zlRtbGPCBImoARg6dCg8PT3RtWtX6SbQiiZNmoQHDx4gMDAQSqUSM2fOxEsvvSStj4mJwXvvvYd58+bh+vXrcHFxQVBQULUnbqD0htbHHnsMx48f13tad69evfDNN9/gnXfewbvvvgtPT08sW7bM6M2jmzdvxtSpU9GnTx/4+flhxYoVCA4OrnFdGPLuu+/Czc0NUVFR+O233+Ds7IxevXrhzTffrPE+li9fjtdeew0XL15E9+7dsXv3btja2lYZO3z4cCxevBgLFixAQUEBpk6dikmTJklTgzs5OeHf//431qxZg7y8PPj4+GDlypV4+umn632sRERkOmxjq2eKNrZREY1Mbm6uACByc3PrtP2KYyuE/xZ/sfLEShOXjOrjwYMH4vz58+LBgwfmLoos7t+/L9Rqtdi5c6feukGDBonXXnvt4ReqEUlMTBQARE5OjrmL0igY+32s7zm4Pv7880/xwgsvCCcnJ+Hk5CReeOGFan/mS5YsEX5+fsLBwUE4OzuLIUOGiJSUFJ2YQYMGCQA6r3HjxtWqbCarly1/EWKJkxCn/1/99kNUAdvY1x5+ocjkDH2P63L+5Sx2RGak1Wpx48YNLF68GGq1GqNGjTJ3kYgs1oQJE5CWlob4+HjEx8cjLS0NYWFhRrfp2LEjoqOjcebMGRw9ehS+vr4IDg7GrVu3dOLCw8ORmZkpvTZs2CDnoRjB+2SJaoptLNUVh9gRmVFGRgbatWuHNm3aYMuWLbC25q9kXbzyyivYvn17leteeOEFjB8//iGXiB629PR0xMfHIyUlBX379gUAbNy4EUFBQbhw4QL8/Pyq3G7ChAk671etWoVNmzbh9OnTGDJkiLTcwcEBHh4e8h0AEZkc21iqK35TiMzI19e32ieGHz58+OEUxoItW7YM8+fPr3Kdk5MT3Nzcav1kdrIsycnJUKvVUnIElD7bRK1WIykpyWCCVFFRURE+++wzqNVqnYc9AqXPL9m+fTvc3d3x9NNPY8mSJWjevLnJj4OITIdtLNUVEyQisnhubm5wc3MzdzHIjLKysqr8Dri5uSErK8votnv27MH48eORn58PT09PJCQkwNXVVVo/ceJEtGvXDh4eHjh79iwWLVqEn3/+GQkJCQb3WVhYiMLCQul9Xl5eHY6KiIjMgfcgVcLnIBERNRyRkZFQKBRGXydOnABQ9UN/RRUPYqzsySefRFpaGpKSkjBixAiEhoZKT5gHSu8/Gjp0KPz9/TF+/Hh8++23OHDgAE6dOmVwn1FRUVCr1dLL29u7jjVAREQPm2wJ0vvvv4/+/fvDwcEBzs7Otd7+5ZdfhkKh0JsS8WFR8EFIRERmFxERgfT0dKMvf39/eHh44ObNm3rb37p1C+7u7kY/w9HREY8++ij69euHTZs2wdraGps2bTIY36tXL9jY2ODixYsGYxYtWoTc3FzpdfXq1ZoftDEcKkpEJDvZhtgVFRVh7NixCAoKMtrQVOW7775DampqlXPVExFR0+Hq6qoz3M2QoKAg5Obm4tixYwgMDARQ+jDf3Nxc9O/fv1afKYTQGR5X2blz51BcXAxPT0+DMSqVCiqVqlafS0REDYNsPUhLly7FnDlzEBAQUKvtrl+/joiICMTGxsLGxkam0hERUWPSuXNnjBgxAuHh4UhJSUFKSgrCw8MREhKiM0FDp06dEBcXBwC4f/8+3nzzTaSkpOD333/HqVOnMH36dFy7dg1jx44FAFy6dAnLli3DiRMncOXKFezbtw9jx45Fz549MWDAALMcKwCgmmGDRERUdw3qHiStVouwsDC8/vrr6Nq1q7mLQ0REFiQ2NhYBAQEIDg5GcHAwunXrhm3btunEXLhwAbm5uQAApVKJX375BX/729/QsWNHhISE4NatW/jxxx+lNsjW1hYHDx7E8OHD4efnh1mzZiE4OBgHDhyAUql86MdIRETya1Cz2H344YewtrbGrFmzarwNZwqihm7w4MHo0aOH2e6nk5uvry9mz56N2bNnm7so9bJlyxbMnj0bd+7cMXdRqI5atmxp8HlY5SpO+WtnZ4ddu3YZjff29saRI0dMUj4iMj22sZbB0trYWvUg1WY2odo6efIkPv74Y2zZsqXaGYcq4kxBRES1M2XKFDz77LPmLgYREVGDVKsepIiIiGqfSO/r61ungvz444/Izs5G27ZtpWUajQbz5s3DmjVrcOXKlSq3W7RoEebOnSu9z8vLq1eSxIdJUlOg0WigUChgZdWgRtlSA1NcXMx7QYmIaoltrOWr1U/O1dUVnTp1Mvqys7OrU0HCwsJw+vRppKWlSS8vLy+8/vrr2L9/v8HtVCoVnJycdF6mwGm+yZS0Wi0WLFiAli1bwsPDA5GRkQCAqVOnIiQkRCe2pKQEHh4e2Lx5M4DS4QMRERGIiIiAs7MzXFxc8Pbbb+sk80VFRViwYAFat24NR0dH9O3bV+fp4Fu2bIGzszP27NmDLl26QKVSYePGjbCzs9Pr7p41axYGDRokvd+5cye6du0KlUoFX19frFy50uBxXrlyBQqFAmlpadKyO3fuQKFQSOU5fPgwFAoF9u/fj549e8Le3h5PPfUUsrOz8a9//QudO3eGk5MTnn/+eeTn50v7EUJgxYoVaN++Pezt7dG9e3d8++23Nal+6TP37t2L7t27w87ODn379sWZM2cMblNVL8vs2bMxePBg6f23336LgIAA2Nvbw8XFBUOHDsX9+/drVKbNmzdL9erp6YmIiAhpXUZGBv7617+iWbNmcHJyQmhoqM4U1pGRkejRowe2bdsGX19fqNVqjB8/Hnfv3q22bJGRkdi6dSv+7//+T+r5P3z4sPSz++abbzB48GDY2dlVO1yNiKghYBvLNtbUZEttMzIykJaWhoyMDGg0GinpuXfvnhRTcTYhFxcX+Pv767xsbGzg4eGhMwMRUTkhBPKL883yqm1P49atW+Ho6IjU1FSsWLECy5YtQ0JCAqZPn474+HhkZmZKsfv27cO9e/cQGhqqs721tTVSU1Pxz3/+E6tXr8bnn38urX/xxRfxn//8Bzt27MDp06cxduxYjBgxQuc5Lfn5+YiKisLnn3+Oc+fO4YUXXoCzszN27twpxWg0GnzzzTeYOHEigNKhr6GhoRg/fjzOnDmDyMhILF68GFu2bKntj0tPZGQkoqOjkZSUhKtXryI0NBRr1qzBl19+ib179yIhIQFr166V4t9++23ExMTg008/xblz5zBnzhy88MILtbo/5PXXX8c//vEPHD9+HG5ubhg1ahSKi4vrVP7MzEw8//zzmDp1KtLT03H48GGMHj26Rt+NTz/9FH//+9/x0ksv4cyZM9i9ezceffRRAKXf62effRZ//vknjhw5goSEBFy6dAnjxo3T2celS5fw3XffYc+ePdizZw+OHDmC5cuXV1u2+fPnIzQ0FCNGjEBmZiYyMzN1psF+4403MGvWLKSnp2P48OF1qht6GHgRj2QmBFB03zwvtrG1/WnpacptrCnINknDO++8g61bt0rve/bsCQBITEyUssOKswkR1daDkgfo+2Vfs3x26oRUONg41Di+W7duWLJkCQCgQ4cOiI6OxsGDB7F8+XL4+flh27ZtWLBgAQAgJiYGY8eORbNmzaTtvb29sXr1aigUCvj5+eHMmTNYvXo1wsPDcenSJXz11Ve4du2a9Oyw+fPnIz4+HjExMfjggw8AlA6XWrduHbp37y7td9y4cfjyyy8xbdo0AMDBgweRk5MjTXG8atUqDBkyBIsXLwYAdOzYEefPn8dHH32EKVOm1LH2Sr333nvSNMnTpk3DokWLcOnSJbRv3x4AMGbMGCQmJuKNN97A/fv3sWrVKhw6dAhBQUEAgPbt2+Po0aPYsGGDztU4Y5YsWYJhw4YBKG0Q27Rpg7i4OJ2GsqYyMzNRUlKC0aNHw8fHBwBq/FiD9957D/PmzcNrr70mLXvssccAAAcOHMDp06dx+fJlabjwtm3b0LVrVxw/flyK02q12LJlC5o3bw6gtBf+4MGDeP/996stm729PQoLC+Hh4aFXttmzZ2P06NG1rQ4iamyK84EPzPQ8yjdvALaONQ5nG6uvKbexpiBbD9KWLVsghNB7Vew6E0IY/QJcuXLF4mftIAJKT94VeXp6Ijs7GwAwffp0xMTEAACys7Oxd+9eTJ06VSe+X79+OpOXBAUF4eLFi9BoNDh16hSEEOjYsSOaNWsmvY4cOYJLly5J29ja2uqVY+LEiTh8+DBu3LgBoHSa5JEjR6JFixYAgPT0dL1nvQwYMED67PqoWBZ3d3c4ODhIJ+7yZeV1dP78eRQUFGDYsGE6x/jFF1/oHGN1yk/8QOmMZ35+fkhPT69T+bt3744hQ4YgICAAY8eOxcaNG5GTk1PtdtnZ2bhx4waGDBlS5fr09HR4e3vr3EvZpUsXODs765TV19dXSo4A3e9UXcsGAH369KlRHBFRQ8E2Vl9TbWNNpUFN801UG/bW9kidkGq2z66Nyje6KxQKaLVaAMCkSZOwcOFCJCcnIzk5Gb6+vhg4cGCN963VaqFUKnHy5Em957JUvEJmb2+vN0NkYGAgHnnkEezYsQOvvvoq4uLipIYEKL2IUXkbY93b5TekVowx1L1esU4UCoXROir/d+/evWjdurVOnEqlMliemjA0a6aVlZXesVY8FqVSiYSEBCQlJeGHH37A2rVr8dZbbyE1NRXt2rUz+Hn29sa/O1XVeVXLjdVXXcsGAI6ONb9qSw/R1WOlQ48ePLw/EKiJs3Eo7ckx12fXJpxtrJ6m2saaChMkslgKhaJWw9waKhcXFzz77LOIiYlBcnIyXnzxRb2YlJQUvfcdOnSAUqlEz549odFokJ2dXauTfrkJEyYgNjYWbdq0gZWVFZ555hlpXZcuXXD06FGd+KSkJHTs2LHKh2S2atUKQGnXePmw2oo3k9ZV+U2vGRkZNe7qr0pKSoo0U2ZOTg5+/fVXdOrUqcrYVq1a4ezZszrL0tLS9BqdAQMGYMCAAXjnnXfg4+ODuLg4nZk1K2vevDl8fX1x8OBBPPnkk3rru3TpgoyMDFy9elXqRTp//jxyc3PRuXPnGh+rsbLZ2trW++okPWS7ZwG3KlyJVXB2LJKZQlGrYW4NFdvY6jWmNtZUmCBV0sqhFTq06ABXe1dzF4WakOnTpyMkJAQajQaTJ0/WW3/16lXMnTsXL7/8Mk6dOoW1a9dKM9107NgREydOxKRJk7By5Ur07NkTt2/fxqFDhxAQEICRI0ca/eyJEydi6dKleP/99zFmzBidmSjnzZuHxx57DO+++y7GjRuH5ORkREdHY926dVXuy97eHv369cPy5cvh6+uL27dv4+23365HzZRq3rw55s+fjzlz5kCr1eLxxx9HXl4ekpKS0KxZsyrrrCrLli2Di4sL3N3d8dZbb8HV1dXg84CeeuopfPTRR/jiiy8QFBSE7du34+zZs1KjlJqaioMHDyI4OBhubm5ITU3FrVu3apTEREZG4pVXXoGbmxuefvpp3L17F//5z38wc+ZMDB06FN26dcPEiROxZs0alJSUYMaMGRg0aFCNh79VVzZfX1/s378fFy5cgIuLC9RqdY32S2bk8sj/kqLmHkC7J8xbHiILwjbWuMbWxpoCE6RKpvpPxVT/qdUHEpnQ0KFD4enpia5du0o3gVY0adIkPHjwAIGBgVAqlZg5cyZeeuklaX1MTIx04//169fh4uKCoKCgak/cQOkNrY899hiOHz+u9yTyXr164ZtvvsE777yDd999F56enli2bJnRewc3b96MqVOnok+fPvDz88OKFSsQHBxc47ow5N1334WbmxuioqLw22+/wdnZGb169cKbb75Z430sX74cr732Gi5evIju3btj9+7dsLW1rTJ2+PDhWLx4MRYsWICCggJMnToVkyZNkqYtdXJywr///W+sWbMGeXl58PHxwcqVK/H0009XW47JkyejoKAAq1evxvz58+Hq6ooxY8YAKL1i9t1332HmzJl44oknYGVlhREjRujMNlSd6soWHh6Ow4cPo0+fPrh37x4SExPr/Aw7ekjGx5q7BEQWi21s9RpTG2sKCtHInoyal5cHtVqN3Nxckz0TicyvoKAAly9fRrt27er8rK2GLD8/H15eXti8ebPeDGKDBw9Gjx499E6sVHOHDx/Gk08+iZycHDg7O5u7OBbP2O8jz8FVY71QQ8Y2lm1sfTSUNtbQ97gu51/2IBGZkVarRVZWFlauXAm1Wo1Ro0aZu0hERESNAttYqive5UlkRhkZGWjdujW++eYbbN68GdbWvGZRF6+88orO1KQVX6+88spDL4+hsjRr1gw//vjjQy8PEVFTxDbWNBpaG/swcIgdWYTG3v1P9ZOdnY28vLwq1zk5OcHNze2hlue///2vwXWtW7eudqrvho5D7GqP9UINGdtYMqahtbGGcIgdEVEFbm5uDeYEDQCPPvqouYtARERkEg2tjX0YOMSOiIiIiIioDBMksijlT3smIvPh7yFR48TfbbJkpvz+cogdWQRbW1tYWVnhxo0baNWqFWxtbaFQKMxdLKImRQiBoqIi3Lp1C1ZWVgafb0FEloVtLFkyOdomJkhkEaysrNCuXTtkZmbixo0b5i4OUZPm4OCAtm3bwsqKgxCIGgO2sdQYmLJtYoJEFsPW1hZt27ZFSUkJNBqNuYtD1CQplUpYW1vz6jJRI8M2liyZqdsmJkhkURQKBWxsbGBjY2PuohARETUqbGOJSnF8BBERERERURkmSERERERERGWYIBEREREREZVpdPcgCSEAAHl5eWYuCRFR01N+7i0/F1Mptk1EROZRl3ap0SVId+/eBQB4e3ubuSRERE3X3bt3oVarzV2MBoNtExGRedWmXVKI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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 49 }, { "cell_type": "markdown", @@ -689,14 +748,12 @@ }, { "cell_type": "code", - "execution_count": 17, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:02:15.062512Z", - "start_time": "2025-02-11T10:02:15.049276Z" + "end_time": "2025-04-16T08:24:41.669409Z", + "start_time": "2025-04-16T08:24:41.656415Z" } }, - "outputs": [], "source": [ "import time\n", "from moarchiving.tests.point_sampling import get_non_dominated_points\n", @@ -704,7 +761,9 @@ "\n", "get_mo_archive.hypervolume_computation_float_type = fractions.Fraction\n", "get_mo_archive.hypervolume_final_float_type = fractions.Fraction" - ] + ], + "outputs": [], + "execution_count": 41 }, { "cell_type": "markdown", @@ -715,37 +774,12 @@ }, { "cell_type": "code", - "execution_count": 18, "metadata": { "ExecuteTime": { - "end_time": "2025-02-11T10:04:03.275197Z", - "start_time": "2025-02-11T10:02:15.063400Z" + "end_time": "2025-04-16T08:26:25.970029Z", + "start_time": "2025-04-16T08:24:41.671375Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing 2 objectives\n", - "...............\n", - "Testing 3 objectives\n", - ".............\n", - "Testing 4 objectives\n", - ".........\n" - ] - }, - { - "data": { - "image/png": "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DZk+cuRIribqwvwerVu3xtHRke+//z7H9kuXLmU3jReFvB4vgC+//PK+j9mpUycSExNZv359ju3Lli2772PezXPPPYednR1Dhw7l1KlTjB07Ns/9duzYkeNL0Gg0snLlSgICArLnaenduzfHjh0jICCAFi1a5Pp3ZyGUn3r16vHQQw+xcOFCli1bRlpaGiNHjsyxT5cuXbIL0dstXrwYJyenuw6brl69OrGxsTl+n/T0dLZs2VKgfAXVtm1bPDw8CA8Pz/PxaNGiRXbLS1569uzJ6dOn2blzZ777dOnShaSkJNatW5dj++LFi7OvL0r5vTb1ej3t27cHyB6Rd+TIkRz73Xk7yP99XZjPInt7+wK30DzI60Y8GGkREppp0KABAF999RWurq44ODjg7++fq8kXoFu3btjZ2TF48GD+85//kJqayrx587hx48Z93XfPnj25efMmX3zxBcePH89xXUBAAF5eXvTu3ZsPPviASZMm0aFDB06dOsX777+Pv79/jiHXrq6u+Pn58dNPP9GlSxc8PT2pUKFCnsOgPTw8ePfdd3n77bcZNmwYgwcP5vr160yZMgUHBwcmTZp0X7/Pndq0aUO5cuV46aWXmDRpEra2tixdupTDhw/f9zGHDRvGzJkzGTZsGB9++CG1atVi06ZNRf4lncXDw4Nhw4Yxb948/Pz8cvVhylKhQgU6d+7Mu+++i7OzM3PnzuXkyZM5htC///77bNu2jTZt2jBu3Djq1KlDamoq58+fZ9OmTcyfP7/Ak9s9++yzvPjii0RFRdGmTZtcrVSTJk3K7pP03nvv4enpydKlS/n555/55JNPcHd3z/fYgwYN4r333uPpp5/mjTfeIDU1lTlz5uQYAl4UXFxc+Pzzzxk+fDhxcXEMGDAAb29vrl69yuHDh7l69WqultDbvfLKK6xcuZK+ffvy5ptv0qpVK1JSUti9eze9e/emU6dODBs2jODgYIYPH8758+dp2LAhv//+O//73//o1avXXfsX3Y/y5cszevRoLly4QO3atdm0aRNff/01o0ePzj6N5+vrS9euXfnoo48oV64cfn5+7NixgzVr1uQ6XsOGDQH4+OOP6dmzJwaDgUaNGhXqs6hhw4asWbOGefPm0bx5c/R6PS1atMgz/4O8bsQD0riztihF8hs15uzsnGvf/Ea53DmyatasWcrf318ZDIYc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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "n_repeats = 100\n", "time_limit = 10\n", @@ -781,48 +815,48 @@ "plt.grid(True)\n", "plt.legend()\n", "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 13.2. Adding a solution to an existing archive" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "ExecuteTime": { - "end_time": "2025-02-11T10:14:31.369609Z", - "start_time": "2025-02-11T10:04:03.276157Z" - } - }, + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing 2 objectives\n", - "......................\n", + "..............\n", "Testing 3 objectives\n", - "................\n", + ".............\n", "Testing 4 objectives\n", - "...........\n" + ".........\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHJCAYAAABpOFaGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACLXElEQVR4nOzdd3wU1frH8c9m0ysESEIIBAgQCD0UKSJEei8iKKjY7lVA0Zurgj8LRRQQRSwBO4qCdBAQqYKggJSIAlEEDKGFhJpCSNs9vz/W5LKkbcJuZrN53r54uTtz9uw3J+3JzJkzOqWUQgghhBCiEnLSOoAQQgghhFakEBJCCCFEpSWFkBBCCCEqLSmEhBBCCFFpSSEkhBBCiEpLCiEhhBBCVFpSCAkhhBCi0pJCSAghhBCVlhRCQgghhKi0pBASwkLvvfceOp2OZs2alep1X3zxBTqdjlOnTpXYtm7dujz88MP5z3fs2IFOp2PHjh2lC+ugdDodU6ZMKdNr582bxxdffGFx+zfeeIM1a9aU6b3K0m/e18mBAwes/p5amDJlCjqdjkuXLpXY9taveyHKkxRCQljo888/B+Do0aP88ssv5fKekZGR7Nmzh8jIyHJ5P3u3Z88eHn/88TK91t4Locps9erVvPLKK1rHEJWUFEJCWODAgQP89ttv9O/fH4DPPvusXN7X19eXDh064OvrWy7vZ+86dOhASEiI1jEqLYPBQFZWltX7bd26NWFhYVbvVwhLSCEkhAXyCp+ZM2fSqVMnlixZQkZGRoF2e/fupXPnzri7uxMcHMyLL75ITk5OgXY5OTm88MILBAUF4enpyZ133sm+ffsKtCvs1NjDDz+Mt7c3J06coF+/fnh7e1O7dm3++9//FvgldfbsWYYPH46Pjw9VqlRh9OjR7N+/H51OV+LRkYsXLzJu3DgiIiLw9vYmICCAu+++m127dlkwYqbTHQMGDGD16tW0aNECd3d36tevz3vvvVeg7enTp3nggQcICAjAzc2NJk2a8Pbbb2M0Gs3a3XpqLO900vbt2xk7dizVq1enWrVqDBs2jPPnz5tlOXr0KD/++CM6nQ6dTkfdunWLzK7T6bh+/Tpffvllfvtu3brl7z9y5AiDBw+matWquLu706pVK7788ssSx6SkfgHS0tKK/VjyLF26lI4dO+Ll5YW3tze9e/fm119/LTGDpZ/XU6dOodPpePPNN5k+fTr16tXDzc2N7du3A/DLL78wcOBAqlWrhru7O2FhYTz77LMF3i8pKYn7778fPz8/AgMDefTRR0lJSTFrc/OpsYsXL+Lq6lroEaI///wTnU5n9jV04cIFnnjiCUJCQnB1daVevXpMnTqV3NzcEsdCCACUEKJYGRkZys/PT7Vr104ppdSnn36qAPXFF1+YtTt69Kjy9PRUERER6ptvvlHffvut6t27t6pTp44CVHx8fH7bMWPGKJ1Op55//nm1efNmNWfOHFWrVi3l6+urxowZk99u+/btClDbt283e62rq6tq0qSJeuutt9TWrVvVq6++qnQ6nZo6dWp+u/T0dNWgQQPl7++vYmJi1KZNm9R//vMfVa9ePQWoBQsWFPtx//nnn2rs2LFqyZIlaseOHWr9+vXqscceU05OTmZ5ihIaGqpq1aql6tSpoz7//HO1YcMGNXr0aAWo2bNn57dLTk5WtWrVUjVq1FAffvih2rhxo3rqqacUoMaOHWvWJ6AmT56c/3zBggUKUPXr11dPP/202rRpk/r0009V1apVVVRUVH672NhYVb9+fdW6dWu1Z88etWfPHhUbG1tk9j179igPDw/Vr1+//PZHjx7NHxcfHx8VFhamFi5cqL777jt1//33K0DNmjWr2DEprl9LPxallHr99deVTqdTjz76qFq/fr1atWqV6tixo/Ly8srvryiWfl7j4+MVoGrVqqWioqLUihUr1ObNm1V8fLzauHGjcnFxUS1atFBffPGF+uGHH9Tnn3+u7rvvvvzXT548WQEqPDxcvfrqq2rLli1qzpw5ys3NTT3yyCNmmUJDQ82+7ocOHapq166tDAaDWbsXXnhBubq6qkuXLimllEpMTFS1a9dWoaGh6qOPPlJbt25Vr732mnJzc1MPP/xwseMgRB4phIQowcKFCxWgPvzwQ6WUUmlpacrb21t16dLFrN3IkSOVh4eHunDhQv623Nxc1bhxY7NC6I8//lCA+s9//mP2+kWLFinAokIIUMuWLTN7fb9+/VR4eHj+85iYGAWo77//3qzdE088YVEhdKvc3FyVk5OjunfvroYOHVpi+9DQUKXT6dShQ4fMtvfs2VP5+vqq69evK6WUmjRpkgLUL7/8YtZu7NixSqfTqWPHjuVvK6oQGjdunNlr33zzTQWoxMTE/G1NmzZVXbt2tfTDVV5eXmafizz33XefcnNzU6dPnzbb3rdvX+Xp6amuXbtWpn4t/VhOnz6tnJ2d1dNPP23WLi0tTQUFBakRI0ZY8NH9T1Gf17xCKCwsTGVnZ5u9JiwsTIWFhakbN24U2W9eIfTmm2+abR83bpxyd3dXRqMxf9uthdDatWsVoDZv3myWMzg4WN1zzz3525544gnl7e2tEhISzN7jrbfeUkCJRaEQSiklp8aEKMFnn32Gh4cH9913HwDe3t7ce++97Nq1i+PHj+e32759O927dycwMDB/m16vZ+TIkWb95Z1aGD16tNn2ESNG4OzsbFEmnU7HwIEDzba1aNGChISE/Oc//vgjPj4+9OnTx6zd/fffb9F7AHz44YdERkbi7u6Os7MzLi4ubNu2jT/++MOi1zdt2pSWLVuabRs1ahSpqanExsYC8MMPPxAREUH79u3N2j388MMopfjhhx9KfJ9BgwaZPW/RogWA2XhYyw8//ED37t2pXbu22faHH36YjIwM9uzZc1v9l/SxbNq0idzcXB566CFyc3Pz/7m7u9O1a1eLrjAszed10KBBuLi45D//66+/OHnyJI899hju7u5l+ngyMzNJTk4u8jV9+/YlKCiIBQsW5G/btGkT58+f59FHH83ftn79eqKioggODjYbi759+wKm7wEhSiKFkBDFOHHiBDt37qR///4opbh27RrXrl1j+PDhwP+uJAO4fPkyQUFBBfq4ddvly5cL3e7s7Ey1atUsyuXp6Vngl5CbmxuZmZlm73NzUZansG2FmTNnDmPHjuWOO+5g5cqV7N27l/3799OnTx9u3LhhUR/FjUfeOFy+fJmaNWsWaBccHGzWrji3jpubmxuAxTlLwxp5i1PSx5KUlARAu3btcHFxMfu3dOnSEi9XL+3n9daP9eLFiwAWT1ovy+fG2dmZBx98kNWrV3Pt2jXANB+sZs2a9O7dO79dUlIS69atKzAOTZs2BbDo0n0hLPvzU4hK6vPPP0cpxYoVK1ixYkWB/V9++SXTp09Hr9dTrVo1Lly4UKDNrdvyfjFcuHCBWrVq5W/Pzc297V+it75PYROwC8tYmK+//ppu3boxf/58s+1paWkWZyhuPPLGoVq1aiQmJhZolzdBuHr16ha/X3nQOm9e/ytWrCA0NLTUry/t51Wn05k9r1GjBmCaiG9LjzzyCLNnz2bJkiWMHDmStWvX8uyzz6LX6/PbVK9enRYtWvD6668X2kdecSpEcaQQEqIIBoOBL7/8krCwMD799NMC+9evX8/bb7/N999/z4ABA4iKimLt2rUkJSXlH3UxGAwsXbrU7HV5VwktWrSINm3a5G9ftmyZVa906dq1K8uWLeP777/PP1UAsGTJEoter9Pp8v96z/P777+zZ8+eAqeFinL06FF+++03s9NjixcvxsfHJ39tpO7duzNjxgxiY2PN1ktauHAhOp2OqKgoi96rJG5ubqU6QlRU++7du7N69WrOnz9v9ot24cKFeHp60qFDB6vmuFXv3r1xdnbm5MmT3HPPPaV+/e1+Xhs1akRYWBiff/450dHRBfqyliZNmnDHHXewYMGC/Mv2H3nkEbM2AwYMYMOGDYSFhVG1alWb5BCOTwohIYrw/fffc/78eWbNmlXgEmeAZs2a8cEHH/DZZ58xYMAAXn75ZdauXcvdd9/Nq6++iqenJzExMVy/ft3sdU2aNOGBBx5g7ty5uLi40KNHD44cOcJbb71l1fWCxowZwzvvvMMDDzzA9OnTadCgAd9//z2bNm0CwMmp+DPjAwYM4LXXXmPy5Ml07dqVY8eOMW3aNOrVq2dxwRYcHMygQYOYMmUKNWvW5Ouvv2bLli3MmjULT09PAP7zn/+wcOFC+vfvz7Rp0wgNDeW7775j3rx5jB07lkaNGt3eQPyjefPmLFmyhKVLl1K/fn3c3d1p3rx5se137NjBunXrqFmzJj4+PoSHhzN58uT8uSmvvvoq/v7+LFq0iO+++44333wTPz+/EnMU1q+l6taty7Rp03jppZf4+++/6dOnD1WrViUpKYl9+/bh5eXF1KlTi3y9NT6vMTExDBw4kA4dOvCf//yHOnXqcPr0aTZt2sSiRYss/lhK8uijj/LEE09w/vx5OnXqVGCcpk2bxpYtW+jUqRMTJkwgPDyczMxMTp06xYYNG/jwww9l3SlRMo0nawtht4YMGaJcXV1VcnJykW3uu+8+5ezsnH+l2M8//6w6dOig3NzcVFBQkHr++efVxx9/XODy+aysLPXf//5XBQQEKHd3d9WhQwe1Z8+eAlfPFHXVmJeXV4EseVfp3Oz06dNq2LBhytvbW/n4+Kh77rlHbdiwQQHq22+/Lfbjz8rKUs8995yqVauWcnd3V5GRkWrNmjVqzJgxKjQ0tNjXKmW6Eqh///5qxYoVqmnTpsrV1VXVrVtXzZkzp0DbhIQENWrUKFWtWjXl4uKiwsPD1ezZswtcPk0RV43t37/frF1h43bq1CnVq1cv5ePjo4ASP4ZDhw6pzp07K09PTwWYXXF2+PBhNXDgQOXn56dcXV1Vy5YtLb4Kr6h+S/OxKKXUmjVrVFRUlPL19VVubm4qNDRUDR8+XG3durXY97f085p31djNSx3cbM+ePapv377Kz89Pubm5qbCwMLMrIfO+Hi9evGj2uryP8+bvh1u/7vOkpKQoDw8PBahPPvmk0BwXL15UEyZMUPXq1VMuLi7K399ftWnTRr300ksqPT292LEQQimldEopVf7llxBCK2+88QYvv/wyp0+ftulfy3Xr1qVZs2asX7/eZu8hhBC3S06NCeHAPvjgAwAaN25MTk4OP/zwA++99x4PPPCAnDIQQgikEBLCoXl6evLOO+9w6tQpsrKyqFOnDhMnTuTll1/WOpoQQtgFOTUmhBBCiEpLFlQUQgghRKUlhZAQQgghKi0phIQQQghRaclk6RIYjUbOnz+Pj49PgaXmhRBCCGGflFKkpaURHBxc7AKyUgiV4Pz58xbfTkAIIYQQ9uXMmTPFLhcihVAJfHx8ANNAWvP2Bzk5OWzevJlevXrh4uJitX4dkYyV5WSsLCdjZTkZK8vJWFnO1mOVmppK7dq183+PF0UKoRLknQ7z9fW1eiHk6emJr6+vfLOUQMbKcjJWlpOxspyMleVkrCxXXmNV0rQWmSxdhJiYGCIiImjXrp3WUYQQQghhI1IIFWH8+PHExcWxf/9+raMIIYQQwkbk1JgQQogKw2g0kp2drXWMIuXk5ODs7ExmZiYGg0HrOHbtdsfKxcUFvV5/2zmkEBJCCFEhZGdnEx8fj9Fo1DpKkZRSBAUFcebMGVlypQTWGKsqVaoQFBR0W2MthZAQQgi7p5QiMTERvV5P7dq1i10XRktGo5H09HS8vb3tNqO9uJ2xUkqRkZFBcnIyADVr1ixzDimEhBBC2L3c3FwyMjIIDg7G09NT6zhFyjt15+7uLoVQCW53rDw8PABITk4mICCgzKfJ5LMkhBDC7uXNIXF1ddU4ibAneUVxTk5OmfuQQkgIIUSFIfNuxM2s8fUgp8aEEHbLYDQQmxzLxYyL1PCsQWRAJHqn279KRAgh8kghJISwS1sTtjJz30ySMpLytwV6BjKp/SR6hPbQMJkQwpHIqTEhhN3ZmrCV6B3RZkUQQHJGMtE7otmasFWjZKKiMxgVe05e5ttD59hz8jIGo9I6UpnodDrWrFlz221u15QpU2jVqpVN38PWpBASQtgVg9HAzH0zURT8BZW3bda+WRiMslidKJ2NRxK5c9YP3P/JXp5Zcoj7P9nLnbN+YOORRJu954wZM2jXrh0+Pj4EBAQwZMgQjh07ZrP3u1liYiJ9+/a1Wn+FFVbPPfcc27Zts9p7aEEKoSLIvcaE0EZscmyBI0E3UyguZFwgNjm2HFOJim7jkUTGfh1LYkqm2fYLKZmM/TrWZsXQjz/+yPjx49m7dy9btmwhNzeXXr16cf36dZu8382CgoJwc3Oz6Xt4e3tTrVo1m76HrUkhVAS515gQ2riYcdGq7YRjUkqRkZ1r0b+0zBwmrz1ayDFG8rdNWRtHWmaORf0pZfnptI0bN/Lwww/TtGlTWrZsyYIFCzh9+jQHDx4s9nXz588nLCwMV1dXwsPD+eqrrwq0yTvi4+HhQb169Vi+fLnZ/luP4Jw7d46RI0dStWpVqlWrxuDBgzl16pTZaz7//HOaNm2Km5sbNWvW5KmnngKgbt26AAwdOhSdTpf//OZTY5s2bcLd3Z1r166Z9TlhwgS6du2a/3z37t3cddddeHl50bRpU5555hmzwnDevHk0bNgQd3d3AgMDGT58eLFjdbtksrQQwq7U8Kxh1XbCMd3IMRDx6iar9KWAC6mZNJ+y2aL2cdN64+latl+fKSkpAPj7+xfZZvXq1TzzzDPMnTuXHj16sH79eh555BFCQkKIiorKb/fKK68wc+ZM3n33Xb766ivuv/9+mjVrRpMmTQr0mZGRQVRUFF26dGHnzp04Ozszffp0+vTpw++//46rqyvz588nOjqamTNn0rdvX1JSUvj5558B2L9/PwEBASxYsIA+ffoUunhhjx49qFKlCitXruSxxx4DTOs/LVu2jGnTpgFw+PBhevfuzWuvvcYnn3zCqVOnePHFF3nqqadYsGABBw4cYMKECXz11Vd06tSJK1eusGvXrjKNtaWkEBJC2JXIgEgCPQOLPD2mQ0egZyCRAZHlnEyI26OUIjo6mjvvvJNmzZoV2e6tt97i4YcfZty4cQBER0ezd+9e3nrrLbNC6N577+Xxxx8H4LXXXmPLli28//77zJs3r0CfS5YswcnJiU8//TR/7Z0FCxZQpUoVduzYQa9evZg+fTr//e9/eeaZZ/Jflzc9pEYN0x8eeff2Koxer2fkyJEsXrw4vxDatm0bV69e5d577wVg9uzZjBo1imeffRaj0UhgYCBz584lKiqK+fPnc/r0aby8vBgwYAA+Pj6EhobSunVrywa4jKQQEkLYFb2TnkntJ/GfHf8psE+H6Qf4xPYTZT2hSs7DRU/ctN4Wtd0Xf4WHF5Q8zeGLR9rRvl7RR2pufu+yeOqpp/j999/56aefim33xx9/8O9//9tsW+fOnXn33XfNtnXs2LHA80OHDhXa58GDBzlx4gQ+Pj5m2zMzMzl58iTJycmcP3+e7t27W/jRFG706NF07NiR8+fPExwczKJFi+jXrx9Vq1Y1y7Fo0aL81yilMBqNxMfH07NnT0JDQ6lfvz59+vShT58+DB061Ka3VZFCSAhhd9oFtcPVyZVsY7bZ9kDPQCa2nyjrCAl0Op3Fp6e6NKxBTT93LqRkFjpPSAcE+bnTpWEN9E62Wbn66aefZu3atezcuZOQkJAS29+6YrJSyqJVlItqYzQaadOmjVkBkqdGjRpWuy9a+/btCQsLY8mSJYwdO5bVq1ezYMECsxxPPPEEEyZMKHDT1Tp16uDq6kpsbCw7duxg8+bNvPrqq0yZMoX9+/dTpUoVq2S8lRRCQgi7s+zYMrKN2TSs0pBJ7Sdx6cYlWVlalJneScfkgRGM/ToWHZgVQ3llw+SBETYpgpRSPP3006xevZodO3ZQr169El/TpEkTfvrpJx566KH8bbt37y4w92fv3r1mbfbu3VvkaaTIyEiWLl1KQEAAvr6+hbapW7cu27ZtMzv9djMXF5f8e74VZ9SoUSxatIiQkBCcnJzo37+/WY6jR4/SoEEDjEYjqamp+Pr6mhVizs7O9OjRgx49ejB58mSqVKnCDz/8wLBhw0p877KQQkgIYVcyczP5+o+vAXi0+aO0r9le40TCEfRpVpP5D0QydV2c2SX0QX7uTB4YQZ9mNW3yvuPHj2fx4sV8++23+Pj4cOHCBQD8/Pzy755+q+eff54RI0YQGRlJ9+7dWbduHatWrWLrVvOFRJcvX07btm258847WbRoEfv27eOzzz4rtM/Ro0cze/ZsBg8ezLRp0wgJCeH06dOsWrWK559/npCQEKZMmcKTTz5JQEAAffv2JS0tjZ9//pmnn34a+F+h1LlzZ9zc3PJPdxX2XlOnTuX1119n+PDhuLu75++bOHEiHTp0YPz48Tz22GMopThz5gzbtm3j/fffZ/369fz999/cddddVK1alQ0bNmA0GgkPDy/12FtMiWKlpKQoQKWkpFi13+zsbLVmzRqVnZ1t1X4dkYyV5RxhrJb+uVQ1+6KZ6rm8p8o22O7jcISxKi/2MFY3btxQcXFx6saNG7fVT67BqHafuKTW/HpW7T5xSeUajFZKaGIwGNTVq1eVwWBQSimF6QBUgX8LFiwotp958+ap+vXrKxcXF9WoUSO1cOFCs/2AiomJUT179lRubm4qNDRUffPNNwXarF69Ov95YmKieuihh1T16tWVm5ubql+/vvrXv/5l9vvtww8/VOHh4crFxUXVrFlTPf300/n71q5dqxo0aKCcnZ1VaGioUkqpyZMnq5YtWxbI365dOwWoH374ocC+ffv2qZ49eypvb2/l5eWlWrRooV5//XWllFK7du1SXbt2VVWrVlUeHh6qRYsWaunSpUWOU3FfF5b+/tb9M1iiCKmpqfj5+ZGSklLk4cSyyMnJYcOGDfTr1w8XFxer9euIZKwsV9HHymA0MGjNIE6nnWZS+0mMbjLaZu9V0ceqPNnDWGVmZhIfH0+9evXMjjDYm6JO95S3rKws3N3d2bJlCz162OecOmuMVXFfF5b+/pZTY0IIu7Ht9DZOp53Gz82PoQ2Gah1HiAopNTWVVatW4eTkROPGjbWOY/ekEBJC2AWlFAuOmK4uub/x/Xi62O5yWSEc2eTJk1m8eDGzZs2y6Aq1yk4KISGEXdh/YT9HLh/BTe/G/Y3v1zqOEBXWO++8wzvvvKN1jApD7jUmhLALnx/9HIAhDYbg717yonZCCGENUggJITR37Moxfj73M046J8Y0HaN1HCFEJSKFkBBCcwuOmuYG9QrtRW2f2hqnEUJUJlIICSE0dT79PBvjNwLwSLNHNE4jhKhspBAqQkxMDBEREfl33hVC2MbCuIUYlIEONTsQUS1C6zhCiEpGCqEijB8/nri4OPbvL/mOxUKIsrmWeY1Vx1cBcjRICKENKYSEEJr55tg33Mi9QRP/JnSs2VHrOKIyMBogfhccXmH6v7Hkm4jaI51Ox5o1a267ze2aMmUKrVq1sul72JoUQkIITdzIvcE3f3wDmI4G6XTWv/O3EGbi1sLcZvDlAFj5mOn/c5uZttvI/PnzadGiBb6+vvj6+tKxY0e+//57m73fzRITE+nbt6/V+iussHruuefYtm2b1d5DC1IICSE08e2Jb7madZVa3rXoGdpT6zjC0cWthWUPQep58+2piabtNiqGQkJCmDlzJgcOHODAgQPcfffdDB48mKNHj9rk/W4WFBSEm5ubTd/D29ubatWq2fQ9bE0KISFEucs15vLF0S8AGNN0DM5Ossi9KCWlIPu6Zf8yU+H7FzDd+L1AR6b/bZxoamdJf6W4V/nAgQPp168fjRo1olGjRrz++ut4e3uzd+/eYl83f/58wsLCcHV1JTw8nK+++qpAm7wjPh4eHtSrV4/ly5eb7b/1CM65c+cYOXIkVatWpVq1agwePJhTp06Zvebzzz+nadOmuLm5UbNmTZ566ikA6tatC8DQoUPR6XT5z28+NbZp0ybc3d25du2aWZ8TJkyga9eu+c93797NXXfdhZeXF02bNuWZZ57h+vXr+fvnzZtHw4YNcXd3JzAwkOHDhxc7VrdLfvoIIcrd1oStnEs/R1W3qgxpMETrOKIiysmAN4Kt1JkyHSmaaeEaVv93Hly9Sv0uBoOB5cuXc/36dTp2LHpO3OrVq3nmmWeYO3cuPXr0YP369TzyyCOEhIQQFRWV3+6VV15h5syZvPvuu3z11Vfcf//9NGvWjCZNmhToMyMjg6ioKLp06cLOnTtxdnZm+vTp9OnTh99//x1XV1fmz59PdHQ0M2fOpG/fvqSkpPDzzz8DsH//fgICAliwYAF9+vRBr9cXeI8ePXpQpUoVVq5cyWOPPZb/MS9btoxp06YBcPjwYXr37s1rr73GJ598wqlTp3jxxRd56qmnWLBgAQcOHGDChAl89dVXdOrUiStXrrBr165Sj3VpSCEkhChXSik+P2K6ncb9Te7Hw9lD40RC2Nbhw4fp2LEjmZmZeHt7s3r1aiIiil4q4q233uLhhx9m3LhxAERHR7N3717eeusts0Lo3nvv5fHHHwfgtddeY8uWLbz//vvMmzevQJ9LlizBycmJTz/9NH8+3oIFC6hSpQo7duygV69eTJ8+nf/+978888wz+a/LW0KmRo0aAFSpUoWgoKBCc+v1ekaOHMnixYvzC6Ft27Zx9epV7r33XgBmz57NqFGjePbZZzEajQQGBjJ37lyioqKYP38+p0+fxsvLiwEDBuDj40NoaCitW7e2bKDLSAohIUS52pu4lz+u/IGHswf3h8vNVUUZuXiajsxYImE3LLLg9MroFRDaybL3LoXw8HAOHTrEtWvXWLlyJWPGjOHHH38sshj6448/+Pe//222rXPnzrz77rtm2249qtSxY0cOHTpUaJ8HDx7kxIkT+Pj4mG3PzMzk5MmTJCcnc/78ebp3716qj+1Wo0ePpmPHjpw/f57g4GAWLVpEv379qFq1qlmORYsW5b9GKYXRaCQ+Pp6ePXsSGhpK/fr16dOnD3369GHo0KF4epZuzEtDCiEhRLlacMR0O41hDYdRxb2KtmFExaXTWX56Kuxu8A02TYwudJ6QzrQ/7G5wKnjK53a5urrSoEEDANq2bcv+/ft59913+eijj4p8za1XUSqlLLqysqg2RqORNm3amBUgeWrUqIGTk3WmDLdv356wsDCWLFnC2LFjWb16NQsWLDDL8cQTTzBhwgSMRiPp6el4e3vj5OREnTp1cHV1JTY2lh07drB582ZeffVVpkyZwv79+6lSpYpVMt5KJksLIcpN3OU49iTuQa/T82DEg1rHEZWFkx76zPrnya2Fwj/P+8y0SRFUGKUUWVlZRe5v0qQJP/30k9m23bt3F5j7c+uE671799K4ceNC+4yMjOT48eMEBATQoEEDs39+fn74+PhQt27dYi+Fd3FxwWAoed2lUaNGsWjRItatW4eTkxP9+/c3y3H06NH8965fv37+Y1dXVwCcnZ3p0aMHb775Jr///junTp3ihx9+KPF9y0oKISFEufniyBcA9K7bm1retbQNIyqXiEEwYiH41jTf7hts2h4xyCZv+3//93/s2rWLU6dOcfjwYV566SV27NjB6NGji3zN888/zxdffMGHH37I8ePHmTNnDqtWreK5554za7d8+XI+//xz/vrrLyZPnsy+ffvyr/K61ejRo6levTqDBw9m165dxMfH8+OPP/LMM89w9uxZwHQF2Ntvv817773H8ePHiY2N5f3338/vI69QunDhAlevXi0y/+jRo4mNjeX1119n+PDhuLu75++bOHEie/bsYfz48Rw6dIiTJ0+ydu1ann76aQDWr1/Pe++9x6FDh0hISGDhwoUYjUbCw8NLHuwyklNjQohycSbtDJsSNgHwaLNHNU4jKqWIQdC4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I0fy119/ldv73apTp04kJibi5+enWQYhRMmkEBJC2Nznn3/O008/zU8//cTp06eLbauUIjc397bf08PDg4CAgNvup6xcXV0JCgpCp9NplkEIUTIphIQQNnX9+nWWLVvG2LFjGTBgAF988YXZ/rxTSJs2baJt27a4ubmxa9cujEYjs2bNokGDBri5uVGnTh1ef/11s9f+/fffREVF4enpScuWLdmzZ0/+vptPjR07dgydTseff/5p9vo5c+ZQt25d8u49HRcXR79+/fD29iYwMJAHH3yQS5cuFfmxJSQkMHDgQKpWrYqXlxdNmzZlw4YNZh9X3qmxbt26odPpCvw7deoUACkpKfz73/8mICAAX19f7r77bn777bfSDrcQopSkEBJC2NTSpUsJDw8nPDycBx54gAULFuQXHjd74YUXmDFjBn/88QctWrTgxRdfZNasWbzyyivExcWxePFiAgMDzV7z0ksv8dxzz3Ho0CEaNWrE/fffX+jRpPDwcNq0acOiRYvMti9evJhRo0ah0+lITEyka9eutGrVigMHDrBx40aSkpIYMWJEkR/b+PHjycrKYufOnRw+fJhZs2bh7e1daNtVq1aRmJiY/2/YsGGEh4cTGBiIUor+/ftz4cIFNmzYwMGDB4mMjKR79+5cuXLFkmEWQpSVEkIIG+rUqZOaO3euUkqpnJwcVb16dbVly5b8/du3b1eAWrNmTf621NRU5ebmpj755JNC+4yPj1eA+vTTT/O3HT16VAHqjz/+UEoptWDBAuXn55e/f86cOap+/fr5z48dO6YAdfToUaWUUq+88orq1auX2fucOXNGAerYsWOF5mjevLmaMmVKofvyPq6rV68W2DdnzhxVpUqV/H63bdumfH19VWZmplm7sLAw9dFHHxXavxDCOuSIkBDCZo4dO8a+ffu47777AHB2dmbkyJF8/vnnBdq2bds2//Eff/xBVlYW3bt3L7b/Fi1a5D+uWbMmAMnJyYW2ve+++0hISGDv3r0ALFq0iFatWhEREQHAwYMH2b59O97e3vn/GjduDMDJkycL7XPChAlMnz6dzp07M3nyZH7//fdi8wJ8//33TJo0iaVLl9KoUaP8905PT6datWpm7x8fH1/kewshrMNZ6wBCCMf12WefkZubS61atfK3KaVwcXHh6tWrVK1aNX+7l5dX/mMPDw+L+ndxccl/nDcp2Wg0Ftq2Zs2aREVFsXjxYjp06MA333zDE088kb/faDQycOBAZs2aVehrC/P444/Tu3dvvvvuOzZv3syMGTN4++23efrppwttHxcXx3333cfMmTPp1auX2XvXrFmTHTt2FHiNlksACFEZyBEhIYRN5ObmsnDhQt5++20O/X87d+ySTBjAcfz3hoMuTg4ZhDfoIDS5tQiBkIsQ6iJt52K4FEEOWTS19geES1sITiEo6CBoESI5NJoOEYJU0OZw9G6Sr1e8UE33/cCz3D3PPc+z/e557rm7u1np9/sKBAIL3+t8FAqF5PF41Gg0fnRM29vbury81PX1tQaDwWylSpIikYju7+9lGIaCweBc+RjS/rW6uqpcLqdKpaL9/X2dn5/b1nt+flYikVAymdTe3t7cvUgkovF4LJfLtdC3z+f7mckDsEUQAvArrq6u9Pr6qmw2q7W1tbmSTqdVKpU+bet2u1UoFHRwcKCLiwsNBgPd3Nx82eZ/JJNJvb29aWdnRxsbG3MrVfl8Xi8vL8pkMrq9vdXDw4Pq9bpM05RlWbbP293dVa1W03A4VK/XU7PZVDgc/rRvj8ejk5MTjcfjWbEsS7FYTOvr69ra2lKtVtNoNFKn01GxWFS32/3WnAF8ja0xAL+iVCopFovZ/lAwlUrp9PRUvV7v0/ZHR0dyuVw6Pj7W09OT/H6/crnct8bk9XqVSCRULpcXvlNaWVlRu91WoVDQ5uamptOpAoGA4vG4lpbs3xkty1I+n9fj46O8Xq/i8bjOzs5s67ZaLUmSYRhz14fDoQzDULVa1eHhoUzT1GQy0fLysqLR6MJJOQA/68/7u805VgAAAAdgawwAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADgWQQgAADjWXyfR6TLhAehRAAAAAElFTkSuQmCC", "text/plain": [ "
" - ] + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHJCAYAAABpOFaGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACauUlEQVR4nOzdd3yTVdvA8V+S7g2li1XKpuwyFBABGbKUIYiAMkQehSLw4MDxynKhOBgCbpA9ZAiIbEEUkFF22bJbKFDooDs57x+xfShtoYW0d5pcXz98vHPn5D5XkzS5eqZOKaUQQgghhLBDeq0DEEIIIYTQiiRCQgghhLBbkggJIYQQwm5JIiSEEEIIuyWJkBBCCCHsliRCQgghhLBbkggJIYQQwm5JIiSEEEIIuyWJkBBCCCHsliRCIt9mz56NTqdj7969D/R4nU7HuHHjsm5HRkYybtw4zp07l6PsgAEDqFChwgPVk9tjK1SowIABAx7oeveTlJTEuHHj2Lp1a477Mp+z3H5GW3Hu3Dl0Oh2zZ8++Z7mHff/Ymvw+b0Iba9euzfZ59SAWLFjA5MmTc73v7s9DoR0HrQMQ9mPnzp2ULVs263ZkZCTjx4+nZcuWORKX9957jxEjRlis7hUrVuDl5WWx690pKSmJ8ePHA9CyZcts93Xq1ImdO3cSFBRUKHULIQrH2rVrmT59+kMlKwsWLODIkSOMHDkyx313fx4K7UgiJIrMo48+mu+ylSpVsmjd9evXt+j18svPzw8/Pz9N6haWYTQaycjIwNnZWetQhA0pyOehKFzSNSYeyoABA/Dw8OD06dN07NgRDw8PypUrx2uvvUZqamq2snc2Bc+ePZuePXsC0KpVK3Q6XbZugty6t6ZPn87jjz+Ov78/7u7u1K5dm08//ZT09PT7xnl311jLli2z6rz7X2YM165dY+jQoYSGhuLh4YG/vz9PPPEE27dvz7rOuXPnshKd8ePHZ10js668usZ+/PFH6tati4uLCyVLlqRbt24cO3bsgZ/b3CxevJh27doRFBSEq6srNWrU4K233uL27dsPXE9UVBTPPvssnp6eeHt706tXL65cuXLfWO6UkJDAkCFDKFWqFL6+vnTv3p2oqKis+wcNGkTJkiVJSkrK8dgnnniCmjVrZt3W6XQMGzaMb775hqpVq+Ls7ExoaCiLFi3K8dgrV67w8ssvU7ZsWZycnAgJCWH8+PFkZGRklcnsrvr000/54IMPCAkJwdnZmSVLluDk5MR7772X47rHjx9Hp9MxderUrHNHjhyhS5culChRAhcXF+rVq8dPP/103+cmry7hcePGodPpsp3L/NlnzZpFtWrVcHV1pWHDhuzatQulFJMmTSIkJAQPDw+eeOIJTp8+neO6mzZtonXr1nh5eeHm5kazZs3YvHnzfeMEuHXrFq+99hoVK1bE2dkZf39/OnbsyPHjx7PKxMbGMnToUMqUKYOTkxMVK1bk3XffzfWz4WF+lpYtW1KrVi22b9/Oo48+iqurK2XKlOG9997DaDRmldu6dSs6nS5HN/bd3ZQDBgxg+vTpWbFl/sv8Pc7PZ1HLli359ddfOX/+fLZr3Pkz393alJ/3TebPsHDhQt59911Kly6Nl5cXbdq04cSJE/d/4UROSoh8mjVrlgLUnj17ss71799fOTk5qRo1aqjPPvtMbdq0SY0ZM0bpdDo1fvz4bI8H1NixY5VSSsXExKiPPvpIAWr69Olq586daufOnSomJibrusHBwdke/9///lfNnDlTrVu3Tm3ZskV9+eWXqlSpUmrgwIHZyuX22ODgYNW/f/+s20ePHs2qM/NfmzZtlMFgUDt27FBKKXX8+HE1ZMgQtWjRIrV161a1Zs0aNWjQIKXX69Xvv/+ulFIqJSVFrVu3TgFq0KBBWdc6ffp0tufs7NmzWXVn/ty9e/dWv/76q5ozZ46qWLGi8vb2VidPnnyg5zY377//vvryyy/Vr7/+qrZu3aq+/vprFRISolq1apXj+cpPPUlJSapGjRrK29tbTZs2Ta1fv14NHz5clS9fXgFq1qxZ94wn87moWLGievXVV9X69evV999/r0qUKJEtpoMHDypAfffdd9kef/To0az3SyZAlStXToWGhqqFCxeqVatWqfbt2ytALV26NKtcdHS0KleunAoODlbffPON2rRpk3r//feVs7OzGjBgQFa5s2fPKkCVKVNGtWrVSv38889qw4YN6uzZs6pbt26qXLlyymg0ZovrzTffVE5OTur69etKKfP7xtPTU1WqVEnNmTNH/frrr6p3794KUJ988kmOuu583nJ77yql1NixY9XdH9eACg4OVk2bNlXLly9XK1asUFWrVlUlS5ZU//3vf1WXLl3UmjVr1Pz581VAQICqU6eOMplMWY+fO3eu0ul0qmvXrmr58uVq9erVqnPnzspgMKhNmzbd66VU8fHxqmbNmsrd3V1NmDBBrV+/Xi1btkyNGDFCbdmyRSmlVHJysqpTp45yd3dXn332mdqwYYN67733lIODg+rYsaNFf5YWLVooX19fVbp0aTV16tSs9yagwsPDs8r9/vvvCsj6/c3rtTh9+rTq0aOHArJ9RqSkpCil8vdZdPToUdWsWTMVGBiY7Rp3/syZn4dK5f99k/kzVKhQQfXt21f9+uuvauHChap8+fKqSpUqKiMj456vnchJEiGRb3klQoBasmRJtrIdO3ZU1apVy3bu7l/8pUuX5vqhlHnd3L4QMhmNRpWenq7mzJmjDAaDio2Nvedj706E7jZp0iQFqG+//TbPMhkZGSo9PV21bt1adevWLev8tWvXcvxsme5OhG7evKlcXV1zfBFcuHBBOTs7qz59+mT7OfL73N6PyWRS6enpatu2bQpQBw8eLHA9M2fOVID65ZdfspUbPHhwgRKhoUOHZjv/6aefKkBFR0dnnWvRooWqV69etnJDhgxRXl5eKiEhIescoFxdXdWVK1eyzmVkZKjq1aurypUrZ517+eWXlYeHhzp//ny2a3722WcKUEePHlVK/e8LsVKlSiotLS1b2VWrVilAbdiwIVtdpUuXVs8880zWueeee045OzurCxcuZHt8hw4dlJubm7p161a2uh4mEQoMDFSJiYlZ51auXKkAVa9evWyJwuTJkxWgDh06pJRS6vbt26pkyZLqqaeeynZNo9Go6tatqxo3bpwjhjtNmDBBAWrjxo15lvn6669zfV998sknOZ7Hh/lZlDK/X/J6b+r1+qzXPb+JkFJKhYeH53jOc3Ovz6JOnTrl+Tl292dGft83mT/D3Z8hS5YsyUrcRMFI15h4aDqdjqeeeirbuTp16nD+/HmL1rN//36efvppfH19MRgMODo60q9fP4xGIydPnnzg6y5cuJA333yT//u//2Pw4MHZ7vv6668JCwvDxcUFBwcHHB0d2bx5c45urPzauXMnycnJOWawlStXjieeeCJHt8TDPLf//PMPffr0ITAwMOv5atGiBUCO+PNTz++//46npydPP/10tnJ9+vS5byx3uvvxderUAchW14gRIzhw4AB//fUXAPHx8cydO5f+/fvj4eGR7fGtW7cmICAg67bBYKBXr16cPn2aS5cuAbBmzRpatWpF6dKlycjIyPrXoUMHALZt25YjRkdHx2znOnToQGBgILNmzco6t379eqKionjxxRezzm3ZsoXWrVtTrly5bI8fMGAASUlJ7Ny5Mx/PUv60atUKd3f3rNs1atTIivXObpjM85nP8Y4dO4iNjaV///7Zng+TyUT79u3Zs2dPji7UO/32229UrVqVNm3a5Flmy5YtuLu706NHj2znM9/7d7/XH/RnyZTXe9NkMvHHH3/kGeeDKIzPooK+b/LzeyTyRwZLi4fm5uaGi4tLtnPOzs6kpKRYrI4LFy7QvHlzqlWrxpQpU6hQoQIuLi7s3r2b8PBwkpOTH+i6v//+OwMGDKBfv368//772e774osveO2113jllVd4//33KVWqFAaDgffee++BE6EbN24A5DqLrHTp0mzcuDHbuQd9bhMTE2nevDkuLi588MEHVK1aFTc3Ny5evEj37t1zPF/5qefGjRvZEo5MgYGB94zlbr6+vjnqAbLF1KVLFypUqMD06dNp1qwZs2fP5vbt24SHh+er/sxzN27coGzZsly9epXVq1fnSG4yXb9+Pdvt3F4fBwcHXnjhBaZNm8atW7fw8fFh9uzZBAUF8eSTT2aVu3HjRp6vb+b9llKyZMlst52cnO55PvP1vHr1KkCOJOVOsbGx2RKTO127do3y5cvfM7YbN24QGBiYY2yTv78/Dg4OOZ6HB/1ZMt3rvWnJ57ywPosK+r7Jz++RyB9JhESxsHLlSm7fvs3y5csJDg7OOn/gwIEHvuahQ4fo2rUrLVq04Lvvvstx/7x582jZsiUzZ87Mdj4hIeGB68z88IqOjs5xX1RUFKVKlXrga99py5YtREVFsXXr1qxWIDAPcH1Qvr6+7N69O8f5gg6Wzg+9Xk94eDjvvPMOn3/+OTNmzKB169ZUq1YtX/Vnnst8vkuVKkWdOnX48MMPc60v88sm091f3pkGDhzIpEmTWLRoEb169WLVqlWMHDkSg8GQVcbX1zfP1zczlry4uLjkOhD+7kTtYWXGMG3atDxnL+WWWGTy8/PLam3Li6+vL3///TdKqWzPZ0xMDBkZGRZ7r2fKTO7udPf7IDPZv/s5LsjzWxifRZkxPuj7Rjwc6RoTminIXzCZH6R3TmFWSuWawOTHhQsX6NChAxUrVmTZsmW5thTodLocU6YPHTqUo4m6ID9HkyZNcHV1Zd68ednOX7p0Katp3BJye74Avvnmmwe+ZqtWrUhISGDVqlXZzi9YsOCBr3kvL730Ek5OTvTt25cTJ04wbNiwXMtt3rw525eg0Whk8eLFVKpUKWudls6dO3PkyBEqVapEw4YNc/y7OxHKS40aNXjkkUeYNWsWCxYsIDU1lYEDB2Yr07p166xE9E5z5szBzc3tntOmK1SoQExMTLafJy0tjfXr1+crvvxq1qwZPj4+REZG5vp8NGzYMKvlJTcdOnTg5MmTbNmyJc8yrVu3JjExkZUrV2Y7P2fOnKz7LSmv96Zer+fxxx8HyJqRd+jQoWzl7n4c5P17XZDPImdn53y30DzM+0Y8HGkREpqpVasWAN9++y2enp64uLgQEhKSo8kXoG3btjg5OdG7d2/efPNNUlJSmDlzJjdv3nygujt06MCtW7f46quvOHr0aLb7KlWqhJ+fH507d+b9999n7NixtGjRghMnTjBhwgRCQkKyTbn29PQkODiYX375hdatW1OyZElKlSqV6zRoHx8f3nvvPd555x369etH7969uXHjBuPHj8fFxYWxY8c+0M9zt6ZNm1KiRAleeeUVxo4di6OjI/Pnz+fgwYMPfM1+/frx5Zdf0q9fPz788EOqVKnC2rVrLf4lncnHx4d+/foxc+ZMgoODc4xhylSqVCmeeOIJ3nvvPdzd3ZkxYwbHjx/PNoV+woQJbNy4kaZNmzJ8+HCqVatGSkoK586dY+3atXz99df5XtzuxRdf5OWXXyYqKoqmTZvmaKUaO3Zs1pikMWPGULJkSebPn8+vv/7Kp59+ire3d57X7tWrF2PGjOG5557jjTfeICUlhalTp2abAm4JHh4eTJs2jf79+xMbG0uPHj3w9/fn2rVrHDx4kGvXruVoCb3TyJEjWbx4MV26dOGtt96icePGJCcns23bNjp37kyrVq3o168f06dPp3///pw7d47atWvz559/8tFHH9GxY8d7ji96EL6+vgwZMoQLFy5QtWpV1q5dy3fffceQIUOyuvECAwNp06YNH3/8MSVKlCA4OJjNmzezfPnyHNerXbs2AJ988gkdOnTAYDBQp06dAn0W1a5dm+XLlzNz5kwaNGiAXq+nYcOGucb/MO8b8ZA0HqwtipG8Zo25u7vnKJvXLJe7Z1ZNnjxZhYSEKIPBkG3WRm6zZ1avXq3q1q2rXFxcVJkyZdQbb7yhfvvttxyzQPIzawzI819mDKmpqer1119XZcqUUS4uLiosLEytXLky1+tv2rRJ1a9fXzk7Oysgq67cps8rpdT333+v6tSpo5ycnJS3t7fq0qVL1sylB3luc7Njxw7VpEkT5ebmpvz8/NRLL72kIiIicp2plN96Ll26pJ555hnl4eGhPD091TPPPKN27NhRoFljd75/lMp7Jo9SSm3dulUBauLEiblek3+nR8+YMUNVqlRJOTo6qurVq6v58+fnKHvt2jU1fPhwFRISohwdHVXJkiVVgwYN1Lvvvps1Wylz9tCkSZPy/Dni4uKUq6trrlP8Mx0+fFg99dRTytvbWzk5Oam6devmeH5ym6mklFJr165V9erVU66urqpixYrqq6++yvP36c6p4feKP/M5vnNJAaWU2rZtm+rUqZMqWbKkcnR0VGXKlFGdOnXKUS43N2/eVCNGjFDly5dXjo6Oyt/fX3Xq1EkdP348q8yNGzfUK6+8ooKCgpSDg4MKDg5Wb7/9dtY0dEv9LC1atFA1a9ZUW7duVQ0bNlTOzs4qKChIvfPOOyo9PT3b46Ojo1WPHj1UyZIllbe3t3r++efV3r17c7wWqamp6qWXXlJ+fn5Kp9Nl+z3O72dRbGys6tGjh/Lx8cm6xp0/892fh/l53+T1Wub1fhL3p1NKqULMs4QQ4oG99tprzJw5k4sXL+baUqjT6QgPD+err77SIDphLVq2bMn169c5cuSI1qGIYki6xoQQVmfXrl2cPHmSGTNm8PLLL+eaBAkhhCVIIiSEsDpNmjTBzc2Nzp0788EHH2gdjhDChknXmBBCCCHslkyfF0IIIYTdkkRICCGEEHZLEiEhhBBC2C0ZLH0fJpOJqKgoPD0981x2XwghhBDWRSlFQkICpUuXRq/Pu91HEqH7iIqKyrEbsBBCCCGKh4sXL95z5XhJhO7D09MTMD+RXl5eFrtueno6GzZsoF27dnnuiC1si7zm9kdec/sjr7n1iI+Pp1y5clnf43mRROg+MrvDvLy8LJ4Iubm54eXlJb8sdkJec/sjr7n9kdfc+txvWIsMlhZCCCGE3ZJESAghhBB2S7rGLMBkMpGWllagx6Snp+Pg4EBKSgpGo7GQIhNFzdHREYPBoHUYQggh8kkSoYeUlpbG2bNnMZlMBXqcUorAwEAuXrwo0/JtjI+PD4GBgfK6CiFEMSCJ0ENQShEdHY3BYKBcuXL3XKfgbiaTicTERDw8PAr0OGG9lFIkJSURExMDQFBQkMYRCSGEuB9JhB5CRkYGSUlJlC5dGjc3twI9NrM7zcXFRRIhG+Lq6gpATEwM/v7+0k0mhBBWTr6B8zB9+nRCQ0Np1KhRnmUyx/Y4OTkVVViiGMhMitPT0zWORAghxP1IIpSH8PBwIiMj2bNnz33LylgQcSd5PwghRPEhXWNCCGEljCYjETERXEu6hp+bH2H+YRj00r0qRGGSREgIIazApvObmLh7IleTrmadC3AL4K3Gb9EmuI2GkQlh26RrzAoYTYqdZ27wy4HL7DxzA6NJaR3SA9HpdKxcufKhyzyscePGUa9evUKtQwhL2nR+E6O2jsqWBAHEJMUwausoNp3fpFFkQtg+SYQ0tu7IFR77ZAu9v9vFiEUH6P3dLh77ZAvrjkQXWp0ff/wxjRo1wtPTE39/f7p27cqJEycKrb47RUdH06FDB4tdL7fE6vXXX2fz5s0Wq0OIwmQ0GZm4eyKKnH8AZZ77ZPcnGE2y8KoQhUESIQ1tPnGD8AX7iY5LyXb+SlwKQ+ZFFFoytG3bNsLDw9m1axcbN24kIyODdu3acfv27UKp706BgYE4OzsXah0eHh74+voWah1CWEpETESOlqA7KRRXkq4QERNRhFEJYT8kEbIgpRRJaRn5+peQks4nG//J5W9Ass6NWxVJQkp6vq6nVP6709atW8eAAQOoWbMmdevWZdasWVy4cIF9+/bd83EzZ86kUqVKODk5Ua1aNebOnZujTGaLj6urKyEhISxdujTb/Xe34Fy+fJlevXpRokQJfH196dKlC+fOncv2mB9//JGaNWvi7OxMUFAQw4YNA6BChQoAdOvWDZ1Ol3X7zq6x9evX4+Liwq1bt7Jdc/jw4bRo0SLr9o4dO3j88cdxdXWlXLlyDB8+PFtiOGPGDKpUqYKLiwsBAQH06NHjns+VEPl1LemaRcsJIQpGBktbUHK6kdAx6y1yLQVciU+h9rgN+SofOeFJ3Jwe7OWMi4sDoGTJknmWWbFiBSNGjGDy5Mm0adOGNWvWMHDgQMqWLUurVq2yyr333ntMnDiRKVOmMHfuXHr37k2tWrWoUaNGjmsmJSXRqlUrmjdvzh9//IGDgwMffPAB7du359ChQzg5OTFz5kxGjRrFxIkT6dChA3Fxcfz1118A7NmzB39/f2bNmkX79u1zXbywTZs2+Pj4sGzZMgYNGgSY139asmQJEyZMAODw4cM8+eSTvP/++/zwww9cu3aNYcOGMWzYMGbNmsXevXsZPnw4c+fOpWnTpsTGxrJ9+/YHeq6FuJufm59FywkhCkYSITunlGLUqFE89thj1KpVK89yn332GQMGDGDo0KEAjBo1il27dvHZZ59lS4R69uzJSy+9BMD777/Pxo0bmTZtGjNmzMhxzUWLFqHX6/n++++z1t6ZNWsWPj4+bN26lXbt2vHBBx/w2muvMWLEiKzHZS5y6edn/mLI3NsrNwaDgV69erFgwYKsRGjz5s3cvHmTnj17AjBp0iT69OnDyJEjAahSpQpTp06lRYsWzJw5kwsXLuDu7k7nzp3x9PQkODiY+vXr3//JFSIfwvzDCHALyLN7TIeOALcAwvzDijgyIeyDJEIW5OpoIHLCk/kqu+vMdV786d5dUQCzBzaicUjeLTV31v0ghg0bxqFDh/jzzz/vWe7YsWP85z//yXauWbNmTJkyJdu5Jk2a5Lh94MCBXK+5b98+Tp8+jaenZ7bzKSkpnDlzhpiYGKKiomjdunU+f5rc9e3blyZNmhAVFUXp0qWZP38+HTt2pESJEtnimD9/ftZjlFKYTCbOnj1L27ZtCQ4OpmLFirRv35727dvTrVu3Am+rIkRuDHoDbzV+i/9u/W+O+3SY/0AY3Xi0rCckRCGRRMiCdDpdvrunmlfxI8DTiZiEtFzHCemAQG8Xmlfxw6AvnJWKX331VVatWsUff/xB2bJl71v+7hWTlVL5WkU5rzImk4kGDRpkS0Ay+fn5WWwPtsaNG1OpUiUWLVrEkCFDWLFiBbNmzcoWx8svv8zw4cNzPLZ8+fI4OTkRERHB1q1b2bBhA2PGjGHcuHHs2bMHHx8fi8Qo7Ju3s3eu5wPcAhjdeLSsIyREIZJESCMGvY4321Tk9RXH0UG2ZCgzbRj7VGihJEFKKV599VVWrFjB1q1bCQkJue9jatSowZ9//km/fv2yzu3YsSPH2J9du3ZlK7Nr1648u5HCwsJYvHgx/v7+eHl55VqmQoUKbN68OVv3250cHR2z9ny7lz59+jB//nzKli2LXq+nU6dO2eI4evQolStXzvPxDg4OtGnThjZt2jB27Fh8fHzYsmUL3bt3v2/dQtyLUorJ+yYD0KNKDzpW7CgrSwtRhCQR0lDrar5M71Of9389lm0KfaC3C2OfCqV9raBCqTc8PJwFCxbwyy+/4OnpyZUrVwDw9vbO2j39bm+88QbPPvssYWFhtG7dmtWrV7N8+XI2bcq+0NvSpUtp2LAhjz32GPPnz2f37t388MMPuV6zb9++TJo0iS5dujBhwgTKli3LhQsXWL58OW+88QZly5Zl3LhxvPLKK/j7+9OhQwcSEhL466+/ePXVV4H/JUrNmjXD2dk5q7srt7rGjx/Phx9+SI8ePXBxccm6b/To0Tz66KOEh4czePBg3N3dOXbsWNb4pjVr1vDPP//w+OOPU6JECdauXYvJZKJatWoFfu6FuNuWC1s4dP0Qrg6uDK03VAZFC1HUlLinuLg4Bai4uLgc9yUnJ6vIyEiVnJxc4OsajUZ18+ZNZTQaVYbRpHacvq5W7r+kdpy+rjKMJkuEnifMDVA5/s2aNeuej5sxY4aqWLGicnR0VFWrVlVz5szJcd3p06ertm3bKmdnZxUcHKwWLlyYo8yKFSuybkdHR6t+/fqpUqVKKWdnZ1WxYkU1ePDgbM/3119/rapVq6YcHR1VUFCQevXVV7PuW7VqlapcubJycHBQwcHBSimlxo4dq+rWrZsj/kaNGilAbdmyJcd9u3fvVm3btlUeHh7K3d1d1alTR3344YdKKaW2b9+uWrRooUqUKKFcXV1VnTp11OLFi/N8nvJ6X6SlpamVK1eqtLS0PB8rbMv9XvN0Y7rqvLyzqjW7lpqyb0oRRycKg/yeW497fX/fSadUARagsUPx8fF4e3sTFxeXo/smJSWFs2fPEhISkq2FIT9MJhPx8fF4eXlZbCyMtUtNTcXFxYWNGzfSpo3tjnnI632Rnp7O2rVr6dixI46OjhpGKIrK/V7zZSeXMW7nOHycfVjbfS2eTp65XEUUJ/J7bj3u9f19J+kaE0UiPj6e5cuXo9frqV69utbhCKG55IxkZhwwLysxuPZgSYJE4TEZ4fwOSLwKHgEQ3BRk7FkWSYREkRg7diwLFizgk08+ydcMNSFs3YJjC4hJjqG0e2meq/6c1uEIWxW5CtaNhvio/53zKg3tP4HQp7WLy4rYR5+M0NyXX37J1atXef3117UORQjNxaXG8cNh8ySC8PrhOBmcNI5I2KTIVbCkX/YkCCA+2nw+cpU2cVkZSYSEEKKI/XD4BxLSE6hSogqdQjrd/wFCFJTJaG4JuteOluveMpezc5IICSFEEbpy+wrzj5kXER0ZNlLWCRKF4/yOnC1B2SiIv2wuZ+ckERJCiCI048AM0kxpNAhoQPMyzbUOR9iqxNz3rnvgcjZMEiEhhCgiZ26d4ZczvwDw3wb/zdcWNUI8EI8Ay5azYZIICSFEEZkSMQWTMtG6fGvq+tXVOhxhy4KbmmeH5UkHXmXM5eycJEJCCFEEDsQc4PeLv6PX6RleP+cGv0JYlN4AIS3yuPPflsj2E2U9ISQRytP06dMJDQ2lUaNGhV+ZyQhnt8Phn83/L6aj+HU6HStXrnzoMg9r3Lhx1KtXr1DrEKIglFJ8ue9LALpW7kpFn4oaRyRs3vmdcGiJ+djFO/t9XqXh2TmyjtC/ZEHFPISHhxMeHp61RHehObYa1r9VpItdzZw5k5kzZ3Lu3DkAatasyZgxY+jQoUOh1Hen6OjoPDdGfRA6nY4VK1bQtWvXrHOvv/561qasQliD7VHbiYiJwNngzJC6Q7QOR9i6xBhYOgCUEWo/C11nwoWdsrJ0HiQR0pDj6d/QrRlCjnUeMhe7KqSMvWzZskycOJHKlSsD8NNPP9GlSxf2799PzZo1LV7fnQIDAwv1+gAeHh54eHgUej1C5IdJmZh2YBoAfWr0IdC98H8HhB0zGWHZIEi8An7VofOXYHCAEJmhmBfpGrMkpSDtdv7+pcTj+vs47r3Y1WhIic/f9Qqwd+5TTz1Fx44dqVq1KlWrVuXDDz/Ew8ODXbt23fNxM2fOpFKlSjg5OVGtWjXmzp2bo0x0dDQdOnTA1dWVkJAQli5dmu3+u7vGLl++TK9evShRogS+vr506dIlq6Uq048//kjNmjVxdnYmKCiIYcOGAVChQgUAunXrhk6ny7p9Z9fY+vXrcXFx4datW9muOXz4cFq0+F//+Y4dO3j88cdxdXWlXLlyDB8+nNu3b2fdP2PGDKpUqYKLiwsBAQH06NHjns+VEJkOpB/gTNwZPJ08GVRrkNbhCFu3dSKc/QMc3c1/TDvLH4X3Iy1ClpSeBB/da5T+/9w/A1Xm7rKJ5fJX9ztR4OSev7J3MBqNLF26lNu3b9OkSZM8y61YsYIRI0YwefJk2rRpw5o1axg4cCBly5alVatWWeXee+89Jk6cyJQpU5g7dy69e/emVq1a1KhRI8c1k5KSaNWqFc2bN+ePP/7AwcGBDz74gPbt23Po0CGcnJyYOXMmo0aNYuLEiXTo0IG4uDj++usvAPbs2YO/vz+zZs2iffv2GAw5m3rbtGmDj48Py5YtY9CgQVk/85IlS5gwYQIAhw8f5sknn+T999/nhx9+4Nq1awwbNoxhw4Yxa9Ys9u7dy/Dhw5k7dy5NmzYlNjaW7du3F/i5FvYn1ZjK5uTNALxU+yW8nQuxm12IUxvhj0/Nx09NAb9q2sZTTEgiZKcOHz5MkyZNSElJwcPDgxUrVhAaGppn+c8++4wBAwYwdOhQAEaNGsWuXbv47LPPsiVCPXv25KWXXgLg/fffZ+PGjUybNo0ZM2bkuOaiRYvQ6/V8//33WeupzJo1Cx8fH7Zu3Uq7du344IMPeO211xgxYkTW4zIHsPv5+QHg4+OTZ5ebwWCgV69eLFiwICsR2rx5Mzdv3qRnz54ATJo0iT59+jBy5EgAqlSpwtSpU2nRogUzZ87kwoULuLu707lzZzw9PQkODqZ+/fr3f5KF3Vt6cilxKg5/V3/6VO+jdTjClt26CMsHm48bvQR1emobTzEiiZAlObqZW2bywXT2T/QLn71/wb4/52+dB0e3fNWbqVq1ahw4cIBbt26xbNky+vfvz7Zt2/JMho4dO8Z//vOfbOeaNWvGlClTsp27u1WpSZMmHDhwINdr7tu3j9OnT+Pp6ZntfEpKCmfOnCEmJoaoqChat25doJ/tbn379qVJkyZERUVRunRp5s+fT8eOHbMGbWfGMX/+/KzHKKUwmUycPXuWtm3bEhwcTMWKFWnfvj3t27enW7duuLkV7DkX9iUhLYEfjpo3Vn2lziu4OLhoHJGwWRlp5sHRyTehdH148iOtIypWJBGyJJ0u/91TlZ7A5BGELvEKulzHCenMs8cqPVEoo/udnJyyBks3bNiQPXv2MGXKFL755ps8H3P3KrhKqXytjJtXGZPJRIMGDbIlIJn8/PzQ6y0zhK1x48ZUqlSJRYsWMWTIEFasWMGsWbOyxfHyyy8zfHjOtV3Kly+Pk5MTERERbN26lQ0bNjBmzBjGjRvHnj178PHxsUiMwvbMOjKLuLQ4/PR+dA7prHU4wpZtfA8u7wUXH+j5Ezg4ax1RsSKDpbWiN5Dccuy/N+5OFIp+sSulFKmpqXneX6NGDf78889s53bs2JFj7M/dA6537dpF9erVc71mWFgYp06dwt/fn8qVK2f75+3tjaenJxUqVGDz5s15xuXo6IjReP91l/r06cP8+fNZvXo1er2eTp3+t+N3WFgYR48ezRFD5cqVcXJyAsDBwYE2bdrw6aefcujQIc6dO8eWLVvuW6+wTzFJMcyNNE8maOvSFge9/M0pCsmR5fD31+bjbt9AiWBt4ymGJBHSUHrlDqieP4FXUPY7Cnmxq3feeYft27dz7tw5Dh8+zLvvvsvWrVvp27dvno954403mD17Nl9//TWnTp3iiy++YPny5bz++uvZyi1dupQff/yRkydPMnbsWHbv3p01y+tuffv2pVSpUnTp0oXt27dz9uxZtm3bxogRI7h06RJgngH2+eefM3XqVE6dOkVERATTpk3LukZmonTlyhVu3ryZZ/x9+/YlIiKCDz/8kB49euDi8r9uitGjR7Nz507Cw8M5cOAAp06dYtWqVVlrEa1Zs4apU6dy4MABzp8/z5w5czCZTFSrJgMRRe6+Pvg1KcYU6pSqQw3HnBMFhLCI66dg1b9rpj02Cqq11zae4kqJe4qLi1OAiouLy3FfcnKyioyMVMnJyQW+rtFoVDdv3lRGo1EpY4ZS//yh1KGl5v8bMywRep5efPFFFRwcrJycnJSfn59q3bq12rBhw30fN2PGDFWxYkXl6OioqlatqubMmZPtfkBNnz5dtW3bVjk7O6vg4GC1cOHCHGVWrFiRdTs6Olr169dPlSpVSjk7O6uKFSuqwYMHZ3u+v/76a1WtWjXl6OiogoKC1Kuvvpp136pVq1TlypWVg4ODCg4OVkopNXbsWFW3bt0c8Tdq1EgBasuWLTnu2717t2rbtq3y8PBQ7u7uqk6dOurDDz9USim1fft21aJFC1WiRAnl6uqq6tSpoxYvXpzn85TX+yItLU2tXLlSpaWl5flYUfz9c+sfVfenuqrW7Fpq16Vd8prbmSL7PU+9rdT0R5Ua66XUrE5KZaQXbn3F0L2+v++kU6oAC9DYocyVpePi4vDy8sp2X0pKCmfPniUkJCRbC0N+mEwm4uPj8fLysthYGGuXmpqKi4sLGzdupE2bNlqHU2jyel+kp6ezdu1aOnbsiKOjo4YRisI0ausoNp7fSIuyLfjy8S/lNbczRfJ7rhSsHAIHF5pXin55O3jKLvJ3u9f3952k41oUifj4eJYvX45er89zzJAQxd3ha4fZeH4jOnQMD5ONVUUhiZhjToJ0eujxoyRBD0kSIVEkxo4dy4IFC/jkk08oW7as1uEIYXFKKSZHTAbgqUpPUbVEVdLT07UNStie6IOw9g3zcesxUOExbeOxAZIIiSLx5Zdf8uWXX2odhhCFZkfUDnZf2Y2j3pHweuFahyNsUfIt8z6UxlSo2gGajrjvQ8T92cfgFCGEKEQmZeLLfeZEv3f13pT2yN9WO0Lkm1LwSzjcPAc+5aHbTLCT8aWFTZ5FIYR4SL+d/Y0TN0/g4ejB4NqDtQ5H2KKdX8HxNWBwMi+a6FpC64hshiRCQgjxENKN6Uzbb17bamCtgfi4+GgbkLA953fCxn8X4G0/EcqEaRuPjZFESAghHsKSk0u4nHiZUq6leL7G81qHI2xN4jX4eSAoI9R+Fhq+qHVENkcSISGEeEC302/z7aFvARhSdwhuBdz8WIh7Mhlh2SBIiIZS1aDzl+Y9LYVFSSIkhBAP6KejPxGbEkuwVzDdqnTTOhxha7ZOhLPbwNEdes0FZw+tI7JJkghZAaPJyJ4re1j7z1r2XNmD0XT/TUStkU6nY+XKlQ9d5mGNGzeOevXqFWodQlxPvs7so7MBeLX+qzjqZeVoYUGnNsIfn5qPn5oCfrK3YWGRREhjmy5s4sllT/Li+hcZvX00L65/kSeXPcmm85uKpP6PP/4YnU7HyJEji6S+6OhoOnToYLHr5ZZYvf766/fcsV4IS/j20LckZyRTy7cW7YLbaR2OsCW3LsLyf2cfNnoJ6vTUNh4bJ4mQhrZFbeP1ba9zNelqtvMxSTGM2jqq0JOhPXv28O2331KnTp1CredOgYGBODs7F2odHh4e+Pr6Fmodwr5djL/I0hNLARjZYCQ6GbchLCUjDZYOgOSbULo+PPmR1hHZPEmELEgpRVJ6Ur7+JaQmMPnwZBQ597xV//43cfdEElIT8nW9gu6dm5iYSN++ffnuu+8oUSJ/61HMnDmTSpUq4eTkRLVq1Zg7d26OMpktPq6uroSEhLB06dJs99/dgnP58mV69epFiRIl8PX1pUuXLpw7dy7bY3788Udq1qyJs7MzQUFBDBs2DIAKFSoA0K1bN3Q6XdbtO7vG1q9fj4uLC7du3cp2zeHDh9OiRYus2zt27ODxxx/H1dWVcuXKMXz4cG7fvp11/4wZM6hSpQouLi4EBATQo0ePfD1nwjZNOzCNDJVBs9LNeCToEa3DEbZk43tweS+4+JjXC3Io3D8chWyxYVHJGck8ssByH4pXk67SdFHTfJX9u8/fBZqxEh4eTqdOnWjTpg0ffPDBfcuvWLGCESNGMHnyZNq0acOaNWsYOHAgZcuWpVWrVlnl3nvvPSZOnMiUKVOYO3cuvXv3platWtSoUSPHNZOSkmjVqhXNmzfnjz/+wMHBgQ8++ID27dtz6NAhnJycmDlzJqNGjWLixIl06NCBuLg4/vrrL8DcouXv78+sWbNo3749BoMhRx1t2rTBx8eHZcuWMWjQIACMRiNLlixhwoQJABw+fJgnn3yS999/nx9++IFr164xbNgwhg0bxqxZs9i7dy/Dhw9n7ty5NG3alNjYWLZv357v51rYlsgbkfx29jcARoTJFgfCgo4sh7+/Nh93+wZKBGsbTyEzmhS7z8YSk5CCv6cLjUNKYtAXfeuqJEJ2aNGiRURERLBnz558P+azzz5jwIABDB06FIBRo0axa9cuPvvss2yJUM+ePXnppZcAeP/999m4cSPTpk1jxowZucah1+v5/vvvs7oWZs2ahY+PD1u3bqVdu3Z88MEHvPbaa4wY8b8vnEaNGgHg5+cHgI+PD4GBgbnGbTAY6NWrFwsWLMhKhDZv3szNmzfp2dPc7z5p0iT69OmTNU6qSpUqTJ06lRYtWjBz5kwuXLiAu7s7nTt3xtPTk+DgYOrXr5/v507YlikRUwDoGNKRGr45E3whHsj1U7DqVfPxY6OgWntt4ylk645EM351JNFxKVnngrxdGPtUKO1rBRVpLJIIWZCrgyt/9/k7X2X3Ru8l/Pf7b8w4o/UMGgQ0yFfd+XHx4kVGjBjBhg0bcHFxyddjAI4dO8Z//vOfbOeaNWvGlClTsp1r0qRJjtsHDhzI9Zr79u3j9OnTeHp6ZjufkpLCmTNniImJISoqitatW+c7ztz07duXJk2aEBUVRenSpZk/fz4dO3bM6hLMjGP+/PlZj1FKYTKZOHv2LG3btiU4OJiKFSvSvn172rdvT7du3XBzkzVj7M2u6F3siNqBg96BYfWHaR2OsBVpSebNVNMSIfgxaPWu1hEVqnVHohkyLyLHwJArcSkMmRfBzOfDijQZkkTIgnQ6Xb67p5qUboKfix/XU67nOk5Ih44AtwCalm6KQZ+zy+dB7du3j5iYGBo0+F9yZTQa+eOPP/jqq69ITU3NtYsJyDEgVCmVr0GieZUxmUw0aNAgWwKSyc/PD72FNhRs3LgxlSpVYtGiRQwZMoQVK1Ywa9asbHG8/PLLDB8+PMdjy5cvj5OTExEREWzdupUNGzYwZswYxo0bx549e/Dx8bFIjML6KaWYvG8yAM9WfZZynuW0DUjYBqXg11EQEwkeAdDjRzDY7lez0aQYvzoyl289UIAOGL86krahgUXWTSaDpTVi0BsYUdvc3aMj+4udeXt049EWTYIAWrduzeHDhzlw4EDWv4YNG9K3b18OHDiQZxJUo0YN/vzzz2znduzYkWPsz65du3Lcrl69eq7XDAsL49SpU/j7+1O5cuVs/7y9vfH09KRChQr3nArv6OiI0Xj/dZf69OnD/PnzWb16NXq9nk6dOmWL4+jRozliqFy5Mk5OTgA4ODjQpk0bPv30Uw4dOsS5c+fYsmXLfesVtmPD+Q0cvXEUNwc3/lPnP/d/gBD5ETEHDi4End6cBHkGaB1Rodp9NjZbd9jdFBAdl8Lus7FFFpMkQhpqUboFn7X4DH83/2znA9wC+KLlF7QJbmPxOj09PalVq1a2f+7u7vj6+lKrVq08H/fGG28we/Zsvv76a06dOsUXX3zB8uXLef3117OVW7p0KT/++CMnT55k7Nix7N69O2uW19369u1LqVKl6NKlC9u3b+fs2bNs27aNESNGcOnSJcA8A+zzzz9n6tSpnDp1ioiICKZNm5Z1jcxE6cqVK9y8eTPP+Pv27UtERAQffvghPXr0yNYtOHr0aHbu3El4eDgHDhzg1KlTrFq1ildfNffXr1mzhqlTp3LgwAHOnz/PnDlzMJlMVKsmC5zZi3RTOlMjpgIwoOYAfF1leQZhAdEHYe0b5uMn3oMKj2kbTxGIScg7CXqQcpZgu+1vxUSb8m1oXb41ETERXEu6hp+bH2H+YRZvCXpYXbt2ZcqUKUyaNInhw4cTEhLCrFmzaNmyZbZy48ePZ9GiRQwdOpTAwEDmz59PaGhortd0c3Pjjz/+YPTo0XTv3p2EhATKlClD69at8fLyAqB///6kpKTw5Zdf8vrrr1OqVKlsU9c///xzRo0axXfffUeZMmVyTL3PVKVKFRo1asSePXuYPHlytvvq1KnDtm3bePfdd2nevDlKKSpVqkSvXr0A82Ds5cuXM27cOFJSUqhSpQoLFy6kZs2aD/ZkimJnxakVXEi4QEmXkvSr2U/rcIQtSL4FS/qDMRWqtodmI7WOqEj4e+ZvbGp+y1mCThV0ARo7Ex8fj7e3N3FxcVlfzplSUlI4e/YsISEhBRp4DOZxKfHx8Xh5eVlsLIy1S01NxcXFhY0bN9KmjeVbu6xFXu+L9PR01q5dS8eOHXF0lO0Yiouk9CQ6rejE9eTrvN34bfrU6JPvx8prbn/y9ZorBYufh+NrwKc8/GcbuJUs2kA1YjQpHv14M9cSUnO9XwcEervw5+gnHnqM0L2+v+9kH9/AQnPx8fEsXLgQvV6f55ghIazRvGPzuJ58nbIeZelZVbY6EBaw8ytzEmRwMi+aaCdJEIBJKTyc85iQ8+//xz4VWqTrCUnXmCgSY8eOZcGCBXzyySeULVtW63CEyJebKTf58ciPwL8bqxqkVUc8pPM7YeNY83H7j6FMmLbxFLFP1x3n7PUkXB31eLg4ZmsZCpR1hIQt+/LLL/nyyy+1DkOIAvnu8HfcTr9NjZI1aB9i2wvciSKQeA1+HgjKCLV7QsNBWkdUpDZGXuW77WcBmPxcfdrUCLCKlaXtomusW7dulChRQvaHEkLkW1RiFIuOLwLMW2nodXbxcSkKi8kIywZBQjSUqgadJ4MdbdZ7MTaJ15YcAGDQYyE8WdO8TlCTSr50qVeGJpV8NUmCwE4SoeHDhzNnzpxCu76MNxd3MplMWocgLGD6gemkm9J5JPARmpbO355/QuRp60Q4uw0c3aHXXHD20DqiIpOWYWLYggjiUzKoV86H0e2ta5yoXXSNtWrViq1bt1r8uo6Ojuh0Oq5du4afn1++VlnOZDKZSEtLIyUlxW5mjdk6pRRpaWlcu3YNvV6ftRijKH5OxJ5g9ZnVAIxsMLJAv9tC5HBqE/zxqfn4qSngZ19rkH209hgHL8Xh4+bI9L5hODlY13ee5onQH3/8waRJk9i3bx/R0dGsWLGCrl27ZiszY8YMJk2aRHR0NDVr1mTy5Mk0b95cm4DvYDAYKFu2LJcuXcpz/Zq8KKVITk7G1dVVPmRtjJubG+XLl5cEtxibun8qCkW74HbUKpX3QqNC3Neti7B8sPm44SCoY18zD387HM3sHecA+OLZupTxyd++mEVJ80To9u3b1K1bl4EDB/LMM8/kuH/x4sWMHDmSGTNm0KxZM7755hs6dOhAZGQk5cuXB6BBgwakpuZck2DDhg2ULl26QPGkpqZmu1Z8fDxgXhsiPT09R3lnZ2cqVKhARkZGgbrIMjIy2LFjB02bNsXBQfOXQViATqfDYDBgMBjQ6XQ53i+Zt3N7HwnrsS9mH39c+gODzsCQ2kMe6vWS19z+pKem4JtwDNPBRDI8/dFv/Qh9ciymoHoYW08AO3ovnI9N4o2fDwEw+LEKNK9Uskh/F/Jbl1UtqKjT6XK0CD3yyCOEhYUxc+bMrHM1atSga9eufPzxx/m+9tatW/nqq6/4+eef71lu3LhxjB8/Psf5BQsWyG7jQtg4pRTfJn7LReNFGjs15mm3p7UOSRQjQbf2UPvSfFzTs++Tla535vfqH5Hs7KdRZEUv3QSTjxi4dFtHiKfi1VAjhiJuJE9KSqJPnz73XVDRqpsi0tLS2LdvH2+99Va28+3atWPHjh2FUufbb7/NqFGjsm7Hx8dTrlw52rVrd88nsqDS09PZuHEjbdu2lRVn7YS85tZvy8UtXNx+EReDC+93eh8/14f74pLX3H7ojq/BsOwryGVfdQdTKk/U8EVV71j0gWlk3OpjXLp9kRJujvz0chOCvItuy4xMmT0692PVidD169cxGo0EBGTfjTcgIIArV67k+zpPPvkkERER3L59m7Jly7JixQoaNWqUa1lnZ2ecnZ1znHd0dCyUD7LCuq6wXvKaW6cMUwbTD00H4IXQFyjtVbBu9XuR19zGmYyw8R1yS4IAdOhw2Pgu1HwarGwfycKw+mAU83dfBODLXvUoX8pTkzjy+ztn1YlQprsHEyulCjTAeP369ZYOSQhhY345/Qtn487i4+zDwFoDtQ5HFCfnd0B81D0KKIi/bC4Xov1En8J09vpt3l5+GIDwVpVoWc1f44juz6qntZQqVQqDwZCj9ScmJiZHK5EQQjyo5IxkZhycAcDg2oPxdNLmL1hRTCVetWy5Yiol3cjQ+REkpmbwSEhJ/tumqtYh5YtVJ0JOTk40aNCAjRs3Zju/ceNGmjaVBc6EEJax4NgCYpJiCHIPolf1XlqHI4obj3z+YZ7fcsXU+NWRHIuOx9fdiam96+NQ1KOjH5DmXWOJiYmcPn066/bZs2c5cOAAJUuWpHz58owaNYoXXniBhg0b0qRJE7799lsuXLjAK6+8omHUQojizmgyEhETwfn483xz6BsAhtUfhrMh5xhBIfKUkQZH7j0bGXTgVRqCbfcP+JX7L7Nw9wV0OpjyXH0CvIp+cPSD0jwR2rt3L61atcq6nTljq3///syePZtevXpx48YNJkyYQHR0NLVq1WLt2rUEBwcXalzTp09n+vTpGI3GQq1HCFH0Np3fxMTdE7ma9L+uCoPOgIuh+Hx4CyuQcBWW9IOLu7JOKXTosg2a/nc8a/uJNjtQ+nRMIu+sMI8LevWJKjxWpZTGERWM5olQy5Yt77sQ4dChQxk6dGgRRWQWHh5OeHg48fHxeHt7F2ndQojCs+n8JkZtHYW6a4aPURl5fdvrfKH7gjbBbTSKThQbl/bB4uchIQqcveGZ7yEjBX4bbT6Xyau0OQkKtc01qZLTjITPjyApzUjTSr6MaF1F65AKTPNESAghiorRZGTi7ok5kqA7fbL7E1qVa4XBRv96Fxawfx6s+S8Y08w7yfdeCL6VAMio1I6/l07m0VoVcPAuY+4Os+H30phfjnDiagJ+ns5Mfq6eZjvIPwxJhIQQdiMiJiJbd9jdFIorSVeIiImgUWDua40JO2ZMh3Vvw57vzLerd4ZuX4PzHbMM9QZueNZA1ewINr521M/7LrF03yX0Opj6XH38PYtn17IkQkIIu3Et6ZpFywk7kngNlvaH83+Zb7d8Bx5/A+x0c+WTVxP4v5XmcUH/bVOVJpV8NY7owUkiJISwG35u+dsyI7/lhJ2I2g+Lnof4S+DkCd2/BTvaLuNut1MzGDo/gpR0E82rlCK8VWWtQ3ookggJIexGmH8YAW4BeXaP6dAR4BZAmH9YEUcmrNaBhbB6BBhTwbcKPLcA/IrHQoGFQSnFeyuPcDomkQAvZyb3qoe+GI4LupN9tunlw/Tp0wkNDc1zTzIhRPFj0BvoXqV7rvfp/p3mPLrxaBkoLczjgX57C1a+Yk6CqraHwZvtOgkCWLL3Isv3X8ag1zGtdxi+HsV/3S1JhPIQHh5OZGQke/bs0ToUIYSFKKX48/KfALg5uGW7L8AtgC9aytR5Ady+DnO7wd8zzbdbjIbnFoKLfS+lciw6njG/HAXgtXZVaRxSUuOILEO6xoQQdmPLhS0cvn4YVwdXVnVdxYWEC1xLuoafmx9h/mHSEiQg+iAs6gtxF8HJA7p9AzU6ax2V5hJTMwifH0FqholW1fx45fFKWodkMZIICSHsgtFkZNr+aQA8X+N5AtwDCHC37b2fRAEdWgqrXoWMZChZ0dwK5F9d66g0p5TineWH+ef6bYK8Xfj82eI/LuhOkggJIezCmn/WcCbuDF5OXgyoNUDrcIQ1MWbAprGw8yvz7cptzStFu/poGpa1WLD7AqsORuGg1/FVn/qUdHfSOiSLkkRICGHz0oxpzDgwA4BBtQfh5eSlcUTCaiTFws8D4Z+t5tvNX4NW79r0atAFceRyHONXRwLwZvtqNAi2jXFBd5JESAhh85aeXErU7Sj8XP3oXb231uEIa3HlsHk80K3z4OgOXWdAza5aR2U14lPSCV8QQVqGiTY1/BncvKLWIRUKSYSEEDYtKT2Jbw99C8ArdV/B1cFV44iEVTiyHH4Jh/QkKFHBPB4oIFTrqKyGUoq3lh3i/I0kyvi48lnPuuh0tjMu6E6SCOVh+vTpTJ8+HaPRqHUoQoiHMO/YPGJTYinnWY5uVbppHY7QmskImyfAX5PNtys9Ac/8AG621+XzMObsPM/aw1dwNOiY3jcMHzfbGhd0J1lHKA+yjpAQxd+tlFvMOjILgPB64TjqbXsTTHEfSbEwv+f/kqBmI6Dvz5IE3eXQpVt88Kt5XNDbHWpQr5yPtgEVMmkREkLYrB+P/EhieiJVS1SlQ0gHrcMRWroaCYv6wM2z4OAKXb6C2j20jsrqxCWbxwWlGxXtawYysFkFrUMqdJIICSFs0tXbV1lwfAEAw+sPR6+TBnC7FfkLrBgC6bfBp7x5v7DA2lpHZXWUUrz580EuxiZTrqQrn/SoY7Pjgu4kiZAQwiZ9c+gbUo2p1POrx+NlH9c6HKEFkxF+/wi2f2a+HdICes6WrrA8/PjXOdYfvYqTQc+MPg3wdrWPrmRJhIQQNudC/AVWnFoBwMgGI+3ir1pxl+RbsHwwnNpgvt1kGLQZDwb52svN/gs3+XjtMQD+r3MNape1n33V5B0hhLA5Xx34igyVwWNlHqNBQAOtwxFFLea4eTxQ7BlwcIGnp0GdZ7WOymrdSkpj2IL9ZJgUnWoH8cKjwVqHVKQkERJC2JQTsSf47exvgHlskLBRJiOc3wGJV8EjAIKbmleDPrYGVrwMaYngXQ56zYPS9bSO1mqZTIrXlhzk8q1kKvi6MfGZ2nbXgiqJkBDCpkzdPxWA9hXaU8O3hsbRiEIRuQrWjYb4qP+d8yoNZRtD5Erz7QrNzeOB3EtpEWGx8d32f9h8PAYnBz3T+4bh6WIf44LuJNMo8jB9+nRCQ0Np1KiR1qEIIfJpf8x+/rj0BwadgWH1h2kdjigMkatgSb/sSRCYb2cmQY8MgRdWSBJ0H3vPxfLp+hMAjH0qlJql7Wdc0J0kEcqDLKgoRPGilGLyvskAdK3clWAv+xrnYBdMRnNLECrvMq4l4MkPwWB/LRsFEXvbPC7IaFI8Xbc0fRqX1zokzUgiJISwCX9e/pOImAic9E68UvcVrcMRheH8jpwtQXdLvmkuJ/JkMin+u/gAV+JTqFjKnY+629+4oDvJGCEhRLFnUqassUG9q/cm0D1Q44hEoUi8atlydsJoUuw+G0tMQgr+ni7sPR/LtpPXcHbQM+P5MDyc7TsVsO+fXghhEzac28Dx2OO4O7ozqPYgrcMRhcUjwLLl7MC6I9GMXx1JdFxKjvve71KL6oFeGkRlXSQREkIUa+mmdL468BUA/Wv2p4RLCY0jEoUmuKl5dlie3WM68/3BTYs0LGu17kg0Q+ZF5DmiytNFUgCQMUJCiGLul9O/cD7+PCVdStIvtJ/W4YjCpDdAhby2S/l3jEv7ieZyds5oUoxfHZlnEqQDJqyJxGi6x8BzOyGJkBCi2ErJSGHmwZkAvFT7Jdwd3TWOSBSqf7bB4SXmY5e7pnp7lYZn50Do00UflxXafTY21+6wTAqIjkth99nYogvKSkm7mBCi2Fp8YjExSTEEugfybDXZQsGmxV2CnweCMkHdPuZtMy7szLmytAAgJiHvJOhBytkySYSEEMVSYloi3x/+HoChdYfibHDWOCJRaNJTYPELkHQDAutA5y/Mm6eGNNc6Mqvl7+li0XK2TLrGhBDF0k+RP3Er9RYh3iE8VekprcMRhem3NyEqwrxYYq+54OiqdURWr3FISXzc8l5UUgcEebvQOKRk0QVlpSQRyoNssSGE9bqRfIOfjv4EwKv1X8VBL43bNmvfbIj4CdDBMz9AiQoaB1Q8bD91jYSU9Fzvy1w6cexToRj09ruQYiZJhPIgW2wIYb2+P/w9yRnJ1PStSZvybbQORxSWS/tg7Rvm4yf+Dyq31jaeYmLvuVhembcPowkaBPsQ6JW9+yvQ24WZz4fRvlaQRhFaF/kzSghRrEQlRrH4xGIAhocNt+utAWxa4jVY8gIY06B6Z3hslNYRFQuRUfEMnL2HlHQTLav58e0LDTHoddlWlm4cUlJagu4giZAQoliZeXAm6aZ0Ggc2pklQE63DEYXBmGGeIRZ/GXwrQ9eZoJcOjPs5e/02/X7cTUJKBo0qlGBm3wY4OZiftyaVfDWOznrJO0sIUWz8c+sfVp1ZBUhrkE3bPA7ObQdHd+g1H1xkG4j7iY5L5vnv/+Z6YiqhQV58378Rrk6ynEB+SCIkhCg2vjrwFSZlolW5VtT1q6t1OKIwHF0BO6aZj7vOAP/q2sZTDMTeTuOFH3Zz+VYyIaXc+enFxni75j1jTGQniZAQolg4ev0oG89vRIeOV+u/qnU4ojDEHIOV4ebjZiOgZldNwykOElLSGTBrN6djEgnydmHuoMb4ecqaWgUhiZAQoliYEjEFgM4VO1OlRBWNoxEWlxIHi/pC+m0IeRyeGKN1RFYvJd3I4Dl7OXQpjpLuTswd9AhlS7hpHVaxI4mQEMLq7Y7ezc7onTjoHRhab6jW4QhLM5lgxRCIPQNeZaHHLPPK0SJPGUYTwxbsZ9c/sXg4O/DTwMZU9vfQOqxiSRIhIYRVU0pltQb1qNKDsp5lNY5IWNyfn8OJX8HgbF452r2U1hFZNZNJ8ebPh9h07CpODnq+79+Q2mW97/9AkStJhIQQVu33i79z6PohXB1cebnuy1qHIyzt9CbY8qH5uNNnUCZM23isnFKKCWsiWb7/Mga9jhl9wni0okyNfxiSCAkhrJbRZGTafvMMor41+lLKVVoKbMrNc/DzIEBBgwEQ1k/jgKzf5E2nmL3jHACf96xLm9AAbQOyAZIICSGs1tqzazl96zSeTp4MqDlA63CEJaUlweLnIeUWlGkAHT7VOiKr9+OfZ5my+RQA45+uSdf6ZTSOyDZIIpQH2XRVCG2lG9OZfmA6AC/WehFvZxkDYTOUgjX/hSuHwa0UPDsHHGTK970s23eJCWsiARjVtir9m1bQNiAbIolQHmTTVSG09fOpn7mceJlSrqXoW6Ov1uEIS9rzPRxaBDoD9JwF3jIA/l42HL3Cm8sOATDosRBefaKyxhHZFkmEhBBWJyk9iW8OfgPAy3VextXBVeOIhMVc2AXr3jIftx1vXjNI5GnH6esMW7Afo0nRo0FZ3u1YQ7aWsTBJhIQQVmfB8QXcSLlBWY+yPFPlGa3DEZaScAWW9AdTBtTsBk2GaR2RVTtw8RaD5+wlzWjiyZoBTOxeG73sGm9xkggJIaxKXGocPx75EYDw+uE4GmTPJJuQkWZOghKvgF8NePorkJaNPJ26msCAWbu5nWakWWVfpjxXHweDfGUXBnlWhRBWZdaRWSSkJVClRBU6hnTUOhxhKRv+Dy7uAmcveG4+OMsqyHm5GJvE8z/8za2kdOqW8+GbFxri4ig7yRcWSYSEEFbjWtI15h+bD8Dw+sPR6+QjyiYcXAy7zWO+6PYN+FbSNh4rFpOQwvM//M3V+FSqBngwe0AjPJxlu5HCJJ8yQgir8c2hb0gxplDXry4tyrbQOhxhCdGHYPUI8/Hjb0J1aeXLS1xSOv1+2M35G0mUK+nK3EGPUMLdSeuwbJ4kQkIIq3Ax/iLLTi4DYETYCJkZYwuSYs2LJmYkQ+U20PItrSOyWklpGQycvZvjVxLw83Rm3qBHCPBy0TosuyCJkBDCKkw/OJ0MlUGz0s1oFCgLmRZ7JiMsHwy3zoNPMHT/DvQyziU3qRlGXp67j4gLt/B2dWTuoMYE+7prHZbdkERICKG5kzdPsvaftQAMDxuucTTCIrZONG+o6uACveaBW0mtI7JKRpNi1OKDbD91HVdHA7MGNqJ6oJfWYdkVSYSEEJqbFjENhaJdcDtCfUO1Dkc8rONr4Y9/9w57aioE1dE2HiullOLdFYf59XA0jgYd3/ZrQFj5ElqHZXckERJCaOpAzAG2XtqKQWdgWH1ZYK/Yu3EGVrxsPm78MtTtpW08VmziuuMs2nMRvQ6mPlef5lX8tA7JLkkiJITQjFKKKRFTAOhSuQsh3iEaRyQeSmoiLOoLqfFQ7lFo94HWEVmtGVtP8822fwCY2L0OHWoHaRyR/ZJESAihmR1RO9h7dS9OeieG1B2idTjiYSgFq16Fa8fAIwCe/QkcZOp3bub/fZ5P150A4N2ONXi2UTmNI7JvkggJITRhUqas1qBe1XsR6B6ocUTioeycDkeXg94Bnp0DnvJ65mb1wSj+b+URAIa1qszgxytqHJGQREgIoYmN5zdyLPYYbg5uvFT7Ja3DEQ/j7HbYOMZ8/OTHUP5RbeOxUr+fiOG/iw+gFDz/aHlea1dV65AEkggJITSQYcrgq/1fAdC/Zn9KusjU6mIr7jIsHQDKCHWeg8aDtY7IKu05F8uQefvIMCmerluaCU/XkkVDrYQkQnmYPn06oaGhNGokC7sJYWmrzqziXPw5SjiXoF9oP63DEQ8qIxWWvABJ1yGwNnT+UnaUz8XRqDhenL2HlHQTT1T35/Nn66LXy/NkLSQRykN4eDiRkZHs2bNH61CEsCmpxlRmHJgBwEu1X8LDSXYhL7Z+exMu7wMXH/OiiU5uWkekOaNJcSpOx+pD0ew8c4NTVxPo98NuElIyaFyhJNP7hOFokK9eayJb2gohitTi44u5mnSVQPdAelWXNWaKrYg5sG82oINnfoASFTQOSHvrjkQzbtVRrsQbIPIwAHodmBTULO3F9wMa4uok24xYG0mEhBBF5nb6bb4//D0AQ+oOwdngrHFE4oFc3ge/vm4+bvUuVGmjbTxWYN2RaIbMi0Dddd7074n+TSvg5eJY5HGJ+5NESAhRZOYcncPN1JtU8KrA05We1jockV8mI5zfAYlXzXuHrX0TjKlQrSM0f03r6DRnNCnGr47MkQTd6cuNJ3kmrCwGGRtkdSQREkIUKqPJSERMBOfizvHjkR8BGFZ/GA56+fgpFiJXwbrREB+V/bxHAHT7GvQy3mX32Vii41LuWSY6LoXdZ2NpUsm3iKIS+SWfREKIQrPp/CYm7p7I1aSrWeccdA7okL+Ki4XIVbCkH+TW1pF4Ff7ZBqHSsheTcO8kqKDlRNGSVF4IUSg2nd/EqK2jsiVBABkqg9e3vc6m85s0ikzki8lobgnKs8NHB+veMpezc/6eLhYtJ4qWJEJCCIszmoxM3D0RdY9RE5/s/gSjfIlar/M7cnaHZaMg/rK5nJ2rGuCB4z3G/uiAIG8XGofIwqHWSBIhIYTFRcRE5GgJupNCcSXpChExEUUYlSiQxLxfvwcqZ6NuJKbS9/u/STflnvRnpkdjnwqVgdJWKl9jhKZOnVrgCw8cOBBPT88CP04IUfxdS7pm0XJCAx4Bli1ng2ISUuj73d+ciknEz9OZIS0q8e0fZ7gSn5pVJtDbhbFPhdK+VpCGkYp7yVciNHLkSMqWLYvBkL+FoC5evEjnzp0lERLCTvm5+Vm0nNBAuUfNU+Uz8hrgqwOv0hDctEjDshbRccn0/e5v/rl+m0AvFxYMfoSKfh70aVSGrxavo2LNegT5uNM4pKS0BFm5fM8a27t3L/7+/vkqKwmQEPYtzD+MALeAPLvHdOgIcAsgzD+siCMT+bZt4r2TIID2E0FvfyslX7qZRJ/v/uZCbBJlfFxZOPhRyvuatxcx6HVU8VZ0rBOEo6MsoFgc5GuM0NixY/HwyP9+QO+88w4lS8qgMCHslUFvYFj9Ybnelzl1fnTj0Rjs8Eu0WDiwELZ/Zj5uNNjc8nMnr9Lw7By7nDp//sZten2ziwuxSZQv6cbil/+XBIniKV8tQmPHji3QRd9+++0HCkYIYTsuxF8AwEHvQIYpI+t8gFsAoxuPpk2wbMtglc79BateNR8/NgrajIUOn/xvZWmPAHN3mB0msWeuJdLnu11cjU+lYil3Fgx+lEBvmRJf3BV4QcXk5GSUUri5mTPg8+fPs2LFCkJDQ2nXrp3FAxRCFD8JaQksOr4IgE+bf4qPiw/Xkq7h5+ZHmH+YtARZqxtnYHFfMKVDaBd44j3zeb0BQpprG5vGTl5NoM93f3M9MZUq/h7MH/yIrAtkIwqcCHXp0oXu3bvzyiuvcOvWLR555BEcHR25fv06X3zxBUOGDCmMOIUQxcii44tISE+gsk9lWge3Rq+TlTqsXvJNWPCs+f+lw6CrbJ+R6WhUHC/8sJvY22nUCPJi3qDG+HrIhsG2osDv8oiICJo3N/9l8PPPPxMQEMD58+eZM2fOA02zF0LYlqT0JOZGzgVgUO1BkgQVBxlpsPgFuHEavMpC70XgJONeAA5dukWf7/4m9nYadcp6s3DwI5IE2ZgCtwglJSVlzQrbsGED3bt3R6/X8+ijj3L+/HmLByiEKF6WnVrGzdSblPUoS/sK7bUOR9yPUvDrKDi3HZw8oM9i8LTftYHutO/8TQb8uJuE1AzCyvsw+8XGeLnITDBbU+A/1SpXrszKlSu5ePEi69evzxoXFBMTg5eXl8UDFEIUH2nGNGYfmQ2YW4Nkh/li4K8psH8u6PTQYxYE1tI6Iqvw9z83eOGHv0lIzaBxSEnmDHpEkiAbVeBEaMyYMbz++utUqFCBRx55hCZNmgDm1qH69etbPEAhRPHxy5lfiEmOwd/Nn6cr2d/U6mInchVsGmc+bj8RqsqEF4A/T12n/6zdJKUZaVbZl9kDG+HhLEm9rSrwK9ujRw8ee+wxoqOjqVu3btb51q1b061bN4sGJ4QoPjJMGfx4+EcABtYciJPBSeOIxD1djoDl/wGUea2gR17WOiKr8PvxGF6et4+0DBMtq/nx9fMNcHGUWY627IFS3MDAQAIDA7Oda9y4sUUCEkIUT7+d/Y1LiZco6VKSZ6o+o3U44l7iLsHC3pCRDJXbmFuDBBuOXiF8QQTpRkXb0AC+6lMfZwdJgmxdvrrGunfvTnx8fL4v2rdvX2JiYh44KCFE8WJSJn44/AMAL4S+gKuDq8YRiTylJsKC5yDxCviHmscFGaTb59dD0Qydb06COtUOYkbfMEmC7ES+EqFffvmFa9euER8ff99/cXFxrF69msTExMKOvVBNnz6d0NBQGjVqpHUoQli9LRe2cCbuDJ6OnvSq1kvrcEReTEZYNgiuHgZ3P/MMMReZ5LJy/2VeXRhBhknRtV5ppjxXD0eDLPtgL/L1Z4BSiqpVqxZ2LFYlPDyc8PBw4uPj8fb21jocIayWUopvD30LQO8avfF0kk2XrdaG/4OT68y7yvdeBD7ltY5Ic0v2XGT08kMoBT0blGXiM3Vkt3g7k69E6Pfffy/whcuUKVPgxwghip+/ov7iWOwxXB1ceb7G81qHI/Ky53vYNcN83HUmlG2obTxWYN6u8/zfyiMA9H2kPO93qYVekiC7k69EqEWLFoUdhxCimPru0HcA9KzakxIuJTSORuTq9CZY+6b5+In/g1rdtY3HCvz451kmrIkEYGCzCozpHIpOJ0mQPZIRckKIB7b3yl4iYiJw1DvSv2Z/rcMRuYk5BksHgjJC3d7Q/HWtI9Lc19vOMPG34wC83KIib7WvLkmQHZNESAjxwL47bG4N6la5G/5u/hpHI3JIvGbeSDU1Hso3haemgJ1/4U/dfIovNp4EYHjrKvy3TRVJguycJEJCiAdy5PoRdkTtwKAzMLDWQK3DEXdLT4ZFveHWBShZEZ6bDw72u1moUorPN5zkq99PA/B6u6oMe6KKxlEJayCJkBDigWSODepUsRNlPctqHI3IRin4JRwu7QEXb+izBNxKah2VZpRSfLT2GN9tPwvAux1rMPjxihpHJazFAy2UkJGRwaZNm/jmm29ISEgAICoqqtivHSSEyJ9TN0+x5eIWdOgYVHuQ1uGIu239GI4sA70D9JoHpey35cNkUoxbdTQrCRr/dE1JgkQ2BW4ROn/+PO3bt+fChQukpqbStm1bPD09+fTTT0lJSeHrr78ujDiFEFbk+8PfA9AmuA0VveVLxaocWgLbPjEfd54MIY9rGo6WTCbFuysPs3D3RXQ6+LBrbfo8ImsniewK3CI0YsQIGjZsyM2bN3F1/d8y+t26dWPz5s0WDU4IYX0uxF9g3bl1AAyuPVjjaEQ253eau8QAmo2EsBc0DUdLRpPijZ8PsXD3RfQ6mNSjriRBIlcFbhH6888/+euvv3Byyr6zdHBwMJcvX7ZYYEII6/TjkR8xKRPNyzSnhm8NrcMRmWL/gcV9wZgGNZ6C1mO1jkgz6UYTo5YcZPXBKAx6HV88W5cu9WSRX5G7AidCJpMJo9GY4/ylS5fw9JSl9YWwZVduX+GXM78A8J86/9E4GpEl+RYs6AVJN6B0fej2Lejtc6+stAwTwxfuZ93RKzjodUzrXZ8OtYO0DktYsQL/prRt25bJkydn3dbpdCQmJjJ27Fg6duxoydiEEFZm9tHZZJgyaBTYiHr+9bQORwAY02FJP7h+ErzKmPcQc3LTOipNpKQbGTJvH+uOXsHJoOfr5xtIEiTuq8AtQl9++SWtWrUiNDSUlJQU+vTpw6lTpyhVqhQLFy4sjBiFEFbgRvINlp1cBsjYIKuhFPz6GpzdBk4e5t3kPQO1jqpIGE2K3WdjiUlIwd/ThdplvBkyfx/bT13H2UHPt/0a0qKqn9ZhimKgwIlQ6dKlOXDgAAsXLiQiIgKTycSgQYPo27dvtsHTQgjbMjdyLinGFGqXqs2jQY9qHY4A2PkVRPwEOj088wME1tY6oiKx7kg041dHEh2XknXOyaAnzWjC1dHAD/0b0rRyKQ0jFMXJAy2o6OrqyosvvsiLL75o6XiEEFYoLjWORScWAebWINmSwAocWwMb3jMfP/kRVGuvbTxFZN2RaIbMi0DddT7NaAJgaMtKkgSJAnmgROjy5cv89ddfxMTEYDKZst03fPhwiwQmhLAeC48v5Hb6baqUqEKLci20DkdEHYDlgwEFDQfBI69oHVGRMJoU41dH5kiC7rRg9wWGtqqMQS/JusifAidCs2bN4pVXXsHJyQlfX99sfxnqdDpJhISwMUnpScw7Ng8wtwbpdfY5G8lqxEfBwucgPQkqPQEdPrWbjVR3n43N1h2Wm+i4FHafjaVJJd8iikoUdwVOhMaMGcOYMWN4++230dvp9Ewh7MnSk0uJS40j2CuYdsHttA7HvqUmmqfJJ0SDX3XoORsM9rNlZEzCvZOggpYTAh5g+nxSUhLPPfecJEFC2IFUYyqzj84GYFCtQRj0Bm0Dsmcmo7k77MohcPczb6Tq4q11VEXKwzl/SZ+/p0shRyJsSYGzmUGDBrF06dLCiEUIYWVWnlrJ9eTrBLoH0rliZ63DsW8bx8CJtWBwhucWQIlgrSMqUocu3WLcqqP3LKMDgrxdaBxSsmiCEjahwG2qH3/8MZ07d2bdunXUrl0bR0fHbPd/8cUXFgtOCKGddFM6Px75EYCBNQfiaHC8zyNEodk7yzxVHqDrDCjXWNt4ipBSitk7zvHR2mOkGxUl3ZyITUpDB9kGTWeOkhr7VKgMlBYFUuBE6KOPPmL9+vVUq1YNIMdgaSGEbVj7z1qibkfh6+JL9yrdtQ7Hfp353bxoIkCrd6F2D23jKUJxSem8uewg649eBeDJmgF8+kxddv5zPcc6QoHeLox9KpT2tWQlaVEwBU6EvvjiC3788UcGDBhQCOEIIayB0WTk+8PfA9CvZj9cHGTMRZEwGeH8Dki8Ch4B4OYLS/qDMkKdXvD4G1pHWGT2X7jJsAX7uXwrGSeDnnc6Vqd/0wrodDra1wqibWhgtpWlG4eUlJYg8UAKnAg5OzvTrFmzwohFCGElNl3YxLn4c3g5edGrWi+tw7EPkatg3Wjz9PhMOoM5CSrfBJ6eZhfT5JVSfL/9LJ+sO06GSVG+pBvT+4RRu2z2geEGvU6myAuLKPBg6REjRjBt2rTCiEUIYQWUUnx36DsA+tboi7uju8YR2YHIVeaNU+9MgsCcBAHUfwEcnIs+riJ283YaL/20lw/XHiPDpOhUJ4g1wx/LkQQJYUkFbhHavXs3W7ZsYc2aNdSsWTPHYOnly5dbLDghRNHbfnk7J26ewM3Bjb41+modju0zGc0tQfdaL/n3D6Huc2DDyxfsPRfLqwv3Ex2XgpODnjGdQ+n7SHkZeyoKXYETIR8fH7p3l4GTQtgipRTfHvoWgF7VeuHtLH+JF7rzO3K2BN0t/rK5XEjzoompCJlMiq//OMPnG05iNClCSrnzVZ/61Cwt7z1RNB5oiw0hhG3ac2UPB68dxEnvRL+a/bQOxz4kXrVsuWLkRmIqo5YcZNvJawB0qVeaD7vVzvfCiUJYgrzbhBBZvj1sbg3qXqU7pVxlB+8i4RFg2XLFxK5/bjBi0X6uxqfi7KBnQpeaPNuwnHSFiSKXr0QoLCyMzZs3U6JECerXr3/PN2pERITFghNCFJ1D1w7xd/TfOOgceLHWi1qHYz/KNwEnD0hLzKOADrxKQ3DTIg2rsBhNium/n2byppOYFFT292B6nzCqBXpqHZqwU/lKhLp06YKzs3nGQteuXQszHiGERjJninWu1JkgD1mUrkgoBRvfu3cSBNB+ok0MlI5JSOG/iw/w1+kbAPRoUJYJXWri5iSdE0I7+Xr3jR07lhdffJEpU6YwduzYwo5JCFHETsSeYOulreh1egbVGqR1OPZBKfjtTdht7o6kwUA4tT77wGmv0uYkKPRpbWK0oL9OX2fEogNcT0zF1dHAB11r8UyDslqHJUT+xwj99NNPTJw4EU9Pab4UwtZkriLdLrgdFbwraBuMPTCZ4NdRsG8WoIOnp0JYv5wrSwc3LfYtQUaTYsrmU0zbcgqloFqAJ9P71qeyv3yXCOuQ70RIqXuscSGEKLbOxZ1j/bn1ALxU+yWNo7EDJiOsHg775wE68yaq9fqY79MbbGqK/NX4FIYv3M/fZ2MB6N24HGOfqomLY/FO7oRtKdDK0sVxNP/Fixdp2bIloaGh1KlTh6VLl2odkhBW5YcjP6BQtCzbkmolq2kdjm0zGWHlUHMSpNND9+/+lwTZmG0nr9Fxynb+PhuLu5OBKc/V4+PudSQJElanQCPUqlatet9kKDY29qECsjQHBwcmT55MvXr1iImJISwsjI4dO+LuLtsGCBGVGMWaM2sAGFxnsMbR2DhjBqx4GY78bN5D7JnvoZbtLU6bYTTx+caTzNx6BoAaQV5M71Ofin4eGkcmRO4KlAiNHz8eb+/itdpnUFAQQUHmGTD+/v6ULFmS2NhYSYSEAGYdmUWGyuCRoEeo41dH63BslzEdVgyByJWgd4Aes2xiAPTdom4lM3zhfvaevwnAC48G826nGtIKJKxagRKh5557Dn9/f4sG8McffzBp0iT27dtHdHQ0K1asyDFFf8aMGUyaNIno6Ghq1qzJ5MmTad684P3oe/fuxWQyUa5cOQtFL0TxdT35OstPmfcG/E/t/2gcje3SmTIwrHgJTvwKekd4dg5U76h1WBa35fhVRi05yK2kdDydHZj4TB061ZFlGIT1y3ciVFjjg27fvk3dunUZOHAgzzzzTI77Fy9ezMiRI5kxYwbNmjXjm2++oUOHDkRGRlK+fHkAGjRoQGpqao7HbtiwgdKlSwNw48YN+vXrx/fff18oP4cQxc2co3NIM6VR168ujQIbaR2ObcpIpdHZaejj94PBGXrNg6rttI7KotKNJiatP8G3f/wDQO0y3nzVpz7BvtLqLooHzWeNdejQgQ4dOuR5/xdffMGgQYN46SXzbJbJkyezfv16Zs6cyccffwzAvn377llHamoq3bp14+2336Zp03uvzpqampotqYqPjwcgPT2d9PT0fP1M+ZF5LUteU1g3a3rN41LjWHxiMQAvhr5IRkaGxhHZoIwU9Ev7ExS/H+XggrHnXFRIK7CC199SLt9KZsTiQxy8FAdA/ybleaNdVZwd9FbxPteCNf2e27v8vgb5ToRMJtMDB/Og0tLS2LdvH2+99Va28+3atWPHjh35uoZSigEDBvDEE0/wwgsv3Lf8xx9/zPjx43Oc37BhA25ubvkLvAA2btxo8WsK62YNr/nm5M0kZSQRqA8k/kA8aw+u1Tokm2IwpdL4nyn4JxwhQ+fE3xVGcP14Mhwvns+zScGZeB3x6eDlCJW8FEdu6lhwWk+yUYerQdGnsok6/MPmDf9oHa5VsIbfc3uXlJSUr3JWva759evXMRqNBARk32wwICCAK1eu5Osaf/31F4sXL6ZOnTqsXLkSgLlz51K7du1cy7/99tuMGjUq63Z8fDzlypWjXbt2eHl5PdgPkov09HQ2btxI27ZtcXR0tNh1hfWyltf8dvptPv3lUwBGNhlJu2Db6qrRXNptDEv6ok84gnJ0Y1fwSMK6v1psf8/XH73Kx2uPcyX+fy3lbk4GktKMANQt683kZ+tQtoSrViFaFWv5PRf/69G5H6tOhDLdPT5JKZXvMUuPPfZYgVqznJ2ds/ZVu5Ojo2OhvKkL67rCemn9mi8/sZz4tHgqeFWgfcX2GIr5ysVWJTUBlvSB83+BkyfG5xZx4/ANzV/zB7XuSDSvLjrI3QMjMpOgNjX8mdG3AU4OBVqSzi4U19fcluT3+bfqd2+pUqUwGAw5Wn9iYmJytBIJIe4vJSOFOUfnADCo9iBJgiwpJR7mPWNOgpy94IUVqHKPaB3VAzOaFONXR+ZIgu50NCoeg774LbQrxJ2sOhFycnKiQYMGOfpaN27ceN9Bz0KInJafWs6NlBuUdi9Np4qdtA7HdiTfgrnd4OLf4OIN/X6BcsV7Jt7us7FEx6Xcs0x0XAq7z1rXIrpCFJTmXWOJiYmcPn066/bZs2c5cOAAJUuWpHz58owaNYoXXniBhg0b0qRJE7799lsuXLjAK6+8omHUQhQ/6cZ0Zh2dBcDAWgNx1EuzvUUkxcK87hC1H1xLmJOgoLpaR/XQYhLunQQVtJwQ1krzRGjv3r20atUq63bmQOX+/fsze/ZsevXqxY0bN5gwYQLR0dHUqlWLtWvXEhwcXKhxTZ8+nenTp2M0Ggu1HiGKypp/1nDl9hVKuZaiW5VuWodjG5JiYc7TcOUwuPmak6DA3CdiFDf+ni4WLSeEtdI8EWrZsuV91ygaOnQoQ4cOLaKIzMLDwwkPDyc+Pr7YbSsixN2MJiM/HPkBgP6h/XE25JwQIAoo8RrM6QIxR8HdD/qtgoBQraOymEYVSuDiqCclPffJJjog0NuFxiElizYwISxM80RICFH4NpzfwPn483g7e/NstWe1Dqf4S7hqbgm6dhw8AqH/avCrqnVUFjVv1/l7JkEAY58KlcHSotiz6sHSQoiHZ1Imvjv8HQB9a/TFzdHyC4PalfhomN3JnAR5loaBa20uCdp3/iYfrj0GQI8GZQnyzt79Fejtwsznw2hfS/YSE8WftAgJYeO2XdzGqZuncHd0p0/1PlqHU7zFXYafnoLYM+BdDvqvgpIVtY7Kom4kpjJsQQTpRkWn2kFM6lEHkzLPIotJSMHf09wdJi1BwlZIIiSEDVNKZbUG9arWC29nGe/2wG5dMCdBN8+BT3novwZKFO6kjaJmNClGLDpAdFwKFf3c+aRHHXQ6HQYdNKnkq3V4QhQKSYSEsGG7ondx+PphnA3OvBB6/732RB5unoPZT0HcBSgRYh4T5FNO66gsbsqmk/x5+jqujga+fr4BHs7yFSFsn4wRysP06dMJDQ2lUaPivSiasG+ZrUHPVHmGUq6lNI6mmLpxBmZ1MidBJSuZxwTZYBL0+/EYpm4xr+k28ZnaVA3w1DgiIYqGJEJ5CA8PJzIykj179mgdihAP5EDMAfZc2YOD3oGBtQZqHU7xdP2UeWB0/CUoVdWcBHmV1joqi7sYm8TIxQcA6NckmC71ymgbkBBFSNo9hbBR3x76FoCnKz1NoHugxtEUQzHHzVPkE6+Cf6h5sUQPf62jsriUdCND50cQl5xO3XI+vNuphtYhCVGkJBESwgYdu3GM7Ze3o9fpGVRrkNbhFD9XI80Do5OuQ0AtcxLkbptdixPWRHL4chwl3ByZ0TcMZwfZiFfYF0mEhLARRpORiJgIriVdY8nJJQA8WeFJynuV1ziyYubKYfjpaUiOhcA65iTIzTZXT1627xIL/r6ATgeTn6tPGR9XrUMSoshJIiSEDdh0fhMTd0/katLVbOdr+9rGvldFJuoAzO0KyTehdBi8sNy8kaoNOn4lnndXHgZgROsqtKjqp3FEQmhDEiEhirlN5zcxausoFDn37Ju0dxJBHkG0CW6jQWRWzmSE8zvMY4A8AsDBGeb3gJQ4KNsInl8GLra57lJ8SjpD5kWQkm6iRVU/hj9RReuQhNCMJEJCFGNGk5GJuyfmmgRl+mT3J7Qq1wqDXsZ+ZIlcBetGQ3zUHSd1gIJyj0LfpeDipVV0hUopxZtLD3H2+m3K+LgyuVc99LJKtLBjMn0+D7KOkCgOImIicnSH3UmhuJJ0hYiYiCKMyspFroIl/e5KgoDMZLLRIJtNggC+336WdUev4GjQMb1vGCXcnbQOSQhNSSKUB1lHSBQH15KuWbRcoTAZ4ex2OPyz+f8mo7axrBsNebag6WDTOG1jLER//3ODieuOAzDmqZrUK+ejbUBCWAHpGhOiGPNzy98A1/yWs7jcuqC8SkP7TyD0acvVY0yHlHhIuWUe45Prv1vmBRJztATdSUH8ZfPYoZDmlovPCsQkpDBs4X6MJkXXeqV5/hGZTSgESCIkRLEW5h9GgFsAMUkxuY4T0qEjwC2AMP+wog8uswvq7rjio83nn53zv2TIZMw7eckzsbnjX1qiZWNPzLu7sTjKMJoYtmA/1xJSqRrgwUfda6PTybggIUASISGKNYPewFuN3+K/W/+b4z4d5i+60Y1HF/1A6Xt2Qf177ueB4B4AqfGQlmCZep08zDO9XLzBxeeO43//Jd2AvT/c/zoeAZaJx0pM2nCC3Wdj8XB2YObzDXBzko9+ITLJb4MQxVyb4DZU8q7Embgz2c4HuAUwuvFobabOn99xny4owJQBCZezn3N0yzuJufufq0/2pMfZCwz3+UgzGeHkb+ZWqVyTNJ256y64ab5/VGu3/ugVvtn2DwCf9qhDJT8PjSMSwrpIIiREMXc89jhn4s6gR8+nj3+KURnxc/MjzD9Muynz+e1aavUu1HrGnMw4e4FDIc9g0hvM45OW9CNrunyWf7uK2k80l7MB567f5vUlBwEY9FgIHWsHaRyRENZHEiEhirn5x+YD0K5CO54MeVLjaP6V366l8k3At1LhxnK30KfN45NyHcQ90bKDuDWUnGbklXn7SEjNoGFwCd7qUF3rkISwSpIICVGMxabEsvaftQD0rdFX42juENzUPF4nz0HMGndBhT4N1TtlX1k6uKnNtAQppXjvlyMcv5JAKQ8nvuoThqNBVksRIjeSCAlRjC09sZQ0Uxq1fGtR16+u1uH8z4m1906CQPsuKL3B5qbIZ1q85yI/77uEXgdTe9cn0NtF65CEsFryJ0IeZGVpYe3SjeksPrEYgL6hfa1nOnTsP7ByqPm4agdzy8+dvEpnnzovLOrI5TjGrDoKwOtPVqNppVIaRySEdZMWoTyEh4cTHh5OfHw83t62ufGiKN42nN/AteRr+Ln68WSwlYwNSk+BJf3NU+LLPQK95oJOb7NdUNYmLimdV+btIy3DRJsa/rzyeBGPvxKiGJJESIhiKnOQ9LPVnsXR4KhxNP9a9xZcOQRuvtBjFmTGZaNdUNbEZFKMWnKASzeTKVfSlc97ymaqQuSHdI0JUQwdvHaQw9cP46h3pGfVnlqHY3ZoCeybBeig+3fgXUbriOzKzG1n2Hw8BicHPTP7NsDbzUqSYyGsnCRCQhRD8yPNrUEdQzri6+qrcTRAzHFYPcJ8/PgbULm1tvHYmb9OX+fzDScAeL9LTWqVke58IfJLEiEhipmrt6+y8fxGAJ4PfV7jaIC02+YFCtOTIKQFtHxL64jsypW4FIYv3I9JwbMNy9KrkWymKkRBSCIkRDGz+MRiMlQGDQIaUL2kxovkKQVr/gvXT4BHIDzzvQyELkJpGSaGzt/HjdtphAZ5MaFLLa1DEqLYkURIiGIkJSOFpSeXAvB8DStoDdo3Gw4tBp0BevwIHv5aR2RXPv7tGBEXbuHp4sDM58NwcZQkVIiCkkRIiGLk139+5VbqLUq7l6ZVuVbaBhN1AH4bbT5u/R5UaKZpOPZmzaEoZv11DoAvnq1HsK+7tgEJUUxJIiREMaGUYt6xeQD0rt5buw1VAVLiYGl/MKZC1fbQdIR2sdih0zGJjP75EACvtKhE29B87u0mhMhBEiEhiondV3Zz+tZpXB1c6Valm3aBKGVeOfrmOfAuD11ngl4+SorK7dQMhszbx+00I49WLMnr7apqHZIQxZp8euVBttgQ1iazNejpSk/j7azh9OhdM+D4GtA7wrOzwa2kdrHYGaUUby8/zKmYRPw9nZnWOwwH2UxViIciv0F5CA8PJzIykj179mgdihBcjL/ItovbAOhTo492gVz4GzaOMR8/+RGUaaBdLHZo7q7zrDoYhUGvY3rfMPw8nbUOSYhiTxIhIYqBBccXoFA0K9OMit4VtQni9g34eSCYMqBmN2g8WJs47NT+Czd5f00kAG93qE6jCtISJ4QlSCIkhJW7nX6bladXAhpOmTeZYPlgiL8MvpXh6WlgLbvd24HY22mEz48g3ajoUCuQQY+FaB2SEDZDEiEhrNzK0ytJTE+kglcFmpZuqk0Q2z+HM5vBwQWenQPOntrEYYeMJsWIRfuJikshpJQ7n/aog06SUCEsRhIhIayYSZlYeHwhAH1r9EWv0+BX9p9tsPUj83GnzyGgZtHHYMembD7F9lPXcXHUM/P5MDxdZDNVISxJEiEhrNifl//kfPx5PB09ebrS00UfQMIVWDYIlAnqPQ/1rWA1azuy9UQM07acAuDj7rWpHuilcURC2B4HrQMQQuRtXqR5ynz3Kt1xc3Qr2sqNGfDzi3D7GvjXhI6TirZ+O2Q0KXafjSUmIQWdDt5beQSloO8j5elWv6zW4QlhkyQREsJKnbl1hp3RO9Hr9PSu0bvoA/j9Azj/Fzh5mMcFORVxImZn1h2JZvzqSKLjUrKdD/Z1Y8xToRpFJYTtk64xIazU/GPzAWhVrhVlPMoUbeUn1sGfX5qPn54GpSoXbf12Zt2RaIbMi8iRBAGcv5HE78djNIhKCPsgiZAQViguNY7VZ1YD5kHSRerWBVjxsvm48X+gVveird/OGE2K8asjUXncrwPGr47EaMqrhBDiYUgiJIQVWnZqGSnGFKqVqEbDgIZFV3FGGiwdACm3oHQYtPug6Oq2U7vPxubaEpRJAdFxKew+G1t0QQlhRyQREsLKZJgysk2ZL9I1Yzb8H1zeBy4+8OxP4CBbOBS2mIS8k6AHKSeEKBhJhPIgm64KrWy5sIUrt69Q0qUkHSt2LLqKj66A3d+Yj7t9Az7li65uO3b2+u18lfP3dCnkSISwT5II5UE2XRVayRwk3aNqD5wNRdQic/00/PKq+bjZSKjWvmjqtWMp6Ub+b+VhJm86dc9yOiDI24XGIbK3mBCFQRIhIazI0RtHiYiJwEHnQK9qvYqm0vRkWNof0hIguBk88V7R1GvHzlxLpNuMHczbdQGAJ2sGoMOc9Nwp8/bYp0Ix6GVbDSEKg6wjJIQVmR9pbg1qV6Ed/m7+RVPp2tfh6hFw94MeP4JBPhYK0/KIS/zfyiMkpRnxdXfii171aFHVL9d1hAK9XRj7VCjtawVpGLEQtk0+8YSwEteTr/Pbud+AItxlfv982D8P0MEzP4BnYNHUa4eS0jIY88tRft53CYAmFX2Z/Fw9ArzMY3/a1wqibWhg1srS/p7m7jBpCRKicEkiJISVWHJiCRmmDOr41aG2X+3Cr/DqUfj1NfNxq3egYovCr9NOHb+SwMglhzhz7TZ6HYxoXZVhT1TOkeQY9DqaVPLVKEoh7JMkQkJYgTRjGotPLAaKqDUoNQGW9IeMZKjUGpq/Xvh12iGlFDuu6njzm79JzTAR4OXMlOfq82hFSXaEsBaSCAlhBdadW0dsSiz+bv60CW5TuJUpBauGw41T4FUGun8Hepk3YWnxKem89fMh1v5jAEy0rObH5z3r4ushazMJYU0kERJCY0qprF3me1fvjaPesXAr3PM9HF0OegfoMQvcpXXC0g5dusWwBfu5EJuEXqd4o101Xm5RGb2M9xHC6kgiJITG9sfs51jsMZwNzvSo0qNwK7u8D9a9bT5uMx7KP1K49dkZpRQ//nWOib8dI92oKOPjwrNlE3npsQqSBAlhpaQ9XAiNzTtmbg3qXLEzPi4+hVdR8k3zPmKmdKjeGZqEF15ddujm7TQGz9nH+2siSTcq2tcM5JehTajgqXVkQoh7kRYhITQUnRjNlgtbAOhTo0/hVWQywYoh5p3lS1SALtOhKPcws3F7zsUyfOF+ouNScDLoea9zDZ5/NJiMjAytQxNC3IckQkJoaOGJhRiVkUcCH6FqiaqFV9GOqXDyNzA4Q8+fwNWn8OqyIyaTYua2M3yx8SRGkyKklDvTetenVhlvrUMTQuSTJEJCaCQpPYllJ5cB5l3mC835HbB5gvm4w0QoXa/w6rIj1xJSGbXkANtPXQega73SfNCtNh7O8rEqRHEiv7FCaGTNP2uIT4unrEdZHi/7eOFUkngNfn4RlBFqPwsNBhZOPXbmz1PXGbn4ANcTU3Fx1DOhSy16NiiLTrobhSh2JBESQgNKKRYcWwCYxwYZ9AbLV2IywrJBkBANpapB5y9lXNBDyjCamLL5FF/9fhqloFqAJ1/1qU+VABkRLURxJYmQEBrYGb2TM3FncHNwo2vlrpa5qMlo7gZLvAoeAXB2m/mfoxs8OwecPSxTj52KjktmxMID7D4XC0DvxuUY07kmrk6FkMQKIYqMJEJ5mD59OtOnT8doNGodirBB84+Zd5nvWrkrnk4WaE2IXAXrRkN8VM77Ok8G/+oPX4cd23L8Kq8tOcjNpHQ8nB34qHttnq5bWuuwhBAWIIlQHsLDwwkPDyc+Ph5vb5kBIiznQvwF/rj0Bzp0lpkyH7kKlvQDVO73O7o+fB12Ki3DxKfrjvP9n2cBqFXGi696h1GhlLvGkQkhLEUSISGK2KKTiwBoXrY5wV7BD3cxk9HcEpRXEoQO1r0F1TtBYYxDsmEXbiTx6sIIDl6KA2Bgswq81aE6zg7yPAphSyQREqIIpagUVv2zCrDQlPnzO3LvDsuiIP6yuVxI84evz06sPRzN6J8PkZCagberI5/2qMOTNQO1DksIUQgkERKiCO1L3UdSRhKVvCvRJKjJw18w8aply9kRo0mx+2wsMQkp+Hu60DikJOlGEx/8Gsm8XRcAaBBcgqm961PGR7oXhbBVkggJUUSMJiO70nYB5inzFllzxiPAsuXsxLoj0YxfHUl0XErWuVIeTjg76Ll8y3xuSMtKjGpbFUeDbMkohC2TREiIIrI9ajs3TTfxcvLiqUpPWeaiwU3Bq/Q9usd05vuDm1qmPhuw7kg0Q+ZF5BhVdT0xDQAPZwem9w2jRVW/og9OCFHk5E8dIYrIghPmBRS7VeqGq4OFulr0BmgzIY87/21xaj9RBkr/y2hSjF8dmefQcgB3ZwOPVS5VZDEJIbQliZAQReBE7An2Xt2LHj3PVn3WshePOWr+v+6uZMertHkhxdCnLVtfMbb7bGy27rDcXI1PZffZ2CKKSAihNekaE6IILDhubg0KdQwlyD3Iche+dhJ2fGU+7jkHXL3/t7J0cFNpCbpLTMK9k6CClhNCFH+SCAlRyG6m3OTXf34FoImzBWaKZVIKfnsDTOlQ5Umo0Un2ErsPf08Xi5YTQhR/0jUmRCH7+eTPpBpTqVGyBuUN5S134ciV8M9WMDhDh4mSBOVD45CS+Hk453m/DgjyNk+lF0LYB0mEhChE6aZ0Fp0wryTdu1pvy0yZB0hNhHXvmI8f+y+UrGiZ69o4HVDC3THP+wDGPhWKQS9JpRD2QhIhIQrRpvObiEmKwdfFl3bl21nuwts+gYQo8AmGx0Za7ro2bv7uC5y8moijQZejZSjQ24WZz4fRvpYFx3AJIayejBESohDNOzYPgF7VeuFkcLLMRWOOw64Z5uMOn8qmqvl0MTaJj9ceA+CdjjXo16RCjpWlpSVICPsjiZAQheTwtcMcunYIR70jPav1tMxFlYK1r4MpA6p2gGrtLXNdG6eUYvSyQySlGWlcoST9m1RAr9fRpJKv1qEJITQmXWNCFJLM1qAOIR0o5WqhBfqOLINz28HBxTxAWuTL/L8vsOPMDVwc9Xzaow56afkRQvxLEiEhCkFMUgwbzm0ALLTLPEBqAqx/13zc/DUoUcEy17Vxd3aJvflkdSqUctc4IiGENZFESIhCsPjEYjJUBmH+YYT6hlrmolsnQuIVKBECTYdb5po2TinFW8sPcTvNSKMKJRjQtILWIQkhrIwkQkJYWKoxlZ9P/gxYsDXoaiTsmmk+7jgJHGXBv/xYuPsif52+gbODnk971JUuMSFEDpIICWFha/9ZS2xKLEHuQTxR/omHv6BSsPYNUEao3hmqtH34a9qBSzeT+PDXSADeeLIaIdIlJoTIhSRCQliQUiprkPRz1Z/DQW+BiZmHf4bzf4KDKzz50cNfzw4opXh7+WFupxlpEFyCgc1CtA5JCGGlJBESwoL2Xt3LyZsncTG48EyVZx7+ginxsOHfAdKPvwYlgh/+mnZg8Z6LbD91/d8usTqyPpAQIk+SCAlhQfMiza1BT1V6Cm9n74e/4NaJ5t3kS1aUAdL5dPlWMh/8ap4l9nq7alTy89A4IiGENZNESAgLuZRwid8v/g5YaJD01aPw99fm446TwCHvzUKFWWaXWGJqBmHlfXjxMekSE0LcmyRCeZg+fTqhoaE0atRI61BEMbHw+EIUiiZBTajkU+nhLqYU/PqaeYB0jaehchvLBGnjlu69xB8nr+HkoGdSz7rSJSaEuC9JhPIQHh5OZGQke/bs0ToUUQwkpSex4tQKAJ4Pff7hL3hoMVzYCY5uMkA6n6JuJfP+GvMssdfbVZUuMSFEvkgiJIQF/HLmFxLSEwj2CuaxMo893MWSb8GG/zMfP/4G+JR76PhsXWaXWEJqBvXL+zDosYpahySEKCYkERLiIZmUiQXHFgDQp3of9LqH/LXa+jHcvga+VaDJMAtEaPuW7rvEtswuMZklJoQoAEmEhHhIf13+i3Px5/Bw9KBL5S4Pd7Erh2H3t+bjjp+Cg9PDB2jjouP+1yU2qm1VKvt7ahyREKI4kURIiIc0/9h8ALpV6Ya740OsXmwywa+vgzJBaFeoZIFVqW2cUop3lh8mISWDuuV8eElmiQkhCsgCy94KYX+MJiMRMREcvXGUv6L+AqB39d4Pd9FDi+DiLnB0lwHS+bQs4jK/n7iGk0HPZz3q4GCQv+2EEAUjiZAQBbTp/CYm7p7I1aSrWeecDc6ciD1BOc8HHNicfAs2vGc+bvEmeJd5+EBt3JW4FMavPgrAyLZVqBIgXWJCiIKTP5+EKIBN5zcxauuobEkQmHecH7V1FJvOb3qwC//+ISRdh1LV4NGhFojUtimleGfFv11iZb35T3OZJSaEeDCSCAmRT0aTkYm7J6JQeZb5ZPcnGE3Ggl04+iDs+d583HGSDJDOhxX7L7PleAxOBvPCidIlJoR4UPLpIUQ+RcRE5GgJupNCcSXpChExEfm/qMn07wrSJqj1DFRsYYFIbVtMfArjVpm7xEa0qUJV6RITQjwESYSEyKdrSdcsWg6AA/Ph0h5w8oB2HzxgZPYjs0ssPiWD2mW8eflx6RITQjwcSYSEyCc/Nz+LliMpFjaNNR+3fAu8Sj9gZPZj5YHLbDoWg6NBx2fSJSaEsACZNSZEPpiUid1Xdt+zjA4dAW4BhPmH5e+iWz6ApBvgVx0eecUCUdo2c5eYeeHEEa2rUC1QusSEEA9PEiEh7iMxLZF3/nyH3y/+nnVOhy7boGkd5i0dRjcejUFvuP9Fo/bD3h/Nxx0/A4OjRWO2NeYusSPEJadTq4wXL7eopHVIQggbIYmQEPfwT9w/jNgygnPx53DSO/F/j/4fnk6eOdYRCnALYHTj0bQJbnP/i6p/B0ijoHZPCGleeD+AjVh1MIpNx67iaNAxqUddHKVLTAhhIZIICZGHLRe28M6f73A7/TYBbgFMbjWZWqVqAdCqXCsiYiK4lnQNPzc/wvzD8tcSBOgOzIfL+8DJE9q+X5g/gk2ISUhh7L+zxF59ogo1grw0jkgIYUskERLiLiZlYubBmXx98GsAGgQ04PMWn+Pr6ptVxqA30CiwUYGv7ZiRgOH3f5OfVm+DV5BFYrZVSin+b8URbiWlU7O0F0NaSpeYEMKyJBES4g4JaQm8vf1ttl3aBkDfGn15reFrOOotM4anRtTP6JJjwb8mNH7ZIte0ZasPRbMh8ioOevMsMekSE0JYmiRCQvzrzK0zjPx9ZNZ4oLFNx/J0pactdn1dVAQVbmw13+j0GRjk1+9eriWkMvaXI4B0iQkhCo98EgsBbD6/mXf+fIekjCQC3QOZ3GoyNX1rWq4CkxH9ujfRoTDVfhZ9cFPLXdsGKaV4b+URbialExrkxdBW0iUmhCgckggJu2Y0GZlxcAbfHvoWgEaBjfisxWeUdClp2YoifkIffYB0vSs8MVZWMr2PNYeiWXf0Cg56HZN61pEuMSFEoZFESNit+LR43vrjLbZf3g7AC6EvMKrBKBz0Fv61uH0DNo0H4HjQM1T3CLDs9W3M9cRUxvzbJRbeqjI1S3trHJEQwpZJIiTs0qmbpxj5+0guJFzA2eDMuKbj6Fyxc+FUtnkcpNxC+dfkrF9rqhdOLTZjzC/mLrHqgZ6Et6qsdThCCBsn7c3C7mw4t4G+a/tyIeECpd1LM7fD3MJLgi7ugYg5ABjbf4LS5W+tIXv166Fo1h6+guHfWWJODvIRJYQoXPIpI+yG0WRk8r7JvLbtNZIzknkk6BEWdV5EDd8ahVOhyQhrXzMf1+2DKvdo4dRjI24kpvJeZpdYy0rUKiNdYkKIwiddY8IuxKXGMfqP0fwV9RcAA2oOYETYCMuPB7rTvlkQfRCcvaHt+MKrx0aMWXWU2NtpVA/0ZNgTVbQORwhhJyQREjbv5M2TjNgygkuJl3AxuDCh2QQ6hHQo3EpvX4fNE8zHrd8DD39ITy/cOouxtYej+fVQtHSJCSGKnCRCwqatO7eOMX+NITkjmTIeZZjSagrVSlYr/Io3jYWUOAisAw1fLPz6irHY22m8t9LcJTZUusSEEEVMEiFhk4wmI1P2T2HWkVkANAlqwqePf4qPi0/hV35xN+yfZz7u9DnkczNWezV21VFu3E6jWoAnw56QWWJCiKIliZCwObdSbvHmH2+yM3onAC/WepHh9Yfne3f4h2Iywq+jzMf1n4dyjQu/zmJs3ZFoVh+MwvDvwonODpI0CiGKliRCwqaciD3BiN9HcDnxMq4OrkxoNoH2FdoXXQB7f4Qrh8HFG9rIAOl7ib2dxv/92yX2SouK1Cnro21AQgi7JImQsBlr/1nL2B1jSTGmUNajLFOemELVElWLLoDEGNj8vvm49RhwL1V0dRdD41Yd5XpiGlX8PRjeWmaJCSG0IYmQKPYyTBlM3jeZnyJ/AqBZ6WZ88vgneDsX8aDbjWMhNQ6C6kKDgUVbdzGz7sgVVh2MQq+Dz3rWlS4xIYRmJBESxdrNlJu8se0N/r7yNwAv1X6JYfWGFc14oDud3wkHF5iPO30hA6Tv4eYdXWIvt6hE3XI+2gYkhLBrkgiJYivyRiT//f2/RN2OwtXBlQ+afUC7Cu2KPhBjBqx93Xwc1g/KNiz6GIqR8auPcj0xlSr+HoyQLjEhhMZsPhFKSEjgiSeeID09HaPRyPDhwxk8eLCmMaWlpbJi60wioyJI+f0s3VoOwcnJWdOYMuNaue0bYuIv4O9Vnq4tXtY8rrxiWn1mNeN3jifVmEp5z/JMaTWFyiWKbuq1MSOD43+vJ/nmZcrEHybo/9u796go7rsN4M+wwALqgkjlIqBWDYoIlEUTsKaiBowpkaCJmsSYxrwGxHiM7SF6rFF7Yo19jzZvj5eq0Rit5iXmeHmTUJGTErFiQtBAohh6VAxeuARElku57f7ePwxb111gBXZndZ7POXtgZn4z8yxfdL/MzM5WngfcBwJT19otg1kmg0B+6S1U1Tdj8AA3TBjuDZWTJFseS7nKappwtPDOKbH/fjYCbi48ckZE8nroGyEPDw+cPHkSHh4eaGpqQlhYGJKTkzFo0CBZ8uw8tgofVh9FtbMT4AEcLv8Gf92/C/N8krBo5npZMpnlAoAGYPv+HbLm6ixToMdIFLZeAQBMGjIJ7zz+DjSuGrvl+ibrAwScWYexqDGZX+YXj+B+8vxeHT9fjnWfFKO8rtk4z9/TDWsSQzE9zF+WTJ3lAoBpY3wRyVNiROQAHvr72KtUKnh4eAAAmpubodfrIYSQJcvOY6uwpfYYqlWmf6XXqCRsqT2GncdWMVc3mapVkrEJei38NWyZusXuTVBE3lL8TJg2QUIAgVcy8E3WB3bL0uH4+XKk/u2cWbNRUdeM1L+dw/Hz5XbP1FUuAMgurpQtFxHR3WRvhHJzc5GYmIiAgABIkoSjR4+ajdm2bRuGDx8ONzc3aLVanDp16r72cfv2bURERCAwMBDp6enw8bH/25pbW1vwYfVRCACQTF/cxU/T/1t9FK2tLYrP1VUmSBIgBDR6gUVj/wtOkv1+hfXt7Qg4c+feQPeeceqI6X9mHfTt7fbLZBBY90kxLLX2HfPWfVIMvaHvmn8hBNr1BrS06/HvVj0aWtpR9+821Da2orqhBVW6ZlyvbcLqYxcs5urQ17mIiHpC9lNjjY2NiIiIwG9+8xvMmjXLbHlGRgaWLVuGbdu2YeLEidixYweefPJJFBcXIzg4GACg1WrR0mL+Qn3ixAkEBATAy8sLRUVFqKysRHJyMmbPng1fX1+LeVpaWky2pdPpAACv7pkEF/eeX8/QKLWhWt35i7aQJPzoLOG5vdHoJ1x6vJ+HIVd3mSBJ0KmAT96NwSi9l10yAYC6XYcQ1ACdXHbjJAF+qMHK/9mB655as+VCCFRXO+FQVQGkexu8Hrrd1GbxiItxnwDK65oRv/kkPNQq6A0CBoOAXgjoDYBBiDvzjF9hMq0XHeNhXK8vDqh25DpzqQqPDvfu/QYdVNtPH7Tbxg/cVQzW3HFYWwNJyHWeyAJJknDkyBEkJSUZ5z366KOIiorC9u3bjfPGjBmDpKQkbNiw4b73kZqaiilTpuDZZ5+1uHzt2rVYt878jsBjto+BqheNEPW9jVXVmNHYJHcMM0tbl+D/DLFyx5CN9NNxINFZx3iXl0bpofVxmP+CiOgh0tTUhOeffx51dXXQaDq/hEL2I0JdaW1txdmzZ7FixQqT+fHx8cjLy7NqG5WVlXB3d4dGo4FOp0Nubi5SU1M7Hb9y5UosX77cOK3T6RAUFISX1I/Dzc21Z08EwI36Szjucq3bcdPbgjBkgP3e/eSIuazNVOk1FV+NfMwOie7QV32P2PL93Y57LHw0Jo0IM19fr8f58+cRFhYGlapvmurLPzbgr7lXux33xtQRGOOvgcpJgpMkQeWEn75KUEkSnIxfYTKtcjKf959l/9nGf77e+YPmq9JbeHFPQbe54ic9+tAfEcrOzsYTTzwBFxf7Hekl+bDmjqPjjE53HLoRqq6uhl6vNzuN5evri4qKCqu2cf36dSxcuBBCCAghsGTJEoSHh3c6Xq1WQ602f8v44ll/6rKj7E5rawsK9kehRiUZr725myQEfPQC6186Yte3rDtiLmszvbBgt11/Vvr2dlS+nYmfiRqza4QAwCCAKmkQ5syeB5Wz+T+ttrY2uFd+hxnaoD77D1JvEDhWVIGKumaL1+NIAPw83bBkaohd30ofM3Iw/D3dus0VM3KwQ7zF39ZcXFz4oqgwrLn8rP35y36xtDXuvZ5CCGH1NRZarRaFhYUoKirCt99+2+XRIFtydVVjnk8SgDsv5HfrmJ7rk2T3+/Y4Yi5HzAQAKmdn3IxZA+BO03O3junymDUWmyCbZXKSsCYxFID5pUsd02sSQ+3ebDhqLiKiezl0I+Tj4wOVSmV29KeqqqrTi50d2aKZ67Fk4EwM0pu+ivroBZYMnCnb/XocMZcjZgKAXyQsQFHsX/CjZHq/oCppEIpi/4JfJCywe6bpYf7Y/mIU/DzdTOb7ebph+4tRst1HyFFzERHdzaFPjbm6ukKr1SI7OxvPPPOMcX52djZmzpwpY7KeWzRzPV5ufevOnaUvn0PoiCiHuLN0Ry5HurO0I2YC7jRD+qkv4MJPd5Z2HzgEox9NgJ8djwTda3qYP54I9XO4O0s7ai4iog6yN0INDQ24dOmScbq0tBSFhYXw9vZGcHAwli9fjvnz5yM6OhoxMTHYuXMnysrKkJKSImPq3nF1VSM5Lg1u/87EjLgZDnMe2dVVjeeeWCp3DBOOmAm4c5ps7MSn5I5hQuUkIWaEPHe27oqj5iIiAhygESooKEBcXJxxuuMdWwsWLMDevXsxZ84c1NTU4A9/+APKy8sRFhaGzMxMDB061Ka5tm7diq1bt0Kv19t0P0RERCQf2RuhyZMnd/uRF4sXL8bixYvtlOiOtLQ0pKWlQafTwdPT0677JiIiIvtw6IuliYiIiGyJjRAREREpFhshIiIiUiw2QkRERKRYbISIiIhIsdgIdWLr1q0IDQ3F+PHj5Y5CRERENsJGqBNpaWkoLi7G119/LXcUIiIishHZ7yPk6DrucaTT6fp0u21tbWhqaoJOp3OYO0uTbbHmysOaKw9r7jg6Xre7u1chG6Fu1NfXAwCCgoJkTkJERET3q76+vssbI0uiu1ZJ4QwGA27evIkBAwZAkiSMHz++09NlnS2zNF+n0yEoKAjXrl2DRqOxSfae6uo5yrXd+13X2vHWjGPN5dmuXDXv6fIHqeaOWO+erM+aW0+JNc/Pz0d9fT0CAgLg5NT5lUA8ItQNJycnBAYGGqdVKlWnv9ydLetqHY1G41D/WICu88q13ftd19rx1oxjzeXZrlw17+nyB6nmjljvnqzPmltPiTX39PS06iOyeLH0fUpLS7vvZV2t44hslbc3273fda0db8041lye7cpV854uf5Bq7oj17sn6rLn1WPPO8dSYTDo+zLWurs6h/mog22HNlYc1Vx7W/MHDI0IyUavVWLNmDdRqtdxRyE5Yc+VhzZWHNX/w8IgQERERKRaPCBEREZFisREiIiIixWIjRERERIrFRoiIiIgUi40QERERKRYbIQf16aefIiQkBKNGjcJ7770ndxyysWeeeQYDBw7E7Nmz5Y5CdnDt2jVMnjwZoaGhCA8Px6FDh+SORDZWX1+P8ePHIzIyEuPGjcOuXbvkjkQ/4dvnHVB7eztCQ0ORk5MDjUaDqKgofPXVV/D29pY7GtlITk4OGhoa8MEHH+Djjz+WOw7ZWHl5OSorKxEZGYmqqipERUWhpKQE/fr1kzsa2Yher0dLSws8PDzQ1NSEsLAwfP311xg0aJDc0RSPR4QcUH5+PsaOHYshQ4ZgwIABmDFjBrKysuSORTYUFxeHAQMGyB2D7MTf3x+RkZEAgMGDB8Pb2xu3bt2SNxTZlEqlgoeHBwCgubkZer0ePA7hGNgI2UBubi4SExMREBAASZJw9OhRszHbtm3D8OHD4ebmBq1Wi1OnThmX3bx5E0OGDDFOBwYG4saNG/aITj3Q23rTg6cva15QUACDwYCgoCAbp6be6Iua3759GxEREQgMDER6ejp8fHzslJ66wkbIBhobGxEREYEtW7ZYXJ6RkYFly5Zh1apV+OabbzBp0iQ8+eSTKCsrAwCLfyVIkmTTzNRzva03PXj6quY1NTV46aWXsHPnTnvEpl7oi5p7eXmhqKgIpaWlOHjwICorK+0Vn7oiyKYAiCNHjpjMmzBhgkhJSTGZN3r0aLFixQohhBCnT58WSUlJxmVLly4VBw4csHlW6r2e1LtDTk6OmDVrlq0jUh/rac2bm5vFpEmTxL59++wRk/pQb/6dd0hJSREfffSRrSLSfeARITtrbW3F2bNnER8fbzI/Pj4eeXl5AIAJEybg/PnzuHHjBurr65GZmYmEhAQ54lIvWVNverhYU3MhBF5++WVMmTIF8+fPlyMm9SFral5ZWQmdTgfgzifU5+bmIiQkxO5ZyZyz3AGUprq6Gnq9Hr6+vibzfX19UVFRAQBwdnbGpk2bEBcXB4PBgPT0dL6z4AFlTb0BICEhAefOnUNjYyMCAwNx5MgRjB8/3t5xqQ9YU/PTp08jIyMD4eHhxmtN9u/fj3Hjxtk7LvUBa2p+/fp1LFy4EEIICCGwZMkShIeHyxGX7sFGSCb3XvMjhDCZ9/TTT+Ppp5+2dyyyke7qzXcFPny6qvkvf/lLGAwGOWKRDXVVc61Wi8LCQhlSUXd4aszOfHx8oFKpTI4GAEBVVZXZXxP04GO9lYc1Vx7W/MHGRsjOXF1dodVqkZ2dbTI/OzsbsbGxMqUiW2G9lYc1Vx7W/MHGU2M20NDQgEuXLhmnS0tLUVhYCG9vbwQHB2P58uWYP38+oqOjERMTg507d6KsrAwpKSkypqaeYr2VhzVXHtb8ISbjO9YeWjk5OQKA2WPBggXGMVu3bhVDhw4Vrq6uIioqSpw8eVK+wNQrrLfysObKw5o/vPhZY0RERKRYvEaIiIiIFIuNEBERESkWGyEiIiJSLDZCREREpFhshIiIiEix2AgRERGRYrERIiIiIsViI0RERESKxUaIiIiIFIuNEBE9cK5evQpJklBYWNjpmL1798LLy8tume71xRdfQJIk3L59W7YMRNQ9NkJEZHN5eXlQqVSYPn263fY5Z84c/Otf/7Lb/u4VGxuL8vJyeHp6ypaBiLrHRoiIbG7Pnj14/fXX8c9//hNlZWVdjhVCoL29vdf7dHd3x+DBg3u9nZ5ydXWFn58fJEmSLQMRdY+NEBHZVGNjIz766COkpqbi17/+Nfbu3WuyvOMUUlZWFqKjo6FWq3Hq1CkYDAZs3LgRI0eOhFqtRnBwMNavX2+y7pUrVxAXFwcPDw9ERETgzJkzxmV3nxorKSmBJEn4/vvvTdbfvHkzhg0bho7Pni4uLsaMGTPQv39/+Pr6Yv78+aiuru70uf3www9ITEzEwIED0a9fP4wdOxaZmZkmz6vj1NjkyZMhSZLZ4+rVqwCAuro6LFq0CIMHD4ZGo8GUKVNQVFR0vz9uIrpPbISIyKYyMjIQEhKCkJAQvPjii3j//feNjcfd0tPTsWHDBly8eBHh4eFYuXIlNm7ciNWrV6O4uBgHDx6Er6+vyTqrVq3C7373OxQWFuKRRx7BvHnzLB5NCgkJgVarxYEDB0zmHzx4EM8//zwkSUJ5eTl+9atfITIyEgUFBTh+/DgqKyvx3HPPdfrc0tLS0NLSgtzcXHz33XfYuHEj+vfvb3Hs4cOHUV5ebnwkJycjJCQEvr6+EELgqaeeQkVFBTIzM3H27FlERUVh6tSpuHXrljU/ZiLqKUFEZEOxsbHi3XffFUII0dbWJnx8fER2drZxeU5OjgAgjh49apyn0+mEWq0Wu3btsrjN0tJSAUC89957xnkXLlwQAMTFixeFEEK8//77wtPT07h88+bN4uc//7lxuqSkRAAQFy5cEEIIsXr1ahEfH2+yn2vXrgkAoqSkxGKOcePGibVr11pc1vG8amtrzZZt3rxZeHl5Gbf7+eefC41GI5qbm03GjRgxQuzYscPi9omob/CIEBHZTElJCfLz8zF37lwAgLOzM+bMmYM9e/aYjY2OjjZ+f/HiRbS0tGDq1Kldbj88PNz4vb+/PwCgqqrK4ti5c+fihx9+wJdffgkAOHDgACIjIxEaGgoAOHv2LHJyctC/f3/jY/To0QCAy5cvW9zm0qVL8fbbb2PixIlYs2YNvv322y7zAsDf//53rFixAhkZGXjkkUeM+25oaMCgQYNM9l9aWtrpvomobzjLHYCIHl67d+9Ge3s7hgwZYpwnhICLiwtqa2sxcOBA4/x+/foZv3d3d7dq+y4uLsbvOy5KNhgMFsf6+/sjLi4OBw8exGOPPYYPP/wQr732mnG5wWBAYmIiNm7caHFdS1599VUkJCTgs88+w4kTJ7BhwwZs2rQJr7/+usXxxcXFmDt3Lt555x3Ex8eb7Nvf3x9ffPGF2Tpy3gKASAl4RIiIbKK9vR379u3Dpk2bUFhYaHwUFRVh6NChZtfr3G3UqFFwd3fH559/3qeZXnjhBWRkZODMmTO4fPmy8UgVAERFReHChQsYNmwYRo4cafK4u0m7V1BQEFJSUnD48GH89re/xa5duyyOq6mpQWJiIpKTk/HGG2+YLIuKikJFRQWcnZ3N9u3j49M3T56ILGIjREQ28emnn6K2thYLFy5EWFiYyWP27NnYvXt3p+u6ubnhzTffRHp6Ovbt24fLly/jyy+/7HIdayQnJ0On0yE1NRVxcXEmR6rS0tJw69YtzJs3D/n5+bhy5QpOnDiBV155BXq93uL2li1bhqysLJSWluLcuXP4xz/+gTFjxnS6b3d3d6xduxYVFRXGh16vx7Rp0xATE4OkpCRkZWXh6tWryMvLw+9//3sUFBT06jkTUdd4aoyIbGL37t2YNm2axRsKzpo1C3/84x9x7ty5TtdfvXo1nJ2d8dZbb+HmzZvw9/dHSkpKrzJpNBokJibi0KFDZtcpBQQE4PTp03jzzTeRkJCAlpYWDB06FNOnT4eTk+W/GfV6PdLS0nD9+nVoNBpMnz4df/7zny2Ozc3NBQAMGzbMZH5paSmGDRuGzMxMrFq1Cq+88gp+/PFH+Pn54fHHHzd7pxwR9S1JCAvvYyUiIiJSAJ4aIyIiIsViI0RERESKxUaIiIiIFIuNEBERESkWGyEiIiJSLDZCREREpFhshIiIiEix2AgRERGRYrERIiIiIsViI0RERESKxUaIiIiIFOv/AZWclf/B0bQ5AAAAAElFTkSuQmCC" }, "metadata": {}, "output_type": "display_data" } ], + "execution_count": 42 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 13.2. Adding a solution to an existing archive" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-04-16T08:39:14.001884Z", + "start_time": "2025-04-16T08:26:25.974019Z" + } + }, "source": [ "n_repeats = 10\n", "time_limit = 10\n", @@ -862,7 +896,32 @@ "plt.grid(True)\n", "plt.legend()\n", "plt.show()" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing 2 objectives\n", + "......................\n", + "Testing 3 objectives\n", + "................\n", + "Testing 4 objectives\n", + "...........\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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5ZVXXsHW1jarjZeXF02aNOHDDz/MsY/M4lSIvEghJEQu9Ho9CxYsoFatWnz//ffZ9q9fv57PPvuM3377jV69etGxY0fWrl1LbGxs1lEXvV7PsmXLTF6XeZXQ4sWLadGiRdb25cuXF+mVLu3bt2f58uX89ttvWacKAJYuXWrW63U6XdZf75mOHTvG/v37s50Wys3Jkyc5evSoyemxJUuW4ObmlrU2UufOnfnoo48IDw83WS9p4cKF6HQ6OnbsaNZ75cfR0bFAR4hya9+5c2dWr17NtWvXTH7RLly4EBcXFx599NEizfGg7t27Y2dnx/nz5xk4cGCBX/+wn9e6detSq1Yt5s6dS2hoaLa+ikqDBg145JFHmDdvXtZl+88995xJm169erFhwwZq1apF+fLlLZJDlH5SCAmRi99++41r164xffr0bJc4AzRq1Iivv/6aH374gV69evF///d/rF27lk6dOvHee+/h4uJCWFgYd+/eNXldgwYNGD58ODNnzsTe3p4uXbpw4sQJPv300yJdL2jkyJF8/vnnDB8+nKlTp1K7dm1+++03Nm3aBICNTd5nxnv16sUHH3zApEmTaN++PadPn+b9998nICDA7ILNz8+PPn36MHnyZCpXrsyPP/7Ili1bmD59Oi4uLgC8+uqrLFy4kCeffJL3338ff39/fv31V2bNmsWYMWOoW7fuww3EPxo3bszSpUtZtmwZNWvWxMnJicaNG+fZfufOnaxbt47KlSvj5uZGvXr1mDRpUtbclPfee48KFSqwePFifv31Vz7++GM8PDzyzZFTv+aqUaMG77//Pu+88w5///03wcHBlC9fntjYWA4ePEi5cuWYMmVKrq8vis9rWFgYvXv35tFHH+XVV1+levXqXLp0iU2bNrF48WKzP5b8PP/887z44otcu3aNtm3bZhun999/ny1bttC2bVvGjx9PvXr1SElJ4cKFC2zYsIFvvvlG1p0S+dN4srYQVqtfv37KwcFBxcXF5dpmyJAhys7OLutKsb1796pHH31UOTo6Kl9fX/XGG2+o7777Ltvl86mpqeq1115T3t7eysnJST366KNq//792a6eye2qsXLlymXLknmVzv0uXbqkBgwYoFxdXZWbm5saOHCg2rBhgwLUL7/8kufHn5qaql5//XVVpUoV5eTkpIKCgtSaNWvUyJEjlb+/f56vVcp4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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 43 } ], "metadata": { diff --git a/moarchiving/__init__.py b/moarchiving/__init__.py index 842ca8d..dd9e396 100644 --- a/moarchiving/__init__.py +++ b/moarchiving/__init__.py @@ -18,7 +18,7 @@ __author__ = "Nikolaus Hansen, Nace Sever, Mila Nedic, Tea Tusar" __license__ = "BSD 3-clause" -__version__ = "1.0.0" +__version__ = "1.1.0" from .get_archive import get_mo_archive diff --git a/moarchiving/constrained_moarchive.py b/moarchiving/constrained_moarchive.py index 3f72d5d..d6d7fa9 100644 --- a/moarchiving/constrained_moarchive.py +++ b/moarchiving/constrained_moarchive.py @@ -5,12 +5,7 @@ from moarchiving.moarchiving import BiobjectiveNondominatedSortedList as MOArchive2obj from moarchiving.moarchiving3obj import MOArchive3obj from moarchiving.moarchiving4obj import MOArchive4obj - -import warnings as _warnings -try: - import fractions -except ImportError: - _warnings.warn('`fractions` module not installed, arbitrary precision hypervolume computation not available') +from moarchiving.moarchiving_utils import true_fraction inf = float('inf') @@ -19,15 +14,15 @@ class CMOArchive: """ Class CMOArchive provides additional functionality for constrained multi-objective optimization to the MOArchive classes, while keeping the same interface. """ try: - hypervolume_final_float_type = fractions.Fraction - hypervolume_computation_float_type = fractions.Fraction + hypervolume_final_float_type = true_fraction + hypervolume_computation_float_type = true_fraction except: hypervolume_final_float_type = float hypervolume_computation_float_type = float def __init__(self, list_of_f_vals=None, list_of_g_vals=None, reference_point=None, - infos=None, n_obj=None, tau=1, hypervolume_final_float_type=None, - hypervolume_computation_float_type=None): + infos=None, ideal_point=None, weights=None, n_obj=None, tau=1, max_g_vals=None, + hypervolume_final_float_type=None, hypervolume_computation_float_type=None): """ Initialize a CMOArchive object. Additionally to the list of objective values `list_of_f_vals`, also list of constraint @@ -35,7 +30,10 @@ def __init__(self, list_of_f_vals=None, list_of_g_vals=None, reference_point=Non The reference point is used for the hypervolume computation and pruning of the archive. The list of additional information `infos` can be used to store additional information for each objective vector. - Tau is a threshold that is used for computing the indicator. + + `ideal_point` and `weights` are used for the normalization of the indicator values, + `max_g_vals` is used for the normalization of the constraint violations. + `tau` is a threshold that is used for calculation of hypervolume_plus_constr indicator. """ hypervolume_final_float_type = CMOArchive.hypervolume_final_float_type \ if hypervolume_final_float_type is None else hypervolume_final_float_type @@ -44,17 +42,17 @@ def __init__(self, list_of_f_vals=None, list_of_g_vals=None, reference_point=Non if n_obj == 2: self.archive = MOArchive2obj( - reference_point=reference_point, + reference_point=reference_point, ideal_point=ideal_point, weights=weights, hypervolume_final_float_type=hypervolume_final_float_type, hypervolume_computation_float_type=hypervolume_computation_float_type) elif n_obj == 3: self.archive = MOArchive3obj( - reference_point=reference_point, + reference_point=reference_point, ideal_point=ideal_point, weights=weights, hypervolume_final_float_type=hypervolume_final_float_type, hypervolume_computation_float_type=hypervolume_computation_float_type) elif n_obj == 4: self.archive = MOArchive4obj( - reference_point=reference_point, + reference_point=reference_point, ideal_point=ideal_point, weights=weights, hypervolume_final_float_type=hypervolume_final_float_type, hypervolume_computation_float_type=hypervolume_computation_float_type) @@ -62,20 +60,29 @@ def __init__(self, list_of_f_vals=None, list_of_g_vals=None, reference_point=Non self.n_obj = n_obj self._hypervolume_plus_constr = -inf + try: + self.max_g_vals = list(max_g_vals) + except TypeError: + self.max_g_vals = None if max_g_vals is None else [max_g_vals] + if list_of_f_vals is not None: self.add_list(list_of_f_vals, list_of_g_vals, infos) def __iter__(self): - """ Return an iterator over the objective vectors in the archive. """ + """return an iterator over the objective vectors in the archive. """ return iter(self.archive) def __len__(self): - """ Return the number of objective vectors in the archive. """ + """return the number of objective vectors in the archive. """ return len(self.archive) def add(self, f_vals, g_vals, info=None): - """ Add the objective vector f_vals with corresponding constraints to the archive - if it is feasible. If no feasible solution was found yet, also update the indicator. + """add the objective vector `f_vals` with constraints `g_vals` to the archive + + objective vector is added if the all the constraints are <= 0. Otherwise, only + hypervolume_plus_constr indicator value is updated. + + Additionally, the information `info` are stored. >>> from moarchiving.get_archive import get_cmo_archive >>> moa = get_cmo_archive(reference_point=[5, 5], tau=10) @@ -90,9 +97,11 @@ def add(self, f_vals, g_vals, info=None): [[2, 2]] """ try: - constraint_violation = sum([max(0, g) for g in g_vals]) + g_vals = list(g_vals) except TypeError: - constraint_violation = max(g_vals, 0) + g_vals = [g_vals] + + constraint_violation = self._get_normalized_constraint_violation(g_vals) if constraint_violation > 0: if (self.archive.reference_point is not None and @@ -105,8 +114,11 @@ def add(self, f_vals, g_vals, info=None): self._hypervolume_plus_constr = max(self.archive._hypervolume_plus, -self.tau) def add_list(self, list_of_f_vals, list_of_g_vals, infos=None): - """ Add a list of objective vectors f_vals with corresponding constraints vectors g_vals - and infos to the archive. + """add a list of objective vectors with corresponding constraints to the archive. + + Only the objective vectors with all constraints <= 0 are added to the archive. + + Additionally, the list of `infos` are stored for objective vectors. >>> from moarchiving.get_archive import get_cmo_archive >>> moa = get_cmo_archive(reference_point=[5, 5], tau=10) @@ -136,7 +148,7 @@ def add_list(self, list_of_f_vals, list_of_g_vals, infos=None): self._hypervolume_plus_constr = self.archive._hypervolume_plus def remove(self, f_vals): - """ Remove a feasible point with objective vector f_vals from the archive. + """remove a feasible point with objective vector `f_vals` from the archive. >>> from moarchiving.get_archive import get_cmo_archive >>> moa = get_cmo_archive([[2, 3], [1, 4], [4, 1]], [0, 0, 0], reference_point=[5, 5]) @@ -152,74 +164,78 @@ def remove(self, f_vals): @property def hypervolume(self): - """ Return the hypervolume indicator. """ + """return the hypervolume indicator. """ return self.archive.hypervolume @property def hypervolume_plus(self): - """ Return the hypervolume_plus indicator. """ + """return the hypervolume_plus indicator. """ return self.archive.hypervolume_plus @property def hypervolume_plus_constr(self): - """ Return the hypervolume_plus_constr (icmop) indicator. """ + """return the hypervolume_plus_constr (icmop) indicator. """ if self.archive.reference_point is None: raise ValueError("to compute the hypervolume_plus_constr indicator a reference" " point is needed (must be given initially)") - return self._hypervolume_plus_constr + if self._hypervolume_plus_constr > 0: + return self._hypervolume_plus_constr * self.archive._hv_factor + else: + return self._hypervolume_plus_constr @property def contributing_hypervolumes(self): - """ Return the hypervolume contributions of each point in the archive. """ + """return the hypervolume contributions of each point in the archive. """ return self.archive.contributing_hypervolumes @property def infos(self): - """ Return the list of additional information for each point in the archive. """ + """return the list of additional information for each point in the archive. """ return self.archive.infos def compute_hypervolume(self, reference_point=None): - """ Compute the hypervolume of the archive. """ + """compute the hypervolume of the archive. """ if self.n_obj == 2: return self.archive.compute_hypervolume(reference_point) return self.archive.compute_hypervolume() def contributing_hypervolume(self, f_vals): - """ Compute the hypervolume contribution of the objective vector f_vals to the archive. """ + """compute the hypervolume contribution of the objective vector f_vals to the archive. """ return self.archive.contributing_hypervolume(f_vals) def copy(self): - """ Return a deep copy of the CMOArchive object. """ - new_cmoa = CMOArchive(reference_point=self.archive.reference_point, tau=self.tau) + """return a deep copy of the CMOArchive object. """ + new_cmoa = CMOArchive(reference_point=self.archive.reference_point, tau=self.tau, + max_g_vals=self.max_g_vals, n_obj=self.n_obj) new_cmoa.archive = self.archive.copy() new_cmoa._hypervolume_plus_constr = self._hypervolume_plus_constr return new_cmoa def distance_to_hypervolume_area(self, f_vals): - """ Compute the distance of the objective vector f_vals to the hypervolume area. """ + """compute the distance of the objective vector `f_vals` to the hypervolume area. """ return self.archive.distance_to_hypervolume_area(f_vals) def distance_to_pareto_front(self, f_vals, ref_factor=1): - """ Compute the distance of the objective vector f_vals to the Pareto front. """ + """compute the distance of the objective vector `f_vals` to the empirical Pareto front. """ return self.archive.distance_to_pareto_front(f_vals, ref_factor=ref_factor) def dominates(self, f_vals): - """ Returns True if the objective vector f_vals is dominated by any of the - points in the archive. """ + """returns True if the vector `f_vals` is dominated by any of the points in the archive. """ return self.archive.dominates(f_vals) def dominators(self, f_vals, number_only=False): - """ Returns a list of points in the archive that dominate the objective vector f_vals. + """returns a list of points in the archive that dominate the objective vector `f_vals`. + If number_only is True, only the number of dominators is returned. """ return self.archive.dominators(f_vals, number_only=number_only) def hypervolume_improvement(self, f_vals): - """ Compute the hypervolume improvement of the archive - if the objective vector f_vals is added. """ + """compute the hypervolume improvement of the archive if objective vector `f_vals` is added. + """ return self.archive.hypervolume_improvement(f_vals) def hypervolume_plus_constr_improvement(self, f_vals, g_vals): - """ Compute the improvement of the indicator if the objective vector f_vals is added. + """compute the improvement of the indicator if the objective vector f_vals is added. >>> from moarchiving.get_archive import get_cmo_archive >>> get_cmo_archive.hypervolume_final_float_type = float @@ -246,9 +262,12 @@ def hypervolume_plus_constr_improvement(self, f_vals, g_vals): 3 """ try: - constraint_violation = sum([max(0, g) for g in g_vals]) + g_vals = list(g_vals) except TypeError: - constraint_violation = max(g_vals, 0) + g_vals = [g_vals] + + constraint_violation = self._get_normalized_constraint_violation(g_vals) + if constraint_violation > 0: if constraint_violation + self.tau < -self._hypervolume_plus_constr: return - self._hypervolume_plus_constr - (constraint_violation + self.tau) @@ -267,9 +286,24 @@ def hypervolume_plus_constr_improvement(self, f_vals, g_vals): return 0 def in_domain(self, f_vals, reference_point=None): - """ Returns True if the objective vector f_vals dominates the reference point. """ + """returns True if the objective vector f_vals dominates the reference point. """ return self.archive.in_domain(f_vals, reference_point=reference_point) + def _get_normalized_constraint_violation(self, g_vals): + """returns the sum of normalized constraint violation of the constraint vector g_vals, + + with respect to the maximal constraint violations self.max_g_vals. If the maximal constraint + values are not provided, it returns the sum of the positive constraint violations. + """ + if self.max_g_vals is None: + return sum([max(0, g) for g in g_vals]) + + if len(self.max_g_vals) != len(g_vals): + raise ValueError("list of constraint violations `g_vals` must be of same length as " + "list of maximal constraint violations `max_g_vals`") + + return sum([min(max(0, g) / g_max, 1) for g, g_max in zip(g_vals, self.max_g_vals)]) + if __name__ == "__main__": import doctest diff --git a/moarchiving/get_archive.py b/moarchiving/get_archive.py index 62e03a6..5eeb403 100644 --- a/moarchiving/get_archive.py +++ b/moarchiving/get_archive.py @@ -7,16 +7,14 @@ from moarchiving.moarchiving3obj import MOArchive3obj from moarchiving.moarchiving4obj import MOArchive4obj from moarchiving.constrained_moarchive import CMOArchive +from moarchiving.moarchiving_utils import true_fraction import warnings as _warnings -try: - import fractions -except ImportError: - _warnings.warn('`fractions` module not installed, arbitrary precision hypervolume computation not available') -def get_mo_archive(list_of_f_vals=None, reference_point=None, infos=None, n_obj=None): - """Return a nondominated archive instance with the proper number of objectives. +def get_mo_archive(list_of_f_vals=None, reference_point=None, infos=None, ideal_point=None, + weights=None, n_obj=None): + """return a nondominated archive instance with the proper number of objectives. `list_of_f_vals` is a list of objective vectors with `n_obj` objectives. If `list_of_f_vals` is not provided, `n_obj` can be @@ -26,17 +24,14 @@ def get_mo_archive(list_of_f_vals=None, reference_point=None, infos=None, n_obj= the archive. A list of additional information for each objective vector, for example the solution from which the objective values were computed, can be provided in `infos`. + + `ideal_point` and weights are lists of length `n_obj` and are used for + normalization of the hypervolume indicators. """ if not hasattr(get_mo_archive, "hypervolume_final_float_type"): - try: - get_mo_archive.hypervolume_final_float_type = fractions.Fraction - except: - get_mo_archive.hypervolume_final_float_type = float + get_mo_archive.hypervolume_final_float_type = true_fraction if not hasattr(get_mo_archive, "hypervolume_computation_float_type"): - try: - get_mo_archive.hypervolume_computation_float_type = fractions.Fraction - except: - get_mo_archive.hypervolume_computation_float_type = float + get_mo_archive.hypervolume_computation_float_type = true_fraction if (list_of_f_vals is None or len(list_of_f_vals) == 0) and n_obj is None and reference_point is None: n_obj = 2 @@ -71,23 +66,26 @@ def get_mo_archive(list_of_f_vals=None, reference_point=None, infos=None, n_obj= if n_obj == 2: return MOArchive2obj(list_of_f_vals, reference_point=reference_point, infos=infos, + ideal_point=ideal_point, weights=weights, hypervolume_final_float_type=get_mo_archive.hypervolume_final_float_type, hypervolume_computation_float_type=get_mo_archive.hypervolume_computation_float_type) elif n_obj == 3: return MOArchive3obj(list_of_f_vals, reference_point=reference_point, infos=infos, + ideal_point=ideal_point, weights=weights, hypervolume_final_float_type=get_mo_archive.hypervolume_final_float_type, hypervolume_computation_float_type=get_mo_archive.hypervolume_computation_float_type) elif n_obj == 4: return MOArchive4obj(list_of_f_vals, reference_point=reference_point, infos=infos, + ideal_point=ideal_point, weights=weights, hypervolume_final_float_type=get_mo_archive.hypervolume_final_float_type, hypervolume_computation_float_type=get_mo_archive.hypervolume_computation_float_type) else: raise ValueError(f"Unsupported number of objectives: {n_obj}") -def get_cmo_archive(list_of_f_vals=None, list_of_g_vals=None, reference_point=None, - infos=None, n_obj=None, tau=1): - """Return a constrained nondominated archive instance with the proper number of objectives. +def get_cmo_archive(list_of_f_vals=None, list_of_g_vals=None, reference_point=None, infos=None, + ideal_point=None, weights=None, n_obj=None, tau=1, max_g_vals=None): + """return a constrained nondominated archive instance with the proper number of objectives. `list_of_f_vals` is a list of objective vectors with `n_obj` objectives, `list_of_g_vals` is a list of constraint violation vectors (or values). @@ -96,18 +94,19 @@ def get_cmo_archive(list_of_f_vals=None, list_of_g_vals=None, reference_point=No `reference_point` is used for the hypervolume computation and pruning of the archive. A list of additional information for each objective vector can be provided in `infos`. + + `ideal_point` and weights are lists of length `n_obj` and are used for + normalization of the hypervolume indicators. `max_g_vals` is a list of + maximum constraint violation values for each objective vector, used for + normalization of the hypervolume_plus_constr indicator. + + `tau` is a threshold that is used for calculation of hypervolume_plus_constr indicator. """ if not hasattr(get_cmo_archive, "hypervolume_final_float_type"): - try: - get_cmo_archive.hypervolume_final_float_type = fractions.Fraction - except: - get_cmo_archive.hypervolume_final_float_type = float + get_cmo_archive.hypervolume_final_float_type = true_fraction if not hasattr(get_cmo_archive, "hypervolume_computation_float_type"): - try: - get_cmo_archive.hypervolume_computation_float_type = fractions.Fraction - except: - get_cmo_archive.hypervolume_computation_float_type = float + get_cmo_archive.hypervolume_computation_float_type = true_fraction if (list_of_f_vals is None or len(list_of_f_vals) == 0) and n_obj is None and reference_point is None: n_obj = 2 @@ -148,6 +147,7 @@ def get_cmo_archive(list_of_f_vals=None, list_of_g_vals=None, reference_point=No raise ValueError("list_of_f_vals and list_of_g_vals must have the same length") return CMOArchive(list_of_f_vals=list_of_f_vals, list_of_g_vals=list_of_g_vals, - reference_point=reference_point, infos=infos, n_obj=n_obj, tau=tau, + reference_point=reference_point, infos=infos, ideal_point=ideal_point, + weights=weights, n_obj=n_obj, tau=tau, max_g_vals=max_g_vals, hypervolume_final_float_type=get_cmo_archive.hypervolume_final_float_type, hypervolume_computation_float_type=get_cmo_archive.hypervolume_computation_float_type) diff --git a/moarchiving/moarchiving.py b/moarchiving/moarchiving.py index 7898755..d6b08b0 100644 --- a/moarchiving/moarchiving.py +++ b/moarchiving/moarchiving.py @@ -4,14 +4,13 @@ implemented as sorted list and with incremental update in logarithmic time. """ from __future__ import division, print_function, unicode_literals + +from moarchiving.moarchiving_base import MOArchiveBase +from moarchiving.moarchiving_utils import true_fraction + import warnings as _warnings # from collections import deque # does not support deletion of slices!? import bisect as _bisect # to find the insertion index efficiently -try: - import fractions -except ImportError: - _warnings.warn( - '`fractions` module not installed, arbitrary precision hypervolume computation not available') del division, print_function, unicode_literals inf = float('inf') @@ -28,26 +27,7 @@ def _debug_trace(*args, **kwargs): return s -def true_fraction(val, copy=False): - """return a `fractions.Fraction` object from `val`. - - Fixes the issue that `Fraction` does not convert an `np.intc` or - `np.int32` type to infinite representation `int`. - """ - try: - fractions.Fraction - except NameError: - return val - if isinstance(val, fractions.Fraction): - if copy: # Fraction(.) is almost 20 times slower than float(.) - return fractions.Fraction(val) - return val - if not isinstance(val, (int, float)): - val = float(val) - return fractions.Fraction(val) - - -class BiobjectiveNondominatedSortedList(list): +class BiobjectiveNondominatedSortedList(list, MOArchiveBase): """A sorted list of non-dominated unique objective-pairs. Non-domination here means smaller in at least one objective. The list is @@ -133,6 +113,8 @@ def __init__(self, list_of_f_pairs=None, reference_point=None, sort=sorted, + ideal_point=None, + weights=None, infos=None, hypervolume_final_float_type=None, hypervolume_computation_float_type=None): @@ -147,28 +129,24 @@ def __init__(self, CAVEAT: the interface, in particular the positional interface may change in future versions. """ - if hypervolume_final_float_type is None: - self.hypervolume_final_float_type = BiobjectiveNondominatedSortedList.hypervolume_final_float_type - else: - self.hypervolume_final_float_type = hypervolume_final_float_type - if hypervolume_computation_float_type is None: - self.hypervolume_computation_float_type = BiobjectiveNondominatedSortedList.hypervolume_computation_float_type - else: - self.hypervolume_computation_float_type = hypervolume_computation_float_type + hypervolume_final_float_type = BiobjectiveNondominatedSortedList.hypervolume_final_float_type \ + if hypervolume_final_float_type is None else hypervolume_final_float_type + hypervolume_computation_float_type = BiobjectiveNondominatedSortedList.hypervolume_computation_float_type \ + if hypervolume_computation_float_type is None else hypervolume_computation_float_type + self.make_expensive_asserts = BiobjectiveNondominatedSortedList.make_expensive_asserts self.maintain_contributing_hypervolumes = BiobjectiveNondominatedSortedList.maintain_contributing_hypervolumes - self.n_obj = 2 + + MOArchiveBase.__init__(self, reference_point=reference_point, ideal_point=ideal_point, + weights=weights, n_obj=2, + hypervolume_final_float_type=hypervolume_final_float_type, + hypervolume_computation_float_type=hypervolume_computation_float_type) + + list_of_f_pairs = self._convert_and_validate_f_vals(list_of_f_pairs, n_obj=2) if list_of_f_pairs is not None and len(list_of_f_pairs): - try: - list_of_f_pairs = list_of_f_pairs.tolist() - except: - pass - if len(list_of_f_pairs[0]) != 2: - raise ValueError("need elements of len 2, got %s" - " as first element" % str(list_of_f_pairs[0])) if sort is None: list.__init__(self, list_of_f_pairs) else: @@ -179,12 +157,6 @@ def __init__(self, else: list.__init__(self, sort(list_of_f_pairs)) - # super(BiobjectiveNondominatedSortedList, self).__init__(sort(list_of_f_pairs)) - if reference_point is not None: - self.reference_point = list(reference_point) - else: - self.reference_point = reference_point - if infos is not None: if len(infos) != len(list_of_f_pairs): raise ValueError(f"need as many infos as f_pairs, got " @@ -199,19 +171,10 @@ def __init__(self, raise NotImplementedError('update of _contributing_hypervolumes in _add_HV and _subtract_HV not implemented') else: self._contributing_hypervolumes = [] + self._set_HV() + self._update_hv_plus(list_of_f_pairs) - if reference_point is not None: - if self._hypervolume > 0: - self._hypervolume_plus = self._hypervolume - else: - if list_of_f_pairs is None or len(list_of_f_pairs) == 0: - self._hypervolume_plus = -inf - else: - self._hypervolume_plus = -min([self.distance_to_hypervolume_area(f) - for f in list_of_f_pairs]) - else: - self._hypervolume_plus = None self.make_expensive_asserts and self._asserts() def _debug_info(self): @@ -267,9 +230,7 @@ def add(self, f_pair, info=None): raise ValueError("argument `f_pair` must be of length 2, was" " ``%s``" % str(f_pair)) if not self.in_domain(f_pair): - if self.hypervolume_plus is not None and self.hypervolume_plus < 0: - self._hypervolume_plus = max((self._hypervolume_plus, - -self.distance_to_hypervolume_area(f_pair))) + self._update_hv_plus([f_pair]) self._removed = [f_pair] return None idx = self.bisect_left(f_pair) @@ -533,44 +494,6 @@ def dominators(self, f_pair, number_only=False): idx -= 1 return res - def in_domain(self, f_pair, reference_point=None): - """return `True` if `f_pair` is dominating the reference point, - - `False` otherwise. `True` means that `f_pair` contributes to - the hypervolume if not dominated by other elements. - - `f_pair` may also be an index in `self` in which case - ``self[f_pair]`` is tested to be in-domain. - - >>> from moarchiving import BiobjectiveNondominatedSortedList as NDA - >>> a = NDA([[2.2, 0.1], [0.5, 1]], reference_point=[2, 2]) - >>> assert len(a) == 1 - >>> a.in_domain([0, 0]) - True - >>> a.in_domain([2, 1]) - False - >>> all(a.in_domain(ai) for ai in a) - True - >>> a.in_domain(0) - True - - TODO: improve name? - """ - if reference_point is None: - reference_point = self.reference_point - if reference_point is None: - return True - try: - f_pair = self[f_pair] - except TypeError: - pass - except IndexError: - raise # return None - if (f_pair[0] >= reference_point[0] or - f_pair[1] >= reference_point[1]): - return False - return True - @property def infos(self): """`list` of complementary information corresponding to each archive entry""" @@ -605,8 +528,8 @@ def hypervolume(self): raise ValueError("to compute the hypervolume a reference" " point is needed (must be given initially)") if self.make_expensive_asserts: - assert abs(self._hypervolume - self.compute_hypervolume(self.reference_point)) < 1e-12 - return self._hypervolume + assert abs(self._hypervolume - self._compute_hypervolume(self.reference_point)) < 1e-12 + return self._hypervolume * self._hv_factor @property def hypervolume_plus(self): @@ -642,7 +565,12 @@ def hypervolume_plus(self): if self.reference_point is None: raise ValueError("to compute the hypervolume_plus a reference" " point is needed (must be given initially)") - return self._hypervolume_plus + if self._hypervolume_plus < 0: + # if hypervolume is < 0, the factors are already included in the computation of the + # distance to the hypervolume area + return self._hypervolume_plus + else: + return self._hypervolume_plus * self._hv_factor @property @@ -667,7 +595,7 @@ def contributing_hypervolumes(self): if self.maintain_contributing_hypervolumes: if not hasattr(self, '_contributing_hypervolumes'): self._contributing_hypervolumes = [ - self.contributing_hypervolume(i) + self._contributing_hypervolume(i) for i in range(len(self))] if len(self._contributing_hypervolumes) == len(self): return self._contributing_hypervolumes @@ -693,9 +621,35 @@ def contributing_hypervolume(self, idx): pass else: # idx is a pair if idx in self: - idx = self.index(idx) + return self._contributing_hypervolume_of_idx(self.index(idx)) * self._hv_factor else: return self.hypervolume_improvement(idx) + return self._contributing_hypervolume_of_idx(idx) * self._hv_factor + + def _contributing_hypervolume(self, idx): + """return contributing hypervolume of element `idx`, without normalization + + If `idx` is an `f_pair`, return contributing hypervolume of element + with value `f_pair`. If `f_pair` is not in `self`, return + `hypervolume_improvement(f_pair)`, i.e., its uncrowded contributing + hypervolume (which can be negative). + + The return type is ``self.hypervolume_computation_float_type` and + by default `fractions.Fraction`, which can be converted to `float` + like ``float(....contributing_hypervolume(idx))``. + """ + try: len(idx) + except TypeError: pass + else: # idx is a pair + if idx in self: + return self._contributing_hypervolume_of_idx(self.index(idx)) + else: + return self._hypervolume_improvement(idx) + return self._contributing_hypervolume_of_idx(idx) + + def _contributing_hypervolume_of_idx(self, idx): + """return contributing hypervolume of element with the index `idx`, without normalization + """ if idx == 0: y = self.reference_point[1] if self.reference_point else inf else: @@ -711,7 +665,7 @@ def contributing_hypervolume(self, idx): assert dHV >= 0 return dHV - def distance_to_pareto_front(self, f_pair, ref_factor=1): + def _distance_to_pareto_front_with_weights(self, f_pair, weights, ref_factor=1): """of a dominated `f_pair` also considering the reference domain. Non-dominated points have (by definition) a distance of zero, @@ -752,37 +706,59 @@ def distance_to_pareto_front(self, f_pair, ref_factor=1): ref_d1 = 0 if len(self) == 0: # otherwise we get an index error below - return (ref_d0**2 + ref_d1**2)**0.5 + return ((ref_d0 * weights[0])**2 + (ref_d1 * weights[1])**2)**0.5 # distances to the two outer kink points, given by the extreme # points and the respective the reference point coordinate, for # the left (and up) most point: - squared_distances = [max((0, f_pair[0] - self[0][0]))**2 + - ref_d1**2] + squared_distances = [(max((0, f_pair[0] - self[0][0])) * weights[0])**2 + (ref_d1 * weights[1])**2] # and the right most (and lowest) point - squared_distances += [ref_d0**2 + - max((0, f_pair[1] - self[-1][1]))**2] + squared_distances += [(ref_d0 * weights[0])**2 + (max((0, f_pair[1] - self[-1][1])) * weights[1])**2] if len(self) == 1: return min(squared_distances)**0.5 for idx in range(self.bisect_left(f_pair), 0, -1): if idx == len(self): continue squared_distances.append( - max((0, f_pair[1] - self[idx - 1][1]))**2 + - max((0, f_pair[0] - self[idx][0]))**2) + (max((0, f_pair[1] - self[idx - 1][1])) * weights[1])**2 + + (max((0, f_pair[0] - self[idx][0])) * weights[0])**2) if self[idx][1] >= f_pair[1] or idx == 1: break if self.make_expensive_asserts and len(squared_distances) > 2: assert min(squared_distances[2:]) == min( - [max((0, f_pair[0] - self[i + 1][0]))**2 + - max((0, f_pair[1] - self[i][1]))**2 + [(max((0, f_pair[0] - self[i + 1][0])) * weights[0])**2 + + (max((0, f_pair[1] - self[i][1])) * weights[1])**2 for i in range(len(self) - 1)]) return min(squared_distances)**0.5 - def distance_to_hypervolume_area(self, f_pair): - return (max((0, f_pair[0] - self.reference_point[0]))**2 - + max((0, f_pair[1] - self.reference_point[1]))**2)**0.5 \ - if self.reference_point else 0 + + def distance_to_pareto_front(self, f_pair, ref_factor=1): + """of a dominated `f_pair` also considering the reference domain. + + Non-dominated points have (by definition) a distance of zero, + unless the archive is empty and the point does not dominate the + reference point. + + The implementation assumes that all points of the archive are in + the reference domain (and more extreme points have been pruned, as + it is the default behavior). + """ + weights = [w * w_ip for (w, w_ip) in zip(self._weights, self._weights_ideal_point)] + return self._distance_to_pareto_front_with_weights(f_pair, weights, ref_factor) + + def _distance_to_pareto_front(self, f_pair, ref_factor=1): + """of a dominated `f_pair` also considering the reference domain, without using the normalization weights + + Non-dominated points have (by definition) a distance of zero, + unless the archive is empty and the point does not dominate the + reference point. + + The implementation assumes that all points of the archive are in + the reference domain (and more extreme points have been pruned, as + it is the default behavior). + """ + weights = [1 for _ in range(self.n_obj)] + return self._distance_to_pareto_front_with_weights(f_pair, weights, ref_factor) def _hypervolume_improvement0(self, f_pair): """deprecated and only used for testing: return how much `f_pair` would improve the hypervolume. @@ -800,7 +776,7 @@ def _hypervolume_improvement0(self, f_pair): dist = self.distance_to_pareto_front(f_pair) if dist: return -dist - hv0 = self.hypervolume + hv0 = self._hypervolume state = self._state() removed = self.discarded # to get back previous state added = self.add(f_pair) is not None @@ -809,7 +785,7 @@ def _hypervolume_improvement0(self, f_pair): else: add_back = [] assert len(add_back) + len(self) - added == state[0] - hv1 = self.hypervolume + hv1 = self._hypervolume if added: self.remove(f_pair) if add_back: @@ -818,12 +794,12 @@ def _hypervolume_improvement0(self, f_pair): if self.hypervolume_computation_float_type is not float and ( self.hypervolume_final_float_type is not float): assert state == self._state() - if hv0 != self.hypervolume: + if hv0 != self._hypervolume: _warnings.warn("HV changed from %f to %f while computing hypervolume_improvement" % - (hv0, self.hypervolume)) + (hv0, self._hypervolume)) self._infos = save_infos self._hypervolume_plus = save_hypervolume_plus - return self.hypervolume_computation_float_type(hv1) - self.hypervolume + return self.hypervolume_computation_float_type(hv1) - self._hypervolume def hypervolume_improvement(self, f_pair): """return how much `f_pair` would improve the hypervolume. @@ -847,6 +823,43 @@ def hypervolume_improvement(self, f_pair): dist = self.distance_to_pareto_front(f_pair) if dist: return -dist + return self._hypervolume_improvement_of_nondominated_point(f_pair) * self._hv_factor + + def _hypervolume_improvement(self, f_pair): + """return how much `f_pair` would improve the hypervolume, without normalization + + If dominated, return the distance to the empirical pareto front + multiplied by -1. + Else if not in domain, return distance to the reference point + dominating area times -1. + + Overall this amounts to the uncrowded hypervolume improvement, + see https://arxiv.org/abs/1904.08823 + + Details: when ``self.reference_point is None`` and `f_pair` is + a new extreme point, the returned hypervolume improvement is + ``float('inf')``. + + This method extracts a sublist first and thereby tries + to circumentvent to compute small differences between large + hypervolumes. + """ + dist = self._distance_to_pareto_front(f_pair) + if dist: + return -dist + return self._hypervolume_improvement_of_nondominated_point(f_pair) + + def _hypervolume_improvement_of_nondominated_point(self, f_pair): + """return how much `f_pair` would improve the hypervolume. + + Details: when ``self.reference_point is None`` and `f_pair` is + a new extreme point, the returned hypervolume improvement is + ``float('inf')``. + + This method extracts a sublist first and thereby tries + to circumentvent to compute small differences between large + hypervolumes. + """ if self.reference_point is None: if f_pair[0] < self[0][0] or f_pair[1] < self[-1][1]: return inf @@ -862,31 +875,20 @@ def hypervolume_improvement(self, f_pair): BiobjectiveNondominatedSortedList.make_expensive_asserts = False # prevent infinite recursion sub = BiobjectiveNondominatedSortedList(self[i0:i1], reference_point=[r0, r1], sort=None) BiobjectiveNondominatedSortedList.make_expensive_asserts = assaved - hv0 = sub.hypervolume + hv0 = sub._hypervolume sub.add(f_pair) - res = self.hypervolume_computation_float_type(sub.hypervolume) - hv0 + res = (self.hypervolume_computation_float_type(sub._hypervolume) - hv0) if BiobjectiveNondominatedSortedList.make_expensive_asserts: assert abs(res - self._hypervolume_improvement0(f_pair)) < 1e-9 * (0.1 + res), ( res, self._hypervolume_improvement0(f_pair)) return res - def _set_HV(self): - """set current hypervolume value using `self.reference_point`. - - Raise `ValueError` if `self.reference_point` is `None`. - - TODO: we may need to store the list of _contributing_ hypervolumes - to handle numerical rounding errors later. - """ - if self.reference_point is None: - return None - self._hypervolume = self.compute_hypervolume(self.reference_point) - if self._hypervolume > 0: - self._hypervolume_plus = self._hypervolume - return self._hypervolume - def compute_hypervolume(self, reference_point): """return hypervolume w.r.t. `reference_point`""" + return self._compute_hypervolume(reference_point) * self._hv_factor + + def _compute_hypervolume(self, reference_point=None): + """return hypervolume w.r.t. `reference_point`, without normalization""" if reference_point is None: raise ValueError("to compute the hypervolume a reference" " point is needed (was `None`)") @@ -996,7 +998,7 @@ def _add_HV(self, idx): raise NotImplementedError("update list of hypervolumes") if self.reference_point is None: return None - dHV = self.contributing_hypervolume(idx) + dHV = self._contributing_hypervolume(idx) Ff = self.hypervolume_final_float_type if self._hypervolume and ( Ff in (float, int) or isinstance(self._hypervolume, (float, int))) \ @@ -1166,7 +1168,8 @@ def _asserts(self): assert self.dominates(pair) assert not self.dominates([v - 0.001 for v in pair]) if self.reference_point is not None: - assert abs(self._hypervolume - self.compute_hypervolume(self.reference_point)) < 1e-11 + assert abs(self._hypervolume - self._compute_hypervolume(self.reference_point)) < 1e-11, \ + (self._hypervolume, self._compute_hypervolume(self.reference_point)) assert sum(self.contributing_hypervolumes) < self.hypervolume + 1e-11 if self.maintain_contributing_hypervolumes: assert len(self) == len(self._contributing_hypervolumes) @@ -1176,7 +1179,7 @@ def _asserts(self): if self.reference_point: tmp, self.make_expensive_asserts = self.make_expensive_asserts, False - self.hypervolume_improvement([0, 0]) # does state assert + self._hypervolume_improvement([0, 0]) # does state assert self.make_expensive_asserts = tmp assert self._infos is None or len(self._infos) == len(self.infos) == len(self), ( diff --git a/moarchiving/moarchiving3obj.py b/moarchiving/moarchiving3obj.py index 9309114..5dc0424 100644 --- a/moarchiving/moarchiving3obj.py +++ b/moarchiving/moarchiving3obj.py @@ -4,7 +4,6 @@ objective space and efficiently calculating hypervolume with respect to the given reference point. """ - from moarchiving.moarchiving import BiobjectiveNondominatedSortedList as MOArchive2obj from moarchiving.moarchiving_utils import (DLNode, ArchiveSortedList, compute_area_simple, remove_from_z, restart_list_y, lexicographic_less, one_contribution_3_obj, @@ -19,10 +18,6 @@ except ImportError: pass -try: - import fractions -except ImportError: - _warnings.warn('`fractions` module not installed, arbitrary precision hypervolume computation not available') inf = float('inf') @@ -55,15 +50,9 @@ class MOArchive3obj(MOArchiveParent): >>> moa2.hypervolume 10.0 """ - try: - hypervolume_final_float_type = fractions.Fraction - hypervolume_computation_float_type = fractions.Fraction - except: - hypervolume_final_float_type = float - hypervolume_computation_float_type = float - - def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, - hypervolume_final_float_type=None, + + def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, ideal_point=None, + weights=None, hypervolume_final_float_type=None, hypervolume_computation_float_type=None): """ Create a new 3 objective archive object. @@ -71,31 +60,24 @@ def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, to compute the hypervolume. infos are an optional list of additional information about the points in the archive. """ - - hypervolume_final_float_type = MOArchive3obj.hypervolume_final_float_type \ - if hypervolume_final_float_type is None else hypervolume_final_float_type - hypervolume_computation_float_type = MOArchive3obj.hypervolume_computation_float_type \ - if hypervolume_computation_float_type is None else hypervolume_computation_float_type + list_of_f_vals = self._convert_and_validate_f_vals(list_of_f_vals, n_obj=3) super().__init__(list_of_f_vals=list_of_f_vals, reference_point=reference_point, infos=infos, + ideal_point=ideal_point, + weights=weights, n_obj=3, hypervolume_final_float_type=hypervolume_final_float_type, hypervolume_computation_float_type=hypervolume_computation_float_type) self._removed = [] self.preprocessing() - hv = self._set_HV() + + self._set_HV() + self._update_hv_plus(list_of_f_vals) + self._length = len(list(self)) - if hv is not None and hv > 0: - self._hypervolume_plus = self._hypervolume - else: - if list_of_f_vals is None or len(list_of_f_vals) == 0: - self._hypervolume_plus = -inf - else: - self._hypervolume_plus = -min([self.distance_to_hypervolume_area(f) - for f in list_of_f_vals]) def add(self, f_vals, info=None, update_hypervolume=True): """ Adds a new point to the archive, and updates the hypervolume if needed. @@ -334,7 +316,9 @@ def add_list(self, list_of_f_vals, infos=None, add_method="compare"): self.add(f_val, info=info, update_hypervolume=False) self._set_HV() elif add_method == "reinit": - self.__init__(list(self) + list_of_f_vals, self.reference_point, self.infos + infos) + self.__init__(list(self) + list_of_f_vals, reference_point=self.reference_point, + infos=self.infos + infos, ideal_point=self._ideal_point, + weights=self._weights) else: raise ValueError(f"Unknown add method: {add_method}, " f"should be one of: 'compare', 'one_by_one', 'reinit'") @@ -357,7 +341,8 @@ def copy(self): >>> list(moa), moa.infos ([[3, 2, 1], [1, 2, 3]], ['C', 'A']) """ - return MOArchive3obj(list(self), self.reference_point, self.infos) + return MOArchive3obj(list(self), reference_point=self.reference_point, infos=self.infos, + ideal_point=self._ideal_point, weights=self._weights) def _get_kink_points(self): """ Function that returns the kink points of the archive. @@ -410,7 +395,7 @@ def _get_kink_points(self): return kink_points def hypervolume_improvement(self, f_vals): - """ Returns the hypervolume improvement of adding a point to the archive + """returns the hypervolume improvement of adding a point to the archive >>> from moarchiving.get_archive import get_mo_archive >>> moa = get_mo_archive([[1, 2, 3], [3, 2, 1]], reference_point=[4, 4, 4]) @@ -425,14 +410,19 @@ def hypervolume_improvement(self, f_vals): return -1 * self.distance_to_pareto_front(f_vals) return one_contribution_3_obj(self.head, DLNode(x=f_vals), - self.hypervolume_computation_float_type) + self.hypervolume_computation_float_type) * self._hv_factor def compute_hypervolume(self, reference_point=None): - """ Compute the hypervolume of the current state of archive + """compute the hypervolume of the current state of archive + """ + return self._compute_hypervolume(reference_point=reference_point) * self._hv_factor + + def _compute_hypervolume(self, reference_point=None): + """compute the hypervolume of the archive without normalization weights >>> from moarchiving.get_archive import get_mo_archive >>> moa = get_mo_archive([[1, 2, 3], [3, 2, 1]], reference_point=[4, 4, 4]) - >>> moa.compute_hypervolume() + >>> moa._compute_hypervolume() 10.0 """ if reference_point is not None: @@ -465,8 +455,10 @@ def compute_hypervolume(self, reference_point=None): return self.hypervolume_final_float_type(volume) def preprocessing(self): - """ Preprocessing step to determine the closest points in x and y directions, - as described in the paper and implemented in the original C code. """ + """preprocessing step to determine the closest points in x and y directions, + + as described in the paper and implemented in the original C code. + """ di = self.n_obj - 1 t = ArchiveSortedList(iterable=[self.head, self.head.next[di]], key=lambda node: (node.x[1], node.x[0])) diff --git a/moarchiving/moarchiving4obj.py b/moarchiving/moarchiving4obj.py index 6181abd..9bd4e10 100644 --- a/moarchiving/moarchiving4obj.py +++ b/moarchiving/moarchiving4obj.py @@ -5,18 +5,10 @@ """ -from moarchiving.moarchiving_utils import hv4dplusR, remove_from_z +from moarchiving.moarchiving_utils import hv4dplusR, remove_from_z, true_fraction from moarchiving.moarchiving3obj import MOArchive3obj from moarchiving.moarchiving_parent import MOArchiveParent -import warnings as _warnings - -try: - import fractions -except ImportError: - _warnings.warn('`fractions` module not installed, arbitrary precision hypervolume computation not available') - - inf = float('inf') @@ -27,6 +19,7 @@ class MOArchive4obj(MOArchiveParent): The archive is implemented as a doubly linked list, and can be modified using functions add and remove. Points of the archive can be accessed as a list of points order by the fourth coordinate using function points_list. + >>> from moarchiving.get_archive import get_mo_archive >>> moa = get_mo_archive([[1, 2, 3, 4], [4, 3, 2, 1]]) >>> list(moa) # returns the list of points in the archive sorted by the third coordinate @@ -35,7 +28,7 @@ class MOArchive4obj(MOArchiveParent): True >>> moa.add([3, 3, 3, 3]) False - >>> get_mo_archive.hypervolume_final_float_type = fractions.Fraction + >>> get_mo_archive.hypervolume_final_float_type = true_fraction >>> moa = get_mo_archive([[1, 2, 3, 4], [2, 3, 4, 5], [4, 3, 2, 1]], ... reference_point=[5, 5, 5, 5], infos=["A", "B", "C"]) >>> moa.infos # returns the list of infos for each point in the archive @@ -50,48 +43,34 @@ class MOArchive4obj(MOArchiveParent): 44.0 """ - try: - hypervolume_final_float_type = fractions.Fraction - hypervolume_computation_float_type = fractions.Fraction - except: - hypervolume_final_float_type = float - hypervolume_computation_float_type = float - - def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, - hypervolume_final_float_type=None, - hypervolume_computation_float_type=None): + + def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, ideal_point=None, weights=None, + hypervolume_final_float_type=None, hypervolume_computation_float_type=None): """ Create a new 4 objective archive object. f-vals beyond the `reference_point` are pruned away. The `reference_point` is also used to compute the hypervolume. infos are an optional list of additional information about the points in the archive. """ - - hypervolume_final_float_type = MOArchive4obj.hypervolume_final_float_type \ - if hypervolume_final_float_type is None else hypervolume_final_float_type - hypervolume_computation_float_type = MOArchive4obj.hypervolume_computation_float_type \ - if hypervolume_computation_float_type is None else hypervolume_computation_float_type + list_of_f_vals = self._convert_and_validate_f_vals(list_of_f_vals, n_obj=4) super().__init__(list_of_f_vals=list_of_f_vals, reference_point=reference_point, infos=infos, + ideal_point=ideal_point, + weights=weights, n_obj=4, hypervolume_final_float_type=hypervolume_final_float_type, hypervolume_computation_float_type=hypervolume_computation_float_type) self._hypervolume_already_computed = False self.remove_dominated() - hv = self._set_HV() + + self._set_HV() + self._update_hv_plus(list_of_f_vals) + self._length = len(list(self)) - self._hypervolume_already_computed = True - if hv is not None and hv > 0: - self._hypervolume_plus = self._hypervolume - else: - if list_of_f_vals is None or len(list_of_f_vals) == 0: - self._hypervolume_plus = -inf - else: - self._hypervolume_plus = -min([self.distance_to_hypervolume_area(f) - for f in list_of_f_vals]) + def add(self, f_vals, info=None, update_hypervolume=True): """ Add a new point to the archive. @@ -128,7 +107,8 @@ def add(self, f_vals, info=None, update_hypervolume=True): self._hypervolume_plus = -dist_to_hv_area return False - self.__init__(list(self) + [f_vals], self.reference_point, self.infos + [info]) + self.__init__(list(self) + [f_vals], reference_point=self.reference_point, + infos=self.infos + [info], ideal_point=self._ideal_point, weights=self._weights) return True def remove(self, f_vals): @@ -153,8 +133,10 @@ def remove(self, f_vals): return False point_idx = points_list.index(f_vals) point_info = self.infos[point_idx] - self.__init__([p for p in points_list if p != f_vals], self.reference_point, - [info for p, info in zip(points_list, self.infos) if p != f_vals]) + self.__init__([p for p in points_list if p != f_vals], + reference_point=self.reference_point, + infos=[info for p, info in zip(points_list, self.infos) if p != f_vals], + ideal_point=self._ideal_point, weights=self._weights) return point_info def add_list(self, list_of_f_vals, infos=None): @@ -175,7 +157,8 @@ def add_list(self, list_of_f_vals, infos=None): if infos is None: infos = [None] * len(list_of_f_vals) - self.__init__(list(self) + list_of_f_vals, self.reference_point, self.infos + infos) + self.__init__(list(self) + list_of_f_vals, reference_point=self.reference_point, + infos=self.infos + infos, ideal_point=self._ideal_point, weights=self._weights) def copy(self): """ Return a copy of the archive. @@ -195,7 +178,8 @@ def copy(self): >>> list(moa), moa.infos ([[4, 3, 2, 1], [1, 2, 3, 4]], ['C', 'A']) """ - return MOArchive4obj(list(self), self.reference_point, self.infos) + return MOArchive4obj(list(self), reference_point=self.reference_point, infos=self.infos, + ideal_point=self._ideal_point, weights=self._weights) def _get_kink_points(self): """ Function that returns the kink points of the archive. @@ -271,19 +255,25 @@ def hypervolume_improvement(self, f_vals): return self.hypervolume_final_float_type(moa_copy.hypervolume - self.hypervolume) def compute_hypervolume(self, reference_point=None): - """ Compute the hypervolume of the archive. + """compute the hypervolume of the archive. """ + return self._compute_hypervolume(reference_point=reference_point) * self._hv_factor + + def _compute_hypervolume(self, reference_point=None): + """compute the hypervolume of the archive without normalization weights >>> from moarchiving.get_archive import get_mo_archive >>> moa = get_mo_archive([[1, 2, 3, 4], [4, 3, 2, 1]], reference_point=[5, 5, 5, 5]) - >>> moa.compute_hypervolume() + >>> moa._compute_hypervolume() 44.0 """ if reference_point is not None: _warnings.warn("Reference point given at the initialization is used " - "in 3 objective hypervolume computation") + "in 4 objective hypervolume computation") if self._hypervolume_already_computed: return self._hypervolume + + self._hypervolume_already_computed = True return self.hypervolume_final_float_type( hv4dplusR(self.head, self.hypervolume_computation_float_type)) diff --git a/moarchiving/moarchiving_base.py b/moarchiving/moarchiving_base.py new file mode 100644 index 0000000..832bd1e --- /dev/null +++ b/moarchiving/moarchiving_base.py @@ -0,0 +1,261 @@ +# -*- coding: utf-8 -*- +"""Base class for functionality used with any number of objectives. +""" + +import math +import warnings as _warnings + +from moarchiving.moarchiving_utils import true_fraction + +inf = float('inf') + + +class MOArchiveBase: + """Provide functionality used with any number of objectives""" + + hypervolume_final_float_type = true_fraction + """HV computation takes increasingly longer with increasing precision (number of iterations). + + Set ``BiobjectiveNondominatedSortedList.hypervolume_final_float_type = float`` + when speed is an issue. + """ # lambda x: x is marginally faster than float + hypervolume_computation_float_type = true_fraction + """HV computation takes increasingly longer with increasing precision (number of iterations). + + Precision may be less relevant here than for + `hypervolume_final_float_type`. + + Set ``BiobjectiveNondominatedSortedList.hypervolume_computation_float_type = float`` + here first when speed is an issue. + """ + + def __init__(self, + reference_point=None, + ideal_point=None, + weights=None, + n_obj=None, + hypervolume_final_float_type=None, + hypervolume_computation_float_type=None): + """ Create a new MOArchiveBase object. + + Used for normalization and methods that are common to all MOArchive classes. + """ + if hypervolume_final_float_type is None: + self.hypervolume_final_float_type = MOArchiveBase.hypervolume_final_float_type + else: + self.hypervolume_final_float_type = hypervolume_final_float_type + + if hypervolume_computation_float_type is None: + self.hypervolume_computation_float_type = MOArchiveBase.hypervolume_computation_float_type + else: + self.hypervolume_computation_float_type = hypervolume_computation_float_type + + self.n_obj = n_obj + + # set the reference point + if reference_point is not None: + self.reference_point = list(reference_point) + else: + self.reference_point = reference_point + + self._hypervolume_plus = -inf + self._hypervolume = 0 + + # set the ideal point and weights used for normalization + self._weights = [1] * self.n_obj + self._ideal_point = None + self._weights_ideal_point = [1] * self.n_obj + self._hv_factor = 1 + + self.weights(weights) + self.ideal_point(ideal_point) + + def in_domain(self, f_vals, reference_point=None): + """return `True` if `f_vals` is dominating the reference point, + + `False` otherwise. `True` means that `f_vals` contributes to + the hypervolume if not dominated by other elements. + + `f_vals` may also be an index in `self` in which case + ``self[f_vals]`` is tested to be in-domain. + + >>> from moarchiving import BiobjectiveNondominatedSortedList as NDA + >>> a = NDA([[2.2, 0.1], [0.5, 1]], reference_point=[2, 2]) + >>> assert len(a) == 1 + >>> a.in_domain([0, 0]) + True + >>> a.in_domain([2, 1]) + False + >>> all(a.in_domain(ai) for ai in a) + True + >>> a.in_domain(0) + True + >>> from moarchiving.get_archive import get_mo_archive + >>> archive3obj = get_mo_archive(reference_point=[3, 3, 3]) + >>> archive3obj.in_domain([2, 2, 2]) + True + >>> archive3obj.in_domain([0, 0, 3]) + False + >>> archive4obj = get_mo_archive(reference_point=[3, 3, 3, 3]) + >>> archive4obj.in_domain([2, 2, 2, 2]) + True + >>> archive4obj.in_domain([0, 0, 0, 3]) + False + + TODO: improve name? + """ + if reference_point is None: + reference_point = self.reference_point + if reference_point is None: + return True + try: + if self.n_obj == 2: + f_vals = self[f_vals] + else: + f_vals = list(self)[f_vals] + except TypeError: + pass + except IndexError: + raise # return None + if any(f_vals[i] >= reference_point[i] for i in range(self.n_obj)): + return False + return True + + def distance_to_hypervolume_area(self, f_vals): + """return the distance to the hypervolume area of the archive + + >>> from moarchiving.get_archive import get_mo_archive + >>> moa = get_mo_archive(reference_point=[1, 1, 1]) + >>> moa.distance_to_hypervolume_area([1, 2, 1]) + 1.0 + >>> moa.distance_to_hypervolume_area([1, 1, 1]) + 0.0 + >>> moa.distance_to_hypervolume_area([0, 0, 0]) + 0.0 + >>> moa.distance_to_hypervolume_area([4, 5, 1]) + 5.0 + """ + if self.reference_point is None: + return 0 + return sum([(max((0, f_vals[i] - self.reference_point[i])) * + self._weights_ideal_point[i] * self._weights[i]) ** 2 + for i in range(self.n_obj)]) ** 0.5 + + def weights(self, value=None): + """return hypervolume weights, set to `value` when ``value is not None`` and return previous value + + >>> from moarchiving.get_archive import get_mo_archive + >>> moa = get_mo_archive(reference_point=[1, 1, 1]) + >>> moa.weights([1, 2, 3]) + [1, 1, 1] + >>> moa.weights() + [1, 2, 3] + """ + if value is None: + try: + return self._weights + except AttributeError: + self._weights = None + return None + if len(value) != self.n_obj: + raise ValueError("{0} are not eligible weights when n_obj={1}".format(value, self.n_obj)) + value, self._weights = self._weights, value + + self._update_weights() + return value + + def ideal_point(self, value=None): + """return ideal point, set to `value` when ``value is not None`` and return previous value + + >>> from moarchiving.get_archive import get_mo_archive + >>> moa = get_mo_archive(reference_point=[1, 1, 1]) + >>> moa.ideal_point([0, 0, 0]) + >>> moa.ideal_point() + [0, 0, 0] + """ + if value is None: + try: + return self._ideal_point + except AttributeError: + self._ideal_point = None + return None + if len(value) != self.n_obj: + ValueError("{0} is not an eligible ideal point when n_obj={1}".format(value, self.n_obj)) + if self.reference_point is None: + raise ValueError("Ideal point can't be defined without the reference point") + if any(self.reference_point[i] <= value[i] for i in range(len(value))): + raise ValueError("{0} is not an eligible ideal point when reference_point={1}" + "(it must be smaller in all objectives)".format(value, self.reference_point)) + + value, self._ideal_point = self._ideal_point, value + self._weights_ideal_point = [1 / (self.reference_point[i] - self._ideal_point[i]) + for i in range(self.n_obj)] + self._update_weights() + return value + + def _update_weights(self): + """recalculates the hv_factor when weights or ideal point change. + + Also warns if the hypervolume_plus is not updated after changing weights or ideal point. + """ + self._hv_factor = math.prod(self._weights) * math.prod(self._weights_ideal_point) + + if (hasattr(self, '_hypervolume_plus') and self._hypervolume_plus and + -inf < self._hypervolume_plus < 0): + _warnings.warn("hypervolume_plus indicator was not updated after changing " + "weights or ideal point") + + def _set_HV(self): + """set current hypervolume value using `self.reference_point`. + + Also sets the hypervolume_plus indicator when hypervolume > 0. + + TODO: we may need to store the list of _contributing_ hypervolumes + to handle numerical rounding errors later. + """ + if self.reference_point is None: + return None + if self.n_obj == 2: + self._hypervolume = self._compute_hypervolume(self.reference_point) + else: + self._hypervolume = self._compute_hypervolume() + + if self._hypervolume > 0: + self._hypervolume_plus = self._hypervolume + return self._hypervolume + + def _compute_hypervolume(self, reference_point=None): + raise NotImplementedError("This method should be overridden in subclasses") + + def _update_hv_plus(self, list_of_f_vals): + """updates the hypervolume plus indicator with the new list of solutions `list_of_f_vals`. + + Needed when ``hypervolume == 0``. + """ + if self.reference_point is None: + self._hypervolume_plus = None + return None + + if self._hypervolume > 0: + self._hypervolume_plus = self._hypervolume + else: + for f in list_of_f_vals: + d = self.distance_to_hypervolume_area(f) + if d < - self._hypervolume_plus: + self._hypervolume_plus = -d + + @staticmethod + def _convert_and_validate_f_vals(list_of_f_vals, n_obj): + """converts `list_of_f_vals` to a list, ensures that the inner lists have correct length + """ + if list_of_f_vals is None or len(list_of_f_vals) == 0: + return [] + + try: + list_of_f_vals = list_of_f_vals.tolist() + except: + pass + list_of_f_vals = [list(f_vals) for f_vals in list_of_f_vals] + if len(list_of_f_vals[0]) != n_obj: + raise ValueError(f"need elements of length {n_obj}, got {list_of_f_vals[0]} as first element") + return list_of_f_vals diff --git a/moarchiving/moarchiving_parent.py b/moarchiving/moarchiving_parent.py index bc1f0dd..44ea388 100644 --- a/moarchiving/moarchiving_parent.py +++ b/moarchiving/moarchiving_parent.py @@ -6,42 +6,30 @@ from moarchiving.moarchiving_utils import setup_cdllist, weakly_dominates +from moarchiving.moarchiving_base import MOArchiveBase inf = float('inf') -class MOArchiveParent: +class MOArchiveParent(MOArchiveBase): """Parent class for Moarchiving 3 and 4 objective classes, to avoid code duplication """ - def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, n_obj=None, - hypervolume_final_float_type=None, - hypervolume_computation_float_type=None): + def __init__(self, list_of_f_vals=None, reference_point=None, infos=None, ideal_point=None, weights=None, + n_obj=None, hypervolume_final_float_type=None, hypervolume_computation_float_type=None): """Create a new archive object. """ - self.hypervolume_final_float_type = hypervolume_final_float_type - self.hypervolume_computation_float_type = hypervolume_computation_float_type - - if list_of_f_vals is not None and len(list_of_f_vals): - try: - list_of_f_vals = list_of_f_vals.tolist() - except: - pass - list_of_f_vals = [list(f_vals) for f_vals in list_of_f_vals] - if len(list_of_f_vals[0]) != n_obj: - raise ValueError(f"need elements of length {n_obj}, got {list_of_f_vals[0]}" - " as first element") - else: - list_of_f_vals = [] - self.n_obj = n_obj + + MOArchiveBase.__init__(self, reference_point=reference_point, ideal_point=ideal_point, weights=weights, + n_obj=n_obj, hypervolume_final_float_type=hypervolume_final_float_type, + hypervolume_computation_float_type=hypervolume_computation_float_type) + self._length = 0 if infos is None: infos = [None] * len(list_of_f_vals) - if reference_point is not None: - self.reference_point = list(reference_point) + if self.reference_point is not None: self.head = setup_cdllist(self.n_obj, list_of_f_vals, self.reference_point, infos) else: - self.reference_point = None self.head = setup_cdllist(self.n_obj, list_of_f_vals, [inf] * self.n_obj, infos) self._kink_points = None @@ -119,42 +107,9 @@ def dominators(self, f_val, number_only=False): break return dominators - def in_domain(self, f_vals, reference_point=None): - """return `True` if `f_vals` is dominating the reference point, - `False` otherwise. `True` means that `f_vals` contributes to - the hypervolume if not dominated by other elements. - - >>> from moarchiving.get_archive import get_mo_archive - >>> archive3obj = get_mo_archive(reference_point=[3, 3, 3]) - >>> archive3obj.in_domain([2, 2, 2]) - True - >>> archive3obj.in_domain([0, 0, 3]) - False - >>> archive4obj = get_mo_archive(reference_point=[3, 3, 3, 3]) - >>> archive4obj.in_domain([2, 2, 2, 2]) - True - >>> archive4obj.in_domain([0, 0, 0, 3]) - False - """ - - try: - if len(f_vals) != self.n_obj: - raise ValueError(f"argument `f_vals` must be of length {self.n_obj}, " - f"was ``{f_vals}``") - except TypeError: - raise TypeError(f"argument `f_vals` must be a list, was ``{f_vals}``") - - if reference_point is None: - reference_point = self.reference_point - if reference_point is None: - return True - - if any(f_vals[i] >= reference_point[i] for i in range(self.n_obj)): - return False - return True - def _points_generator(self, include_head=False): """returns the points in the archive in a form of a python generator + instead of a circular doubly linked list """ first_iter = True di = self.n_obj - 1 @@ -173,8 +128,7 @@ def _points_generator(self, include_head=False): @property def infos(self): - """`list` of complementary information corresponding to each archive entry, - corresponding to each of the points in the archive + """`list` of complementary information corresponding to each archive entry >>> from moarchiving.get_archive import get_mo_archive >>> moa = get_mo_archive([[1, 2, 3], [3, 2, 1], [2, 2, 2]], infos=["a", "b", "c"]) @@ -185,19 +139,22 @@ def infos(self): @property def hypervolume(self): - """Return the hypervolume of the archive """ + """return the hypervolume of the archive """ if self.reference_point is None: raise ValueError("to compute the hypervolume indicator a reference" " point is needed (must be given initially)") - return self._hypervolume + return self._hypervolume * self._hv_factor @property def hypervolume_plus(self): - """Return the hypervolume_plus of the archive """ + """return the hypervolume_plus of the archive """ if self.reference_point is None: raise ValueError("to compute the hypervolume_plus indicator a reference" " point is needed (must be given initially)") - return self._hypervolume_plus + if self._hypervolume_plus < 0: + return self._hypervolume_plus + else: + return self._hypervolume_plus * self._hv_factor @property def contributing_hypervolumes(self): @@ -205,7 +162,7 @@ def contributing_hypervolumes(self): return [self.contributing_hypervolume(point[:self.n_obj]) for point in self] def contributing_hypervolume(self, f_vals): - """Return the hypervolume contribution of a point in the archive + """return the hypervolume contribution of a point in the archive >>> from moarchiving.get_archive import get_mo_archive >>> get_mo_archive.hypervolume_final_float_type = float @@ -225,9 +182,9 @@ def contributing_hypervolume(self, f_vals): raise TypeError(f"argument `f_vals` must be a list, was ``{f_vals}``") if f_vals in self: - hv_before = self._hypervolume + hv_before = self.hypervolume removed_info = self.remove(f_vals) - hv_after = self._hypervolume + hv_after = self.hypervolume self.add(f_vals, info=removed_info) return hv_before - hv_after else: @@ -237,8 +194,9 @@ def _get_kink_points(self): raise NotImplementedError("This method should be implemented in the child class") def distance_to_pareto_front(self, f_vals, ref_factor=1): - """Return the distance to the Pareto front of the archive, - by calculating the distances to the kink points + """return the distance to the Pareto front of the archive, + + by calculating the minimum distance to the kink points >>> from moarchiving.get_archive import get_mo_archive >>> moa = get_mo_archive([[1, 2, 3], [3, 2, 1], [2, 2, 2]], reference_point=[5, 5, 5]) @@ -260,48 +218,23 @@ def distance_to_pareto_front(self, f_vals, ref_factor=1): ref_di = [0] * self.n_obj if len(self) == 0: - return sum([ref_di[i] ** 2 for i in range(self.n_obj)]) ** 0.5 + return sum([(r_di * w * w_ip) ** 2 for r_di, w, w_ip in + zip(ref_di, self._weights, self._weights_ideal_point)]) ** 0.5 if self._kink_points is None: self._kink_points = self._get_kink_points() - distances_squared = [] + dist_squared = [] for point in self._kink_points: - distances_squared.append(sum([max((0, f_vals[i] - point[i])) ** 2 - for i in range(self.n_obj)])) - return min(distances_squared) ** 0.5 - - def distance_to_hypervolume_area(self, f_vals): - """Return the distance to the hypervolume area of the archive - - >>> from moarchiving.get_archive import get_mo_archive - >>> moa = get_mo_archive(reference_point=[1, 1, 1]) - >>> moa.distance_to_hypervolume_area([1, 2, 1]) - 1.0 - >>> moa.distance_to_hypervolume_area([1, 1, 1]) - 0.0 - >>> moa.distance_to_hypervolume_area([0, 0, 0]) - 0.0 - >>> moa.distance_to_hypervolume_area([4, 5, 1]) - 5.0 - """ - if self.reference_point is None: - return 0 - return sum([max((0, f_vals[i] - self.reference_point[i])) ** 2 - for i in range(self.n_obj)])**0.5 + distances = [ref_di[i] if self.reference_point and point[i] == self.reference_point[i] + else max(0, f_vals[i] - point[i]) for i in range(self.n_obj)] + dist_squared.append(sum([(d * w * w_ip) ** 2 for d, w, w_ip in + zip(distances, self._weights, self._weights_ideal_point)])) + return min(dist_squared) ** 0.5 def hypervolume_improvement(self, f_vals): raise NotImplementedError("This method should be implemented in the child class") - def _set_HV(self): - """Set the hypervolume of the archive """ - if self.reference_point is None: - return None - self._hypervolume = self.hypervolume_final_float_type(self.compute_hypervolume()) - if self._hypervolume > 0: - self._hypervolume_plus = self._hypervolume - return self._hypervolume - def compute_hypervolume(self): raise NotImplementedError("This method should be implemented in the child class") diff --git a/moarchiving/moarchiving_utils.py b/moarchiving/moarchiving_utils.py index 70ca11e..2dc85ec 100644 --- a/moarchiving/moarchiving_utils.py +++ b/moarchiving/moarchiving_utils.py @@ -6,6 +6,29 @@ _warnings.warn('`sortedcontainers` module not installed, moarchiving for 3 and 4 objectives will not work') SortedKeyList = list +try: + import fractions +except ImportError: + _warnings.warn('`fractions` module not installed, arbitrary precision hypervolume computation not available') + +def true_fraction(val, copy=False): + """return a `fractions.Fraction` object from `val`. + + Fixes the issue that `Fraction` does not convert an `np.intc` or + `np.int32` type to infinite representation `int`. + """ + try: + fractions.Fraction + except NameError: + return val + if isinstance(val, fractions.Fraction): + if copy: # Fraction(.) is almost 20 times slower than float(.) + return fractions.Fraction(val) + return val + if not isinstance(val, (int, float)): + val = float(val) + return fractions.Fraction(val) + class DLNode: """ A class to represent a node in a doubly linked list. """ diff --git a/moarchiving/test.py b/moarchiving/test.py index 8832cb4..3575fe7 100644 --- a/moarchiving/test.py +++ b/moarchiving/test.py @@ -10,24 +10,29 @@ import moarchiving as moa import moarchiving.tests + def run_doctests(): for doctest_suite in [moa.moarchiving, - moa.moarchiving3obj, - moa.moarchiving4obj, - moa.moarchiving_parent, - moa.constrained_moarchive]: + moa.moarchiving3obj, + moa.moarchiving4obj, + moa.moarchiving_parent, + moa.constrained_moarchive, + moa.moarchiving_base]: print(f'doctest.testmod({doctest_suite})') print(doctest.testmod(doctest_suite)) + def run_unittests(): for unit_test_suite in [moa.tests.test_moarchiving2obj, moa.tests.test_moarchiving3obj, moa.tests.test_moarchiving4obj, moa.tests.test_constrained_moarchiving, - moa.tests.test_sorted_list]: + moa.tests.test_sorted_list, + moa.tests.test_normalization]: print(f'unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromModule({unit_test_suite}))') unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromModule(unit_test_suite)) + if __name__ == "__main__": tmp = moa.BiobjectiveNondominatedSortedList.make_expensive_asserts moa.BiobjectiveNondominatedSortedList.make_expensive_asserts = True @@ -35,6 +40,3 @@ def run_unittests(): run_doctests() run_unittests() - - moa.BiobjectiveNondominatedSortedList.make_expensive_asserts = tmp - # print(moa.moarching.BiobjectiveNondominatedSortedList.make_expensive_asserts) diff --git a/moarchiving/tests/__init__.py b/moarchiving/tests/__init__.py index 78f5284..f001040 100644 --- a/moarchiving/tests/__init__.py +++ b/moarchiving/tests/__init__.py @@ -5,4 +5,5 @@ test_moarchiving3obj, test_moarchiving4obj, test_constrained_moarchiving, - test_sorted_list) + test_sorted_list, + test_normalization) diff --git a/moarchiving/tests/test_normalization.py b/moarchiving/tests/test_normalization.py new file mode 100644 index 0000000..6453282 --- /dev/null +++ b/moarchiving/tests/test_normalization.py @@ -0,0 +1,284 @@ +""" Test the MOArchive3obj class """ +import math + +from moarchiving.get_archive import get_mo_archive, get_cmo_archive +from moarchiving.tests.point_sampling import get_non_dominated_points + +import unittest +import random + + +class TestNormalization(unittest.TestCase): + def test_weights_ideal_point_easy_2dim(self): + """ test the hypervolume after changing weights and ideal point in 2D """ + points = [[2, 1], [1, 4]] + moa = get_mo_archive(points, reference_point=[5, 5]) + self.assertEqual(moa.hypervolume, 13) + + moa.ideal_point([0, 0]) + self.assertAlmostEqual(moa.hypervolume, 13 / 25) + + moa.weights([0.5, 2]) + self.assertAlmostEqual(moa.hypervolume, 13 / 25) + + moa.weights([2, 3]) + self.assertAlmostEqual(moa.hypervolume, (13 / 25) * 6) + + moa.ideal_point([1, 1]) + self.assertAlmostEqual(moa.hypervolume, (13 / 16) * 6) + + def test_weights_ideal_point_easy_3dim(self): + """ test the hypervolume after changing weights and ideal point in 3D """ + points = [[1, 2, 3], [3, 2, 1]] + moa = get_mo_archive(points, reference_point=[4, 4, 4]) + self.assertEqual(moa.hypervolume, 10) + + moa.ideal_point([0, 0, 0]) + self.assertAlmostEqual(moa.hypervolume, 10 / (4 * 4 * 4)) + + moa.weights([0.5, 2, 1]) + self.assertAlmostEqual(moa.hypervolume, 10 / (4 * 4 * 4)) + + moa.weights([2, 3, 0.5]) + self.assertAlmostEqual(moa.hypervolume, (10 / (4 * 4 * 4)) * 3) + + moa.ideal_point([1, 1, 1]) + self.assertAlmostEqual(moa.hypervolume, (10 / (3 * 3 * 3)) * 3) + + def test_weights_ideal_point_easy_4dim(self): + """ test the hypervolume after changing weights and ideal point in 4D """ + points = [[1, 2, 3, 4], [4, 3, 2, 1]] + moa = get_mo_archive(points, reference_point=[5, 5, 5, 5]) + self.assertEqual(moa.hypervolume, 44) + + moa.ideal_point([0, 0, 0, 0]) + self.assertAlmostEqual(moa.hypervolume, 44 / (5 ** 4)) + + moa.weights([0.5, 2, 3, 1/3]) + self.assertAlmostEqual(moa.hypervolume, (44 / (5 ** 4))) + + moa.weights([0.2, 3, 0.5, 5]) + self.assertAlmostEqual(moa.hypervolume, (44 / (5 ** 4)) * 1.5) + + moa.ideal_point([1, 1, 1, 1]) + self.assertAlmostEqual(moa.hypervolume, (44 / (4 ** 4)) * 1.5) + + def test_hypervolume_after_weights_change(self): + """ test the hypervolume after weights update """ + for dim in [2, 3, 4]: + points = get_non_dominated_points(100, n_dim=dim) + moa = get_mo_archive(points, reference_point=[1] * dim) + hv = moa.hypervolume + moa.weights([2] * dim) + self.assertAlmostEqual(moa.hypervolume, hv * (2 ** dim)) + moa.weights([0.5] * dim) + self.assertAlmostEqual(moa.hypervolume, hv / (2 ** dim)) + + random_weights = [random.random() for _ in range(dim)] + moa.weights(random_weights) + + moa2 = get_mo_archive(points, reference_point=[1] * dim, weights=random_weights) + self.assertAlmostEqual(moa2.hypervolume, moa.hypervolume) + + def test_hypervolume_after_ideal_point_change(self): + """ test the hypervolume after ideal point update """ + for dim in [2, 3, 4]: + points = get_non_dominated_points(100, n_dim=dim) + moa = get_mo_archive(points, reference_point=[1] * dim) + hv = moa.hypervolume + moa.ideal_point([-1] * dim) + self.assertEqual(moa.hypervolume, hv / (2 ** dim)) + + def test_hypervolume_improvement(self): + """test the hypervolume improvement of a point, when using weights and ideal point""" + # 2D + moa = get_mo_archive([[1, 3], [3, 1]], reference_point=[4, 4]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2]), 1) + self.assertAlmostEqual(moa.hypervolume_improvement([3.5, 3.5]), -math.sqrt(0.5)) + + moa.weights([2, 1]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2]), 2) + self.assertAlmostEqual(moa.hypervolume_improvement([3.5, 3.5]), -math.sqrt(1.25)) + + moa.ideal_point([0, 0]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2]), 2 / 16) + self.assertAlmostEqual(moa.hypervolume_improvement([3.5, 3.5]), -math.sqrt((1/8)**2 + (1/4)**2)) + + # 3D + moa = get_mo_archive([[1, 2, 3], [3, 2, 1]], reference_point=[4, 4, 4]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2, 2]), 2) + self.assertAlmostEqual(moa.hypervolume_improvement([3.5, 3.5, 3.5]), -math.sqrt(0.5)) + + moa.weights([2, 3, 5]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2, 2]), 2 * (2 * 3 * 5)) + self.assertAlmostEqual(moa.hypervolume_improvement([3.5, 3.5, 3.5]), -math.sqrt((2/2)**2 + (5/2)**2)) + + moa.ideal_point([0, 0, 0]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2, 2]), 2 * (2 * 3 * 5) / (4 ** 3)) + self.assertAlmostEqual(moa.hypervolume_improvement([3.5, 3.5, 3.5]), -math.sqrt((2/8)**2 + (5/8)**2)) + + # 4D + moa = get_mo_archive([[1, 2, 3, 4], [4, 3, 2, 1]], reference_point=[5, 5, 5, 5]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2, 2, 2]), 49) + self.assertAlmostEqual(moa.hypervolume_improvement([4.5, 4.5, 4.5, 4.5]), -math.sqrt(0.5)) + + moa.weights([2, 3, 5, 7]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2, 2, 2]), 49 * (2 * 3 * 5 * 7)) + self.assertAlmostEqual(moa.hypervolume_improvement([4.5, 4.5, 4.5, 4.5]), -math.sqrt((2/2)**2 + (7/2)**2)) + + moa.ideal_point([0, 0, 0, 0]) + self.assertAlmostEqual(moa.hypervolume_improvement([2, 2, 2, 2]), 49 * (2 * 3 * 5 * 7) / (5 ** 4)) + self.assertAlmostEqual(moa.hypervolume_improvement([4.5, 4.5, 4.5, 4.5]), -math.sqrt((2/10)**2 + (7/10)**2)) + + + def test_contributing_hypervolume(self): + """test the contributing_hypervolume function with different weights and ideal points""" + # 2D + moa = get_mo_archive([[1, 3], [2, 2], [3, 1]], reference_point=[4, 4]) + self.assertAlmostEqual(moa.contributing_hypervolume([2, 2]), 1) + self.assertAlmostEqual(moa.contributing_hypervolume(1), 1) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 1]), 3) + + moa.weights([3, 5]) + self.assertAlmostEqual(moa.contributing_hypervolume([2, 2]), 15) + self.assertAlmostEqual(moa.contributing_hypervolume(1), 15) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 1]), 45) + + moa.ideal_point([0, 0]) + self.assertAlmostEqual(moa.contributing_hypervolume([2, 2]), 15/16) + self.assertAlmostEqual(moa.contributing_hypervolume(1), 15/16) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 1]), 45/16) + + # 3D + moa = get_mo_archive([[1, 2, 3], [3, 1, 2], [2, 3, 1]], reference_point=[4, 4, 4]) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 2, 3]), 3) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 1, 1]), 14) + + moa.weights([2, 3, 5]) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 2, 3]), 3 * 2 * 3 * 5) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 1, 1]), 14 * 2 * 3 * 5) + + moa.ideal_point([0, 0, 0]) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 2, 3]), 3 * 2 * 3 * 5 / 64) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 1, 1]), 14 * 2 * 3 * 5 / 64) + + # 4D + moa = get_mo_archive([[1, 2, 3, 4], [3, 4, 1, 2], [2, 3, 4, 1], [4, 1, 2, 3]], + reference_point=[5, 5, 5, 5]) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 2, 3, 4]), 13) + self.assertAlmostEqual(moa.contributing_hypervolume([2, 2, 2, 2]), 34) + + moa.weights([2, 3, 5, 0.1]) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 2, 3, 4]), 13 * 3) + self.assertAlmostEqual(moa.contributing_hypervolume([2, 2, 2, 2]), 34 * 3) + + moa.ideal_point([0, 0, 0, 0]) + self.assertAlmostEqual(moa.contributing_hypervolume([1, 2, 3, 4]), 13 * 3 / 625) + self.assertAlmostEqual(moa.contributing_hypervolume([2, 2, 2, 2]), 34 * 3 / 625) + + def test_hypervolume_plus(self): + """ test the hypervolume_plus indicator with different weights and ideal points """ + for get_archive, kwargs in zip([get_mo_archive, get_cmo_archive], + [{}, {"list_of_g_vals": [0, 0]}]): + # test weights only + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], weights=[1, 1], + **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt(2)) + + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], weights=[3, 1], + **kwargs) + self.assertEqual(moa.hypervolume_plus, -3) + + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], weights=[1, 3], + **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt(10)) + + moa.add_list([[0, 5], [3, 1.5]], **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt(2 ** 2 + 1.5 ** 2)) + + moa.add_list([[1, 3], [0.4, 1]], **kwargs) + self.assertEqual(moa.hypervolume_plus, 0) + + moa.add_list([[0.5, 0.5], [0.8, 0.7]], **kwargs) + self.assertEqual(moa.hypervolume_plus, 0.5 ** 2 * 3) + + # test ideal point only + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], + ideal_point=[-1, -1], **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt(0.5)) + + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], + ideal_point=[-3, -1], **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt(0.5**2 + 0.25**2)) + + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], + ideal_point=[-1, -3], **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt(0.5**2 + 0.25**2)) + + moa.add_list([[3, 1.5], [0, 3]], **kwargs) + self.assertEqual(moa.hypervolume_plus, -0.5) + + moa.add_list([[1, 3], [0.4, 1]], **kwargs) + self.assertEqual(moa.hypervolume_plus, 0) + + moa.add_list([[0.5, 0.5], [0.8, 0.7]], **kwargs) + self.assertEqual(moa.hypervolume_plus, 0.5 ** 2 / 8) + + # test both weights and ideal point + moa = get_archive([[2, 2], [1, 4]], reference_point=[1, 1], ideal_point=[-1, -2], + weights=[7, 2], **kwargs) + self.assertEqual(moa.hypervolume_plus, -2) + + moa.add_list([[0, 5], [1.5, 1.5]], **kwargs) + self.assertEqual(moa.hypervolume_plus, -math.sqrt((1/4 * 7) ** 2 + (1/6 * 2) ** 2)) + + moa.add_list([[1, 3], [0.4, 1]], **kwargs) + self.assertEqual(moa.hypervolume_plus, 0) + + moa.add_list([[0.5, 0.5], [0.8, 0.7]], **kwargs) + self.assertEqual(moa.hypervolume_plus, (1/4 * 1/6) * 2 * 7) + + def test_hypervolume_plus_constr(self): + """test the hypervolume_plus_constr indicator with different weights and ideal points""" + moa = get_cmo_archive([[2, 2], [1, 4]], list_of_g_vals=[[5, 3], [1, 2]], + reference_point=[1, 1], weights=[1, 1]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -(1 + (1 + 2))) + + moa.add([0, 5], [1, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -(1 + 1)) + + moa.add([3, 1], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -(1 + 0)) + + moa.add([0.5, 0.5], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, 0.25) + + moa = get_cmo_archive([[11, 7], [8, 9]], list_of_g_vals=[[0.5, 30], [0.1, 100]], + reference_point=[10, 10], ideal_point=[4, 2], weights=[7, 2], + tau=2, max_g_vals=[1, 100]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -(2 + 0.8)) + + moa.add([4, 14], [0.2, 30]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -(2 + 0.5)) + + moa.add([30, 50], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -2) + + moa.add([11, 5], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -7/6) + + moa.add([1, 11], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -1/4) + + moa.add([10.1, 10.1], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -((0.7/6) ** 2 + (0.2/8) ** 2) ** 0.5) + + moa.add([3, 3], [-6, 0.2]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, -((0.7/6) ** 2 + (0.2/8) ** 2) ** 0.5) + + moa.add([5, 7], [0, 0]) + self.assertAlmostEqual(moa.hypervolume_plus_constr, (15/48) * (2 * 7)) + + +if __name__ == '__main__': + unittest.main() diff --git a/readme_files/README_31_0.png b/readme_files/README_31_0.png deleted file mode 100644 index 7c447ca2cd06dbf24a94a72769ce4ee8686cb266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30055 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 diff --git a/readme_files/README_34_0.png b/readme_files/README_34_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e90c9e26e60080a4e323e4b80af38464dc0de48b GIT binary patch literal 30938 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 diff --git a/readme_files/README_37_1.png b/readme_files/README_37_1.png deleted file mode 100644 index 853caa9ee24f2bce97feeea5007dd3eb2bf2911b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35823 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 Dadp!P diff --git a/readme_files/README_38_1.png b/readme_files/README_38_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2af80eb460aed164db6390515ff22c365c629409 GIT binary patch literal 39756 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 Jvd$@?2>{_4^xgmf literal 0 HcmV?d00001 diff --git a/readme_files/README_40_1.png b/readme_files/README_40_1.png new file mode 100644 index 0000000000000000000000000000000000000000..976960844dedaf1a0bb6713b3e1f9c2860bb8945 GIT binary patch literal 35640 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 EKT3HLlK=n! literal 0 HcmV?d00001 From 3bbba460ce37f988ef4b0f8597dd5b9a2330e281 Mon Sep 17 00:00:00 2001 From: Nace Sever <47631585+naceee@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:02:51 +0200 Subject: [PATCH 2/3] truncated README.md --- README.md | 203 ------------------------------------------------------ 1 file changed, 203 deletions(-) diff --git a/README.md b/README.md index 81c2e1e..0f8e643 100644 --- a/README.md +++ b/README.md @@ -333,206 +333,3 @@ print(moa3_nofr.hypervolume) 161245156349030777798724819133399/10141204801825835211973625643008 15.899999999999999 - - -### 11. Additional functions -MOArchive also implements additional functions to check whether a given point is in the archive: -- `in_domain`: Is the point in the domain? -- `dominates`: Is the point dominated by the archive? -- `dominators`: Which points (and how many) dominate the given point? - - -```python -points_list = [[5, 5, 0], [2, 2, 3], [0, 2, 3]] -print("archive:", list(moa), "\n") -print("point | in domain | dominates | num of dominators | dominators") -print("----------|-----------|-----------|-------------------|-----------") -for point in points_list: - print(f"{point} | {moa.in_domain(point):9} | {moa.dominates(point):9} | " - f"{moa.dominators(point, number_only=True):17} | {moa.dominators(point)}") -``` - - archive: [[1, 3, 0], [3, 2, 1], [2, 2, 2], [1, 2, 3]] - - point | in domain | dominates | num of dominators | dominators - ----------|-----------|-----------|-------------------|----------- - [5, 5, 0] | 0 | 1 | 1 | [[1, 3, 0]] - [2, 2, 3] | 1 | 1 | 2 | [[2, 2, 2], [1, 2, 3]] - [0, 2, 3] | 1 | 0 | 0 | [] - - -### 12. Visualization of indicator values -By saving the values of indicators for each solution added to the archive, we can visualize their change over time. - - -```python -import matplotlib.pyplot as plt -import random - -n_obj = 3 - -indicators_cmoa = [] -indicators_moa = [] -cmoa = get_cmo_archive(reference_point=[0.5] * n_obj, n_obj=n_obj, tau=0.2) -moa = get_mo_archive(reference_point=[0.1] * n_obj, n_obj=n_obj) - -for i in range(2000): - objectives = [random.random() for _ in range(n_obj)] - constraints = [max(random.random() - 0.1, 0), max(random.random() - 0.1, 0)] - - cmoa.add(objectives, constraints, info=f"point_{i}") - moa.add(objectives, info=f"point_{i}") - - indicators_cmoa.append((cmoa.hypervolume_plus_constr, cmoa.hypervolume_plus, cmoa.hypervolume)) - indicators_moa.append((moa.hypervolume_plus, moa.hypervolume)) - -``` - - -```python -fig, axs = plt.subplots(1, 2, figsize=(10, 5)) -axs[0].plot([x[2] for x in indicators_cmoa], label="hypervolume") -axs[0].plot([x[1] for x in indicators_cmoa], label="hypervolume_plus") -axs[0].plot([x[0] for x in indicators_cmoa], label="hypervolume_plus_constr") -axs[0].axhline(0, color="black", linestyle="--", zorder=0) -axs[0].axhline(-cmoa.tau, color="black", linestyle="--", zorder=0) -axs[0].set_title("Constrained MOArchive") -axs[0].legend() - -axs[1].plot([x[1] for x in indicators_moa], label="hypervolume") -axs[1].plot([x[0] for x in indicators_moa], label="hypervolume_plus") -axs[1].set_title("MOArchive") -axs[1].axhline(0, color="black", linestyle="--", zorder=0) -axs[1].legend() -plt.show() -``` - - - -![png](README_files/README_34_0.png) - - - -### 13. Performance tests - - -```python -import time -from moarchiving.tests.point_sampling import get_non_dominated_points -test_archive_sizes = [0] + [2 ** i for i in range(21)] - -get_mo_archive.hypervolume_computation_float_type = fractions.Fraction -get_mo_archive.hypervolume_final_float_type = fractions.Fraction -``` - -#### 13.1. Initializing the archive - - -```python -n_repeats = 100 -time_limit = 10 - -for n_obj in [2, 3, 4]: - print(f"Testing {n_obj} objectives") - times = [] - archive_sizes = [] - - for archive_size in test_archive_sizes: - points = get_non_dominated_points(archive_size, n_dim=n_obj) - t0 = time.time() - moa = [get_mo_archive(points, [1] * n_obj, n_obj=n_obj) - for _ in range(n_repeats)] - hv = [m.hypervolume for m in moa] - t1 = time.time() - - times.append(max((t1 - t0) / n_repeats, 10e-4)) - print(".", end="") - archive_sizes.append(archive_size) - - if t1 - t0 > time_limit: - break - print() - - plt.plot(archive_sizes, times, '-o', label=f"{n_obj} objectives") - -plt.title("Initialization and hypervolume computation") -plt.xlabel("Archive size") -plt.ylabel("Time [s]") -plt.yscale("log") -plt.xscale("log") -plt.grid(True) -plt.legend() -plt.show() -``` - - Testing 2 objectives - .............. - Testing 3 objectives - ............. - Testing 4 objectives - ......... - - - - -![png](README_files/README_38_1.png) - - - -#### 13.2. Adding a solution to an existing archive - - -```python -n_repeats = 10 -time_limit = 10 - -for n_obj in [2, 3, 4]: - print(f"Testing {n_obj} objectives") - times = [] - archive_sizes = [] - - for archive_size in test_archive_sizes: - - points = get_non_dominated_points(archive_size, n_dim=n_obj) - add_points = get_non_dominated_points(n_repeats, n_dim=n_obj) - moa = [get_mo_archive(points, [1] * n_obj, n_obj=n_obj) for _ in range(n_repeats)] - - t0 = time.time() - for i, m in enumerate(moa): - m.add(add_points[i]) - t1 = time.time() - - times.append(max((t1 - t0) / n_repeats, 10e-4)) - print(".", end="") - archive_sizes.append(archive_size) - - if t1 - t0 > time_limit: - break - print() - time.sleep(1) - - plt.plot(archive_sizes, times, '-o', label=f"{n_obj} objectives") - -plt.title("Adding a point to the archive") -plt.xlabel("Archive size") -plt.ylabel("Time [s]") -plt.yscale("log") -plt.xscale("log") -plt.grid(True) -plt.legend() -plt.show() -``` - - Testing 2 objectives - ...................... - Testing 3 objectives - ................ - Testing 4 objectives - ........... - - - - -![png](README_files/README_40_1.png) - - From 4ddcf07664383af5d631e85eab054c8113fc4275 Mon Sep 17 00:00:00 2001 From: Nace Sever <47631585+naceee@users.noreply.github.com> Date: Thu, 28 Aug 2025 11:34:36 +0200 Subject: [PATCH 3/3] removed .idea folder --- .idea/.gitignore | 8 ---- .idea/inspectionProfiles/Project_Default.xml | 38 ------------------- .../inspectionProfiles/profiles_settings.xml | 6 --- .idea/misc.xml | 7 ---- .idea/moarchiving.iml | 12 ------ .idea/modules.xml | 8 ---- .idea/vcs.xml | 6 --- 7 files changed, 85 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/moarchiving.iml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 8498417..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 49a70d7..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/moarchiving.iml b/.idea/moarchiving.iml deleted file mode 100644 index 8b8c395..0000000 --- a/.idea/moarchiving.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 62edb1e..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file