{ "cells": [ { "cell_type": "markdown", "id": "9bbdffe6", "metadata": {}, "source": [ "# Basic Usage\n", "\n", "This notebook demonstrates the basic usage of metalog-jax for fitting metalog distributions." ] }, { "cell_type": "code", "execution_count": 1, "id": "Hbol", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:37.486501Z", "iopub.status.busy": "2025-12-26T23:56:37.486291Z", "iopub.status.idle": "2025-12-26T23:56:38.635323Z", "shell.execute_reply": "2025-12-26T23:56:38.634827Z" } }, "outputs": [], "source": [ "import tempfile\n", "from pathlib import Path\n", "\n", "import jax.numpy as jnp\n", "import numpy as np\n", "from scipy.stats import t\n", "\n", "from metalog_jax.base import (\n", " MetalogBoundedness,\n", " MetalogFitMethod,\n", " MetalogInputData,\n", " MetalogParameters,\n", " MetalogPlotOptions,\n", " MetalogRandomVariableParameters,\n", ")\n", "from metalog_jax.metalog import (\n", " Metalog,\n", " fit,\n", ")\n", "from metalog_jax.utils import (\n", " DEFAULT_Y,\n", " HDRPRNGParameters,\n", " JaxUniformDistributionParameters,\n", ")" ] }, { "cell_type": "code", "execution_count": 2, "id": "MJUe", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.636638Z", "iopub.status.busy": "2025-12-26T23:56:38.636539Z", "iopub.status.idle": "2025-12-26T23:56:38.639492Z", "shell.execute_reply": "2025-12-26T23:56:38.639113Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([0.001 , 0.003 , 0.006 , 0.01 , 0.02 ,\n", " 0.03 , 0.04 , 0.05 , 0.06 , 0.07 ,\n", " 0.08 , 0.09 , 0.09999999, 0.11 , 0.12 ,\n", " 0.13 , 0.14 , 0.14999999, 0.16 , 0.17 ,\n", " 0.17999999, 0.19 , 0.19999999, 0.21 , 0.22 ,\n", " 0.22999999, 0.24 , 0.25 , 0.26 , 0.26999998,\n", " 0.28 , 0.29 , 0.29999998, 0.31 , 0.32 ,\n", " 0.32999998, 0.34 , 0.35 , 0.35999998, 0.37 ,\n", " 0.38 , 0.39 , 0.39999998, 0.41 , 0.42 ,\n", " 0.42999998, 0.44 , 0.45 , 0.45999998, 0.47 ,\n", " 0.48 , 0.48999998, 0.5 , 0.51 , 0.52 ,\n", " 0.53 , 0.53999996, 0.55 , 0.56 , 0.57 ,\n", " 0.58 , 0.59 , 0.59999996, 0.61 , 0.62 ,\n", " 0.63 , 0.64 , 0.65 , 0.65999997, 0.66999996,\n", " 0.68 , 0.69 , 0.7 , 0.71 , 0.71999997,\n", " 0.72999996, 0.74 , 0.75 , 0.76 , 0.77 ,\n", " 0.78 , 0.78999996, 0.79999995, 0.81 , 0.82 ,\n", " 0.83 , 0.84 , 0.84999996, 0.85999995, 0.87 ,\n", " 0.88 , 0.89 , 0.9 , 0.90999997, 0.91999996,\n", " 0.93 , 0.94 , 0.95 , 0.96 , 0.96999997,\n", " 0.97999996, 0.98999995, 0.994 , 0.997 , 0.999 ], dtype=float32)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# default quantiles used to fit metalog, overrideable by user\n", "DEFAULT_Y" ] }, { "cell_type": "code", "execution_count": 3, "id": "vblA", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.640359Z", "iopub.status.busy": "2025-12-26T23:56:38.640294Z", "iopub.status.idle": "2025-12-26T23:56:38.652007Z", "shell.execute_reply": "2025-12-26T23:56:38.651573Z" } }, "outputs": [], "source": [ "# input data\n", "dist = t(df=6, loc=50, scale=5)\n", "rvs = jnp.array(dist.rvs(size=1000, random_state=42))\n", "ppf = jnp.array(dist.ppf(DEFAULT_Y))" ] }, { "cell_type": "code", "execution_count": 4, "id": "bkHC", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.653347Z", "iopub.status.busy": "2025-12-26T23:56:38.653276Z", "iopub.status.idle": "2025-12-26T23:56:38.844879Z", "shell.execute_reply": "2025-12-26T23:56:38.844563Z" } }, "outputs": [], "source": [ "# init MetalogInputData object from quantiles\n", "# MUST use `from_values` - performs validity checks\n", "data = MetalogInputData.from_values(x=ppf, y=DEFAULT_Y, precomputed_quantiles=True) # noqa: F841" ] }, { "cell_type": "code", "execution_count": 5, "id": "lEQa", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.846458Z", "iopub.status.busy": "2025-12-26T23:56:38.846393Z", "iopub.status.idle": "2025-12-26T23:56:38.887314Z", "shell.execute_reply": "2025-12-26T23:56:38.886864Z" } }, "outputs": [], "source": [ "# init MetalogInputData object from raw data\n", "# MUST use `from_values` - performs validity checks\n", "data_1 = MetalogInputData.from_values(\n", " x=rvs, y=DEFAULT_Y, precomputed_quantiles=False\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "PKri", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.888415Z", "iopub.status.busy": "2025-12-26T23:56:38.888349Z", "iopub.status.idle": "2025-12-26T23:56:38.890027Z", "shell.execute_reply": "2025-12-26T23:56:38.889724Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Container for input data used to fit metalog distributions.\n", "\n", " This dataclass encapsulates the input data for metalog fitting, supporting two modes:\n", " (1) fitting from pre-computed quantiles at specified probability levels, or\n", " (2) fitting from raw sample data where quantiles are computed automatically.\n", "\n", " The mode is controlled by the `precomputed_quantiles` flag, which determines how\n", " the `x` array should be interpreted and processed during fitting.\n", "\n", " **IMPORTANT**: Instances MUST be created using the `from_values()` classmethod.\n", " Direct instantiation via `__init__()` is prevented by a `__post_init__` validation\n", " that raises `TypeError` if the instance was not created through `from_values()`.\n", "\n", " Attributes:\n", " x: Input data array. The interpretation depends on `precomputed_quantiles`:\n", " - If `precomputed_quantiles=True`: Array of quantile values\n", " - If `precomputed_quantiles=False`: Array of raw sample data\n", "\n", " y: Array of probability levels in the open interval (0, 1), sorted in ascending\n", " order.\n", "\n", " precomputed_quantiles: Flag indicating the interpretation of `x`.\n", "\n", " See Also:\n", " MetalogBaseData: Parent class without validation (for advanced use).\n", " from_values: Required factory method for creating validated instances.\n", " metalog_jax.metalog.fit: Function that uses MetalogInputData for fitting.\n", " \n" ] } ], "source": [ "print(MetalogInputData.__doc__)" ] }, { "cell_type": "code", "execution_count": 7, "id": "Xref", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.890902Z", "iopub.status.busy": "2025-12-26T23:56:38.890832Z", "iopub.status.idle": "2025-12-26T23:56:38.892450Z", "shell.execute_reply": "2025-12-26T23:56:38.892091Z" } }, "outputs": [], "source": [ "# init MetalogParameters\n", "metalog_params = MetalogParameters(\n", " boundedness=MetalogBoundedness.UNBOUNDED,\n", " lower_bound=0,\n", " upper_bound=1,\n", " method=MetalogFitMethod.OLS,\n", " num_terms=5,\n", ")" ] }, { "cell_type": "code", "execution_count": 8, "id": "SFPL", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.893368Z", "iopub.status.busy": "2025-12-26T23:56:38.893305Z", "iopub.status.idle": "2025-12-26T23:56:38.894816Z", "shell.execute_reply": "2025-12-26T23:56:38.894544Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Configuration parameters for standard regression-based metalog distributions.\n", "\n", " Extends MetalogParametersBase with regression-specific parameters for fitting\n", " metalog distributions via regression methods including OLS and Lasso.\n", "\n", " Attributes:\n", " boundedness: Inherited. Type of domain constraint for the distribution.\n", " Defined in metalog_jax.base.enums.MetalogBoundedness.\n", " lower_bound: Inherited. Lower boundary value.\n", " upper_bound: Inherited. Upper boundary value.\n", " method: Regression method used for fitting. One of:\n", " - MetalogFitMethod.OLS: metalog_jax.regression.ols\n", " - MetalogFitMethod.Lasso: metalog_jax.regression.lasso\n", " num_terms: Number of terms in the metalog series expansion.\n", "\n", " See Also:\n", " MetalogParametersBase: Parent class with boundedness and bound attributes.\n", " metalog_jax.base.enums.MetalogFitMethod: Enumeration of regression methods.\n", " metalog_jax.metalog.fit: Function that uses MetalogParameters for fitting.\n", " metalog_jax.regression: Module containing regression implementations.\n", " \n" ] } ], "source": [ "print(MetalogParameters.__doc__)" ] }, { "cell_type": "code", "execution_count": 9, "id": "BYtC", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.895631Z", "iopub.status.busy": "2025-12-26T23:56:38.895561Z", "iopub.status.idle": "2025-12-26T23:56:38.897305Z", "shell.execute_reply": "2025-12-26T23:56:38.897033Z" } }, "outputs": [ { "data": { "text/plain": [ "['UNBOUNDED', 'STRICTLY_LOWER_BOUND', 'STRICTLY_UPPER_BOUND', 'BOUNDED']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# boundedness options\n", "list(MetalogBoundedness.__members__.keys())" ] }, { "cell_type": "code", "execution_count": 10, "id": "RGSE", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.898101Z", "iopub.status.busy": "2025-12-26T23:56:38.898047Z", "iopub.status.idle": "2025-12-26T23:56:38.899800Z", "shell.execute_reply": "2025-12-26T23:56:38.899474Z" } }, "outputs": [ { "data": { "text/plain": [ "['OLS', 'Lasso']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fit options\n", "list(MetalogFitMethod.__members__.keys())" ] }, { "cell_type": "code", "execution_count": 11, "id": "Kclp", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.900594Z", "iopub.status.busy": "2025-12-26T23:56:38.900543Z", "iopub.status.idle": "2025-12-26T23:56:38.995667Z", "shell.execute_reply": "2025-12-26T23:56:38.995219Z" } }, "outputs": [], "source": [ "# fit metalog, return distribution object\n", "metalog = fit(data_1, metalog_params)" ] }, { "cell_type": "code", "execution_count": 12, "id": "emfo", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.996786Z", "iopub.status.busy": "2025-12-26T23:56:38.996719Z", "iopub.status.idle": "2025-12-26T23:56:38.998462Z", "shell.execute_reply": "2025-12-26T23:56:38.998202Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fit a metalog distribution to data using the specified configuration.\n", "\n", " Estimates the metalog distribution coefficients by solving a linear regression\n", " problem that maps the basis functions (target matrix) to the transformed quantiles.\n", " The regression method specified in metalog_params determines the fitting approach,\n", " and optional regression_hyperparams allow fine-tuning of regularization settings.\n", "\n", " This function processes a `MetalogInputData` instance containing validated input\n", " data (quantiles and probability levels) and fits a metalog distribution according\n", " to the specified parameters. The data must be created using `MetalogInputData.from_values()`\n", " which performs comprehensive validation.\n", "\n", " Args:\n", " data: Validated input data created via `MetalogInputData.from_values()`.\n", " Contains:\n", " - x: Quantile values (precomputed or computed from raw samples)\n", " - y: Probability levels in (0, 1)\n", " - precomputed_quantiles: Flag indicating data type\n", " Direct instantiation of `MetalogInputData` is prevented by `__post_init__`\n", " validation to ensure data integrity.\n", " metalog_params: Configuration parameters specifying the distribution\n", " characteristics (boundedness, bounds, number of terms) and the regression\n", " method to use for fitting. The method field determines which regression\n", " approach is used:\n", " - MetalogFitMethod.OLS: Ordinary Least Squares (no regularization)\n", " - MetalogFitMethod.Lasso: L1 regularization\n", " regression_hyperparams: Optional regularization hyperparameters for controlling\n", " the fitting process when using LASSO regression method.\n", " This parameter is ignored when method=OLS. If None, default hyperparameters\n", " are used. Must be an instance of LassoParameters for MetalogFitMethod.Lasso.\n", "\n", " Returns:\n", " Metalog containing the fitted coefficient vector and the configuration\n", " parameters used to fit the metalog distribution.\n", "\n", " Raises:\n", " TypeError: If metalog_params.method is not a valid MetalogFitMethod instance.\n", "\n", " Example:\n", " Basic usage with OLS (no regularization):\n", "\n", " >>> import jax.numpy as jnp\n", " >>> from metalog_jax.base import MetalogInputData, MetalogParameters\n", " >>> from metalog_jax.base import MetalogBoundedness, MetalogFitMethod\n", " >>> from metalog_jax.metalog import fit\n", " >>>\n", " >>> # Create validated input data using from_values()\n", " >>> raw_data = jnp.array([1.2, 2.3, 2.8, 3.5, 4.1, 5.6])\n", " >>> data = MetalogInputData.from_values(\n", " ... x=raw_data,\n", " ... y=jnp.array([0.1, 0.25, 0.5, 0.75, 0.9, 0.95]),\n", " ... precomputed_quantiles=False # Raw samples, not precomputed quantiles\n", " ... )\n", " >>>\n", " >>> # Configure metalog parameters with OLS\n", " >>> metalog_params = MetalogParameters(\n", " ... boundedness=MetalogBoundedness.UNBOUNDED,\n", " ... method=MetalogFitMethod.OLS,\n", " ... lower_bound=0.0,\n", " ... upper_bound=0.0,\n", " ... num_terms=5\n", " ... )\n", " >>>\n", " >>> # Fit the metalog distribution\n", " >>> m = fit(data, metalog_params)\n", "\n", " Note:\n", " - The regression_hyperparams parameter is only applicable for LASSO method.\n", " It is ignored when using OLS.\n", " - If regression_hyperparams is None, sensible defaults are used for each method.\n", " - For production use, consider tuning regularization hyperparameters via\n", " cross-validation to prevent overfitting while maintaining good fit quality.\n", "\n", " See Also:\n", " fit_spt_metalog: Alternative fitting method using Symmetric Percentile Triplet.\n", " MetalogInputData.from_values: Required method for creating validated input data.\n", " metalog_jax.regression.lasso.LassoParameters: Hyperparameters for LASSO regression.\n", " \n" ] } ], "source": [ "print(fit.__doc__)" ] }, { "cell_type": "code", "execution_count": 13, "id": "Hstk", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:38.999800Z", "iopub.status.busy": "2025-12-26T23:56:38.999735Z", "iopub.status.idle": "2025-12-26T23:56:39.023261Z", "shell.execute_reply": "2025-12-26T23:56:39.022855Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([29.95720124, 32.93275555, 34.81879152, 36.2188533 , 38.14703942,\n", " 39.30244363, 40.14225617, 40.80945681, 41.3676083 , 41.85055668,\n", " 42.27846637, 42.66432549, 43.01698605, 43.34275495, 43.64628225,\n", " 43.931095 , 44.19993401, 44.4549694 , 44.69795139, 44.93031086,\n", " 45.15323358, 45.36771415, 45.57459486, 45.77459613, 45.96833968,\n", " 46.15636517, 46.33914684, 46.51710131, 46.69059874, 46.85997024,\n", " 47.02551305, 47.18749501, 47.34615984, 47.50173044, 47.65440987,\n", " 47.80438709, 47.9518366 , 48.09692012, 48.23979035, 48.38059019,\n", " 48.51945489, 48.65651264, 48.79188681, 48.92569471, 49.05804937,\n", " 49.18906136, 49.31883854, 49.44748421, 49.57510249, 49.70179578,\n", " 49.82766445, 49.95281037, 50.077335 , 50.20134075, 50.32493127,\n", " 50.44821227, 50.57129174, 50.69428103, 50.81729265, 50.94044617,\n", " 51.06386405, 51.18767504, 51.31201344, 51.43702159, 51.56284711,\n", " 51.68964974, 51.81759775, 51.94687094, 52.07766242, 52.21017959,\n", " 52.34464746, 52.48130744, 52.6204244 , 52.76228656, 52.90721063,\n", " 53.05554552, 53.20767717, 53.36403285, 53.52509089, 53.6913887 ,\n", " 53.8635321 , 54.04220819, 54.22820264, 54.42242037, 54.62590514,\n", " 54.83988112, 55.06579042, 55.30534887, 55.56062442, 55.83414245,\n", " 56.12902185, 56.44919672, 56.79971684, 57.18721903, 57.62068126,\n", " 58.1126676 , 58.68154566, 59.35575938, 60.18288371, 61.2519739 ,\n", " 62.76267122, 65.35101985, 67.26032398, 69.85108314, 73.95582464], dtype=float64)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get quantiles from fitted metalog\n", "metalog.ppf(DEFAULT_Y)" ] }, { "cell_type": "code", "execution_count": 14, "id": "nWHF", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.024428Z", "iopub.status.busy": "2025-12-26T23:56:39.024348Z", "iopub.status.idle": "2025-12-26T23:56:39.026511Z", "shell.execute_reply": "2025-12-26T23:56:39.026149Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the percent point function (quantile function) of the distribution.\n", "\n", " The PPF is the inverse of the CDF: for a probability p, ppf(p) returns\n", " the value x such that P(X <= x) = p.\n", "\n", " Args:\n", " x: Probability values in (0, 1) at which to evaluate the quantile function.\n", " Can be a scalar or array.\n", "\n", " Returns:\n", " chex.Numeric: Quantile values corresponding to the input probabilities.\n", " Same shape as input.\n", "\n", " Raises:\n", " ValueError: If x contains values outside (0, 1).\n", " NotFittedError: If the distribution has not been fitted.\n", " \n" ] } ], "source": [ "print(Metalog.ppf.__doc__)" ] }, { "cell_type": "code", "execution_count": 15, "id": "iLit", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.027420Z", "iopub.status.busy": "2025-12-26T23:56:39.027364Z", "iopub.status.idle": "2025-12-26T23:56:39.075094Z", "shell.execute_reply": "2025-12-26T23:56:39.074766Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([29.95720115, 32.93275553, 34.81879153, 36.21885333, 38.14703948,\n", " 39.30244362, 40.14225613, 40.80945687, 41.36760832, 41.85055673,\n", " 42.27846637, 42.66432548, 43.01698604, 43.34275496, 43.64628224,\n", " 43.93109502, 44.19993403, 44.4549694 , 44.69795141, 44.93031089,\n", " 45.15323357, 45.36771415, 45.57459487, 45.77459614, 45.9683397 ,\n", " 46.15636516, 46.33914685, 46.51710131, 46.69059872, 46.85997024,\n", " 47.02551304, 47.18749501, 47.34615984, 47.50173044, 47.65440986,\n", " 47.80438709, 47.9518366 , 48.09692012, 48.23979034, 48.38059019,\n", " 48.51945489, 48.65651265, 48.79188681, 48.92569471, 49.05804937,\n", " 49.18906136, 49.31883854, 49.44748421, 49.57510249, 49.70179578,\n", " 49.82766445, 49.95281037, 50.077335 , 50.20134075, 50.32493127,\n", " 50.44821227, 50.57129174, 50.69428103, 50.81729265, 50.94044617,\n", " 51.06386405, 51.18767504, 51.31201344, 51.43702159, 51.56284711,\n", " 51.68964974, 51.81759775, 51.94687094, 52.07766242, 52.21017959,\n", " 52.34464746, 52.48130744, 52.6204244 , 52.76228657, 52.90721063,\n", " 53.05554553, 53.20767718, 53.36403285, 53.5250909 , 53.69138869,\n", " 53.86353209, 54.0422082 , 54.22820263, 54.42242037, 54.62590514,\n", " 54.83988111, 55.06579044, 55.30534886, 55.56062442, 55.83414247,\n", " 56.12902183, 56.44919671, 56.79971682, 57.18721904, 57.62068125,\n", " 58.11266754, 58.68154567, 59.35575943, 60.18288375, 61.25197384,\n", " 62.76267123, 65.35101987, 67.2603241 , 69.85108303, 73.95582457], dtype=float64)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get quantiles from fitted metalog, compatible with rmetalog API\n", "metalog.q(DEFAULT_Y)" ] }, { "cell_type": "code", "execution_count": 16, "id": "ZHCJ", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.076198Z", "iopub.status.busy": "2025-12-26T23:56:39.076133Z", "iopub.status.idle": "2025-12-26T23:56:39.078249Z", "shell.execute_reply": "2025-12-26T23:56:39.077906Z" } }, "outputs": [], "source": [ "# results are identical\n", "ppf_1 = metalog.ppf(DEFAULT_Y)\n", "q = metalog.q(DEFAULT_Y)\n", "np.testing.assert_allclose(ppf_1, q)" ] }, { "cell_type": "code", "execution_count": 17, "id": "ROlb", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.079060Z", "iopub.status.busy": "2025-12-26T23:56:39.079001Z", "iopub.status.idle": "2025-12-26T23:56:39.092956Z", "shell.execute_reply": "2025-12-26T23:56:39.092690Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([3.39976974, 3.49446777, 3.55015723, 3.58957979, 3.64144815,\n", " 3.6712867 , 3.69242955, 3.70891384, 3.72249817, 3.7341051 ,\n", " 3.74427789, 3.7533631 , 3.76159506, 3.76913956, 3.77611811,\n", " 3.78262238, 3.7887233 , 3.79447675, 3.79992767, 3.80511264,\n", " 3.8100619 , 3.81480071, 3.81935043, 3.82372927, 3.82795289,\n", " 3.83203487, 3.83598711, 3.83982002, 3.84354283, 3.8471638 ,\n", " 3.85069029, 3.85412892, 3.85748571, 3.86076614, 3.86397517,\n", " 3.86711742, 3.8701971 , 3.87321814, 3.87618421, 3.8790987 ,\n", " 3.88196485, 3.88478567, 3.88756405, 3.89030271, 3.89300428,\n", " 3.89567127, 3.89830613, 3.90091118, 3.90348874, 3.90604106,\n", " 3.90857034, 3.91107877, 3.91356851, 3.91604173, 3.91850061,\n", " 3.92094731, 3.92338406, 3.9258131 , 3.9282367 , 3.93065723,\n", " 3.93307709, 3.93549878, 3.9379249 , 3.94035818, 3.9428014 ,\n", " 3.94525756, 3.94772982, 3.95022148, 3.95273611, 3.95527749,\n", " 3.95784969, 3.96045706, 3.96310434, 3.96579667, 3.96853964,\n", " 3.97133939, 3.97420269, 3.97713698, 3.98015053, 3.98325263,\n", " 3.98645366, 3.98976537, 3.99320112, 3.99677621, 4.00050822,\n", " 4.00441769, 4.00852866, 4.01286963, 4.01747476, 4.02238555,\n", " 4.027653 , 4.03334106, 4.03953134, 4.04633043, 4.05388155,\n", " 4.06238367, 4.07212529, 4.08354916, 4.09738799, 4.11499608,\n", " 4.13936049, 4.17977305, 4.20857052, 4.24636559, 4.30346795], dtype=float64)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# can also get logppf\n", "metalog.logppf(DEFAULT_Y)" ] }, { "cell_type": "code", "execution_count": 18, "id": "qnkX", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.094006Z", "iopub.status.busy": "2025-12-26T23:56:39.093936Z", "iopub.status.idle": "2025-12-26T23:56:39.095538Z", "shell.execute_reply": "2025-12-26T23:56:39.095240Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the natural logarithm of the percent point function.\n", "\n", " Args:\n", " x: Probability values in (0, 1) at which to evaluate log(PPF).\n", "\n", " Returns:\n", " chex.Numeric: Log-quantile values. Same shape as input.\n", " \n" ] } ], "source": [ "print(Metalog.logppf.__doc__)" ] }, { "cell_type": "code", "execution_count": 19, "id": "TqIu", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.096325Z", "iopub.status.busy": "2025-12-26T23:56:39.096274Z", "iopub.status.idle": "2025-12-26T23:56:39.288065Z", "shell.execute_reply": "2025-12-26T23:56:39.287657Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([0.999 , 0.997 , 0.994 , 0.99 , 0.98 ,\n", " 0.97 , 0.96000004, 0.95000005, 0.94000006, 0.93000007,\n", " 0.92 , 0.91 , 0.90000004, 0.89000005, 0.88000005,\n", " 0.87000006, 0.8600001 , 0.8500001 , 0.8400001 , 0.8300001 ,\n", " 0.8200001 , 0.8100001 , 0.8000001 , 0.7900001 , 0.7800001 ,\n", " 0.7700001 , 0.7600001 , 0.7500001 , 0.7400001 , 0.73000014,\n", " 0.72000015, 0.71000016, 0.70000017, 0.6900002 , 0.6800002 ,\n", " 0.6700002 , 0.6600002 , 0.6500002 , 0.6400002 , 0.63000023,\n", " 0.62000024, 0.6100002 , 0.6000002 , 0.5900002 , 0.5800002 ,\n", " 0.57000023, 0.56000024, 0.55000025, 0.54000026, 0.5300002 ,\n", " 0.5200002 , 0.5100002 , 0.50000024, 0.49000025, 0.48000026,\n", " 0.47000027, 0.46000028, 0.4500003 , 0.4400003 , 0.4300003 ,\n", " 0.4200003 , 0.41000032, 0.40000033, 0.39000034, 0.38000035,\n", " 0.37000036, 0.3600003 , 0.35000032, 0.34000033, 0.33000034,\n", " 0.32000035, 0.31000036, 0.30000037, 0.29000038, 0.2800004 ,\n", " 0.2700004 , 0.2600004 , 0.25000042, 0.24000043, 0.23000044,\n", " 0.22000045, 0.2100004 , 0.2000004 , 0.19000041, 0.18000042,\n", " 0.17000043, 0.16000044, 0.15000045, 0.14000046, 0.13000047,\n", " 0.12000048, 0.11000049, 0.1000005 , 0.09000051, 0.08000052,\n", " 0.07000047, 0.06000048, 0.05000049, 0.0400005 , 0.03000051,\n", " 0.02000052, 0.01000053, 0.00600052, 0.00300056, 0.00100052], dtype=float32)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# survival function\n", "metalog.sf(ppf_1)" ] }, { "cell_type": "code", "execution_count": 20, "id": "Vxnm", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.289062Z", "iopub.status.busy": "2025-12-26T23:56:39.288991Z", "iopub.status.idle": "2025-12-26T23:56:39.290692Z", "shell.execute_reply": "2025-12-26T23:56:39.290441Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the survival function (complement of CDF).\n", "\n", " The survival function is S(x) = 1 - F(x) = P(X > x).\n", "\n", " Args:\n", " x: Quantile values at which to evaluate the survival function.\n", "\n", " Returns:\n", " chex.Numeric: Survival probabilities in (0, 1). Same shape as input.\n", " \n" ] } ], "source": [ "print(Metalog.sf.__doc__)" ] }, { "cell_type": "code", "execution_count": 21, "id": "DnEU", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.291663Z", "iopub.status.busy": "2025-12-26T23:56:39.291606Z", "iopub.status.idle": "2025-12-26T23:56:39.307967Z", "shell.execute_reply": "2025-12-26T23:56:39.307561Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([73.95582464, 69.85108314, 67.26032398, 65.35104278, 62.76268264,\n", " 61.25198163, 60.18288371, 59.35575938, 58.68154566, 58.1126676 ,\n", " 57.62068359, 57.18722231, 56.79971684, 56.44919672, 56.12902185,\n", " 55.83414245, 55.56062644, 55.30535036, 55.06579194, 54.83988112,\n", " 54.62590514, 54.42242037, 54.22820418, 54.04220926, 53.8635321 ,\n", " 53.6913887 , 53.52509089, 53.36403285, 53.20767717, 53.05554641,\n", " 52.90721172, 52.76228724, 52.62042529, 52.48130744, 52.34464746,\n", " 52.21018049, 52.07766242, 51.94687094, 51.81759775, 51.68964974,\n", " 51.56284711, 51.43702159, 51.31201415, 51.18767585, 51.06386487,\n", " 50.94044698, 50.81729265, 50.69428103, 50.57129232, 50.44821227,\n", " 50.32493127, 50.20134075, 50.077335 , 49.95281055, 49.82766465,\n", " 49.70179599, 49.57510339, 49.44748421, 49.31883854, 49.18906221,\n", " 49.05804984, 48.92569518, 48.79188729, 48.65651264, 48.51945489,\n", " 48.38059019, 48.23979055, 48.09692014, 47.95183699, 47.80438787,\n", " 47.65440987, 47.50173044, 47.34616041, 47.1874956 , 47.02551382,\n", " 46.8599714 , 46.69059874, 46.51710131, 46.33914719, 46.15636592,\n", " 45.96834008, 45.77459697, 45.57459599, 45.36771415, 45.15323393,\n", " 44.93031155, 44.69795216, 44.45497059, 44.19993543, 43.931095 ,\n", " 43.64628225, 43.34275562, 43.01698683, 42.66432627, 42.27846858,\n", " 41.85055602, 41.3676083 , 40.80945746, 40.14225756, 39.30244697,\n", " 38.14704533, 36.21886762, 34.81878374, 32.93277491, 29.95716643], dtype=float64)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# inverse survival function\n", "metalog.isf(DEFAULT_Y)" ] }, { "cell_type": "code", "execution_count": 22, "id": "ulZA", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.308945Z", "iopub.status.busy": "2025-12-26T23:56:39.308873Z", "iopub.status.idle": "2025-12-26T23:56:39.310405Z", "shell.execute_reply": "2025-12-26T23:56:39.310148Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the inverse survival function (inverse complementary CDF).\n", "\n", " Returns the value x such that P(X > x) = q, equivalent to ppf(1 - q).\n", "\n", " Args:\n", " q: Probability values in (0, 1).\n", "\n", " Returns:\n", " chex.Numeric: Quantile values corresponding to survival probabilities.\n", " \n" ] } ], "source": [ "print(Metalog.isf.__doc__)" ] }, { "cell_type": "code", "execution_count": 23, "id": "ecfG", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.311211Z", "iopub.status.busy": "2025-12-26T23:56:39.311157Z", "iopub.status.idle": "2025-12-26T23:56:39.314488Z", "shell.execute_reply": "2025-12-26T23:56:39.314182Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([0.001 , 0.003 , 0.006 , 0.01 , 0.01999999,\n", " 0.02999998, 0.03999998, 0.04999997, 0.05999997, 0.06999996,\n", " 0.07999996, 0.08999995, 0.09999995, 0.10999994, 0.11999994,\n", " 0.12999994, 0.13999993, 0.14999992, 0.15999992, 0.16999991,\n", " 0.1799999 , 0.1899999 , 0.1999999 , 0.20999989, 0.21999988,\n", " 0.22999988, 0.23999988, 0.24999987, 0.25999987, 0.26999986,\n", " 0.27999985, 0.28999984, 0.29999983, 0.30999982, 0.31999984,\n", " 0.32999983, 0.33999982, 0.34999982, 0.3599998 , 0.3699998 ,\n", " 0.3799998 , 0.3899998 , 0.3999998 , 0.4099998 , 0.41999978,\n", " 0.42999977, 0.43999976, 0.44999975, 0.45999974, 0.46999976,\n", " 0.47999975, 0.48999974, 0.49999973, 0.50999975, 0.51999974,\n", " 0.52999973, 0.5399997 , 0.5499997 , 0.5599997 , 0.5699997 ,\n", " 0.5799997 , 0.5899997 , 0.59999967, 0.60999966, 0.61999965,\n", " 0.62999964, 0.6399997 , 0.6499997 , 0.65999967, 0.66999966,\n", " 0.67999965, 0.68999964, 0.69999963, 0.7099996 , 0.7199996 ,\n", " 0.7299996 , 0.7399996 , 0.7499996 , 0.7599996 , 0.76999956,\n", " 0.77999955, 0.7899996 , 0.7999996 , 0.8099996 , 0.8199996 ,\n", " 0.82999957, 0.83999956, 0.84999955, 0.85999954, 0.8699995 ,\n", " 0.8799995 , 0.8899995 , 0.8999995 , 0.9099995 , 0.9199995 ,\n", " 0.92999953, 0.9399995 , 0.9499995 , 0.9599995 , 0.9699995 ,\n", " 0.9799995 , 0.9899995 , 0.9939995 , 0.99699944, 0.9989995 ], dtype=float32)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get the percentile from an input value\n", "metalog.cdf(ppf_1)" ] }, { "cell_type": "code", "execution_count": 24, "id": "Pvdt", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.315426Z", "iopub.status.busy": "2025-12-26T23:56:39.315372Z", "iopub.status.idle": "2025-12-26T23:56:39.317005Z", "shell.execute_reply": "2025-12-26T23:56:39.316727Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the cumulative distribution function.\n", "\n", " Returns P(X <= q) for the fitted metalog distribution. Uses numerical\n", " inversion of the quantile function via nearest-neighbor lookup.\n", "\n", " Args:\n", " q: Quantile values at which to evaluate the CDF. Can be a scalar\n", " or 1D array.\n", "\n", " Returns:\n", " chex.Numeric: Probability values in (0, 1). Same shape as input.\n", " \n" ] } ], "source": [ "print(Metalog.cdf.__doc__)" ] }, { "cell_type": "code", "execution_count": 25, "id": "ZBYS", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.317824Z", "iopub.status.busy": "2025-12-26T23:56:39.317775Z", "iopub.status.idle": "2025-12-26T23:56:39.379306Z", "shell.execute_reply": "2025-12-26T23:56:39.378876Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([0.0003697 , 0.00110538, 0.00219771, 0.0036314 , 0.00709707,\n", " 0.0103947 , 0.01353201, 0.01651908, 0.0193665 , 0.02208461,\n", " 0.0246832 , 0.02717136, 0.02955746, 0.03184915, 0.03405339,\n", " 0.03617649, 0.03822416, 0.04020155, 0.04211331, 0.04396361,\n", " 0.04575619, 0.04749438, 0.04918117, 0.05081918, 0.05241073,\n", " 0.05395786, 0.05546233, 0.05692562, 0.05834901, 0.05973352,\n", " 0.06107998, 0.06238899, 0.06366098, 0.06489617, 0.06609462,\n", " 0.0672562 , 0.06838061, 0.06946741, 0.07051594, 0.07152547,\n", " 0.07249503, 0.07342356, 0.07430983, 0.07515249, 0.07595002,\n", " 0.07670078, 0.07740302, 0.07805486, 0.07865428, 0.07919917,\n", " 0.07968733, 0.08011645, 0.08048415, 0.08078795, 0.08102536,\n", " 0.08119379, 0.08129068, 0.08131342, 0.0812594 , 0.08112608,\n", " 0.08091092, 0.0806115 , 0.08022545, 0.07975054, 0.07918469,\n", " 0.07852601, 0.0777728 , 0.07692356, 0.07597709, 0.07493246,\n", " 0.07378905, 0.07254657, 0.07120511, 0.0697651 , 0.0682274 ,\n", " 0.06659324, 0.06486431, 0.0630427 , 0.06113093, 0.05913194,\n", " 0.05704906, 0.05488606, 0.05264705, 0.05033651, 0.04795927,\n", " 0.04552041, 0.04302528, 0.04047944, 0.03788862, 0.03525864,\n", " 0.03259545, 0.02990494, 0.027193 , 0.02446539, 0.02172771,\n", " 0.01898531, 0.01624327, 0.01350622, 0.01077825, 0.00806271,\n", " 0.00536187, 0.00267601, 0.00160514, 0.00080273, 0.00026772], dtype=float64)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# to get density of a percentile\n", "metalog.pdf(DEFAULT_Y)" ] }, { "cell_type": "code", "execution_count": 26, "id": "aLJB", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.380366Z", "iopub.status.busy": "2025-12-26T23:56:39.380298Z", "iopub.status.idle": "2025-12-26T23:56:39.382172Z", "shell.execute_reply": "2025-12-26T23:56:39.381695Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the probability density function of the metalog distribution.\n", "\n", " The PDF is computed as the reciprocal of the derivative of the quantile\n", " function (PPF), with appropriate transformations for bounded distributions.\n", "\n", " Args:\n", " x: Probability values in (0, 1) at which to evaluate the PDF.\n", " Can be a scalar or array.\n", "\n", " Returns:\n", " chex.Numeric: Probability density values. Same shape as input.\n", "\n", " Raises:\n", " ValueError: If x contains values outside (0, 1).\n", " NotFittedError: If the distribution has not been fitted.\n", " InvalidPDFError: If the PDF contains non-positive values, indicating\n", " an infeasible metalog fit.\n", " \n" ] } ], "source": [ "print(Metalog.pdf.__doc__)" ] }, { "cell_type": "code", "execution_count": 27, "id": "nHfw", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.383273Z", "iopub.status.busy": "2025-12-26T23:56:39.383214Z", "iopub.status.idle": "2025-12-26T23:56:39.406155Z", "shell.execute_reply": "2025-12-26T23:56:39.405748Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([-7.90282201, -6.80756844, -6.12033895, -5.61813663, -4.94807395,\n", " -4.56645915, -4.3026975 , -4.10323936, -3.9442106 , -3.81287423,\n", " -3.70163238, -3.60559174, -3.52141915, -3.44674456, -3.37982571,\n", " -3.31934586, -3.26428753, -3.21384968, -3.16739139, -3.12439295,\n", " -3.08442826, -3.04714385, -3.01224454, -2.97948153, -2.94864385,\n", " -2.91955183, -2.89205127, -2.86600969, -2.84131292, -2.81786194,\n", " -2.79557113, -2.77436648, -2.75418346, -2.73496662, -2.71666786,\n", " -2.69924606, -2.68266591, -2.66689763, -2.65191645, -2.63770173,\n", " -2.62423729, -2.61151038, -2.59951199, -2.58823602, -2.57767981,\n", " -2.56784335, -2.55872943, -2.55034339, -2.54269324, -2.53578944,\n", " -2.52964467, -2.52427405, -2.51969501, -2.51592741, -2.51299309,\n", " -2.51091645, -2.50972388, -2.50944424, -2.51010872, -2.51175077,\n", " -2.51440643, -2.51811395, -2.52291453, -2.52885179, -2.53597226,\n", " -2.54432531, -2.55396357, -2.56494312, -2.57732341, -2.59116805,\n", " -2.60654493, -2.62352651, -2.64219068, -2.66262133, -2.68490906,\n", " -2.70915213, -2.73545772, -2.76394298, -2.79473733, -2.82798414,\n", " -2.86384372, -2.90249593, -2.94414502, -2.98902455, -3.03740307,\n", " -3.0895945 , -3.14596737, -3.20696107, -3.27310453, -3.34504464,\n", " -3.42358266, -3.50973159, -3.60479582, -3.710496 , -3.82916708,\n", " -3.96408999, -4.12007656, -4.30460493, -4.53022508, -4.82050504,\n", " -5.22844318, -5.92342837, -6.43454126, -7.12749007, -8.22557539], dtype=float64)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# can also generate logpdf\n", "metalog.logpdf(DEFAULT_Y)" ] }, { "cell_type": "code", "execution_count": 28, "id": "xXTn", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.407190Z", "iopub.status.busy": "2025-12-26T23:56:39.407128Z", "iopub.status.idle": "2025-12-26T23:56:39.408727Z", "shell.execute_reply": "2025-12-26T23:56:39.408433Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the natural logarithm of the probability density function.\n", "\n", " Args:\n", " x: Probability values in (0, 1) at which to evaluate log(PDF).\n", "\n", " Returns:\n", " chex.Numeric: Log-density values. Same shape as input.\n", " \n" ] } ], "source": [ "print(Metalog.logpdf.__doc__)" ] }, { "cell_type": "code", "execution_count": 29, "id": "AjVT", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.409662Z", "iopub.status.busy": "2025-12-26T23:56:39.409601Z", "iopub.status.idle": "2025-12-26T23:56:39.411624Z", "shell.execute_reply": "2025-12-26T23:56:39.411244Z" } }, "outputs": [ { "data": { "text/plain": [ "JaxUniformDistributionParameters(seed=42)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# to generate samples from distribution, we first init a PRNG parameter object\n", "# below is standard jax PRNG\n", "uniform_prng_params = JaxUniformDistributionParameters(seed=42)\n", "uniform_prng_params" ] }, { "cell_type": "code", "execution_count": 30, "id": "pHFh", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.412550Z", "iopub.status.busy": "2025-12-26T23:56:39.412491Z", "iopub.status.idle": "2025-12-26T23:56:39.413986Z", "shell.execute_reply": "2025-12-26T23:56:39.413649Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Configuration parameters for a JAX uniform distribution.\n", "\n", " Attributes:\n", " seed: Seed for the psuedorandom number generator.\n", " \n" ] } ], "source": [ "print(JaxUniformDistributionParameters.__doc__)" ] }, { "cell_type": "code", "execution_count": 31, "id": "NCOB", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.414914Z", "iopub.status.busy": "2025-12-26T23:56:39.414840Z", "iopub.status.idle": "2025-12-26T23:56:39.416911Z", "shell.execute_reply": "2025-12-26T23:56:39.416570Z" } }, "outputs": [ { "data": { "text/plain": [ "HDRPRNGParameters(trial=1, variable=0, entity=0, time=0, agent=0)" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# below is Hubbard Decision Research PRNG\n", "hdr_prng_params = HDRPRNGParameters()\n", "hdr_prng_params" ] }, { "cell_type": "code", "execution_count": 32, "id": "aqbW", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.417787Z", "iopub.status.busy": "2025-12-26T23:56:39.417733Z", "iopub.status.idle": "2025-12-26T23:56:39.419233Z", "shell.execute_reply": "2025-12-26T23:56:39.419000Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Structure for Hubbard Decision Research Parameterized PRNG.\n", "\n", " See paper below:\n", "\n", " Douglas W. Hubbard.\n", " 2019.\n", " A multi-dimensional,\n", " counter-based psuedo random number generator\n", " as a standard for Monte Carlo simulations.\n", " In Proceedings of the Winter Simulation Conference.\n", " IEEE Press, 3064 - 3073.\n", "\n", " Attributes:\n", " trial: Seed representing the simulation trial or iteration. Defaults to 1.\n", " variable: Parameter representing the random variable being sampled. Defaults to 0.\n", " entity: Parameter representing the entity or object being simulated. Defaults to 0.\n", " time: Parameter representing the time step in the simulation. Defaults to 0.\n", " agent: Parameter representing the agent or actor in the simulation. Defaults to 0.\n", " \n" ] } ], "source": [ "print(HDRPRNGParameters.__doc__)" ] }, { "cell_type": "code", "execution_count": 33, "id": "TRpd", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.420142Z", "iopub.status.busy": "2025-12-26T23:56:39.420090Z", "iopub.status.idle": "2025-12-26T23:56:39.421556Z", "shell.execute_reply": "2025-12-26T23:56:39.421212Z" } }, "outputs": [], "source": [ "# init metalog RV parameters\n", "metalog_rv_params = MetalogRandomVariableParameters(\n", " prng_params=uniform_prng_params, size=10\n", ")" ] }, { "cell_type": "code", "execution_count": 34, "id": "TXez", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.422348Z", "iopub.status.busy": "2025-12-26T23:56:39.422296Z", "iopub.status.idle": "2025-12-26T23:56:39.423794Z", "shell.execute_reply": "2025-12-26T23:56:39.423460Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Configuration parameters for drawing rvs from fitted metalog distribution.\n", "\n", " Attributes:\n", " prng_params: Params for the psuedorandom number generator.\n", " size: The number of random variables to draw. Must be strictly positive.\n", " max_draws: Maximum number of draws for rejection sampling.\n", " \n" ] } ], "source": [ "print(MetalogRandomVariableParameters.__doc__)" ] }, { "cell_type": "code", "execution_count": 35, "id": "dNNg", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.424685Z", "iopub.status.busy": "2025-12-26T23:56:39.424614Z", "iopub.status.idle": "2025-12-26T23:56:39.656259Z", "shell.execute_reply": "2025-12-26T23:56:39.655927Z" } }, "outputs": [ { "data": { "text/plain": [ "Array([43.99698118, 49.25928511, 50.12823078, 54.48041821, 58.67536461,\n", " 44.92803401, 51.19635643, 49.72324526, 47.82517579, 54.10827222], dtype=float64)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# generate samples\n", "metalog.rvs(metalog_rv_params)" ] }, { "cell_type": "code", "execution_count": 36, "id": "yCnT", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.657271Z", "iopub.status.busy": "2025-12-26T23:56:39.657213Z", "iopub.status.idle": "2025-12-26T23:56:39.658865Z", "shell.execute_reply": "2025-12-26T23:56:39.658483Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generate random variates from the fitted metalog distribution.\n", "\n", " Samples are generated by drawing uniform random values and applying\n", " the quantile function (inverse transform sampling).\n", "\n", " Args:\n", " rv_params: Parameters controlling random variate generation, including\n", " PRNG configuration (HDR or JAX-based) and sample size.\n", "\n", " Returns:\n", " chex.Numeric: Random samples from the distribution, shape (size,).\n", "\n", " Raises:\n", " chex.AssertionError: If size is not positive or exceeds max_draws.\n", " InvalidPDFError: If the PDF is infeasible (contains non-positive values).\n", " \n" ] } ], "source": [ "print(Metalog.rvs.__doc__)" ] }, { "cell_type": "code", "execution_count": 37, "id": "wlCL", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.659718Z", "iopub.status.busy": "2025-12-26T23:56:39.659662Z", "iopub.status.idle": "2025-12-26T23:56:39.854850Z", "shell.execute_reply": "2025-12-26T23:56:39.854490Z" } }, "outputs": [ { "data": { "text/plain": [ "Array(50.03155654, dtype=float64)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get mean\n", "metalog.mean" ] }, { "cell_type": "code", "execution_count": 38, "id": "kqZH", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.855870Z", "iopub.status.busy": "2025-12-26T23:56:39.855802Z", "iopub.status.idle": "2025-12-26T23:56:39.857463Z", "shell.execute_reply": "2025-12-26T23:56:39.857173Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the mean (expected value) of the metalog distribution.\n", "\n", " Estimated via Monte Carlo sampling with 20,000 draws.\n", "\n", " Returns:\n", " chex.Scalar: The estimated mean of the distribution.\n", " \n" ] } ], "source": [ "print(Metalog.mean.__doc__)" ] }, { "cell_type": "code", "execution_count": 39, "id": "wAgl", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.858349Z", "iopub.status.busy": "2025-12-26T23:56:39.858289Z", "iopub.status.idle": "2025-12-26T23:56:39.986405Z", "shell.execute_reply": "2025-12-26T23:56:39.986035Z" } }, "outputs": [ { "data": { "text/plain": [ "Array(5.67292401, dtype=float64)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get standard deviation\n", "metalog.std" ] }, { "cell_type": "code", "execution_count": 40, "id": "rEll", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.987488Z", "iopub.status.busy": "2025-12-26T23:56:39.987433Z", "iopub.status.idle": "2025-12-26T23:56:39.989121Z", "shell.execute_reply": "2025-12-26T23:56:39.988765Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the standard deviation of the metalog distribution.\n", "\n", " Estimated via Monte Carlo sampling with 20,000 draws.\n", "\n", " Returns:\n", " chex.Scalar: The estimated standard deviation of the distribution.\n", " \n" ] } ], "source": [ "print(Metalog.std.__doc__)" ] }, { "cell_type": "code", "execution_count": 41, "id": "dGlV", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:39.990003Z", "iopub.status.busy": "2025-12-26T23:56:39.989943Z", "iopub.status.idle": "2025-12-26T23:56:40.157464Z", "shell.execute_reply": "2025-12-26T23:56:40.156765Z" } }, "outputs": [ { "data": { "text/plain": [ "Array(32.18206683, dtype=float64)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get variance\n", "metalog.var" ] }, { "cell_type": "code", "execution_count": 42, "id": "SdmI", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.159808Z", "iopub.status.busy": "2025-12-26T23:56:40.159630Z", "iopub.status.idle": "2025-12-26T23:56:40.162675Z", "shell.execute_reply": "2025-12-26T23:56:40.161809Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the variance of the metalog distribution.\n", "\n", " Estimated via Monte Carlo sampling with 20,000 draws.\n", "\n", " Returns:\n", " chex.Scalar: The estimated variance of the distribution.\n", " \n" ] } ], "source": [ "print(Metalog.var.__doc__)" ] }, { "cell_type": "code", "execution_count": 43, "id": "lgWD", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.165868Z", "iopub.status.busy": "2025-12-26T23:56:40.165632Z", "iopub.status.idle": "2025-12-26T23:56:40.310308Z", "shell.execute_reply": "2025-12-26T23:56:40.309910Z" } }, "outputs": [ { "data": { "text/plain": [ "Array(50.077335, dtype=float64)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get median\n", "metalog.median" ] }, { "cell_type": "code", "execution_count": 44, "id": "yOPj", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.311801Z", "iopub.status.busy": "2025-12-26T23:56:40.311705Z", "iopub.status.idle": "2025-12-26T23:56:40.313649Z", "shell.execute_reply": "2025-12-26T23:56:40.313295Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the median of the metalog distribution.\n", "\n", " The median is the 50th percentile, computed exactly via ppf(0.5).\n", "\n", " Returns:\n", " chex.Scalar: The median of the distribution.\n", " \n" ] } ], "source": [ "print(Metalog.median.__doc__)" ] }, { "cell_type": "code", "execution_count": 45, "id": "fwwy", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.314500Z", "iopub.status.busy": "2025-12-26T23:56:40.314444Z", "iopub.status.idle": "2025-12-26T23:56:40.420757Z", "shell.execute_reply": "2025-12-26T23:56:40.420376Z" } }, "outputs": [ { "data": { "text/plain": [ "Array(50.66968091, dtype=float64)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get mode\n", "metalog.mode" ] }, { "cell_type": "code", "execution_count": 46, "id": "LJZf", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.421957Z", "iopub.status.busy": "2025-12-26T23:56:40.421883Z", "iopub.status.idle": "2025-12-26T23:56:40.424801Z", "shell.execute_reply": "2025-12-26T23:56:40.424171Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compute the mode (most likely value) of the fitted metalog distribution.\n", "\n", " The mode is found by locating the maximum of the PDF over a fine grid\n", " of probability values.\n", "\n", " Returns:\n", " chex.Scalar: The mode of the distribution.\n", " \n" ] } ], "source": [ "print(Metalog.mode.__doc__)" ] }, { "cell_type": "code", "execution_count": 47, "id": "urSm", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.426813Z", "iopub.status.busy": "2025-12-26T23:56:40.426463Z", "iopub.status.idle": "2025-12-26T23:56:40.433707Z", "shell.execute_reply": "2025-12-26T23:56:40.433035Z" } }, "outputs": [ { "data": { "text/plain": [ "['PDF', 'CDF', 'SF']" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot options\n", "list(MetalogPlotOptions.__members__.keys())" ] }, { "cell_type": "code", "execution_count": 48, "id": "jxvo", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:40.435632Z", "iopub.status.busy": "2025-12-26T23:56:40.435415Z", "iopub.status.idle": "2025-12-26T23:56:44.117196Z", "shell.execute_reply": "2025-12-26T23:56:44.116743Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAH0CAYAAADfWf7fAAAQAElEQVR4AeydB2DcRN7Fn6S1nV4gEHrg6HBw1KMcPZSjfXSO0I5O6AQChPQOgRAIvcPRS45yBEILhN6PdvQDDgglJJT02N5dff8363XsxGXX3vW2Z2uk0Wg05Sdp9PTXaNYP9ScCIiACIiACIiACIiACRUzAh/5EQAREQAQACIIIiIAIiECxEpDgLdYjq3qJgAiIgAiIgAiIQEsIFOE+ErxFeFBVJREQAREQAREQAREQgcUEJHgXs5BPBEQgdQKKKQIiIAIiIAIFQ0CCt2AOlQoqAiIgAiIgAiKQfwRUokIgIMFbCEdJZRQBERABERABERABEWgxAQneFqPTjiKQOgHFFAEREAEREAERyB0BCd7csVfOIiACIiACIlBqBFRfEcgJAQnenGBXpiIgAiIgAiIgAiIgAm1FQIK3rUgrn9QJKKYIiIAIiIAIiIAIZJCABG8GYSopERABERABEcgkAaUlAiKQGQISvJnhqFREQAREQAREQAREQATylIAEb54emNSLpZgiIAIiIAIiIAIiIAJNEZDgbYqOtomACIiACBQOAZVUBERABBohIMHbCBgFi4AIiIAIiIAIiIAIFAeBUhO8xXHUVAsREAEREAEREAEREIGUCUjwpoxKEUVABESgmAioLiIgAiJQOgQkeEvnWKumIiACIiACIiACIlCSBJoUvCVJRJUWAREQAREQAREQAREoKgISvEV1OFUZERCBLBFQsiIgAiIgAgVMQIK3gA+eii4CIiACIiACIiACbUugMHOT4C3M46ZSi4AIiIAIiIAIiIAIpEhAgjdFUIomAiKQOgHFFAEREAEREIF8IiDBm09HQ2URAREQAREQAREoJgKqS54QkODNkwOhYoiACIiACIiACIiACGSHgARvdrgqVRFInYBiioAIiIAIiIAIZJWABG9W8SpxERABERABERCBVAkonghki4AEb7bIKl0REAEREAEREAEREIG8ICDBmxeHQYVInYBiioAIiIAIiIAIiEB6BCR40+Ol2CIgAiIgAiKQHwRUChEQgZQJSPCmjEoRRUAEREAEREAEREAECpGABG8hHrXUy6yYIiACIiACIiACIlDyBCR4S/4UEAAREAERKAUCqqMIiEApE5DgLeWjr7qLgAiIgAiIgAiIQAkQkOCtc5DlFQEREAEREAEREAERKD4CJS94H3v6Vdz90LMZPbKpphmNxTBv/kJUVVXX5v/OB5/j1vuewC+/zXFhYRi6OAsXVbl1zRYTWLBwkWOzOES+hgiIU0NUFNYMAW0WAREQgaIikHeC98HJ07DhTsfUc7sc0g8XX30PfpzxS8bh3/XPZ3DFTZMymm6qaU6Z+ga22vsUXPuPR2vzf+3tj3DZ9Q/g51m/ubDvf5rl4hxz1kVunbNvv5/h4rz9/mdczag7f9T19dhvuWdfkP/ZQ6/GtFffA0V6RjNsRWL7HH2hYzN/wSKXSja5NHRe1j1Ph1xyqytDrmZN1X1JTrkqo/IVAREQAREQgVwRaLngzVKJw3joUt5yk/Vw+AG9se/u26IsEsGdk57GEaePxoyZCSHoIhX4bLke3bDD1n9Cr1V6NlqTdhXlLs5mG69TG+enn39zVuCPPv9fbVimPNFY3CW1z27b4LD9dsH2W22Mrp074pkX38ZpA6/AOcOvQawmjouYw9k2m2/o2ARB4jTOJpfkebnxBmti/79ut5TbZMO1ckgCaKruS3LKaUGVuQiIgAiIgAjkgEBCKeQg4+ayPGDP7THorKNw8cCT8PhdF2OPnf7sxO69j0xFun/sFpDuPm0Rf+vNNsB1F/cD69pYfj2W6eriXHBan8aiZCX8tGMOwJB+R2PC8FPx8K2jMemmEViz10qY+tK/Mf76+5vMMx3e6cRdMtMxA05wbPhQsOS2bK3zIYD5LukO2nuHVmfZGhZNZc6y8jxrjFO28m2qTMW2TfURAREQARHIbwJ5K3jrYosEAfoe/X8u6D+ffe2WH332P5wy4HK88Nr7+OrbH3HlLf/EGYMm4p6HFwtivob+28kj8Medj8Uefc7D2CvvQvL1t0ukzuzDT75y+/MV/vb7n4FLr70P1dFYnRhwYUyP2/k6m2lS/CX729aLbCvNpfnJF9+4Ojz/6rsWu+Gpujrq4lx/x79chA8+/hKX1QjOex561m0jh5vunuwY0D/9x5kubt3ZpMkvuLhJfnW3peJff+1euHF8fyzTrTPuePApvPnup/V2mz13PsZMvBN7HXmB433AcYNdvLrW4IenvOTK8LFZpsddc687Jjw2J/S/FF/bMayb4KxfZ4Nx/u/vA10XC6Y76OKbQabJeDxG7GrB9aa4PDXtTZcvu2Qwbl33vvEkM5atbnhL/UMuuRV0S+5/8z2PuzIk+2Ivqqxy6zxuPIeP6zfOcWP3EcaN17zpSKZDjjy3jzn7YvAcJQ/m8+GnX6OpunP/upy4nnSpXB88BucMvxZffvODWfevdXkzf+Y9d96CZFJaioAIiIAIiAAJ5K0rCMFLeu0qyrhAvOZ1+q+/z8GLr7+Pq259CPsefSFuuPMxPPfKu/jgky9dvEtMUA0ffzt+mDHLdYvo1qWT+zjtkJOGISk6XESb8aOew04Z6fb/w2or4tff5+L2B57E8PG32dbF07+efgUU1+uutZqzOHPLbfdNwakmvKOxGFdrXSpp/j57nqvDDz813jeZXQxetHp+/EWi+0KVCeDf58xz+TCPmb/8DjqKj5VXWM6l98iUl9325Ixlm3jzJLDP79prrJIMTnu5wnLL4LxTD3P7vfufL9ySMwp+ClwKspgdn717b43Pv5ruBGvd/tH/++4nV75DThruxHCH9hXouVx3sN9y3wsm1PYP5vGhAKSwLi8vA9OrsOUjT76MBx6bxiydo1hlVwuuNMVlnT+s6vKlkGTcuu7ufz7jtq275qp1g1vsf/PdT+xh4JOl9v/0v9+6fKqjUbctag9TPK7kc+qFl4PC9Y/rruHeYlx+44N4/NnXXDzOaIE93R7m+EDx5f++x9abrQ8+BD70xIu45raH0FTduX9dTlynS/X6+PcHn4MPDHzw4JLXB/dn3pfYQyH9ciIgAiIgAiKQ7wQKRvA+9MRLjuWGJgqcp2ZGK+kJh+/tXrm/+PCVOOuEg0FR8A+zQtIq+cRd41y3iPtvGIbj++yFb6bPwL2PLD0qQ/++f8N7z9wMxnvhoYlOiFFg8aOxmqxw46X98drka3Dz+PPcq/4pd1+CXf6yKWg1/d+3PyWj1S5TSbM2coqeLf60Lkadf7yLfcIR+7h6s7vBOScfir/u/GcXfv+/nqtnnX7pjQ+ciD/q4N1A4egitXBGptz1vY/+y4Vz197+iBNqYy88EU/ecwkuGdIXb0253vVN5ogTtNa6iDWz3ttvhmcfmOC6Sjx933hsten6oFWaVntGec/E9JdmUWQ/YtaN6bFbxQM3DMefN1mPUZZyTXFZwx5imAdF+hdfT6/dl+V6fOrrYL/cDdZZvTa8KQ8fHGjlr+tGTPhHU7s0ua1D+3bu/Hzj8evcuXfLhPNd/MenLha8jz/7uhPLPNeevu8yXDXmLPzrH2Nx51WDwOuhqbq7xJaYteT64BuWt5+80ZWRx5jlfsgENx9wlki++VXFEAEREAEREIE2JpC3gpeC6ompb7iP1fixFF/98ib790P3qIeIorLfSYeAQmzZ7l2w4vLL4PlX33NxTj5qX3Tu1MH5OTvpyH25ANN1npoZ0z32sD1RVhZxIew3e+RBuzn/+x996ZacMQ/f852g5mvoR596GZ7vcZMTbM5TM0s1zZroGVl07NAORxy4qxO3L772fm2a9z/6nPMftPeObtmaWa+Ve7rd//PpV27JV+/3WfqrrLgc9t51a3CdIqiivBx77rKVi/PVNz+6ZXJ2xnEHuuPEdVoqd9txC3rx08+/uqVf8xHab2ZpZ1cJF2izDdddHfyI0bxpT4ft39vt81DNgxNXHnv6VS6QPNZupZnZ3HkL3VsDvjlIutlz5jezV+Ob+VEg6+TXnEcU5jx3vv3+59qdJj+bKOf5p/VB+3blteGbbbQ2yLI2IEVPS64P5pPMm9fZ9ltt5HL71d60OI9mIiACIiACaRPQDm1HwG+7rNLL6YF/PY/zRl3nhiNj30uO2vDPm0eAYrRuSnwtXnedflpxuVxr9ZW5qHWdOrZ3VkdahWsDG/H8YbWV3JYZMxMijCvPvvQOdjzwTPzfMYPA19CDx93iPuLitniYGF2C/sZcQ2k2Frel4UlRSysv06Dl9KU3PnSW6JVX6MGgVrmfaniwWwcTmlEzfBrz+VPv47Fx7+NqXbLfcXKINcZvyHXt3MkFs78yPZtttA6W6dYZr7z1H2y772noe8FluO6OR/HzrN+5uUVu5203AYUk+zKzywSFOYU6w3bdfvOU0xx89lF46ZGr6jl+2JdyAs1E9DzP1Z19fJNR2T2E5Vx1peWTQa1aZuL66Nql/jFrVYG0swiIgAiIgAhkmUDeCl5aXPl698Ebh+O1ydfi9isGYLUa62JzTCorEz/SUF6e6PdbN37ylT77RdYNb8zveQkLLvuZnjXkKiyqrAYtbXddPQjPT7oCFECN7dtYuOcl0mxse2vC2Rd10z+u7cTidz/8jGR/3sMP2LU1ydbu+8VX3zv/5jXDpLEfMQPY/3RE/2PRkNt4gz8wSqMuCOrzKIsEePyuceA5wD6+FOxX3/owdj74bDz9wtuNptPUBlrv/37IHmB5n33xbbzx74+dVf7oQ3ZvdTePpvJt/TaAVuXOndpnIimXRiauDz+L57ArpGYiIAIiIAIikEECeSt4+XEVh+1i38oudbolpFL3VVdOWMKW/KEKvmqf/uMsZ+X1vPoia8l0f/z5FxeUtKq9+MYHbn3C8NNA4URRuXyPbmhsqCcXeYnZkmkusTnt1dgSH8olEzhsv12c94F/TQMtvexusNVmG7iw1szmzlsA9mFlGqw/l0mrMQXlwfvsiIZcqg8qTC/peMzZXeW5By8H+1SfV/Ox3G33T0lGaXTZGJf999zO7XPPI1Px4ORpzn/QXq0fTswlVGdGUV1ntdVePsTMmPmbifXKZtNqrO51d8zE9VE3PflFQAREoE0IKBMRaAWBvBW8ragTNl5/Tbd7UtS4FZtNffnfJhoWYfON17W1xie+Wr+3ZnizDddLfMzEkRC4R1lZwIVzUROcqXSPYOSG0mR4S1yXzol+yUsK+mRave0VPV+B84OxX3+fi6PNspnsI5qMk+6So1PQws2PyQ4/oDf4MMI0KPg33mBN8IOwl2oeChiedAznKA7J9VSW/HiNH1Yl47IbyxEH7ua6JHzw8eI+1cntyWVzXCj8+UMfTOOpaW+h9/abYaUMdPNI5s/lij2XdX2oKVC5TseuGHXrw7B03CZ/XMtFv+fh+h9b8px66Y0P3bbm6u4i1cxae33UJKOFCIiACIiACBQMgaIUvDtsvbH7J8wMSQAAEABJREFU8n7yM69hwNgbMeW5N8CP3voNu9odGH5x7jw1M1rkBl50EzgWKz/wOvL0MaCwO+6wvcChuBhtyz8lRPKwS28DX69fc9vDOOTEYW6oM25f0qWS5pL7pLq+mlmwKWjvMVHOvq13P/QM2B81uX/7duXuV9KS6xztIOlPdXn1rQ9h5OV3gL+sxhEJ9j36Qrzx7ifYbYctcMHph9dLZvBZR7n1vhdMwCjbhxxvvOsxnHTeeJBlc3143c51Zh99/j/XT5rHjg8t/LjsQjuOZHrq3/erE7O+d7WVl3eiuDEujJ20ftPfZ7/Eh2z0Z8pttdn6Lqm+F1yGW+59Ahwaj10x2A/XbWjB7IQ+e7t6cbiyIZfcikefesWdz/vYMbn7oaddis2dEy5SzSzd66NmNy1EQAREQAREoGAJ5J/grelq0FwfQd9PFN3zlu6a4Hkerr/4HOyx05agWOo/8jpwvFNa+O67fhiSr+HrHrV3Pvgcg8fd4kQehxmj2D3zhINqoxxkr+v5k7L8OIsi89p/PIp27Spw6P/t7OJYlm5Zd9Zcmp6XKLvnJZbcN+lN1o9hdL6XqC/9FLvjh54Cdiu4+taHMfbKu8HxUrkt6bbefAPnZfn408BuJYWZ7yfKwuG6KP5pQVy4qNJY/hnXjzsH44ed4saArZsUR0/gcG4sD4U3OU68+Z+uHzHH0F2+R3cX3fMSaXvw3PqSs2SdN1inl6sbjx0FI4UvH1oO2WcncCi2JfdLrqfCZctNEg8uPBfS6uZRU3a/ZpnMc8nlUQftjr9s+Uc3DvGEGx5wXSeOOHBXF8a4yZp7XtLH0PqOP5XMn9NOhnbr2gkP3DDMpfHQEy+CD2c8nzmm7+47bumipVJ3F9Fmnuch3evDdqs3Jc8Tz198XtaLoBUREIEcE1D2IiACdQnk3d3q0H13wkfTbm92+CmKCsajoKtboaS/a5eOYH9bjm/KsVz5gdlT916KjdZbIxnFLSnUmA7H651y9zg3ru1bU27AuX0PBT+ecpFsFgkCjBlwgvtQjePBTn1wAu69dgiGnfN3V96dt93UYiWmVNOkKGXe7CKQ2BM47dgDXHrrrrmqC6K1lnGuGHm6W0/OdtzmT0h+OMd+rhcPOjm5yS2fmPq6W5Kn86Q4o5Bmfkn31pTrwTFfJww/FRxCixwaSoofrbE87zx1Ix674yI8e/9leH/qLW5M3mW7d3G7nH3iwa5ua61Rf/SMPXb6swvfq3diGLNkWhz3dbKlRUf/8P7H1PvAjPmxnC7xmllzXJ6a9paLmW43D3JkXhxCzCXQyIwjgdxwybmu/v+8eSTIY+CZR7oxnLl/cpg8DiHHdXJdMimeizxX64ZzLGGOA830yIP9mqc+MAEH1umD3FjdG+KUzvXBc6BuWegfZFZ9lp/DAHJdTgREQAREQATymUDeCd5Mw6IA4fi5y/fo1mTStKqttnJPN55vQ0OdJXdmOrRoJrs6JMMbWqaaZkP7phrG8vRcrjt8f7HFkP1H+aMZtLiy7o2llY1w9unlr3GxL2tj4jjVfCn2KfTo6E91P8ZriAtH5uAv43F7S7p5cL9UnOd5YP3XW2u1tD5qTCVt8iUP9mv2vMXHvO6+DdW97va6/lSvj7r7yC8CIiACIiAChUag6AVvoR2QTJSXIzMwnUwNRca0isG9+vZHrm823wqk082jGOquOoiACDRJQBtFQASKnIAEbxEe4A3XWQOjzj8Ou26/WRHWruVV6tyxveNy4uF7tzwR7SkCIiACIiACIlBwBCR4Uz1kBRSPw22xb2dDP7xRQNXIeFE5fBq5ZHoosowXVAmKgAiIgAiIgAhklIAEb0ZxKjEREAERKH4CqqEIiIAIFBoBCd5CO2IqrwiIgAiIgAiIgAiIQFoEsiR40yqDIouACIiACIiACIiACIhA1ghI8GYNrRIWAREQAQCCIAIiIAIikHMCErw5PwQqgAiIgAiIgAiIgAgUP4Fc1lCCN5f0lbcIiIAIiIAIiIAIiEDWCUjwZh2xMhABEUidgGKKgAiIgAiIQOYJSPBmnqlSFAEREAEREAEREIHWEdDeGSUgwZtRnEpMBERABERABERABEQg3whI8ObbEVF5RCB1AoopAiIgAiIgAiKQAgEJ3hQgKYoIiIAIiIAIiEA+E1DZRKBpAhK8TfPRVhEQAREQAREQAREQgQInIMFb4AdQxU+dgGKKgAiIgAiIgAiUJgEJ3tI87qq1CIiACIhA6RJQzUWg5AhI8JbcIVeFRUAEREAEREAERKC0CEjwltbxTr22iikCIiACIiACIiACRUJAgrdIDqSqIQIiIAIikB0CSlUERKDwCUjwFv4xVA1EQAREQAREQAREQASaICDB2wSc1DcppgiIgAiIgAiIgAiIQL4SkODN1yOjcomACIhAIRJQmUVABEQgDwlI8ObhQVGRREAEREAEREAEREAEMkcgF4I3c6VXSiIgAiIgAiIgAiIgAiLQDAEJ3mYAabMIiIAIZI+AUhYBERABEWgLAhK8bUFZeYiACIiACIiACIiACDROIMtbJHizDFjJi4AIiIAIiIAIiIAI5JaABG9u+St3ERCB1AkopgiIgAiIgAi0iIAEb4uwaScREAEREAEREAERyBUB5ZsuAQnedIkpvgiIgAiIgAiIgAiIQEERkOAtqMOlwopA6gQUUwREQAREQAREIEFAgjfBQXMREAEREAEREIHiJKBaiQAkeHUSiIAIiIAIiIAIiIAIFDUBCd6iPryqXMoEFFEEREAEREAERKBoCUjwFu2hVcVEQAREQAREIH0C2kMEipGABG8xHlXVSQREQAREQAREQAREoJaABG8tCnlSJ6CYIiACIiACIiACIlA4BCR4C+dYqaQiIAIiIAL5RkDlEQERKAgCErwFcZhUSBEQAREQAREQAREQgZYSkOBtKbnU91NMERABERABERABERCBHBKQ4M0hfGUtAiIgAqVFQLUVAREQgdwQkODNDXflKgIiIAIiIAIiIAIi0EYE8k7wtlG9lY0IiIAIiIAIiIAIiECJEJDgLZEDrWqKgAgUHAEVWAREQAREIEMEJHgzBFLJiIAIiIAIiIAIiIAIZINA69OU4G09Q6UgAiIgAiIgAiIgAiKQxwQkePP44KhoIiACqRNQTBEQAREQARFojIAEb2NkUgz/4ZeFyIX7fV4VFlTGcpJ3Luqbyzx/M9YLxbpNzrXf5lZhYZXO67Y433811ovEuk3Oa7Fuu/tkMbNOUZYwmlwDBCR4G4CiIBEQAREQAREQAREQgeIhIMFbPMdSNRGB1AkopgiIgAiIgAiUEAEJ3hI62KqqCIiACIiACIhAfQJaKw0CErylcZxVSxEQAREQAREQAREoWQISvCV76FXx1AkopgiIgAiIgAiIQCETkOAt5KOnsouACIiACIhAWxJQXiJQoAQkeAv0wKnYIiACIiACIiACIiACqRGQ4E2Nk2KlTkAxRUAEREAEREAERCCvCEjw5tXhUGFEQAREQASKh4BqIgIikC8EJHjz5UioHCIgAiIgAiIgAiIgAlkhIMGbFaypJ6qYIiACIiACIiACIiAC2SUgwZtdvkpdBERABEQgNQKKJQIiIAJZIyDBmzW0SlgEREAEREAEREAERCAfCBSW4M0HYiqDCIiACIiACIiACIhAQRGQ4C2ow6XCioAIiECCgOYiIAIiIAKpE5DgTZ2VYoqACOSAwEnn+TjprAgGDTU3LIJJT+SgEMpSBERABEQgXwmkVC4J3pQwKZIIiEBbErhwAtBvQATnXhjBMu19dOsMhCyAzd59LSF8+5kAZpCcCIiACIiACDRHoGgFbzwe4qeZvyIaizXHwG1vLv6ChYswe858F1czERCB7BE45vQ4KmdHEJRZHhGgyjOx64WoqgZmmeBdZK7a/B2s9Ro0MIL7H7N4zU3aLgIiIAIiUNIE7JZRfPV/4bX3sdXep6D3IefgT72PxwOPTWuykk3FnzHzN5wxaCJ2PPBs7Pq3c3HUGWPxyRffNJmeNoqACKRPIBoF+l4ImMZFpAoI7Fk1Yi6oBOJRD/FyoKsluygOhD7gVZnytbD3zeI79mroTwREQAREIAUCpRrFbhvFVfWFi6rQf+R1OP24A/D+1FswcdQZGHHZ7Zj+48wGK9pc/Muuvx+VZlp69V9X47XJ12D1VVfAxJsnNZiWAkVABFpOYMDwCMrMnFtull3TtIjazDQwQg+oMBVMERy1FqujrVfaehgxj8XxLf4vMyP494ctz1t7ioAIiIAIFDcBu30UVwXffPcTsPtBn/12QSQIsOv2m6PXKj3xwmvvNVjR5uL/MOMXLLdsN5SVRVx6m220Nj7/anqDaSlQBIqDQNvXot/ACCqsNfLMVZpVN6Sg9UPEEYL+RdWwa9CEr22L2rb2tjSti0Vm/TU7L9pZke+8wzbYUpMIiIAIiIAILEnAXzKg0NdnzPrNCdxymolqKrNmr5Xw08+/1azVXzQX/7jD9sQjT76MM4dciedffRc33T0Zp/59//qJaE0ERKDFBPoNDtA+ACrNnFttLVLcDLdl5soDD3NtZXaVJW3r803Z0trLLg7VJng9ix9tn+jjC9vewfxnD5HoNVqaREAEMkVA6RQNAbu9FE1dXEXmzJ2PDu1p73GrblZRUY658xY4/5Kz5uKvu9ZqTkD7Zno6f9QNLp1NNlyrNpmyiI9cuMD3YFNO8s5FfXOZp1j7WTvPLhzsm3XWQ8zMtaEJWpiQrTT/LFvOXQj0LDdnl/PCeBxXjIxjocUprwDYcFWX2QqACovvmdfzALscceOtftbKm8vzMNN5RwIPZJbpdJXe0uefWC/NJFvnSTGzhv5aRcBv1d55uHOXzh1dl4a6RausrELnTh3qBtX6m4t/zrBrsM9u29rN9nQ89+AEbLnJ+uhz6qja0R+6dSxDLlyHdhGUlwU5yTsX9c1lnh2NdVnjrHUMWnENVJtJtyoGxE2wlpXZMgA6W6vU09a7dTTrbRS4alyASdeXYbluZbjnqgBzYiF82x6DB3Zt4P5RKl67qitMNX/2jY9cni+FkneHCmtDIoFYteL8TfVYi3Xb3SeLmbU1cZpaQcBuLa3YOw937dmjO76ZPgPV1XanrCkf+9yusHz3mrX6i6biz1+wCP/57Gust+aqbieK5uP77OUE9dff/ujCZs6uRC7c3AXVWGR3+lzkXWp5zjHWlWKd8fP8iBNNskaASBngm9A1HYtOHhD4gGdhHATwkjFRzFlU/xq7anQM7NIQYVeHOFBtcYO4B9O68DwPlhSOPqP+PqV2zqZSX3deG8hU4ipO686n0mHdOk6ZOM+KmTX01yoCdmtp1f55t/OWm6znynTvI1OdFfbZl95xIzTsuM0mLvyt9z7FwScOc6KYAU3F79ihHVZZcTk88NjzmD13vhPRT0x93XVxWGO1Fbm7nAiIQAsI3Hs/0LGDiVtTp3F7Nq20NMo9wAy3JsNki7MAABAASURBVFoBdkAa2i8K06+2Zenp8kuiiJhYpjhuFzfRay5W05qVmfL1Atu49G4KEQEREAERKFECNbeI4ql9h/YVuGrMWRh3zb1uDN6zhlyFwWcf5YQrazlvwUI3ju6iSpqHgObiXzHydPADuG33PQ3b/t/p+Mosu+MGnYxIEDA5uTQJKLoIkMC770VQWU2hGmKhCd1yU7r8CI2dc6MW7kWiWKYbYzbuFoVR1xUiNIFbbfo2Ymkwtuebtdc85w4quubNaqVJBERABESgJQSK8o6wy182xQdTb8XT943He8/cjD77965ls/O2m+Kjabdj3ZpuCtzQVPz11+6FK0ediTefuB7P3n8Zrru4HzZa/w/cTU4ERKAFBM4aYjtZy2NGWZTHPfhlQMwEK2wJC1xkz5KXMQ6a/psw2izCJpZ9MwOXcT/zV5uj7m1nu4Yc6sGWmkQgTwmoWCIgAm1IwG47bZhbG2YV2LvOlVfogbIy3kmbz7i5+Oze0LVLx+YTUgwREIEmCXREBL6JWvbdZV/dskVAO1OpNrlxdf9xRerN0onHmZU3BvixEIEl4Jt1OJl5eZWHyyYm17QUAREQAREoZQKp31lKmVKu6q58RaDICPS/MIBpU8SrQ1Rb6xOaWG1XDngAqFXDTqZazZ/qtOYacOK5OuKhLB4iZFq2ZILsxvvtD5FUk1I8ERABERCBIiZgt5wirp2qJgIikFcEKso8xD0gbkv2ueWvpnm2zn647FV/3aj0i3v2GVGUm3CujnkI4sAiS9CShC3QqT30VyQEVA0REAERaA0BCd7W0NO+IiACKRM4+/wA/DU134yuFKOBKVz3sZqlML/aw/GHRs2X/rT8cnDi1gsodgFq3JpheWGGZJwzNAL9iYAIiIAIlDaBIhK8pX0gVXsRyHcCHdt58KyQERO6HELMZ+tjAaHpXFp9N9rQNrZwWn7lKMy4i4hZehdZmkwvtGW5pefxVypsqUkEREAERKB0CfCWU7q1V81FQATahMC5F/hYZGI0sBaHfXeDRYBHw2sIVFr4lWNN9aLlf2f3tX0tCd9Mu56lxyHPzIvQ8vMrPdx+h20vpUl1FQEREAERqEfAbgf11rUiAiIgAhkn0K7Ch2filoIXJnQruGIWWK8aqLLwTGTIdOJmQ6bgLbO0Q0vXiwOBmXk/+G+QiSyUhgiIgAiIQIERSBbXT3q0FAEREIFsELhkollxzfoasdaGfWrDKiA5Ru4iE6QTx9nGDGR8xcVRxMy665nAjZm+ZbcJdmtgvj47DWcgDyUhAiIgAiJQmATsFlSYBVepRUAECoPA77Mi8D2AwpPW3XbO9Ar4JnwpgDNZC2fZtXRp2Y2b9Zi/VczsOD7v0OGN5aRwERABERCBYifgF3sFVT8REIHcEZgxEzCjK2h1rWQXAxOjHJKMJTIvhp6fGesu06Mrr4ia9dgsyJZs4FkI8zTHH7mYGzezrwVpEgEREAERaIRAEQdL8BbxwVXVRCDXBCZcHkmMnmDqNowAZSY+YUKU1t1KK9yyy9osg9OIIZaYWXaDChPalh98E7/Mz5YBzcy2WZMIiIAIiEDpEbDbQOlVWjUWARFoMYG0dmR3ggAhqk18Rkzh8pfQbBW09q63lplh00ottchO10ZD8Ffcqsy8zO/jqLN9E8IjL0otDcUSAREQAREoLgISvMV1PFUbEcgbAmefFwG7EkTNpMtxcWFWVxaO34/FKkL0PY5rmXdrrxlFGHig8C2ndRcA+/T6ZcDcherWAP2JgAhkiICSKSQCEryFdLRUVhEoIAIVJnDjZlpl19l2cSBijiJ0gYVlbCyyBngcb0KalmVakqM+EI9aJBO+ZWbhDWzd1jSJgAiIgAiUGAE1/yV2wFXdtiVQqrndOQnuYzWYQbXcBCeFJ1nEYyGDcNnYOFez5jgWL4IQZtQFu1MwI/YhDszaPHkK1+REQAREQARKiYAEbykdbdVVBNqIwKcfROCbJTdqYteMqwhq9G215yHqzK/ZLcgyy0URxjxUWjZBDDT2mtQFouZ/5dWIhWoSARFoYwLKTgRySkCCN6f4lbkIFCeBqIndwJRuO9OWVdbKsCuDBcE34Xv5SFOdWa72+WcDpq1RXm1it8z8JnnZj9gLAH7IBv2JgAiIgAiUFAG7FZVUfVXZfCagshUFgXMGRMAuDL4XotpEb/uk2DTFW2kW37aqZGD5UVqze0M1PLCxC+Kh+5AubsIb+hMBERABESgZArwHlExlVVEREIHsE/DNihqpDhEzEy/H2w1rzLvs3tCla9sp3qRFN2QrZ9ma1gWsLJ75zxlupufso1AOItBiAtpRBEQgswR4K8hsikpNBESgZAm8+a7TlPBN7FJgxsoWo6g2/4gBi9ez7bt4ZBTV1sKF1YAVB+aFGZ3hWTk4NnC281f6IiACIiAC+UOA94D8KY1KkgYBRRWB/CPwyEMRsO9slVl5+atqFSGcyIx5gPvJNVu05RQxsetZK8eh0cIYXNkYVuazQNCfCIiACIhAiRCwW0GJ1FTVFAERyDqBqOXAH3lob8tK05SuO4H5Tf/ikuHcaittOHFAiDAIYRPiEcCt25LlefDhNiyIssouAaUuAiIgAs0QkOBtBpA2i4AIpEag3wAfcWtRAi9E1MRuO4QJgWm7L6wEAqpM87fltP/+UYRxz308x64NoWei1woQN8vvO2/loECWtyYREAEREIG2J2C3p7bPNAc5KksREIEsE2hf7iMwI251xFSlCdyQfRtCIFoFmBTOcu4NJ7/Nn5k3UB4HgnKLY0tXLLPy+uWeBWgSAREQAREoBQISvKVwlFVHEWgDAjGKyTKAPzgRN3HpGpfQrL3mH3+RbWyDMjSURTwGxAKAYwP7tmQ3izIrnGnzhqKXQJiqKAIiIAKlR8Ca/dKrtGosAiKQWQLnD4zAjLmImzXXM4FZZvrWtC6izpzKLZnNL53UAmvlfCuTaV1UWbkoyENbmg7HsBHppKS4IiACIiAChUrAbgVLF10hIiACIpAOAc/UpBcJQQsqLalO53oA+80evK+pzXQSy3DcMRyezIpQbel6NuNwaVY0RM1fHY1YqCYREAEREIFiJyDBW+xHWPUTgSwT+PJbgAIyHvfA4b8qbCU050ctvDzENlsip38U3/yYjlbnoMKKEjchbuVDWc3SgpqYtEkEREAERKAICEjwFsFBVBVEIJcEbrnJrKTWklBUmr4FaO31gEpbxk305rJsybzZfYHCl/2MYWVlJwt+W+fGB05G0lIEREAERKAJAoW9yZr+wq6ASi8CIpBbAtXM3oRtWQyImtDlKn9kgoLy0tEW6AJyO/PL44iyKKZ0Y+Zcw2eWXpPqOH8I57ktn3IXAREQARHILgHX7mc3C6UuAiJQrATu/ifgWyvCsXcRASJhCHZnME2JRZX5U+vRQ0zdegCt0J6Jc1tLdMMwEcyP2vKnpCqJCIiACIhANgjYrSobySpNERCBUiDw8fsRJxyrzJwbLoKJXVOVpnY59m6UqjKPIND6TCu0z/4NVjYKc4p0WHnzqJgqigiIQHEQUC3yjIAEb54dEBVHBAqJQMwspJ4JxgiXFQD9MCsvReWV48yUivz540drnrV4S/bjjZtGz59SqiQiIAIiIALZIGDNfzaSVZoiIALNEijwCGMuAzgqQ2hil8ORBWY1pbk35nmI5aGI7Nwl6vrxstHj0Gk+y2hlLrPlAPXjLfCzUcUXAREQgaYJsO1vOoa2ioAIiEADBBbMicCPheAYvDEac004hhaPPzzRvoIBtpJH08DzwW/pnBivOx5vrBocuCGPSqqiiEDpEVCNRSDbBCR4s01Y6YtAkRKoNuuoZ+bR2r6wXqKi0QAYcWHCn29zdl8oC0NE2lnJrPwsexiBE+3QnwiIgAiIQNESkOAt2kNbbBVTffKJwPlDfA63635JDTGA3RnYf5e/YhY3QZlPZa1bljIzQcd8D+zHy9ElbBWm2ZF/9ui6pZZfBERABESgtQQkeFtLUPuLQAkS8EIfnilcDvPF/rCeB1gQqquAjdY2BZynTNp1jJk4D51YZyk9U7zU52bkxYhReVpoFUsEliSgdREQgbQJ+GnvoR1EQARKngDFbQhTuQFQUW5i17wUj6gAjjkqf/EMuzBENO6h2oroxxPlDs1PK/XCBZS9XJETAREQAREoNgISvMV2RBP10VwEskag/4AAHJmBFlIO9ZXszsB1j30aspZzZhJmo+eb4nXltSRNq8N1bzCxbquaREAEREAEipAA2/4irJaqJAIikC0CXuAhKAvdbzZEYVbSpLOVvXaJ2Vp+T+y/69GYy9bPisvuGLTwcjW/S67StYyA9hIBERABaDQenQQiIAJpEgiAeMxDzBSi6V7EPcA34RhGQuy8U5pp5SB6YGI37oXOSs3OvOzDGwahawzvuCMHBVKWIiACIiACWSdgt6ys55H3GaiAIiACqRE4b0AALw7EAqCcnV+tBfFs18rAwkwEmzfvpzHDo/Ds33dlBliN0My88Sjw0RcWmPc1UAFFQAREQATSJWC3q3R3UXwREIFSJeCXefDNktsewCJzphOdYiwz/xGHmWK0Zb5PLDOtuhTuEdO3bAQZFrdKhF6+lz7r5VMGIiACIlCUBNjWF2XFVCkREIHME6A1lN0Zqi1p/piaGXvhmc4NvRCbbmiBBTJR7FqxQaM0y04BbDrezNQFUgEVUwREQAREIC0C6QvetJJXZBEQgWIhcP6FEVcVdmdg311+tUbLaJUFV1M5uq2FMQtNqVP0wpYxdm9gsU31ehEPH3/FFTkREAEREIFiIiDBW0xHU3URgSwS8OyVfxCEYHeGKubD1sMEo2lEnHIi7aUMLAx32plRUKxzxIZkiT3fg1UPt95mCh6p/SmWCIiACIhAYRDgLaswSqpSioAI5JaAidt43HM/w1seBcwg6rozxGIh/rBabouWbu6r9gTiQcJ5MVtaAp7Vj3Viv15b1SQCIiACIpA6gbyPKcGb94dIBRSB3BM4j90ZrLXgUGSur6sZQWkhZXeGOAr0S684UG7Ot7qwawPHJQsDwGdH5dwjVwlEQAREQAQySMBuYRlMTUmJgAgUJQGKQt9ai3ZWu2pzTuOaWGR3htNPMXMvw5pzebadll0KXDPwguKdPxLHvskF1h05z6iqOCIgAiKQnwTsFpafBVOpREAE8oiAWT3jJnCjHlBmCtFWQcHI7gyrrZRH5UyjKH/8YxS+1Yn9djkcmWeVsonf4mH4KKtoGmkpqgiIgAikQ0Bx256A3/ZZKkcREIFCIuBGZ7CWwnVnMIHIXyejRbTaXv+H9BRSZeqU9cg+QMwULu3TSdEbms6l8F003ypXJ668IiACIiAChU3AbmOFXQGVXgSKk0D+1MqLAJ4fYsnuDIGJw5NPoFxEwf5ZtcBxhKMm5J3fBDC7NMRY2YKtlQouAiIgAiKwJAEJ3iWJaF0ERKAeAdOCCOMeqi2U3RlsAdds8kkdAAAQAElEQVSdIV54ozOw7HWdVQFWNdBqDTPthtYisl8y+/LWjSe/CIhADgkoaxHIAAFr3jOQipIQAREoSgLnDQzge/bq3wecCOSbfluvsmWc7/8LvdZmvfZN6FqVEIUHWnnjsdCJ4Jdehf5EQAREQASKhIBfJPVQNUqbgGqfJQJe4ME3Fcg3/LTwmiZ0g9bSCnrs0VEU+t+YoVYHzwM/yAutMnSsc2Bm7clPmhq2ME0iIAIiIAKFT0CCt/CPoWogAlkjQCNuzN75myysNzpDiBDrr521bNssYQ615vrsWksYMZHLjM3gC3o9C+O6nAgUFgGVVgREoCECatIboqIwERABXDjId6/43egMNH0GgBlDwe4MUapEFMcff2GtzBQux+QNubRqsS8vw82rSQREQAREoAgISPAWwUFMtwqKLwKpEIiZidMLQrS3yFXmwNbCBCG7Mxx8IG2+DCwCx6pY3axqoMWXVu0yq1bcwmyhSQREQAREoAgIFG2THo+H+Gnmr4jGYikdplTiV1dH8f1Ps1BVVZ1SmookAoVMgFbOuFlyqQfL7TIKzcrL0RnYneHPmxZyzeqXfeutohygAabtYVUELbtcsgfvkJFm1q4fXWvFRUC1EQERKBECRSl4X3jtfWy19ynofcg5+FPv4/HAY9OaPJzNxf/62x9x1BljscluJ2D3w/rjoSkvNZmeNopAoRMYPsZDGAX4mj85OgNHMqg0/RelCbTQK1in/Afsh9ofoPBN6bJ6toBns+oFdSLKKwIiIAIiULAEik7wLlxUhf4jr8Ppxx2A96fegomjzsCIy27H9B9nNniQmos/Y+Zv2OfoC9Fzue6486qBePvJG7HHTls2mJYCRaBYCCxaFCBSHqLCKlTlwfXdpfmTVs+9do6i2P7YEPIHKMyQ7fotU+xGrd6xCpsVW2VVHxEQAREoQQJs54uq2m+++wkWLFyEPvvtgkgQYNftN0evVXrihdfea7CezcX/xwNPYplunXHxoJOw2UbroH27cnTv2rnBtBQoAsVCIG46L4wt/rEJ9m/lq/64KcGddiqWWi6uhxuWzFpDduOgaZfLMmMQsB/H4mgl7xMAERABEShUAtbEF2rRGy73jFm/OYFbXs7PThJx1uy1En76+bfEyhLz5uK//OaHWKlnD/QfcR3+dvIIDB9/O9g3OJlMWeAhFy7wPdiUk7xzUd9c5knWHJ0gl2XISN4RO1dTcFddZeeWmTop+szIC89aCdN+qLIlhWFZCmm0NE4t6yzm0VDZYKZrqx44HlkUVv/QvHGbeR4+/iw1bg2lm89huWKdz0yyVbaCZZ2j+1tr2rta1gVY9ubqDf21ioBr41uVQr2dc78yZ+58dGjPYfIXl6Wiohxz5zXcGa+5+F9+8wM6dmiH3ttthuP67In/fPY1jus3DvyAjTl07VSOXLj2FQHKIn5O8s5FfXOZZwdjXV4MrDuUo2sK7sdZAfxI6D7iqjLNx/Ochk4/Duy2TSSlNFLJp6E4HdoFKA/svE6hnA3t39KwG8YHYB1jVkfYn0dnYpd9em+/K8hqnVta5tbu19FYl+WAdWvLXYj7FyzrHN3fWtPe17IuwLI3V29rljS1goDfin3zctcunTuCXRrqFq6ysgqdO3WoG1TrTyX+EQfuhn133xZ77PRnXDqkL76ZPgNfffujS2PW7Erkws1bGEVldTwneeeivrnMc26xsJ5j52oKjobNMPRACy9f67N7A4VfPDDBu2dqacxKIZ+G4sxdYOd11M7rFu7fUJqphP06rxL8QI8OUcAM3OzZAI7La5oQqaSxVJw2rkO6+c8x1lU5YJ1uOYshfsGyztH9rTXtfS3rAix7c/V2okOzFhMoOsHbs0d3J0iTFliS+fyr6Vhh+e70LuWai7/+2r3w7fczaveL852urVVV213RlppEoJgI3Hk/EkLPLLv8eV02EJ75o+aJUwmjeP9YvTKrXsCZWXpN8wMm8tl1yII1iYAIiIAItJBAPuxmt7F8KEbmyrDlJuu5xO59ZKobg/fZl95xIzTsuM0mLvyt9z7FwScOc6KYAc3F36v3Vrj1vifc+Luz587HnZOecR+xrbX6ytxdTgSKisCnH0fgm8I1jUtDJwdmAIUfhyhbZw3aPYuquvUqE6kRuRS+Xs0WhhV3rWsqqoUIiIAIFDmBohO8HdpX4KoxZ2HcNfe6MXjPGnIVBp99FFZZcTl3KOctWIhPvvgGiyrdb0ehufhHHrgbttpsAzf+7rb7noYX33gf14w9243W4BLUTASKiIB7cWEmTc8sm4E5dmeg+ItHgBOPzWZFc5/2WutE4Zna5WgUYMtoqp9dHOi96PLcl08lEAEREAERaDkBtuUt3ztP99zlL5vig6m34un7xuO9Z25Gn/1715Z05203xUfTbse6a65aG9ZUfI72MH7oKXht8rV49v7LMPWBCdh4gzVr95VHBIqFwLQXAArdWLUto+DbfJixF6b7EJoQRJH/HXcUEHoe+JPC8Rqzrqu7+X+fZeq/yOuv6omACOQJARUjKwSKUvCSVBD4WHmFHigrM9MUA5pxzcXv0qkDVuy5LDzPayYlbRaBwiTwzNQIOBIDla5pPBO5JgCthYiaAO7elSGFWa+0Sh2HY0DrNvfj5U4rLx8EuC4nAiIgAiJQmATsdlaYBVepRaCECWSl6m5IrjJL2gMi9pwY2tImhOYfeK6Fl8JkJl3TvOCvrLFbQ2jrvtWbozXYQpMIiIAIiECBEmBbXqBFV7FFQAQyReDDzwAOOxavBHwTeZ6pPnZnoAiOwQIylVG+p+MBNoGWbopd57eZH3j4+RfoTwREIO8IqEAikBoBCd7UOCmWCBQ1gfvujsCLAn4ECXnr2dIchW8FFXBR135x5c49JwoKXVq32W3ZEIAM2FCOn2hwFkeVTwREQAREoIAIsB0voOKqqCKQPgHt0TyBqBlxOf6s67NqrYJPpWe7cfzdscPM3Gv+UpiW7WZC3yrKHsu08rLmdHwKkNw1MJpEQAREoEAJ2K2tQEuuYouACGSEwKzfTOSZwPVM5VHw8gcnmHDMRHBS+HK9VBxHaYgYCw7JxvobGvjWUvKX50qFgepZtARUMREoWQLWjJds3VVxERABI3D55RFETNVxrF2Y0OPHWnydTwvnIr7ftzilNFHwO3FrrWNIHsYGZublopQ4qK4iIAIiUEwErEkvpuqoLq0moARKjkDUaswP1ChwYwGod83kG4KWzitGUPFZhBKaui8bR0ggJnL5IR+t3hbiuEx6pIRAqKoiIAIiUEQEJHiL6GCqKiKQLoGoqV2+tqejonPWTUskZgGl2jicfzblrQffxH/M9L4bkizwwBEr3nzXAqG/UiGgeoqACBQPgVK9pxXPEVRNRKAVBIaOiCC0/as8m5n4pehlLwbf/JWVFlaiE5lQ4JaTiznXUHLJDSXKRNUWAREQgUIm4NrxQq5Absuu3EWgsAlQ1MHELYckc78oRkFnipf+8RfZhsKuXotL71cDtHazWwctvIYEHKosMWtxstpRBERABEQgRwQkeHMEXtmKQD4QiNgb+sBaAa8MZtwNnZ4LfQ/VJvjYdzUfypiTMhgT9xPL9gDgRmjw4D7sC32A3RxyUqZ8z1TlEwEREIE8JmDNdx6XTkUTARHIGoEBgyLg0FvVJnrDSpjY9cDfmIhVAWUwpYfS/Tu8TxQcoYFj73J4Nn7DhrhxMeE7bBRDS5eNai4CIiAChUjAb8NCKysREIF8ImBClyLOjwGRcrhfFDMbr/OPLMHRGVDnb6MN7AHA1tmpIzCRS/nvujRYGB8IbKFJBERABESggAj4BVRWFVUERCCDBGi1NC0HjwbL0KQuV+BhkVl7y8oymFGBJsUuHXwYiJtll5Zv8jIv4vZw0PoqKQUREAEREIG2JCDB25a0lZcI5AmBQUPNvGtXf5QLs/DC1J2tgq/vyy0sT4qZ02K4j9UIhc7ULvvv0tob0Nyb05IpcxEQAREoIgJtVBU25W2UlbIRARHIFwJR934+BI2VHImAXXbNyAt+oHXaadF8KWZOy1HeHvAMDPVtzHy08sb5RGCW8Fdfh/5EQAREQAQKiIAEbwEdLBVVBDJJIG4iLmYJBjaj/vXiQDweYpUVLTC/ppyUZvjAqMldD3HysRJQ+Hpm4iWnx55gPxAL1CQCIiACIlAQBCR4C+IwqZAikDkCoy71QGtuzCyV7vW8tQKe+TlaQ9xEcOZyKuyUyISjWHBMYsfJquOZ6uXDAbs32KomERABEWhjAsqupQTsVtfSXbWfCIhAIRKYPyeAHwnRzgpfbc7zbRYHaLM85EB1ZzAatROtuRFjQ4Hr+vTagwEFL8NrI8kjAiIgAiKQ9wT8vC+hCigCIpAWgeYiO6ulzexNPcpsRmuvZ8u4vcDfYpPm9i6x7SZ2Ya2kGXbh1yz5YEABXGIkVF0REAERKGgC1oQXdPlVeBEQgTQI3HY3QHFLEWdGXngckcGsllW2THzIBv3VIbDjdlGwGwM/WKPopWWXS8OFkRdzXieyvCIgAvlGQOURgVoCEry1KOQRgeIn8PlnEQSmdAOzXLI7g+uya35aLXfaOlr8ANKs4Z5/BWLGh2Sc2LWHAwpe/mDHgtlpJqboIiACIiACOSMgwZsz9Mo4LwiUWCFMuwGhBw5FFjHxxnVboNpme+1ZYjBSrK5vbNwPUFh8Wnpp8SW/sMI2WJgmERABERCB/CcgwZv/x0glFIGMEHj8aYDijUPJ0sKbFG9Rz5KPO7uleTQtSYB9nPlgAPZgMLXL/rt8WODqknG1LgKFTEBlF4FiJiDBW8xHV3UTgToEXn0lAq9G2MYsnCKO4i209/XrrMEQC9S0FAGvDO5BgaM0xOCBDwr8AQo+Irz9PvQnAiIgAiJQAAQkeAvgIOVPEVWSQiYQjVnp+cMJZpoM7MoPPZh8A+IR4IRjob9GCIwabE8ExoqWXopcOs84UvhOesjgNbKfgkVABERABPKHgN328qcwKokIiEB2CLz/EdywWvFquFEaPAD2dh40+IacQX+NEeBwZPyRDvbbZVcQxiM7CmD3xMAAudIjoBqLgAgUFAEJ3oI6XCqsCLSMwAP3myWSfRjMussFxRotvPzZ3O5dafptWbqlspdn0NwPUBg/dm2glZfdQRheKgxUTxEQAREoZAISvNk7ekpZBPKGQNwEG8oAz0y7vok2Luko2gaeC/01R4D8rLV0C+NHbvxwjVbf5nbVdhEQAREQgdwTsCY894VQCURABLJH4PufgZiJNLA7g2XjU7WZiZLjy8IEsAVpaobA7rtGwbF3iZH2cNelwTiWG7+RFzG0mQRKfrMAiIAIiEBuCUjw5pa/cheBrBO49uoI2PfUL4Prtwu76tmdgR9dBTDlC/01R2CXneyhwQRu1HCxG4PrEmI7sUvIovmmes2vSQREQAREIH8J2K0vPwqnUoiACGSHAD+4ct0YTLDF7Iq3yayVyLz+IgAAEABJREFUIRg+djjtldnJt9hS5cdr7gcoTPRyPGPKXHLlKBfFVlfVRwREQASKjYC79xVbpVQfERCBBIHZ8+B6LbhX8Ha109Jres3Ergf24YX+Uibg+kEHgGccQz4neDCzL2gwN09GJyUmAiIgAiKQYQLWdGc4xSWS+/HnX5cI0aoIiEBbERg3LuK6MfDX1FzfXbviKXgjVgA3Lq8tNaVGoHNnILR/dmPgR2vcK27rhhTPP881OREQAREQgcwSyFxqbKszl1oDKY2deCcOOG4wHn3qFSxcVNVADAWJgAhkiwANkabJ3Ni77MLgMaN4yO+vcOmoKNfkUiQw6ALy8hCYlddZe/nkEHiIGeSnplkg9CcCIiACIpCvBLIueP9+6F+xwvLLYuBFN2GHA87Elbf8Ez/O+CVfeahcIlA0BCjKXL9TL4RvJl1buLrFfA/86MqtFMGsLatAjctxeCM1LScfIEJqXW5oy4IoLxEQAREQgbQI1DTbae2TVuQt/rQurru4H6bcPQ599t8Fd056Brv+7VycM/wavP3+Z3bj1Z0iLaCKLAIpEhg8LELjLqopcBPGSbveAN/8UXMpJqNodQh4Zs1li0VruesrYivUu+zmUCeavCIgAiKQCwLKswkCWRe8ybxXW7knzjn5UDxz33hsttE6eGraW/j7WRdhv2MG4aEnXlR3hyQoLUUgQwRiJsYo0JwzVeYsvDTtmrX30rFSvC3C7Nle5BoH4vDsH/A8IIh4mPkb9CcCIiACIpCnBNpM8E7/cSauuGkSdjusP/794efYeIM1MbTf0ei1Sk8MueRWHHTCkDxFpGKJQOERcLrWrm6fzgSuR1uvB4Rm7Y1WF1598qXEfU+JOoHLh4naMsUBQ4vLrjDQ0J8IiIAIiEA+ErDbYXaL9c4Hn+O0gVdgjz7n4aa7J2Pv3ltj0k0jcO+1Q/C3/XbBVWPOwhN3jcP+f90uuwVR6iJQQgQGDYsgbiqs2q7wsAoIzQxJC288CgRUwyXEIpNV7bWisSRTc4gBpnWd2KXHniUymZXSEgERyDIBJV9aBNhsZ7XGt98/Bf/9+ntccFofvPqvazC8/zFYf+1e9fKklfekI/etF6YVERCBlhNwmtbUGH8oIcJfWDM/+5wGZoQcNdKUWsuTLvk9Y8Yywm4NxpJCN/QAfbhW8qeFAIiACOQ5gawL3uMO2wv3XT8MRx+yB7p26ViLY1FlFb7/aRZCd2euDZZHBPKIQOEWhdZGXtwcnSGE/VOUmS2yyqy9EQq1wq1azktOsWsore0C2GXEtC+IlMucF04FEAEREAERaJAA74kNbshU4K33PYH7Hp26VHLTf5iJ3Q/rj5/0wxTQnwhkksCAwRHQ6hgNLNVqsz6aOuOFXm2G3TJPssyotGpad4MoobpfWDOkRtdWDWvgAWPHE3qrktfOIpCfBFQqEShwArwP5qQKHTu0c/nOmbfALTUTARHIEAETXkwpsFfvnpkeqXH5IiViWmzQIEo0bpVrKYG/9wE4xrHJXrAfr2ldlxSHJps3uwa+C9FMBERABEQgXwhkTfDe/+hzuO2+Kfjymx/AD9foT7ob73oMZw+9Gst064y1Vl85X1ioHK0joL3zhIC7qE3swgSub0qX1l7KsGqz9nbskCeFLPBieAY5Qsa2RI3iZfcGMi/wqqn4IiACIlCUBNhcZ6Vit5rYHX/9/fhm+gy89vZHoD/pbrr7cTcc2aVDT0EQZK0IWamXEhWBfCYwcJiZdE3oxsxx/N3Q89yr96iJssC3GfSXCQL8tbW4MWZ/BlrQDTM8E8AinAm6xZCG6iACIpBvBLKmNp+691J8NO12/P2QPdzIDPQn3VtTrsclQ/pi6802yDceKo8IFDSBeI3iKrNlyKubS3O0Pp57jrozZOrgdupiUA02xS6fKMyQDo7UQOR335epXJSOCIiACIhApgiwfc5UWg2mc/5pfXDIPjs1uK2UA1V3EcgGAXZdcNZHu7J9WhwtwDNtFouF6NE9GzmWZpqDzoshNPNuzPjScB7aMjQUZP3BBzT92oomERABERCBvCFgt8XMl4X9dvmrar/NnovnXnkXdzz4VKOusqo68wVQiiJQggQGDQ9MhAExu6opdk2PgcOTRU2Mge/cS5BJNqtMoctxjtldhJwpdh3mcgLPZs5Fl7YqJAIiIAJZJ2C3xsznwSHHbrp7MubMXYDJz7yGcdfc26jjeLyZL4FSFIHSIxCLe/BNhZXDRK85mO6itZdirO9JbkwBhspliECyGwOsFQ3ZW8R484coZN/NEGAlIwIiIAIZJGBNdQZTq0lquz9vhLem3IDVVl4eE4af6vryJvvvLrns2nnxj1GgsT+Fi4AIpEQgbqI3bjE5JJkt3IdUcVNmq6/CNbmMEuAv2NGmTuA1LWloZl7q3pdfzmhOSkwEREAERKCVBGqa6VamssTuHHmhQ/sKeJ6H6uooZs+dj1iMdwUgGovhzXc/xYeffr3EXloVARFoKYERoxN2xbhd0WbkBa2O8Ox6s+DQRHBL09V+jRMYfiGt5gbZmNOyyz68obV59E9+ysA3vmurtmhnERABERCB9AmwqU5/rzT2uOmex7Hroedi3oKFCM3SdMSpo3Fsv4txWN8RuOXeJ9JISVFFQAQaI7CwyoNnSpfdGSjDnOC1Z0xe4Kee4kIa21XhLSRQTgsvVa5xDj3A8MMMvOBDR8ifXWthutpNBERABEQgJQJpReL9MK0d0o3MMXgP3mdHsOvC6+98jP989jVG9D8WZ594MO5+6Jl0k1N8ERCBBgjETXjRksuupO4HEWzdoxCzV+6rrdTADgrKCAF7hgfFrnPGnFZ18o9kJHUlIgIiIAIikCkCWRe8P8/6Dev8IdGB8N2P/osO7dvhgD23x9/22wUzZv7mfpgiU5VROiJQigSGjQios0DLYkDRxavaS3RniFOJlSKUZJ2zvCRzz8y6/GjNjXts+cURuuPx/n9sRZMIiIAIiEBeEOCtMasFWb5Hd3zyxbeuO8OTz72BrTdb3/262oKFi1y+GqXBYdBMBFpMYFHUg29KtxwAx4X1TOyyHylfsfc9MWqhmrJF4IJzowl5G1gOtKiHtvQ9xM1/930MtHVNIiACIpAHBEq9CFkXvPvt8RfXdeHPe50Cjs97+AG7OuYvvva+W66y4nJuqZkIiEALCdhVnOzOENToWy8GcMQAjc7QQqYp7ta9M1y/XfKG/ZnWdevsQ+1J7xoRTSIgAiKQHwTsVpndghy09w6uz27v7TfDRQNPxDZbbOgyfP/jL3F8n73QsUM7t57pWTwe4qeZv7pRIVJJO934qaSpOCKQbQJDR0ScwOKr9Qitiyay2IshGgFiaY/OkO3SFmn6Zs0lc3ZpCM3P/gwcFi7iTO1FWmdVSwREQAQKjEDWBa/neeBHaxcPPAn/t/tfavGMGXACzjn50Nr1THpeMOvxVnufgt6HnIM/9T4eDzw2rcnkU41/+Y0PYsOdjsGceQuaTE8bRaCtCFSZJTc5OoP7zUJe0Sa6uDhFPzbRJoeBQpfHwDPutOzCHjxoXWfPEvXjbZNDoExEIPMElGLREeB9MeuV4sdpDz3xIq64adJSLtN9eBcuqkL/kdfh9OMOwPtTb8HEUWdgxGW3Y/qPMxusZ6rxH57yEm6+5/EG01CgCOSKAEVVaJZc073g6AAUWxReoXnUnaFtjsq5Z7MfiQda2d3xsFloD/rM/d57zeROj5wIiIAIiEBOCWRd8D417U3sckg/DLnkVvzz8Rfwr6dfqef4wxSZJPDmu5+AH8T12W8XRIIAu26/OXqt0hMvvPZeg9mkEv+t9z7F2CvvxvihpzSYhgJLkkDOK83uDGZMdELLdWfg1Wxiq9o0Voxfr+W8hKVRgB7d4bqVeGbhjZlL9uN1xyZiBwT6EwEREAERyDUB3iKzWoZb752CrTZdH29NuQEvPXIVnnvw8nquc6cOGc1/xqzfnMAt56jwNSmv2Wsl/PTzbzVr9RfNxf9m+gyceuEVuGLk6Vh7jcTwanVTiASeCeu2d4HdVW3KSd65qnOu8iVrGuxylX9j+bI7g++H4OgMdbszBHaCnn1GrCDPjXxl3dgxSIZzPF7XncFaVA5RxvPFN7M79W4yTr4tC5V1vnFMpTzFz9rLm/ammFlb066pFQSseW7F3insunBRJbbYZD10aF+RQuzWR5kzd77lVf9DuIqKcsxtpN9tU/Fnz5mPk84bj34nHYK/bPnHBgvXvXMFcuE6tIugvCzISd65qG8u8+xorCvykDVth/G4xxHI6nVniJv62nid3JyXrT1OHdtHUBEpvPM6tIPBbiS08nrWqtohACKJJuO9d/PzWHQy1uUFyLq151gu9hfrtrsGipl1okXRvKUE/JbumOp+O2zzJ7z6VtuNwN6lc0fXpaFu+Sorq9CYJbmp+K//+yPX9/e7H37GJdfci5vvTfThZV/kT774xmUx8/dFyIWbu6Aai8zEl4u8W5JnIe8zJw9Zn3RWFBwNgB9MBSHgrIseEA0A9uktVN5z5tt5XR3LyTXVGmZDLoza4fAQY4tqx4ECOG7Hhat331+dl/WZbawrC5B1a45TrvYV67a7TxYza2vpNbWCANvjVuze/K7sBvDuf77A+Ovvx90PPbuUq6qqbj6RNGL07NHd/Xpb3b7Bn381HSss373BVJqKv9bqK+OsEw5C966d0M1cl5ruF926dDTraqTB9BQoAm1BIG6Z8Be+ymzpriBeyRbIRT+KYQvX1HYEOLoirbscjoxCFyZ2PXM2AWWmgNuuKMop/wmohCIgAjkg4Gc7z+dfeddlcdt9UzD2yruWcgvN+uoiZGi25SbruZTufWSqG4P32ZfecVbaHbfZxIW/9d6nOPjEYU4UM6Cp+Gua4D3pyH2RdIfuuzN3wTF/2xPc5lY0E4EcEYibGdE0br3uDDCl1bNHjgpU4tnGTd2GtLAbB/bhNZMvfIbZuiYREAEREIHcEsi64OXHXh9Nux2Nua6dO2aUQIf2FbhqzFkYd829bgzes4ZchcFnH4XkL7rNW7AQ7I6QHA6tufgZLVyqiSmeCDRB4MJhEWopmN51gordGSiw2J1BozM0AS7LmwIzt/umetmoxkzo8pjYwnXlvWdSljNX8iIgAiIgAk0SYNvcZIRMbuSYt9XRWCaTbDCtXf6yKT6Yeiuevm883nvmZvTZv3dtvJ233dSJ73XXXLU2rKn4tZHMs9YaK7t9k10bLEiTCOSGgL0lN33lPlij+g3N1MuLefCAaG7Ko1wxcnAUcXsK4RFg94a4qV07TIhbk/fRhxERaiEB7SYCIiACmSDAe2Qm0mk0jWgshmv/8Si23/8MbPHXk/Dkc2+4uH0vuAxnDrnS+bMxCwIfK6/QA2Vlqd1o0o2fjTIrTRFojkDchC1MSFHgcqjd5Ctz9he1Sw2dOjaXgrZni4BvrSmPSWAZeGx2eJxM8Sa7OViwJhEQAYs6naoAABAASURBVBEQgRwRsCY6uzm//MaHuOa2h7GTWVaT3QqY44F77YipL/0bs+fO52ornHYVgdIhMHBEBHxVzl/18il+7Qq2CVETVh6VcOmgyMuauhEzTOjS9G7GXthhQWAzBuVlgVUoERABESgRArxXZrWq9z06FYcf0Bujzj/O/SBEMrONN/iD8/7w0yy31EwERKB5ArTkMhZHA6CgosblmK/8EZLRw+3dOTfK5YxA92VD14WBzyI8NnQUu+ziMPpS2n6zXDQlLwIiIAIi0CABv8HQDAZySLB16vSXXTLpur+ItuQ2rYuACCwmsGAh+H0aKJ5g2sk3petEr0WprgYCCzOvphwSOO+sGMIIEpZdcMwMOD/HS54/F/oTAREQARFoIwJLZpN1wbvx+mvi8WdfR5xfcNTJ/YF/Pe/W6nZzcAGaiYAINEhgzEURUOByNAZETUx5nhulIWrmxCBp+oX+ck2Ah8IOCdjthN1M7LkEES/XpVL+IiACIlDaBLIueE/5+37g2Lf7HD3ADQf29Atv4ZQBl+OGOx/D2ScejIpyfmte2gdBtReBVAhEQ4tlSsqLwVlzKaxgM98suxeNtkDbrCkdAlmKa8fIDglCOyShPZTYIUJoqtf3Pfz8W5byVLIiIAIiIAJNEsi64F13zVXx0C2jsMZqK2JRZTWee+Vd/PTzLxjR/1gc32fvJgunjSIgAgkC/5tuIteuVo/OXpmHsH/PrLz2wry6KhFH8/wgsFdvM79bUdiNwQ4RQpuFFL4WNmECpbB5NImACIhAPhEogbLY7TP7taTovWbs2XhryvX4z/O34eFbR+PgfXYELR7Zz105iEDhE7jpRlO5Vg03GoPpqdCELi2HHIqsTC9JjEz+TNvvxAcRgKNo8AcoOGIDj5UZeeFxyIb8KapKIgIiIAIlQyDrgvfX3+fihdfex9W3Poyb7p6Mf3/4BfgDFCVDWBUVgQwQsLfkTkX59pqcY7wmBFSIwK7gsSNMAWcgj2aS0OZ0CIRwfXjtucRELpyV17NjZcHppKK4IiACIiACGSJgTXCGUmogmedffdf94MSpF16O6+54FFfcNAlHnzkWux92Lr785ocG9lCQCIjAkgRefRNOPPFi9WnojVsMD4j5Hkz/2oqmvCMQwCy8IfUu+GMhPHa09HKc3kkP5V1pVSAREIG0CChyIRJw7XA2Ck6r7ukDJ2KrTdfHXVcPct0ZXn3sGtx6+QXo3KkDDus7El99+2M2slaaIlBUBB6fHAGFUsxElFcjdvl6nGFduoVFVddiqcyQC6KIh4kHEjay7ijR4wHvfMCnlmKpqeohAiIgAoVBgE1wVkp61a0PYdM/ro1rLurnlh3at0PXzh2dAL7nmiEmetvjjgeeykreSlQEck0gk/lT43IAXv7YRMwEk7toTfFSRF3YTzbeTLLOVFrW3IEfrbEfb+3wZJY4j11cPVCMhCYREAERaFsCbH8znuPsOfPdEGTH/m1PtG9XvlT63bp2wmH77YKpL7+z1DYFiIAILCZw6z/g+n+y74IZDO01eWJb3PMsiJI3sa55/hGg2HX9du2ZJA6PI8iB45FHzMC7qDL/yqsSiUCWCChZEcgLAlkRvL/+PsdVbt21VnXLhmbr/GFV/Pr7XMRi8YY2K0wERMAIfPlVxERuzRBkvFQ8sCso2LVh041MSVkcTflJYK11zZRrzyS09Hpcspj2oALzDxsVcE1OBERABESgjQhkRfD+PmeeKz776jpPA7OuXTq60Hn8vVTn06xkCajijRKgxkXgmX3QotjVSr1Ex9fkhx1sYZrylsBxRyaKFjGByy4pfFLhsaOlPtBPryXgaC4CIiACbUTAbqGZzylkA2/JPvPC23h86usNutfe/shiaBIBEWiMAK2AHo24dKZ8nU3Qrq24OSQvssZ2VnheEAjtuNHC68bjrWltfQ86fHlxdPKzECqVCIhAdgjUNMHZSXzY+Ntw/qjrG3TX3P5IdjJVqiJQJAQqq0wZ0TxoVymtgnwVTvEU2pvyIw6jCi6SihZzNcoBfqRG4cvhyWq7NpgQvvYmO7DFXHfVTQREQATyiEBWWtw/rrs6nn1gQkquc8cOeYSjEIqiMpYCAf6CWsKQ64Filz8wETf9yw+hQhPBG21QChQKv46Dzo2CH67RqhvY8fPoTOx6Zq7/9jtbKfwqqgYiIAIiUBAEsiJ4y8vLsOLyy6Tk9PPCBXGeqJBtTGDIyAgojihyI8zb1C/lEX9aGKAP+isAAnyeN30LO3zgsaSfh49jKHtUwQVQh7wuogonAiIgAikSyIrgTTFvRRMBEWiEAF+BB2YFLLPtUXMer1RTTRaEkYMYYoGaCoKAb8fN80L33Ro7ovBBxoLAY/nxpwVRBRVSBERABAqeAG+jBV+JJiqgTSJQcAT++zVA419o6og/NMEfnOA3aqaZUG1a116gFFydSrnAf90titDMu3bo3C/mhXGADzD8+PCu+5z9HvoTAREQARHILgEJ3uzyVeoikDaB226LgB+ncegxrxoIzRToWSrVZhaU2DUQBTbtsH2iwLT0umOKEBS7dlgRi9pBTWxug7myEAEREIHSJSDBW7rHXjXPUwJmAARsxh+X8M0AyGVoJl7fFNKoYbQT5mnBVaxGCfCBhX133bH0PHimc/kxYiTiYaF+da1RbtogAiIgApkiUE/wZipRpSMCItAyAjfc4rkdOSoDBa7pXFAYxUwkwUSS26hZwRFYdrnEwYvZ4Y3HAFrwzQv6R42xJ5mCq5EKLAIiIAKFRUCCt7COl0pb5AS+/dbEj1l3KYxoDaRVkEKXr8P/sIasu214+DOa1blnxMAh5dgfG7TaW+p2mMGHmjifaGxdkwiIgAiIQPYISPBmj61SFoG0CbBLp0dBZGqIojd5gZpRECcck3Zy2iGPCMTMyOss9nZs+RDj2bpnARS9tsijkqooIiACIlCXQHH4k/fT4qiNaiECBUxg4PCI69sJU7cUQByrlcs4331TIRVw3VR0IFJuFHyABl12ZUh0a7CDa8d7qB1726pJBERABEQgSwSs+c1SykpWBEQgPQJm8fNN5Xp2VZrX7UtxhChwykmmilxIfs5UquYJjBwcBbumRPgUE4HrrcKHGf7qWjWtvtCfCIiACIhAtgjYrTVbSStdERCBVAn89ys4625oCtcm8GdoqYjY7xOREL1Whv4KnAC/O4yZsA1N5XKMZdhTTd1uDQVePRVfBEQgQUDzPCUgwZunB0bFKi0Ct92eGHuXYpdWQNbeCSR7480foeC6XOET8PnTedbqsjvDUt0aRpvZt/CrqBqIgAiIQF4SsKY3L8ulQolA8RJooGZm+APH3qXYNQMgaN0NLZCid8ywGPRXHATYrcEMu2a0t7npW3ueAY83uzVUaTze4jjIqoUIiEBeEpDgzcvDokKVEoFLLg8QsyvR5ztutwR9TgjFpHWL6lQIAju29iATmsoNbckDXdutwQRwUVVWlRGBFAgoigi0FQG7vbZVVspHBESgIQK//+4hEgsR9z14URNEFokiiKM1/PGPFmDrmoqHAH89LwzsOHtwPzzB7g0eTfp2qIeNkuotniOtmoiACOQTAQnefDoaKksDBIo7qKoaNPKBX6l5VlUKIV6U7MsbN1F05N8sUFNRERgyIAp+jBjEQ7gxl0N72LGDz/F4F6lbQ1Eda1VGBEQgfwjw3po/pVFJRKDECIygRS+0SsdM+NorbtO4MP2TEMH02CZNxUWgXQXgRmswq677cM2WzqJvx7vMDLzqxlJcxzujtVFiIiACLSYgwdtidNpRBFpPwDQuaNmjo1WXStctTQAPH2iz1mehFPKQgFcG8INEWvSd2DULr+d77mFn2Fg+9kB/IiACIiACGSQgwZtBmHmQlIpQQARuuwswjQOOyRr3gMAsvRS7fN3NJS2BBVQdFTUNAqMGR924y5498fDYw5Zm4IUbpSPqpZGSooqACIiACKRCQII3FUqKIwJZIPDf/9r7a9M2cbsKPRpzubT1qOW1zLKmfm2pqTgJcLQGCl3fFK4ddsTMqOssvnb8uZwztzjr3ba1Um4iIAIisJgA29rFa/KJgAi0CQH204xR05rACcy6x3FY2Z0hHg+d1fe8s6iA26QoyiRHBDhaQyzmcTAOuHOA54OVhYuLLrOHIfNrEgEREAERyAyBkha8mUGoVEQgfQJDRkbALgzxatvXrkJ2a6BlL26zGJWvBWsqbgKjh0Th27FnH152YYnbww+X7OZS3DVX7URABESg7QlYc9v2mSpHESh1AvzRgdBeZ9OyG4/DfcBEwUNzX7/TYtBfaRBwDzph6B5x6KfHVsG+va+83qYMlJkIiIAIFDUBCd6iPryqXD4SuOEWz1n2QprzzKoXwP5s6ZvO9czs23N5W9dUEgSWXz6O0Kz69uwDuBMB8GB/1jI//mRNgK1qEgEREAERaB0Ba1ZTTEDRREAEMkLg2+8CEzlwzgkdUzimecCP87t3zUgWSqRACPQ7w8z7NvH408LLJULAD0MTvl6B1ELFFAEREIH8JyDBm//HSCUsIgLz5gP8WI1Shh8qmapxtePHagw7r5+ZeV2IZvlMINNl4znB0ToodnlOeIHnxuQdd7k+Xss0a6UnAiJQmgQkeEvzuKvWOSJw0bgI+JESf2ELdvWZIQ+06vG1tj5Wy9FByXG2++8XBR92OP6y68cdAuzXzQ4Ns3/PceGUvQiIgAg0TaBgttott2DKqoKKQMETsLfX8EzJeKZwKHZZIYbxY7VhA2TdJY9Sc3/eIiFw2X/bPQyZ4GVXF4pfdnPgW4FSY6L6ioAIiECmCUjwZpqo0hOBRgiMGGvWXV5xVLgmeilqKHyTlr0O7RvZsdCDVf5mCfA8iMc8xPnMYw9DPEV4qngRYPSldrI0m4IiiIAIiIAINEWAbWpT27VNBEQgQwQWLQK8eAha7jwKG7v6KHToXWvNKPRXugRGDYuC5wJ/jIJWXtfdxXDwfImEpoDNr0kERKDwCagGuSNgt9zcZa6cRaBUCEx9EaBsCQMPEXtlDZp3bRkPEwL4hL9DfyVMIAis8nY+8KO1mLXKHIfXQuBHzOprnmuvs0BbahIBERABEWgZAbWiLeOmvUQgLQLPPRsBDXXsk0ld43HFUght6de7Ci1QU0kS6LU6OzIA7OJipwVgJwp/oCSw5fQZOklK8qRQpUVABDJGQK1oxlAqIRFomEB1tdMufEuNwK44J2tsydj8Gdmx9jqbfrnSJnDycXFQ4PI3p+Mmcil6Q1u64crspPlNIzaU9glSirVXnUUggwRqbrsZTFFJiYAI1CMwdETCuktxy/67tgYKGc9iVUdtpkkEagh4XgjPThI2zBS87NfLTZ4FXHI5+z1wTU4EREAERCBdAtaMpruL4otA3hAojIKYsvVNyJiRzr2ujteoGK6fdKIUb2EcxLYp5fAhMffDJMzNsxPEJtf327MnJL/mvOE2OREQARGMthRHAAAQAElEQVQQgfQISPCmx0uxRSAtAkPMuuu6MZi5LrQ9w5orzjSwG61hzV4WqEkEagiUlcF1faHK5cdr/LbR97jRZjaNGCsrL2nINURAYSIgAk0RqLn9NhVF20RABFpKIGYmOjPOwfQuKF5otaOAiZn6XbMXByRracrar1gJbLxxFPZCgF15XRVjPIHos+WiSlO99MuJgAiIgAikRUCCNy1chR1ZpW9bAtfebJeXCVtadfnlPa12LEE8HjrvCceGXJUTgXoEDjsYiNuDEszFTN/6fFri0p6UbIG7HqwXXSsiIAIiIAIpELA7cgqxFEUERCBtAt9/58M0ituPQgU1+pZ9eAN7de02aCYCDRDwywE+KPGcidvJQ81LEczz6aOPIg3soaA0CSi6CIhAiRGQ4C2xA67qtg2Bp6cC7LBAjWt6BRQtqLnauBg1ONo2BVEuBUlg9BA7P+zk8al47QRyv8zHmlgYu8V88SVX5ERABERABFIlwHtvqnELKh5fG/8081dEY5QdzRd9qfh1dmEaP/78KyqrquuEyisCjRN44YWI67MbmkBh/4XARAv9FL78dbXG99QWEUgQ8OzcifPkiQPxAK5fL1d5Lt1yu6y80J8IiIAIpEGgKAXvC6+9j632PgW9DzkHf+p9PB54bFqTSJqKf9Pdk10aux56Djbb/UScM/wazJ4zv8n0tLG0CXz1DcDX0R5FCoWuPXNR7JIKf2lt9FAL4IqcCDRB4MILogmRy1baThl2aeB5ZPqXuhf8QZMmds/oJiUmAiIgAoVOgE1podehXvkXLqpC/5HX4fTjDsD7U2/BxFFnYMRlt2P6jzPrxUuuNBe/W9dOuGXC+Xj7yRvx8K2j8dZ7n+LhKS8ld9dSBJYicMstZn0z6xwHVKXwZb9LKhTfwmxCYEJ4qZ0UIAJLEOjUEXBD75rC5dB2sNPKnp9cWMRa7sEjLAD6EwEREAERSIWANZupRGsuTv5sf/PdT7Bg4SL02W8XRExZ7Lr95ui1Sk+88Np7DRayufiH7LMTtt5sA7RvV451/rAKdtp2U7z4+vsNpqVAEZhvxn92W/BM3YamdG0BfnAEU7qmW3D26VFBEoGUCezx1yh43tCxU3jcziNn5TXl6xdd650yFkUUAREQgbQJFF2TOWPWb07glpeX1cJYs9dK+Onn32rX63rSiV8djeGVtz7EhuuuUZtEJPBMWLe9801M0fqTq/xLKd90WI+52KxuJkZCUyi2oM4Fl3QUvqus1PbnSiEdq6AYzusMtgm7bOe5bg3szuBZqxMGAD9k88wfsdmAYZEWtz9i7bWYXbrXlFiLdbrnTEPx7bLX1AoCRSd458ydjw7t29VDUlFRjrnzFtQLS66kE3/0FXdYOgtx1MG7J3dH907lOXEdKwJU2HvNXOVfSvl2MtblKbDubG8BzAAHLxaC1l2qXdMkTvDSMnf4wUFOzpVCOlYd2gUoD3xxqtOubL5ZAHcS2cnE8Zxj9qRba+W1E66lx7ejsS4T6zY518S67e6TxcwaBfiXT0UuOsHbpXNH16WhLuTKyip07tShblCtP9X4197+CCZNfgG3Xn4Blu/RrXb/mbMrkQs3d2EUi6rjOck7F/XNZZ5zjHVlCqxPOScGM+4hNEHimRAJTaDYlHgl7Yf44x9zc67kkl26ec9dEEVlVOd1XW4H7V/p9K69NIAZwO38AnxTvJ61QiaFcWK/WIvagTnGukqsW8Su7vFJxS/Wbdf2FTNru+Q1tYJA0Qnenj2645vpM1BdHa3F8vlX07HC8t1r1+t6movP4couvfY+3Hb/k3jwxuHYaL3F3RnqpiN/aRPgK2eqEg45FtpVZfrWRIkxMVVC6+6fN4nZiqalCSgkFQIrrWhPUBaR5xLH5I3bQ5VpXsTtXENik23VJAIiIAIi0BgBNpeNbSvI8C03Wc+V+95HproxeJ996R03QsOO22ziwjnKwsEnDnOimAHNxR966a24/YEnMWH4aejapRO+/2mWcxybl/vLiQAJDB4Wod6FZya4iAXQusuAOLs32PqB+9tMkwi0kMDpfWM8nZy2tVMMfKjyQriwwJYXDOZZB/2JgAgUMgGVPasEik7wdmhfgavGnIVx19zrxs89a8hVGHz2UVhlxeUcyHkLFuKTL77Bosoqt95cfApkRux7wWXY/bD+te77H2cxWE4E7G0C4ASusYiZRdemhHXX1tnHYf11Y/TJiUCrCPRYNoRpW7hzLW7nnKWWXOcHbO4tg4VpEgEREAERWJpA0QleVnGXv2yKD6beiqfvG4/3nrkZffbvzWDndt52U3w07Xasu+aqbp2zpuI/de+lLj73qes41Bn3lROBYaMirm8l7GpiVwbTIk6UhPbOmSLk74dTlmSEkxIpYQLnnBlzFl1adil3aeVlAAWwFwCDNC5vCZ8dqroIiEBzBOwW3VyUwtweBD5WXqEHyspSe9WXbvzCpKJSZ5rAnDmWIk26toiZ4wVFB9O4vudhHVl3jYqmTBFYYcW4+wjSs5OMQpcPWBTAdqpR++KnnzKVk9IRgXwnoPKJQHoErNlMbwfFFgERWEzg4ssiTmgwJDDTbmgKxLSurYb8oTUcK+uusdCUKQJn9o27cXnDeOIpy14igMI3jAMUvROvi0B/IiACIiACSxOQ4F2aiUKKhEC2q/G/by0H6g5TuE5/mN+nx9apPjbYkDZfi6NJBDJIYC2+NTCB68fsocrOOfB8s/STlt4nnrUVTSIgAiIgAvUISPDWw6EVEUidwI03R5y1DSY6kmLDWdtMgURNhBx5qM1ST04xRSAlAsceEYJ9duF58Gr24MeSyT7kr7wUqQnVQgRqCcgjAiVPQIK35E8BAWgJgaemAhS3sHfKFBv8wQmKXqYV+h62+8vicaAZJicCmSSw266J88s0r52CJoCpfM3qy3OS3nGXS/RmkrfSEgERKHwCEryFfwwzUwOlkhaBF1+MgGLD8zxEQrgPiWzhxAf7U+6ze1rJKbIIpEVgp+0Ad76ZyPU8D54t7dmrNo05v9Z65REBERABETACErwGQZMIpEPgyqsDuF+8slnUS+zprLvmD+HhoP0T1rfEFs1FIDsEzjlz8XnmRuit25oHwIXDI9nJuARSVRVFQASKj0DdJrL4aqcaiUAWCMyY6cGMamDXBXZl4Hdqbt3yCr0QW2xqHk0ikGUCPZY1K2+YcHbawX0iaevMluueed75wGaaREAEREAE+JmDKKRPQHuUKoEhIyPgq2OPw4+ZouCr5ORTI39kov8ZTnaUKh7Vu40JXDQyCjsNEfc9mFEXfPDiAxjsj+EPTZKV11BoEgEREAEJXp0DIpAqgXnzgbjpWYoKdtqlFY0fCXH/hAgGljWrG9flRKCtCHRfNkz04Y1bjnSmdLlIPogNH5Nl0WvZahIBERCBfCeQbBPzvZwqnwjknMCYcRFnQYMJCnBGVQE4iy+tu2OHR21Nkwi0LYH+Z8XAhzDfWvPQzLzu4cuKEJpjeHU1MFMfsRkNTSIgAqVMwJrIrFdfGYhAwRO4+2HAs6vFaVzOzG9vkZH8a9cp6dNSBNqewNFHRsGHrrpiN07FW1OUCVdEanxaiIAIiEBpErDbdmlWXLUWgXQIvPJyHH5YswevmhjgDL1IWHiHXiDrrqHQ1CyB7ERYd21L1/WxsaWdp3wYC+08ZZcbnqeB+UdfItFrdDSJgAiUKAFrBku05qq2CKRIoP8gE7UWNzTzmWkJJ3Q9qghzFoStt5XYNTyackxg7IgYeF7yTQSFrhuoN1kmO3EXLAC++S4ZoKUIiIAI5JhAG2cvwdvGwJVdYRH4djoQj3lOO1BEBOzOwCqY2I1T7Zr///5qM00ikAcEttk6ijBm5yzPUxO5zuhrS567fENx/U2y8ubBYVIRREAEckBAgjcH0JVl4RC4/kYTCCZu+UEQ+J7Y/Cw9F3FTEYPUlYE4suWUbpoE9uHDl7XqFLo8Z03rJqy+TMdO2sBU76ARdk5zXU4EREAESoiANY0lVFtVVQTSIHDJFQFgIoHmXdMJXKD2z5REu/ZAxw61IfKIQF4Q4Ggh7NrAn7jmSRu3c5Vj87JLDuyE9sz6e/cDavqhPxEoKAIqbGsJqNVrLUHtX5QEfvkFmP2rByccPFA3wDehwMqafgBFxLAL1XeXPOTyj8BftrdzkyeqnbuuT68V0YOXOJHN//EnPhZWmkeTCIiACJQIAQneEjnQqmZ6BC6bGAG/cne9d00ncG8unAA2IbHv/iYoGJhHTkURgSSBvXYFPHtBUdPNHHxD4fSuncR2+rofqhg03FagPxEQAREoDQISvKVxnFXLNAiMucSUQo0WiJtKoFhwIsHC4pZO6IXYejPzaBKBPCYwZpg9lFkLz64NFL6hvaewU9isvOYzj2eu77k8o/O4EiqaCLSMgPYSgaUIWHO4VJgCRKBkCXz6BTB/nmcyFzBd6xyoCTy4Pw7uf9HwmPNrJgL5TuDcM6KgsDWta0W1k9ie3OIuAIlvME0Ju77qtlWTCIiACBQzAQneYj66qlvjBBrZcsddEcCDs4JR5zq/XSUUv1zf9i9R26hJBAqDwLLLAqv1CuH68YZ2WvNEZtHtHI/ZCe17nuurPvlJC2C4nAiIgAgUKQG7lRdpzVQtEUiTwMDhJnZtH9MACO3+H5hAsFW4dbOEwcL23YMhciJQOAROPjYGnr6usbcT2w1XZuc2z2vYErbh9dcCfDO9cOqkkmaWgFITgVIgYE1dKVRTdRSBpgnceLtPPQuKAGoAD+5zNdjCzGI2xT24PpHQnwgUHoGxI6KI2YltU6KbjnnslF7cW8cDbrw5opEbCu/QqsQiIAIpEvBTjKdoJU2guCv/7ffA/7723VBjfOPLIccodCl++cEahcIRh+tSKe6zoPhrN3xIFLTosh+66Vs3cgNFr6u5CWCGjbwoAm53YZqJgAiIQBER0F28iA6mqpI+Ab7qdb+mZrsGvONzaVdFjRf2BhjtOwDbbWkbNIlAAROoKAMOPdREr9XB9C2f6ZwA5jXgzncLDGybfonNIDQ1aZsIiEBBErBbe0GWW4UWgYwQGDgiAt/u9jaBCoACl+95KQLoj8eAsUNNCUB/IlD4BDb5I7DW2iH49oLnOB/y+EYjblVz10AIBHZXGDgs0Z/dgjWJgAiIQFEQsKatKOqRT5VQWQqEwLDRAXwrq93jAQ/Uua5/o3mRFATD+RoY+hOB4iFw3FExtO9oZ72d6Hyo4wOfrcGe7dx5zwuBYfyIk6K4eGqumoiACJQyAd7vS7n+qnuJErjptgii1bzjw4le9xl7DQuKAJgC6L1TDOVlNYFaiEARERh8XgwcrYHnOTyAD3ie3Q0ocOlnOPuzt757A/QnAiIgAnlBwJq4vCiHCiECbUbguWkevv7GsrMbPdUuBa5n73Z5gwfDTOy27wT03tk8Fk2TCBQjgUtH2/nN/gw8562CFLtxW9K568D8FL/s3sBtoApBGQAAEABJREFUtqpJBERABAqWQM4Fb8GSU8ELksBnXwDPPh8k7ud2vwdNWbZMfpnubuy2Pui8aEHWT4UWgXQIXHd5gJDDkNg5T93rrL6WQK3oNY89C2Lw8IiGLDMumkRABAqXgARv4R47lTxNAj/OAP5xZwQJtQtw6XFcJrup80KghZeCd8xIiV3oLxcEcpLn2JExuxRM8VrufPDjNcDnQBp/+QYkZuHs7jBmbATTf7QVTSIgAiJQgAR4ny/AYqvIIpAegYWVwNXXRcAbt28C1+7w/DYnkYhdBbzJs2vDgP4SuwkompcSgdEjYojbRcCP1exycNcJR2sIqXYNBIUwr5nrro9g6gsWoEkEREAEskog84mzbct8qkpRBPKIwPwFwKgxJnZZJjNkhXbW270dnr3DpchlsHlx2KFRdOnCNTkRKD0CF1H0WrXdNWEPhaE518XBrhl2a6Do5XXy/HMRXHF1YDE1iYAIiEDhELBbf+EUViUVgXQJzPodGHOxiV07092NnO9qedc2xy4MtnADNGyxdRwbbZBu6oqfSwLKO/MExg6vecPBC8OcaV34fmhvQ0L4pnEtCLDZrFkeho6IQH8iIAIiUCgETAYUSlFVThFIj8CvJnYnXB6BZzdqp3PjAC1WznJld3KPydls1dVC7L+nbeS6nAiUOIExJnqDiF0gNhFFSIVrT4u8bqJ2vbDbe2gbaPEdbKL3tzm2okkERCCXBJR3CgQkeFOApCiFR+Cjj4HLKHbtBs1+iB4VL6thN27evy3YWXa7dQf6Hl/TUZHb5URABDBycAxduwIUubx0PF4wxoU3DK/m2ZDdgsz0i8smRHDHvdxiETSJgAiIQJ4SUCuVpwdGxWo5ganTPNx9v1l27ezmfZof4oR2xw5thTdpW/A+jY6dQ/Q/s+YVbsuzK4w9VUoRSJPA+edEsckmtOXajjUL88EuJVuEcJZeXkzmPvvMd0OXRfXsaGw0iYAI5CMBkwT5WCyVSQRaRuDaGwJM5Ti7dmY765QlE7Kzri19u2lT9JoXHTqGGNhfd2eykBOBxggcemAMRx0VBR8UYcK25lKit9bZZeX8XA4bGcHDj9vF11iCCheBPCCgIpQmAbVMpXnci7LWI8dEMP0HD7To1n8Nyw4NCYsUwzt3AgadJ7EL/YlACgTWWxMYPpSid/E1FNqTY+11Zko3pLO0PLujvPOmjyEjIlhUZQGaREAERCBPCFjzlCclUTFEoIUEFiwyATs8gspqLBa7vAHHQX3rrFOes0EBPZYL0fxYuy0siHYTgSIlUBYBxo6IoX25VdAD2K3BLjF3fcH+uA4LNy+4jNvzJH+o4tob+cUo9CcCIiACOScgwZvzQ6ACtIbAq2/5btgxl4bdcHkThh86kQue3SZ6uY035PXWjaPf6XYnZoCcCIhA2gSGDIxi++3tonI/w1azOy8650Kwy0PcNnOsa15z33/vub69b7xTE1eLwiOgEotAkRCgJCiSqqgapUSAr1BHjY7g8cd9GpTgZnajhf3xpmtvXMEbLl+x8i68w3ZxHNWnJoLF0SQCItAyAnv0jmPokBiSfeRhD5r8gM3zzGNJBmbUtQmx0FZ8e8tiy39NjmDwsAj+962FaRIBERCBHBCw5igHuSrLYiLQ5nX54D/A4JERLKquydrus3ZPhbvxAojzxmt3XBdms7POimF3u0nbJk0iIAIZIFBeBowdGcWGG8Vdtwa7BPlc6fx8GE1kEda+ZLHL0G276baI69/786xEDM1FQAREoK0ISPC2FWnl02oCvJGOHhfBA5MipmoTyfFG6yxN9oqVN1XTue4my7FCfQsYMjiK5bon4mouAiKQWQKHH2zW3kFRJD9gY+pxm9mlB8/jx6Jw2zxevHa34YKW3yuvMeE7LMD0HyxyUU2qjAiIQL4SsCYoX4umconAYgJ33hdgCK26Cy3M7qZ2LwU8N7mZbwFBTbhpX3TqBIwaHkWFWaKgPxEQgawR4DU2algUO+9iUjcE3E3FlrBVZ9b1YGGeswAHFhB4SHSHsGv2uhsj4K+1TXvFArNWQiUsAiIgArB2SBTalIAyS48AP0obPDyCzz/13I7Jvrm8n/LGGrdgu2+Cv6bGbfxgZsft47iwv35QwgHTTATaiEDvHeMYPSKKzp15dZqotWuTWbuFBfH6DG0Wmp996/lgymuY688+E2CQXefXXBeA1zD3kxMBERCBTBJge5PJ9JSWCGSEwFf/g7sBPjHZB2+Ido802xCclSjOr9LszI3BbqrmnOgNQIMvBpwfVX9d6E8EckfggnNjGDQwCp9K1y5cClvTue76hF23fEBl6XwPiQvYViyau75//Mlzb3KGjgzw3odMwDZqEgEREIEMELDmJwOpKAkRyBCB/34FDB0Rwa23RxI3yBohyxXqXHcLjAGujy7A+yd8W99oo7jrwtC5owVqEgERyCmB9hUAuzmce27UXaPsZ09Ry0I5f9y0bk2Au649JOJ5FsNczBTypElm9R0WwZhxEcz61cI1iYAIiEArCOS34G1FxbRrYRF44WUfA03o3v6PCGgRYuntvgfXD9A8odl/bOFWw8CD3Q9BSxFvlgMuiOJvB9kdlDvJiYAI5A2B7l2A0cOjOO30hPB1F7DdddilgQo3tAdaLnltw2a8nm0zveD1DQvjD8tcfmWir+8lEwLMnpc31VNBREAECogA25YCKq6KWkwEqqIAv9YePDyCp5/1wVEVeIOrMfy4eyNvgKyzZwrXJt4b4VkEus23SFh1O3VgDDkRKG4ChVy7lZavY/G1u45dwq6rEuixZ1V2W0pc8FZLhpnjgGemd+HiWDCXc+Z6GD8+4ro7jRgTwdvvWWLcJicCIiACzRBQa9EMIG3OPIEnn/JBkcsblhuP085Cd2OrySrZ949hMc7M0drjXoXajXCNXnFnNdp/b7tT1uyjhQiIQP4ToMV35JAoRg6Oons3u5h5Cddc38nSW6jz+nbR028Le9AN+SzsxG9oWxlWbQ/Mjz6SaEv4wdtV1wb4aYZt1CQCIlDsBFpUP5MaLdpPO4lAygRovXnmOQ/DRiVeS778uu9uXrTSsi8ul7Te8CZGxxsaI9CiG9jNkKYghnXpEmLksChOOJZ3yZSzV0QREIE8I8BfY+t/dgwc1WHb7eK13Zh43fOSZ3F5zdOfcB6bAbB9AAMsglvYjGG+D8z42cPV10UwZHgADnU28eoI/vMfQKM+GCxNIiAC9uAsCCKQBQK/zQZuuNnHkBER9xHatBcDxKhTeRczZ1PivmU3Kvq5wiXFMR3X+YqTVt327TwMGRgFv/7mjS0LxVWSxUZA9SkYAnvtGseY4VGc3z+KTvzo1EQsH3ZhT8GuTbCasOng3cq1DbbO7k/cZl6LZXNbofBlu+F5loBNM2cB906KYNjICAYPi2DkRRHc+4CP2dY22R6aREAESoyAyY0Sq7GqmxUCM38B7rjHx/AxCevKhIkRfPe9n7gZ2c3HCVVb1mZufg4nFtodjBZez5aMHLcZ71cUut26AcPs9eegAVH9gEQtOHlEoDgJdOkMDDDRO8re4px4fBQRe73DtoEPvk78xq3e1m7YHO7D1tB8dLZgcI3XRed+bEcYThFMV1UFfPSJj/GXRzBkeMKxW9W1N0Tw6utANGoJaRKBIiSgKiUISPAmOGieBgFaSJ56xseEqwIMNesJrbhX2uvDLz73EY964M2G+jV5w0neiEzLgmHwLDML5MnneR6cNce3pQX7tr7+uiHGjIjivH5RlEUsUJMIiEBJEVh9FWD44Kjr8nDMMVGUl1ujYVMSgjUToMXXOQsMzXlJFwe4znbGPWjbis+Ntp0T2xsLQmgNUHU18MOPwJSnIvawHnFdITgs4qixEVx7Q4Bnn/fx3XQk3k5xZzkREIGCJWCXfMGWXQXPMoFffvXw0ise/nFXgIvHJ14NDhkRcRaSl1/18attp7DljYVF4U3E7jXguscVJG48vNfQYmuriRuRi5TYxgAvBkRM2J5gN7bRZt054jALYGS5NiKgbEQgfwmstQYwdGAUY4ZHMej8KFboaY2LNSpsY9g/19bYjDjHtodC1ja7BibZPjEOw5KOQtj5LREnnq36XLcF+Oap2qzBP/7o4YUXfNx0i4nhmu8PhowMMGJ0gHGXRXC7tYsvvOjh4089/P57cm+mICcCIpCPBPx8LJTKlH0CUdOUP/wAfPiRj6lmxbj9Th+XXxXBqIsiZrU1y60J2yvMgvv0MwH++6WHefOQeI3IoiXbdi55J6Gjn9vop7Mzizcbu5+AdyLeVLhOP29KXAYWZ7vt4hg1Mophg6JYY3UmICcCIiACDRNo3x44vW/M/agFuz4cfEAM7duFZuhlo2P7cFHjuGC7Y6FLT7bRtUfWGLHpotWXS2uS4Nos84Tm4f4Wlc2VSyO0+FFTxGwPv7R28ZnnA9x7f4DLJgYYYm3mEHvjNdTc6IsDTLT28+bbAtw/ycdTz3p45z3gq/8B33znodIEtUtQs/wjoBIVLQG7rIu2bhmt2Nx5C/Db7LkZTTOTic2e44ECdtYsD5995uHNtz1MedrHgw8FuOX2AJdfHeCiSwOMHGOCdgStFBFcd1PENcbTXvTx1Vc+fvsVqKpmqTzXwPMmYO2787Php+PWkDPeHeou4wC3u1eHto1x7H7h9gXXLYAnGy25O1DkmrVmxJAo9tjVdoT+REAERCB9Apv+KcTgC2IYOSzmukD8dfc4unaxxsbaHDY+zgJsq/TXOsuGbRvbK/O64GRbxahsr7ifR4/nntdNUINrzrkdXES4v6TXLW1GIV1Z6WHWbx6+/dbDR2ZUePZ54La747jtHxGzGAcYc7G1wyaMh42OYOy4CPiDGvxxjSuvNcvxnQEenRxY+23uSbMyv+zj/Q98sOvFzF88N/Qa3779+CNAw4UrhGYiIALNEqAGaTZSKUdYsHARzhg0EVvvcyq22+8M9Dl1FGb9mrvPfKf/kOhiMHCEh/OHxjHKGs7h9rpt/OUBrr85gonXBrjLLA6Tnwjw2ms+PvyPh/9947nuBwsWeuDYlWGi2QYX1p7DNfzOA/fnPggxH28Cbpv5606MCurUsE6onUkM5768mbDR560isMBllwlx4nEx99O/7Je3u4nchtKtk1o+e1U2ERCBPCQQCYC/bBPHeedYWzMsitH2UH3umVFsslEctAzD2iIWm81W3N5wuXHOqF4ZTseNXDIC/TUuOSKEa7OS22raO1uA4dyNftCTdLY/20JbgOG1uzIiV8yFVo6Fi0LMnWtt9O/ArFlmBf7aw9vveHjtdQ+vvhFg6nM+/vmwj+tvjOBKM1zwI7uJXNr6yDEBnGi+JIKRYyNOOF9zQ+A+IL73gQB0900KMMn2v+8BH5PMAPL6Wx7efc/StvvD93Y/+c4szq+a/70PPCxYACy5Dvuba7YeGlQSBhELsGnRIoD7c2mrmkQg7wnw0sv7QuaygPc8PBWff7SX+skAABAASURBVDUdz0+6Aq9PvhaB72Pizf/MSZH4NP/Agz6+/Mpzr8TY0PDLY4pMNroslBOp9NBZw2ttKpLb2LbDwrhuC+pRxnLtfkKgulVGAWdsrBlOqy2XdOCfJcqfBmUa5nXJchv9QQRYvgdwxKFxZ3UZYTees8+Ioddq3Mqd5URABESgbQh0XwY4+KA4Bl4QTXSDMBHMfsB/3S3EKisB5eVWDmua+I2BZy1ZaH5bgG0kf86c/nhNQ+e2md9F4QO/7ZqcXBhXzGNR6Eu0r7ZuExjm2mZ6bCvDbMHkbeGB+XElGW6BbnLh9Hk2M1e7zlVbD2GlNtHMewFHmZg3z8OMGR6++MLHJ596zn38kYcPPvTx8ac+3jcDyONTAjz8rwBPPmMi+uYAN92W8D/0SGCC2SzQddYnTLT1WwNcennEGVQuvjSC19/08djjPsaayL7h5sAtH5uckBI0rtz6jwCjLzLjyzUBXrC3h7SWW3HBJdcnWji3Mx7jc1tdt2AhnIX70gmB+3bk/n8G+H22VbZupAb87CbCb0tuvwu48/4Qn33e/D4NJNNoEO+7jzwW4O57fbzwkg+Ws9HI2pCXBBJnaV4WLT8K9eTzb+LgfXY0EdcNnTt1wFEH74aHnnjRRGLY5gWcOROovfCT2dcsXWOcLFGdMDayyeCllku2BzX7WRvqGmtuZrp0FLjc34lg8zCMg8cvt2yI7f4Sx4U1wwmNGBzFmadGscH6cdRtnG0XTSIgAiKQcwK09m6/XQwnnxjDkAsXW4MHm//Qg+PYaEN2i4AbFo1Nom8lrtvusV10RgALj5tjW0ixal7ANnIf8M/8yTawNozh5hjONLlM7uP8NRGd3+LVrNr9xlZscnnVWZoX3B9L/NXun0ygznYrVu1aXT8DKUq5TDqKyO+mL45FUc1fynzrHVJJxgLe+jcFtYf7HgzcG0Vagn/5xcPUaT4+MJHNmFxyneHcTrHL+DTacHvSPWsW7Xf+7WGuiXdanD8ywT75ifr5JePWXd5veT/9bKIcb7wd4u77AvANZ904LfV/8V/Pfbz973c9fGYPE1Of93HXPUFLk9N+OSLQ/FmUo4LlS7bfTJ+B1VbuWVucVfmj8LY2Z569+7Fljy4VaCvXrRPNEZZpnam2Kar12MY6fjaqyUaSDSMFMNeT7WBy6XbhzAK4nQ054/LDsg7tPbOGeNh+Gw9nnujj6ksDXHdZgKsvCTBqYARHHliGXis2zKGt2GQzn87ty1BR5rfZcc5mXfI97c4dxLqtjlEXY12u87r2ul6pRwV22aYMpx5fhouHJdo3tnPXWlt33fgAQ88LcNSh1g5ube3hKkDHjp4bNpHdtuoJTGtDkwKYbWltu2tNs1uvWdY0t9zsnNvGwJrttlh6qtm+9AZno3DBzN55OGN8OvqXdPUi2sYl1y3IFYzLOs79gFCd9aT32/9FQIGaXE8uf5gecYx/mG6v/5KBNUvGr5xf7rYnz/uvv1palrAv9DKdGr/HWKsBflxdk2zt4rPPE3kn027p8gtLpzbRGs/07w1stPEytTSvpvaryVqLFhJY+sxqYULFuBt/FIF9eNtVlNdWr6K8zPkXLFjklrxhtJXrtUqAZbu7bFHbENk1hzp/TuDWrHNTwrmXcy7UNar02Qb2eevUwTPrtYc1ennYbisffzsgwMB+EdxwWRluvrIMN00sw1XjIhhxQQTH9Ilgkz8G6NDOR1vVOR/yidgdzTeTTj6UpdjL4Fibeij2euZD/cQ69XasotzH6qv62Hk7awcPj2D4+WW40l7b3zAh0UayrbzF2strLy1D/zMiOHi/ANv92ceG63v4w2oellvOQ9cucH2J+eGuneJshUGjAsWxa5c91DbrWPLPttUNSu7vwpYQqoyaDKKf6bt4S87cxjqBS67bJlc+W6YydencQAK2Y7Lt5NJWl5rKIn69+8lSESyAfJq6ZjhEpkVbaprxc1gv7abSaGrbDHu7ulTiFsB8m9ov09ssS02tICDB2wQ8z/PQoX07VPL9S028pL9Dh3YuZNacSrSV+31+JQ77WxxrrxmCGrydFaGiAnZBA927Aiv0BFZeEfjD6iH+uH6IrbcOseP2wL57hzjh73GcemIcA/rHMW60uVFxjBkex9CBMZx7duL13j77RLHZ5tXotmwV5ixsu3q1Fb+W5jN3YTUqq+NtdpxbWs5i2G/uArFuq+M4x1hX6bzO6HU9r7ISy/WswpZbVmPffaM4+ohE23rhuaGzGg8fFMfoYXFcbO0v3VBb73tyHKedFMfpJ4c4/G8h9twjxPbbhthuW2D7rePYdBNYmw+svBLsTZu5lRNuueWATh1DBGaD4b0gEgEigbstOSHtJbxO79qtrGbNFskN5k0KY/O6ya/Z363YrKzcZktMy/Ww+4/dd+oG8z608SZRdOxQNzThX2XVqGPMZSJk8ZzxKzpVue3J836ttZYsFbC63dN+ndf4PanbclUgg8UpJ3xr2b0ymW5rln/4QzyRYJ05u/R171G/7K3JI5V962QvbwsI+C3Yp6R26bVKT3z7/YzaOn/3w8/O36VT4srmDSNjzm4+zaXVc/k4jrJGdOywEJeM9DHogigGXxjFOWdFcerJUfQ9MYpjj47h0ENi2GuPGHrvHMWWW8Sxeq84Vlwxjo6d4mguD22vzygaCxGPh+KWwvnZ2nPHsTZzTmvT0f71z+GGeIh184wa4taSsMZYRyJxrLRCHCtY29yzZwzrrRvDNlvFsPtu5naNYvfd4zjg/yicozj5hIQ76fgo6M44JYoLzo1h2MAoBp4fdcuhg6LOgMH7AO8LZ5waw5mnxcywEcXpfaM4y/z97V5x4H4x/HW3OPqeEMOJxyb8B+4fw/n9ovXWz7W4xx8Tw5abxbHO2nHstGMcXO97vJVzGzO+rB1iG1tyvVPHOP5m953Ve4XOCLPssiF67xQHv+cgMy65znC+KGU8xve8+sdh551i2HyzEJ07hehgt9kNNwyx95714zC9ui4Wi2OfPWP1RO9KK4bYdutYRtrtP28Zw2qrLhbiLP/ef43B85suV90yZsLvxIdmLSYgwdsMuj122hIPPjYNP8/6HfPmL8Sdk57BgXvtAM+r85jcTBraLAIiIAIikB4BxW4ZAY5DvJJZg8vM8ktrLB2tkcsvD/QwEdqlC7DJn0wMmlBdeaUQq5qQ29b8m2ycEJhLrnOEnX33iePIPnHsYoK3Y0dgWbPy7mmC+ag+MXDJdZaWIva4v8ecEYbiescd4vBrVAaXXGc4xTjjMT73q+s6tAf22ycGDi83oH8Ufzsohm5dw7pRGvRvvFGI8881UX9qiJEX+uh7YgydOzcYNe1Ae9GLE46NJR4m7MFjwHlRbLF582VKOyPtkFUCNadiVvMo6MQPP2BX/KHXStj54LOx1d6noLo6ijOOO7Cg66TCi4AIiIAIiECxEWCXDnb9WGaZ7NQs+TDB7iPZyUGpZpNAAQvebGJZnHbHDu1w3cX98Opj1+CFhybi/huGYfke3RZHkE8EREAEREAEREAERCCvCUjwpnh4unbuiB7LdE0xtqKJgAiIQBsSUFYiIAIiIAJNEpDgbRKPNoqACIiACIiACIiACBQKgcbKKcHbGBmFi4AIiIAIiIAIiIAIFAUBCd6iOIyqhAiIQOoEFFMEREAERKDUCEjwltoRV31FQAREQAREQAREgARKyEnwltDBVlVFQAREQAREQAREoBQJSPCW4lFXnUUgdQKKKQIiIAIiIAIFT0CCt+APoSogAiIgAiIgAiKQfQLKoZAJSPAW8tFT2UVABERABERABERABJolIMHbLCJFEIHUCSimCIiACIiACIhA/hGQ4M2/Y6ISiYAIiIAIiEChE1D5RSCvCEjw5tXhUGFEQAREQAREQAREQAQyTUCCN9NElV7qBBRTBERABERABERABNqAgARvG0BWFiIgAiIgAiLQFAFtEwERyC4BCd5W8l1p2fbIhevWqRwdKoKc5J2L+uYyz+7Gur1Yt8m51r1zOdqX67xui/N9GWPdTqzb5LwW67a7TxYz61bKlZLf3S95AgUDQAUVAREQAREQAREQARFoCQEJ3pZQ0z4iIAIiIAK5I6CcRUAERCBNAhK8aQLLRfQwDPHr73Px7fc/o7KqusEizJ23AL/NntvgNgVmloBYZ5ZnU6mJdVN00t8Wj4f4aeavINcl92aY2pAlqWRnXawzxzUai2HGzN8aTVCsG0VTchuKVfAWzYH84OMvscMBZ2L7/c/Ankecj+32OwMPT3mptn4LFi7CGYMmYut9TnXb+pw6CrN+nV27XZ6WEXjhtfex4U7HgEvU/Il1DYgMLH61BzjyXdK9/u+PXepi7TBkbMab/oCxN2KjXY5F70POwbDxt9WmLda1KFrtGXjRTa7dWPK8fuBfz7u0xdphyMiMQnfU5Xdg54POxsEnDsVeR16AJ6a+UZu2WNeikKeGgARvDYh8XYRWsLNOOBgvPXIV3nv2Fhx9yO4YPO6WWkvvPQ9PxedfTcfzk67A65OvReD7mHjzP20vTS0l8NmX36H/yOuW2l2sl0LS4gC+teDO1487F0/cNa7W/WmDtRgMsXYYMjKLx0Mc228cvv7mR0wYfiremnIDBpx+RG3aYl2LotWec04+tPZc5nn9z5tHujS7dunklmLtMGRk9siUl/Gvp1/Fo7ePdffHE4/Yxz3IUegyA7EmBbm6BCR469LIQ/+fNlgTB++zI5bp1hllkQA9l1vG+X0Ttizuk8+/6bYv36MbOnfqgKMO3g0PPfEikoKCceRSJzDzl99xyoAJGHbO39Ghfbt6O4p1PRwZWVllxR7otUrPWte+XblLV6wdhozMpr32Hj754htcMqQv9tjpz3ZeV4DtRTJxsU6SaP2yxzJda89lntevvf0RVllxOfTefjPwT6xJITPu51m/uXthxw6JdnrzjdcBxe5vs+e5DMTaYdCsDgEneOusy5unBN754HP39Hr9HY9iwBlHOPHLon4zfQZWW7knvc6tutLybjln3gK31Cx1AgsXVeH0gRNx4J47YJ/dtllqR7FeCkmrAybc8IB7Y3HHg09h9tz5temJdS2KVnveeu9TE7ntcPM9j4Ndns4cciXe//jL2nTFuhZFRj08n6/9x6M45+RDEAkCl7ZYOwwZmbGNpsA9rO8ITHnuDYy//n7su/u2WHmFHi59sXYYNKtDQIK3Dox89v444xf8POt3VFdH8XvNx2m04vKCb1eRsIqx/BXlZVxgwYJFbqlZagT4Mc+gi2/GymaNOfWY/ZfaSayXQtKqAJ6nhx/QGxvbG4xl7O3FTXdPxjFnXYSqqmr3diKH53Wr6pWPO3//00xnCdtgnV448fC90a68HIefOgpff/ujWGfxgN123xSz7vbAbjts6XJRG+IwZGy23LLdselGa2NZs6pfet19mPrSv7Hb9lu49MXaYdBsCQISvEsAyddVPs1ed3EDAdRpAAAKs0lEQVQ/XDHyDIy98m5898PP8DzPWW7qjtyQ9Heoec2Tr/XJt3LxQ7+npr2Jzp3aY7w1npdccy8ouh547Hk8Ne0tsc7wAevUsT0GnXUU2O+O/R7vuHKg64v+6X+/FesMs2Zyu2y3Gfrs3xtcXjTwJCeAX3vnY7EmnCw4joTBh7izTzwEvu+5HDxP7bUDkaEZ33bOmbsAN17SH8/cdxn69/0b+Pbii6+n67zOEGOguBKS4C2w48l+YSwyBRqXXP/2+xn0OkchTE+XTh24kEuRQKeO7XDWCQeBr8O6de0EOu7ayYRZh/YV9Lq+eWLtUGR8tnyP7i7NhZVVbqnz2mHIyKzXyiuYNfeHemktqqxGVXW1CxNrhyGjs+v/8S/39mLHbf5UL12xroejVSuv2wPb+mv3cg8UQeDj74f+1aX37w8+d0uxdhg0q0NAgrcOjHz0cgiy517+t+vfyKGF2CeMH1OttfrKrrh77LQlHnxsmuvuMG/+Qtw56RkcuNcO7gnXRdAsJQJketKR+6KuY9heu2yN7bfa2KUh1g5DvVlLVzjc21NmUWc/R1rSObIIea+31mouSbF2GDIy23WHzfHSGx/ilbf+47pEPTTlRZD5Vpuu79IXa4chY7Ovvv0RD06ehn4nHrJUmmK9FJIWB2yw7uqY/Myrbnx6dmF49qV3XFrbqb12HDRbmoAE79JM8iqkOhrDGYOvxLb7nubG2p326ru4avSZ9uo9YcE9/IBd8YdeK2Hng8/GVnuf4m5oZxx3YF7VoVgKI9aZO5K0Lg4ed6s7r7fcsy+mPPe6O6+7du7oMhFrhyEjsz9tsKZ73XvSeeOxyW4nYPj42zH6guNB6xgzEGtSyJy7+taHsM0WG+LPm663VKJivRSSFgecdfxB6L3d5jjohKH4816n4Ma7HsO4QSe7t3RMNAesma1cHhOQ4M3jg8OiHbrvTnh/6i147sHLMfXBCXj2/gnYevMNuMk5DsnCvr2vPnYNXnhoIu6/YVi9IYdcJM1aROCtKdej7itJsW4RxgZ32m2HLfDa5Gvcec1z+8WHr9R53SCpzAQee9ieeOepG/HkPZeA43kfsOf2tQnrvK5FkRHPhOGn4ebx5zWYllg3iKVFgex2Nrz/Ma4deeyOsZh004h6o+uIdYuwFvVOErwFcHg5pE3P5bpjheWWcf2VGioyLWMcA7KhbQrLLIEWs85sMQo+teR5zXPb8xIf9ixZKbFekkjL1zmaC4ct5HjeDaUi1g1RyU6YWGeOK9sR3hsbS1GsGyNTeuESvKV3zFVjERABERABEcgpAWUuAm1NQIK3rYkrPxEQAREQAREQAREQgTYlIMHbpriVWeoEFFMEREAEREAEREAEMkNAgjczHJWKCIiACIiACGSHgFIVARFoNQEJ3lYjVAIiIAIiIAIiIAIiIAL5TECCN5+PTuplU0wREAEREAEREAEREIFGCEjwNgJGwSIgAiIgAoVIQGUWAREQgaUJSPAuzUQhIiACIiACIiACIiACRUSgJAVvER0/VUUEREAEREAEREAERKAZAhK8zQDSZhEQAREoYgKqmgiIgAiUBAEJ3pI4zKqkCIiACIiACIiACJQugeYFb+myUc1FQAREQAREQAREQASKgIAEbxEcRFVBBESgbQgoFxEQAREQgcIkIMFbmMdNpRYBERABERABERCBXBEouHwleAvukKnAIiAChURg9tz5eO7lf+O/X3+/VLFn/Trbbfv+p1lLbVOACIiACIhA5ghI8GaOpVISARGoS0B+R6Bjh3a46Z7HcWy/i0Hx6wJtFoYhBo+7GcPG34ZOHdpbiCYREAEREIFsEZDgzRZZpSsCIiACRiASBBg74AT8+vtcXHLNvRaSmP75+It46Y0PccngvujapWMiUHMREIGiJKBK5Z6ABG/uj4FKIAIiUOQE1lhtRQw880g88uTLJnI/wPQfZzrL7tGH7IFtttiwyGuv6omACIhA7glI8Ob+GKgEIgBAEIqdQJ/9e2PLTdbDwItuwoAxN6LXKj1x5vEHFXu1VT8REAERyAsCErx5cRhUCBEQgWIn4PseRl9wvOva8O5/vsC4QSejfbvyYq+26icC6RPQHiKQBQISvFmAqiRFQAREoCECn381vTb4zfc+rfXLIwIiIAIikF0CErzZ5avUs0NAqYpAwRHgEGQXjL4BB+y5Pdh3d8IND+CzL78ruHqowCIgAiJQiAQkeAvxqKnMIiACBUWAQ5Bx+LF2FWU4/7Q+OOO4A7HKisthwJgbUF0dLai6qLD5RkDlEQERSIWABG8qlBRHBERABFpBYNLjL2Daq++5Ici6dOqADu0rMPbCE8EuDjfc+VgrUtauIiACIiACqRCQ4E2FUoHHUfFFQARyR+C7H37G8PG34/ADetcbgmzzjdfBEQfuhuvueBQff/6/3BVQOYuACIhACRCQ4C2Bg6wqioAI5I7Aqistj4+m3Y5BZx21VCEGnnmE27bBOqsvtU0BWSGgREVABEqUgARviR54VVsEREAEREAEREAESoWABO+SR1rrIiACIiACIiACIiACRUVAgreoDqcqIwIiIAKZI6CUREAERKBYCEjwFsuRVD1EQAREQAREQAREQAQaJNBKwdtgmgoUAREQAREQAREQAREQgbwhIMGbN4dCBREBEShoAiq8CIiACIhA3hKQ4M3bQ6OCiYAIiIAIiIAIiEDhEcjHEkvw5uNRUZlEQAREQAREQAREQAQyRkCCN2MolZAIiEDqBBRTBERABERABNqOgARv27FWTiIgAiIgAiIgAiJQn4DW2oSABG+bYFYmIiACIiACIiACIiACuSIgwZsr8spXBFInoJgiIAIiIAIiIAKtICDB2wp42lUEREAEREAERKAtCSgvEWgZAQnelnHTXiIgAiIgAiIgAiIgAgVCQIK3QA6Uipk6AcUUAREQAREQAREQgboEJHjr0pBfBERABERABIqHgGoiAiJQQ0CCtwaEFiIgAiIgAiIgAiIgAsVJQIK3OI9r6rVSTBEQAREQAREQAREocgISvEV+gFU9ERABERCB1AgolgiIQPESkOAt3mOrmomACIiACIiACIiACBgBCV6DkPqkmCIgAiIgAiIgAiIgAoVGQIK30I6YyisCIiAC+UBAZRABERCBAiIgwVtAB0tFFQEREAEREAEREAERSJ9ANgVv+qXRHiIgAiIgAiIgAiIgAiKQYQISvBkGquREQAREYGkCChEBERABEcglAQneXNJX3iIgAiIgAiIgAiJQSgRyVFcJ3hyBV7YiIAIiIAIiIAIiIAJtQ0CCt204KxcREIHUCSimCIiACIiACGSUgARvRnEqMREQAREQAREQARHIFAGlkykCEryZIql0REAEREAEREAEREAE8pKABG9eHhYVSgRSJ6CYIiACIiACIiACTROQ4G2aj7aKgAiIgAiIgAgUBgGVUgQaJSDB2ygabRABERABERABERABESgGAhK8xXAUVYfUCSimCIiACIiACIhAyRGQ4C25Q64Ki4AIiIAIiAAgBiJQSgQkeEvpaKuuIiACIiACIiACIlCCBCR4S/Cgp15lxRQBERABERABERCBwicgwVv4x1A1EAEREAERyDYBpS8CIlDQBCR4C/rwqfAiIAIiIAIiIAIiIALNEfh/AAAA///L+sckAAAABklEQVQDAGZdgHswH06tAAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot the Probability Density Function\n", "import plotly.io as pio\n", "pio.renderers.default = None # Disable auto-display\n", "fig = metalog.plot(MetalogPlotOptions.PDF)\n", "fig.write_image(\"basic_usage_pdf.png\")\n", "from IPython.display import Image\n", "Image(\"basic_usage_pdf.png\")" ] }, { "cell_type": "code", "execution_count": 49, "id": "mWxS", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:44.119711Z", "iopub.status.busy": "2025-12-26T23:56:44.119593Z", "iopub.status.idle": "2025-12-26T23:56:46.377843Z", "shell.execute_reply": "2025-12-26T23:56:46.377122Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot the Cumulative Distribution Function\n", "fig = metalog.plot(MetalogPlotOptions.CDF)\n", "fig.write_image(\"basic_usage_cdf.png\")\n", "Image(\"basic_usage_cdf.png\")" ] }, { "cell_type": "code", "execution_count": 50, "id": "CcZR", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:46.380447Z", "iopub.status.busy": "2025-12-26T23:56:46.380340Z", "iopub.status.idle": "2025-12-26T23:56:47.692916Z", "shell.execute_reply": "2025-12-26T23:56:47.692513Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot the Survival Function\n", "fig = metalog.plot(MetalogPlotOptions.SF)\n", "fig.write_image(\"basic_usage_sf.png\")\n", "Image(\"basic_usage_sf.png\")" ] }, { "cell_type": "code", "execution_count": 51, "id": "YWSi", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:47.695690Z", "iopub.status.busy": "2025-12-26T23:56:47.695547Z", "iopub.status.idle": "2025-12-26T23:56:47.697837Z", "shell.execute_reply": "2025-12-26T23:56:47.697427Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Visualize the fitted metalog distribution using interactive Plotly plots.\n", "\n", " Creates an interactive Plotly figure showing the selected distribution\n", " function (PDF, CDF, or survival function).\n", "\n", " Args:\n", " plot_option: Which function to plot. One of MetalogPlotOptions.PDF,\n", " MetalogPlotOptions.CDF, or MetalogPlotOptions.SF.\n", "\n", " Returns:\n", " go.Figure: The Plotly figure object.\n", "\n", " Raises:\n", " NotFittedError: If the distribution has not been fitted.\n", " \n" ] } ], "source": [ "print(Metalog.plot.__doc__)" ] }, { "cell_type": "code", "execution_count": 52, "id": "zlud", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:47.698737Z", "iopub.status.busy": "2025-12-26T23:56:47.698665Z", "iopub.status.idle": "2025-12-26T23:56:47.701081Z", "shell.execute_reply": "2025-12-26T23:56:47.700740Z" } }, "outputs": [], "source": [ "# save a fitted metalog instance\n", "with tempfile.TemporaryDirectory() as _tmpdir:\n", " _save_path = Path(_tmpdir) / \"test_metalog.json\"\n", " metalog.save(_save_path)\n", " assert _save_path.exists()" ] }, { "cell_type": "code", "execution_count": 53, "id": "tZnO", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:47.701978Z", "iopub.status.busy": "2025-12-26T23:56:47.701909Z", "iopub.status.idle": "2025-12-26T23:56:47.703725Z", "shell.execute_reply": "2025-12-26T23:56:47.703407Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Save the fitted metalog distribution to a JSON file.\n", "\n", " Serializes the distribution coefficients and parameters to JSON format.\n", "\n", " Args:\n", " path: File path where the JSON file will be written.\n", " \n" ] } ], "source": [ "print(Metalog.save.__doc__)" ] }, { "cell_type": "code", "execution_count": 54, "id": "xvXZ", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:47.704624Z", "iopub.status.busy": "2025-12-26T23:56:47.704567Z", "iopub.status.idle": "2025-12-26T23:56:47.719208Z", "shell.execute_reply": "2025-12-26T23:56:47.718781Z" } }, "outputs": [], "source": [ "# load a previously saved metalog\n", "with tempfile.TemporaryDirectory() as _tmpdir:\n", " _save_path = Path(_tmpdir) / \"test_metalog.json\"\n", " metalog.save(_save_path)\n", " loaded_metalog = Metalog.load(_save_path)\n", " np.testing.assert_array_almost_equal(\n", " np.array(loaded_metalog.a), np.array(metalog.a)\n", " )" ] }, { "cell_type": "code", "execution_count": 55, "id": "CLip", "metadata": { "execution": { "iopub.execute_input": "2025-12-26T23:56:47.720240Z", "iopub.status.busy": "2025-12-26T23:56:47.720165Z", "iopub.status.idle": "2025-12-26T23:56:47.721838Z", "shell.execute_reply": "2025-12-26T23:56:47.721501Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Load a fitted metalog distribution from a JSON file.\n", "\n", " Args:\n", " path: File path to the JSON file containing the serialized distribution.\n", "\n", " Returns:\n", " T_MetalogBase: A new instance of the metalog class with loaded\n", " coefficients and parameters.\n", " \n" ] } ], "source": [ "print(Metalog.load.__doc__)" ] } ], "metadata": { "kernelspec": { "display_name": "metalog_jax", "language": "python", "name": "metalog_jax" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.13" } }, "nbformat": 4, "nbformat_minor": 5 }