From a887fa1a4470a8b9081a612ef5a53af668ab24af Mon Sep 17 00:00:00 2001 From: Bill Ladwig Date: Fri, 11 Mar 2016 16:34:36 -0700 Subject: [PATCH] Added projection support. Added configuration to allow cartopy, basemap, xarray, etc to be optional. Began adding metadata support. --- wrf_open/var/src/python/wrf/var/__init__.py | 60 +- wrf_open/var/src/python/wrf/var/cape.py | 4 +- wrf_open/var/src/python/wrf/var/config.py | 81 ++ wrf_open/var/src/python/wrf/var/constants.py | 4 +- wrf_open/var/src/python/wrf/var/ctt.py | 4 +- wrf_open/var/src/python/wrf/var/dbz.py | 2 +- wrf_open/var/src/python/wrf/var/decorators.py | 140 +++- wrf_open/var/src/python/wrf/var/dewpoint.py | 4 +- wrf_open/var/src/python/wrf/var/extension.py | 324 ++++---- wrf_open/var/src/python/wrf/var/geoht.py | 4 +- wrf_open/var/src/python/wrf/var/helicity.py | 20 +- wrf_open/var/src/python/wrf/var/interp.py | 2 +- wrf_open/var/src/python/wrf/var/latlon.py | 16 +- wrf_open/var/src/python/wrf/var/omega.py | 3 +- wrf_open/var/src/python/wrf/var/precip.py | 6 +- wrf_open/var/src/python/wrf/var/pressure.py | 4 +- wrf_open/var/src/python/wrf/var/projection.py | 748 ++++++++++++++++++ .../var/src/python/wrf/var/psadlookup.pyc | Bin 347307 -> 0 bytes wrf_open/var/src/python/wrf/var/pw.py | 4 +- wrf_open/var/src/python/wrf/var/rh.py | 4 +- wrf_open/var/src/python/wrf/var/slp.py | 2 +- wrf_open/var/src/python/wrf/var/temp.py | 13 +- wrf_open/var/src/python/wrf/var/terrain.py | 4 +- wrf_open/var/src/python/wrf/var/util.py | 317 +++++++- wrf_open/var/src/python/wrf/var/uvmet.py | 30 +- wrf_open/var/src/python/wrf/var/vorticity.py | 4 +- wrf_open/var/test/projtest.py | 214 +++++ wrf_open/var/test/utests.py | 2 +- 28 files changed, 1726 insertions(+), 294 deletions(-) create mode 100644 wrf_open/var/src/python/wrf/var/config.py create mode 100644 wrf_open/var/src/python/wrf/var/projection.py delete mode 100755 wrf_open/var/src/python/wrf/var/psadlookup.pyc create mode 100644 wrf_open/var/test/projtest.py diff --git a/wrf_open/var/src/python/wrf/var/__init__.py b/wrf_open/var/src/python/wrf/var/__init__.py index b6b58bc..0539df8 100755 --- a/wrf_open/var/src/python/wrf/var/__init__.py +++ b/wrf_open/var/src/python/wrf/var/__init__.py @@ -1,5 +1,7 @@ import warnings +from config import * +import config from extension import * import extension from util import * @@ -54,35 +56,39 @@ from times import * import times from units import * import units +from projection import * +import projection __all__ = ["getvar"] -__all__ += extension.__all__ -__all__ += util.__all__ -__all__ += cape.__all__ -__all__ += constants.__all__ -__all__ += ctt.__all__ -__all__ += dbz.__all__ -__all__ += destag.__all__ -__all__ += dewpoint.__all__ -__all__ += etaconv.__all__ -__all__ += geoht.__all__ -__all__ += helicity.__all__ -__all__ += interp.__all__ -__all__ += latlon.__all__ -__all__ += omega.__all__ -__all__ += precip.__all__ -__all__ += psadlookup.__all__ -__all__ += pw.__all__ -__all__ += rh.__all__ -__all__ += slp.__all__ -__all__ += temp.__all__ -__all__ += terrain.__all__ -__all__ += uvmet.__all__ -__all__ += vorticity.__all__ -__all__ += wind.__all__ -__all__ += times.__all__ -__all__ += pressure.__all__ -__all__ += units.__all__ +__all__.extend(config.__all__) +__all__.extend( extension.__all__) +__all__.extend(util.__all__) +__all__.extend(cape.__all__) +__all__.extend(constants.__all__) +__all__.extend(ctt.__all__) +__all__.extend(dbz.__all__) +__all__.extend(destag.__all__) +__all__.extend(dewpoint.__all__) +__all__.extend(etaconv.__all__) +__all__.extend(geoht.__all__) +__all__.extend(helicity.__all__) +__all__.extend(interp.__all__) +__all__.extend(latlon.__all__) +__all__.extend(omega.__all__) +__all__.extend(precip.__all__) +__all__.extend(psadlookup.__all__) +__all__.extend(pw.__all__) +__all__.extend(rh.__all__) +__all__.extend(slp.__all__) +__all__.extend(temp.__all__) +__all__.extend(terrain.__all__) +__all__.extend(uvmet.__all__) +__all__.extend(vorticity.__all__) +__all__.extend(wind.__all__) +__all__.extend(times.__all__) +__all__.extend(pressure.__all__) +__all__.extend(units.__all__) +__all__.extend(projection.__all__) # func is the function to call. kargs are required arguments that should # not be altered by the user diff --git a/wrf_open/var/src/python/wrf/var/cape.py b/wrf_open/var/src/python/wrf/var/cape.py index d21a9f6..320227b 100755 --- a/wrf_open/var/src/python/wrf/var/cape.py +++ b/wrf_open/var/src/python/wrf/var/cape.py @@ -10,7 +10,7 @@ __all__ = ["get_2dcape", "get_3dcape"] def get_2dcape(wrfnc, timeidx=0, missing=Constants.DEFAULT_FILL): """Return the 2d fields of cape, cin, lcl, and lfc""" - ncvars = extract_vars(wrfnc, timeidx, vars=("T", "P", "PB", "QVAPOR", "PH", + ncvars = extract_vars(wrfnc, timeidx, varnames=("T", "P", "PB", "QVAPOR", "PH", "PHB", "HGT", "PSFC")) t = ncvars["T"] @@ -63,7 +63,7 @@ def get_2dcape(wrfnc, timeidx=0, missing=Constants.DEFAULT_FILL): def get_3dcape(wrfnc, timeidx=0, missing=Constants.DEFAULT_FILL): """Return the 3d fields of cape and cin""" - ncvars = extract_vars(wrfnc, timeidx, vars=("T", "P", "PB", "QVAPOR", + ncvars = extract_vars(wrfnc, timeidx, varnames=("T", "P", "PB", "QVAPOR", "PH", "PHB", "HGT", "PSFC")) t = ncvars["T"] p = ncvars["P"] diff --git a/wrf_open/var/src/python/wrf/var/config.py b/wrf_open/var/src/python/wrf/var/config.py new file mode 100644 index 0000000..a7ec3de --- /dev/null +++ b/wrf_open/var/src/python/wrf/var/config.py @@ -0,0 +1,81 @@ + +try: + from xarray import DataArray +except ImportError: + _XARRAY_ENABLED = False +else: + _XARRAY_ENABLED = True + +try: + from cartopy import crs +except ImportError: + _CARTOPY_ENABLED = False +else: + _CARTOPY_ENABLED = True + +try: + from mpl_toolkits.basemap import Basemap +except ImportError: + _BASEMAP_ENABLED = False +else: + _BASEMAP_ENABLED = True + +try: + from Ngl import Resources +except ImportError: + _PYNGL_ENABLED = False +else: + _PYNGL_ENABLED = True + +__all__ = ["xarray_enabled", "disable_xarray", "enable_xarray", + "cartopy_enabled", "enable_cartopy", "enable_cartopy", + "basemap_enabled", "disable_basemap", "enable_basemap", + "pyngl_enabled", "enable_pyngl", "disable_pyngl"] + +def xarray_enabled(): + global _XARRAY_ENABLED + return _XARRAY_ENABLED + +def disable_xarray(): + global _XARRAY_ENABLED + _XARRAY_ENABLED = False + +def enable_xarray(): + global _XARRAY_ENABLED + _XARRAY_ENABLED = True + +def cartopy_enabled(): + global _CARTOPY_ENABLED + return _CARTOPY_ENABLED + +def enable_cartopy(): + global _CARTOPY_ENABLED + _CARTOPY_ENABLED = True + +def disable_cartopy(): + global _CARTOPY_ENABLED + _CARTOPY_ENABLED = True + +def basemap_enabled(): + global _BASEMAP_ENABLED + return _BASEMAP_ENABLED + +def enable_basemap(): + global _BASEMAP_ENABLED + _BASEMAP_ENABLED = True + +def disable_basemap(): + global _BASEMAP_ENABLED + _BASEMAP_ENABLED = True + +def pyngl_enabled(): + global _PYNGL_ENABLED + return _PYNGL_ENABLED + +def enable_pyngl(): + global _PYNGL_ENABLED + _PYNGL_ENABLED = True + +def disable_pyngl(): + global _PYNGL_ENABLED + _PYNGL_ENABLED = True diff --git a/wrf_open/var/src/python/wrf/var/constants.py b/wrf_open/var/src/python/wrf/var/constants.py index b34c63b..45167ce 100755 --- a/wrf_open/var/src/python/wrf/var/constants.py +++ b/wrf_open/var/src/python/wrf/var/constants.py @@ -7,9 +7,9 @@ class Constants(object): G = 9.81 TCK0 = 273.15 T_BASE = 300.0 # In WRF the base temperature is always 300 (not var T00) - PI = 3.14159265 + PI = 3.141592653589793 DEFAULT_FILL = 9.9692099683868690e+36 # Value is from netcdf.h - + WRF_EARTH_RADIUS = 6370000. class ConversionFactors(object): PA_TO_HPA = .01 diff --git a/wrf_open/var/src/python/wrf/var/ctt.py b/wrf_open/var/src/python/wrf/var/ctt.py index 729cf2d..8cf0a2f 100644 --- a/wrf_open/var/src/python/wrf/var/ctt.py +++ b/wrf_open/var/src/python/wrf/var/ctt.py @@ -14,8 +14,8 @@ def get_ctt(wrfnc, timeidx=0, units="c"): """Return the cloud top temperature. """ - ncvars = extract_vars(wrfnc, timeidx, vars=("T", "P", "PB", "PH" ,"PHB", - "HGT", "QVAPOR")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("T", "P", "PB", "PH" , + "PHB", "HGT", "QVAPOR")) t = ncvars["T"] p = ncvars["P"] pb = ncvars["PB"] diff --git a/wrf_open/var/src/python/wrf/var/dbz.py b/wrf_open/var/src/python/wrf/var/dbz.py index c24becc..d68a10f 100755 --- a/wrf_open/var/src/python/wrf/var/dbz.py +++ b/wrf_open/var/src/python/wrf/var/dbz.py @@ -17,7 +17,7 @@ def get_dbz(wrfnc, timeidx=0, do_varint=False, do_liqskin=False): as liquid) """ - ncvars = extract_vars(wrfnc, timeidx, vars=("T", "P", "PB", "QVAPOR", + ncvars = extract_vars(wrfnc, timeidx, varnames=("T", "P", "PB", "QVAPOR", "QRAIN")) t = ncvars["T"] p = ncvars["P"] diff --git a/wrf_open/var/src/python/wrf/var/decorators.py b/wrf_open/var/src/python/wrf/var/decorators.py index ea3975d..d5de0a8 100644 --- a/wrf_open/var/src/python/wrf/var/decorators.py +++ b/wrf_open/var/src/python/wrf/var/decorators.py @@ -7,10 +7,51 @@ import numpy.ma as ma from wrf.var.units import do_conversion, check_units from wrf.var.destag import destagger from wrf.var.util import iter_left_indexes +from wrf.var.config import xarray_enabled + +if xarray_enabled(): + from xarray import DataArray + + __all__ = ["convert_units", "handle_left_iter", "uvmet_left_iter", - "handle_casting"] + "handle_casting" "set_metadata"] +# TODO: In python 3.x, getargspec is deprecated +class from_args(object): + def __init__(self, argname): + self.argname + + def __call__(self, func, *args, **kargs): + """Parses the function args and kargs looking for the desired argument + value. Otherwise, the value is taken from the default keyword argument + using the arg spec. + + """ + # If units are provided to the method call, use them. + # Otherwise, need to parse the argspec to find what the default + # value is since wraps does not preserve this. + argspec = getargspec(func) + + if self.argname not in argspec.args and self.argname not in kargs: + return None + + try: + result_idx = argspec.args.index(self.argname) + except ValueError: + result_idx = None + + if (self.argname in kargs): + result = kargs[self.argname] + elif (len(args) > result_idx and result_idx is not None): + result = args[result_idx] + else: + arg_idx_from_right = (len(argspec.args) - + argspec.args.index(self.argname)) + result = argspec.defaults[-arg_idx_from_right] + + return result + def convert_units(unit_type, alg_unit): """A decorator that applies unit conversion to a function's output array. @@ -23,25 +64,8 @@ def convert_units(unit_type, alg_unit): def convert_decorator(func): @wraps(func) def func_wrapper(*args, **kargs): - # If units are provided to the method call, use them. - # Otherwise, need to parse the argspec to find what the default - # value is since wraps does not preserve this. - argspec = getargspec(func) - try: - unit_idx = argspec.args.index("units") - except ValueError: - unit_idx = None - - if ("units" in kargs): - desired_units = kargs["units"] - elif (len(args) > unit_idx and unit_idx is not None): - desired_units = args[unit_idx] - else: - - arg_idx_from_right = (len(argspec.args) - - argspec.args.index("units")) - desired_units = argspec.defaults[-arg_idx_from_right] - + + desired_units = from_args("units")(func, *args, **kargs) check_units(desired_units, unit_type) # Unit conversion done here @@ -59,7 +83,7 @@ def _calc_out_dims(outvar, left_dims): def handle_left_iter(ref_var_expected_dims, ref_var_idx=-1, ref_var_name=None, - ignore_args=(), ignore_kargs=()): + ignore_args=None, ignore_kargs=None): """Decorator to handle iterating over leftmost dimensions when using multiple files and/or multiple times. @@ -84,6 +108,8 @@ def handle_left_iter(ref_var_expected_dims, ref_var_idx=-1, def indexing_decorator(func): @wraps(func) def func_wrapper(*args, **kargs): + ignore_args = ignore_args if ignore_args is not None else () + ignore_kargs = ignore_kargs if ignore_kargs is not None else () if ref_var_idx >= 0: ref_var = args[ref_var_idx] @@ -254,7 +280,7 @@ def uvmet_left_iter(): return indexing_decorator -def handle_casting(ref_idx=0, arg_idxs=(), karg_names=(),dtype=n.float64): +def handle_casting(ref_idx=0, arg_idxs=None, karg_names=None, dtype=n.float64): """Decorator to handle casting to/from required dtype used in numerical routine. @@ -262,6 +288,9 @@ def handle_casting(ref_idx=0, arg_idxs=(), karg_names=(),dtype=n.float64): def cast_decorator(func): @wraps(func) def func_wrapper(*args, **kargs): + arg_idxs = arg_idxs if arg_idxs is not None else () + karg_names = karg_names if karg_names is not None else () + orig_type = args[ref_idx].dtype new_args = [arg.astype(dtype) @@ -271,7 +300,6 @@ def handle_casting(ref_idx=0, arg_idxs=(), karg_names=(),dtype=n.float64): new_kargs = {key:(val.astype(dtype) if key in karg_names else val) for key,val in kargs.iteritems()} - res = func(*new_args, **new_kargs) @@ -288,4 +316,70 @@ def handle_casting(ref_idx=0, arg_idxs=(), karg_names=(),dtype=n.float64): return cast_decorator +def _extract_and_transpose(arg): + if xarray_enabled(): + if isinstance(arg, DataArray): + arg = arg.values + + if isinstance(arg, n.ndarray): + if not arg.flags.F_CONTIGUOUS: + return arg.T + + return arg + +def handle_extract_transpose(): + """Decorator to extract the data array from a DataArray and also + transposes if the data is not fortran contiguous. + + """ + def extract_transpose_decorator(func): + @wraps(func) + def func_wrapper(*args, **kargs): + + new_args = [_extract_and_transpose(arg) for arg in args] + + new_kargs = {key:_extract_and_transpose(val) + for key,val in kargs.iteritems()} + + res = func(*new_args, **new_kargs) + + if isinstance(res, n.ndarray): + if res.flags.F_CONTIGUOUS: + return res.T + else: + return tuple(x.T if x.flags.F_CONTIGUOUS else x for x in res) + + return res + + return func_wrapper + + return extract_transpose_decorator + +def set_metadata(copy_from=None, ignore=None, **fixed_kargs): + """Decorator to set the attributes for a WRF method. + + """ + def attr_decorator(func): + @wraps(func) + def func_wrapper(*args, **kargs): + if not xarray_enabled(): + return func(*args, **kargs) + + result = func(*args, **kargs) + + units = from_args("units")(func, *args, **kargs) + if units is not None: + result.attrs["units"] = units + + for argname, val in fixed_kargs.iteritems(): + result[argname] = val + + return result + + return func_wrapper + + return attr_decorator + + + diff --git a/wrf_open/var/src/python/wrf/var/dewpoint.py b/wrf_open/var/src/python/wrf/var/dewpoint.py index d144f28..14f09ff 100755 --- a/wrf_open/var/src/python/wrf/var/dewpoint.py +++ b/wrf_open/var/src/python/wrf/var/dewpoint.py @@ -7,7 +7,7 @@ __all__ = ["get_dp", "get_dp_2m"] @convert_units("temp", "c") def get_dp(wrfnc, timeidx=0, units="c"): - ncvars = extract_vars(wrfnc, timeidx, vars=("P", "PB", "QVAPOR")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("P", "PB", "QVAPOR")) p = ncvars["P"] pb = ncvars["PB"] @@ -22,7 +22,7 @@ def get_dp(wrfnc, timeidx=0, units="c"): @convert_units("temp", "c") def get_dp_2m(wrfnc, timeidx=0, units="c"): - ncvars = extract_vars(wrfnc, timeidx, vars=("PSFC", "Q2")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("PSFC", "Q2")) # Algorithm requires hPa psfc = .01*(ncvars["PSFC"]) diff --git a/wrf_open/var/src/python/wrf/var/extension.py b/wrf_open/var/src/python/wrf/var/extension.py index cfa1c13..1981b06 100755 --- a/wrf_open/var/src/python/wrf/var/extension.py +++ b/wrf_open/var/src/python/wrf/var/extension.py @@ -12,7 +12,7 @@ from wrf.var._wrfext import (f_interpz3d, f_interp2dxy,f_interp1d, f_monotonic, f_filter2d, f_vintrp) from wrf.var._wrfcape import f_computecape from wrf.var.decorators import (handle_left_iter, uvmet_left_iter, - handle_casting) + handle_casting, handle_extract_transpose) __all__ = ["FortranException", "computeslp", "computetk", "computetd", "computerh", "computeavo", "computepvo", "computeeth", @@ -26,21 +26,24 @@ class FortranException(Exception): @handle_left_iter(3,0, ignore_args=(2,3)) @handle_casting(arg_idxs=(0,1)) +@handle_extract_transpose() def interpz3d(data3d,zdata,desiredloc,missingval): - res = f_interpz3d(data3d.T, - zdata.T, + res = f_interpz3d(data3d, + zdata, desiredloc, missingval) - return res.T + return res @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1)) +@handle_extract_transpose() def interp2dxy(data3d,xy): - res = f_interp2dxy(data3d.T, - xy.T) - return res.T + res = f_interp2dxy(data3d, + xy) + return res @handle_casting(arg_idxs=(0,1,2)) +@handle_extract_transpose() def interp1d(v_in,z_in,z_out,missingval): res = f_interp1d(v_in, z_in, @@ -51,113 +54,121 @@ def interp1d(v_in,z_in,z_out,missingval): @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1,2,3)) +@handle_extract_transpose() def computeslp(z,t,p,q): - t_surf = n.zeros((z.shape[-2], z.shape[-1]), "float64") - t_sea_level = n.zeros((z.shape[-2], z.shape[-1]), "float64") - level = n.zeros((z.shape[-2], z.shape[-1]), "int32") - - res = f_computeslp(z.T, - t.T, - p.T, - q.T, - t_sea_level.T, - t_surf.T, - level.T, + t_surf = n.zeros((z.shape[-2], z.shape[-1]), "float64", order="F") + t_sea_level = n.zeros((z.shape[-2], z.shape[-1]), "float64", order="F") + level = n.zeros((z.shape[-2], z.shape[-1]), "int32", order="F") + + res = f_computeslp(z, + t, + p, + q, + t_sea_level, # Should come in with fortran ordering + t_surf, + level, FortranException()) - return res.T + return res @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1)) +@handle_extract_transpose() def computetk(pres, theta): # No need to transpose here since operations on 1D array shape = pres.shape - res = f_computetk(pres.flatten("A"), - theta.flatten("A")) - res = n.reshape(res, shape, "A") + res = f_computetk(pres.ravel(order="A"), + theta.ravel(order="A")) + res = n.reshape(res, shape) return res # Note: No left iteration decorator needed with 1D arrays @handle_casting(arg_idxs=(0,1)) +@handle_extract_transpose() def computetd(pressure,qv_in): shape = pressure.shape - res = f_computetd(pressure.flatten("A"), - qv_in.flatten("A")) - res = n.reshape(res, shape, "A") + res = f_computetd(pressure.ravel(order="A"), + qv_in.ravel(order="A")) + res = n.reshape(res, shape) return res # Note: No decorator needed with 1D arrays @handle_casting(arg_idxs=(0,1,2)) +@handle_extract_transpose() def computerh(qv,q,t): shape = qv.shape - res = f_computerh(qv.flatten("A"), - q.flatten("A"), - t.flatten("A")) - res = n.reshape(res, shape, "A") + res = f_computerh(qv.ravel(order="A"), + q.ravel(order="A"), + t.ravel(order="A")) + res = n.reshape(res, shape) return res @handle_left_iter(3,0, ignore_args=(6,7)) @handle_casting(arg_idxs=(0,1,2,3,4,5)) +@handle_extract_transpose() def computeavo(u,v,msfu,msfv,msfm,cor,dx,dy): - res = f_computeabsvort(u.T, - v.T, - msfu.T, - msfv.T, - msfm.T, - cor.T, + res = f_computeabsvort(u, + v, + msfu, + msfv, + msfm, + cor, dx, dy) - return res.T + return res @handle_left_iter(3,2, ignore_args=(8,9)) @handle_casting(arg_idxs=(0,1,2,3,4,5,6,7)) +@handle_extract_transpose() def computepvo(u,v,theta,prs,msfu,msfv,msfm,cor,dx,dy): - res = f_computepvo(u.T, - v.T, - theta.T, - prs.T, - msfu.T, - msfv.T, - msfm.T, - cor.T, + res = f_computepvo(u, + v, + theta, + prs, + msfu, + msfv, + msfm, + cor, dx, dy) - return res.T + return res @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1,2)) +@handle_extract_transpose() def computeeth(qv, tk, p): - res = f_computeeth(qv.T, - tk.T, - p.T) + res = f_computeeth(qv, + tk, + p) - return res.T + return res @uvmet_left_iter() @handle_casting(arg_idxs=(0,1,2,3)) +@handle_extract_transpose() def computeuvmet(u,v,lat,lon,cen_long,cone): - longca = n.zeros((lat.shape[-2], lat.shape[-1]), "float64") - longcb = n.zeros((lon.shape[-2], lon.shape[-1]), "float64") + longca = n.zeros((lat.shape[-2], lat.shape[-1]), "float64", order="F") + longcb = n.zeros((lon.shape[-2], lon.shape[-1]), "float64", order="F") rpd = Constants.PI/180. # Make the 2D array a 3D array with 1 dimension if u.ndim < 3: - u = u.reshape((1,u.shape[-2], u.shape[-1])) - v = v.reshape((1,v.shape[-2], v.shape[-1])) + u = u.reshape((u.shape[-2], u.shape[-1], 1), order="F") + v = v.reshape((v.shape[-2], v.shape[-1], 1), order="F") # istag will always be false since winds are destaggered already # Missing values don't appear to be used, so setting to 0 - res = f_computeuvmet(u.T, - v.T, - longca.T, - longcb.T, - lon.T, - lat.T, + res = f_computeuvmet(u, + v, + longca, + longcb, + lon, + lat, cen_long, cone, rpd, @@ -168,113 +179,123 @@ def computeuvmet(u,v,lat,lon,cen_long,cone): 0) - return n.squeeze(res.T) + return n.squeeze(res) @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1,2,3)) +@handle_extract_transpose() def computeomega(qv, tk, w, p): - res = f_computeomega(qv.T, - tk.T, - w.T, - p.T) + res = f_computeomega(qv, + tk, + w, + p) #return res.T - return res.T + return res @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1)) +@handle_extract_transpose() def computetv(tk,qv): - res = f_computetv(tk.T, - qv.T) + res = f_computetv(tk, + qv) - return res.T + return res @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1,2)) +@handle_extract_transpose() def computewetbulb(p,tk,qv): PSADITHTE, PSADIPRS, PSADITMK = get_lookup_tables() + PSADITMK = PSADITMK.T - res = f_computewetbulb(p.T, - tk.T, - qv.T, + res = f_computewetbulb(p, + tk, + qv, PSADITHTE, PSADIPRS, - PSADITMK.T, + PSADITMK, FortranException()) - return res.T + return res @handle_left_iter(3,0, ignore_args=(4,)) @handle_casting(arg_idxs=(0,1,2,3)) +@handle_extract_transpose() def computesrh(u, v, z, ter, top): - res = f_computesrh(u.T, - v.T, - z.T, - ter.T, + res = f_computesrh(u, + v, + z, + ter, top) - return res.T + return res @handle_left_iter(3,2, ignore_args=(5,6,7,8)) @handle_casting(arg_idxs=(0,1,2,3,4)) +@handle_extract_transpose() def computeuh(zp, mapfct, u, v, wstag, dx, dy, bottom, top): - tem1 = n.zeros((u.shape[-3],u.shape[-2],u.shape[-1]), "float64") - tem2 = n.zeros((u.shape[-3],u.shape[-2],u.shape[-1]), "float64") + tem1 = n.zeros((u.shape[-3],u.shape[-2],u.shape[-1]), "float64", order="F") + tem2 = n.zeros((u.shape[-3],u.shape[-2],u.shape[-1]), "float64", order="F") - res = f_computeuh(zp.T, - mapfct.T, + res = f_computeuh(zp, + mapfct, dx, dy, bottom, top, - u.T, - v.T, - wstag.T, - tem1.T, - tem2.T) + u, + v, + wstag, + tem1, + tem2) - return res.T + return res @handle_left_iter(3,0) @handle_casting(arg_idxs=(0,1,2,3)) +@handle_extract_transpose() def computepw(p,tv,qv,ht): # Note, dim -3 is height, we only want y and x - zdiff = n.zeros((p.shape[-2], p.shape[-1]), "float64") - res = f_computepw(p.T, - tv.T, - qv.T, - ht.T, - zdiff.T) + zdiff = n.zeros((p.shape[-2], p.shape[-1]), "float64", order="F") + res = f_computepw(p, + tv, + qv, + ht, + zdiff) - return res.T + return res @handle_left_iter(3,0, ignore_args=(6,7,8)) @handle_casting(arg_idxs=(0,1,2,3,4,5)) +@handle_extract_transpose() def computedbz(p,tk,qv,qr,qs,qg,sn0,ivarint,iliqskin): - res = f_computedbz(p.T, - tk.T, - qv.T, - qr.T, - qs.T, - qg.T, + res = f_computedbz(p, + tk, + qv, + qr, + qs, + qg, sn0, ivarint, iliqskin) - return res.T + return res @handle_left_iter(3,0,ignore_args=(6,7,8)) @handle_casting(arg_idxs=(0,1,2,3,4,5)) +@handle_extract_transpose() def computecape(p_hpa,tk,qv,ht,ter,sfp,missing,i3dflag,ter_follow): flip_cape = n.zeros((p_hpa.shape[-3],p_hpa.shape[-2],p_hpa.shape[-1]), - "float64") + "float64", order="F") flip_cin = n.zeros((p_hpa.shape[-3],p_hpa.shape[-2],p_hpa.shape[-1]), - "float64") + "float64", order="F") PSADITHTE, PSADIPRS, PSADITMK = get_lookup_tables() + PSADITMK = PSADITMK.T # The fortran routine needs pressure to be ascending in z-direction, # along with tk,qv,and ht. @@ -283,17 +304,17 @@ def computecape(p_hpa,tk,qv,ht,ter,sfp,missing,i3dflag,ter_follow): flip_qv = qv[::-1,:,:] flip_ht = ht[::-1,:,:] - f_computecape(flip_p.T, - flip_tk.T, - flip_qv.T, - flip_ht.T, - ter.T, - sfp.T, - flip_cape.T, - flip_cin.T, + f_computecape(flip_p, + flip_tk, + flip_qv, + flip_ht, + ter, + sfp, + flip_cape, + flip_cin, PSADITHTE, PSADIPRS, - PSADITMK.T, + PSADITMK, missing, i3dflag, ter_follow, @@ -304,7 +325,6 @@ def computecape(p_hpa,tk,qv,ht,ter,sfp,missing,i3dflag,ter_follow): cape = flip_cape[::-1,:,:] cin = flip_cin[::-1,:,:] - return (cape, cin) # TODO: This should handle lists of coords @@ -333,37 +353,40 @@ def computell(map_proj,truelat1,truelat2,stdlon,lat1,lon1, @handle_left_iter(3,0, ignore_args=(3,)) @handle_casting(arg_idxs=(0,1,2)) +@handle_extract_transpose() def computeeta(full_t, znu, psfc, ptop): - pcalc = n.zeros(full_t.shape, "float64") - mean_t = n.zeros(full_t.shape, "float64") - temp_t = n.zeros(full_t.shape, "float64") + pcalc = n.zeros(full_t.shape, "float64", order="F") + mean_t = n.zeros(full_t.shape, "float64", order="F") + temp_t = n.zeros(full_t.shape, "float64", order="F") - res = f_converteta(full_t.T, - znu.T, - psfc.T, + res = f_converteta(full_t, + znu, + psfc, ptop, - pcalc.T, - mean_t.T, - temp_t.T) + pcalc, + mean_t, + temp_t) - return res.T + return res @handle_left_iter(3,0,ignore_args=(7,)) @handle_casting(arg_idxs=(0,1,2,3,4,5,6)) +@handle_extract_transpose() def computectt(p_hpa,tk,qice,qcld,qv,ght,ter,haveqci): - res = f_computectt(p_hpa.T, - tk.T, - qice.T, - qcld.T, - qv.T, - ght.T, - ter.T, + res = f_computectt(p_hpa, + tk, + qice, + qcld, + qv, + ght, + ter, haveqci) - return res.T + return res @handle_left_iter(2,0,ignore_args=(1,)) @handle_casting(arg_idxs=(0,)) +@handle_extract_transpose() def smooth2d(field, passes): # Unlike NCL, this routine will not modify the values in place, but # copies the original data before modifying it. This allows the decorator @@ -375,10 +398,10 @@ def smooth2d(field, passes): missing = Constants.DEFAULT_FILL field_copy = field.copy() - field_tmp = n.zeros(field_copy.shape, field_copy.dtype) + field_tmp = n.zeros(field_copy.shape, field_copy.dtype, order="F") - f_filter2d(field_copy.T, - field_tmp.T, + f_filter2d(field_copy, + field_tmp, missing, passes) @@ -388,32 +411,33 @@ def smooth2d(field, passes): @handle_left_iter(3,0,ignore_args=(3,4,5)) @handle_casting(arg_idxs=(0,1,2)) +@handle_extract_transpose() def monotonic(var,lvprs,coriolis,idir,delta,icorsw): - res = f_monotonic(var.T, - lvprs.T, - coriolis.T, + res = f_monotonic(var, + lvprs, + coriolis, idir, delta, icorsw) - return res.T + return res -# TODO: Check those decorators, they might be wrong @handle_left_iter(3,0,ignore_args=(9,10,11,12,13,14)) @handle_casting(arg_idxs=(0,1,2,3,4,5,6,7,8,9)) +@handle_extract_transpose() def vintrp(field,pres,tk,qvp,ght,terrain,sfp,smsfp, vcarray,interp_levels,icase,extrap,vcor,logp, missing): - res = f_vintrp(field.T, - pres.T, - tk.T, - qvp.T, - ght.T, - terrain.T, - sfp.T, - smsfp.T, - vcarray.T, + res = f_vintrp(field, + pres, + tk, + qvp, + ght, + terrain, + sfp, + smsfp, + vcarray, interp_levels, icase, extrap, @@ -421,7 +445,7 @@ def vintrp(field,pres,tk,qvp,ght,terrain,sfp,smsfp, logp, missing) - return res.T + return res diff --git a/wrf_open/var/src/python/wrf/var/geoht.py b/wrf_open/var/src/python/wrf/var/geoht.py index e8396c8..6dce908 100755 --- a/wrf_open/var/src/python/wrf/var/geoht.py +++ b/wrf_open/var/src/python/wrf/var/geoht.py @@ -14,10 +14,10 @@ def _get_geoht(wrfnc, timeidx, height=True, msl=True): """ try: - ph_vars = extract_vars(wrfnc, timeidx, ("PH", "PHB", "HGT")) + ph_vars = extract_vars(wrfnc, timeidx, varnames=("PH", "PHB", "HGT")) except KeyError: try: - ght_vars = extract_vars(wrfnc, timeidx, ("GHT", "HGT_U")) + ght_vars = extract_vars(wrfnc, timeidx, varnames=("GHT", "HGT_U")) except KeyError: raise RuntimeError("Cannot calculate height with variables in " "NetCDF file") diff --git a/wrf_open/var/src/python/wrf/var/helicity.py b/wrf_open/var/src/python/wrf/var/helicity.py index ba77d12..1483204 100755 --- a/wrf_open/var/src/python/wrf/var/helicity.py +++ b/wrf_open/var/src/python/wrf/var/helicity.py @@ -9,17 +9,17 @@ __all__ = ["get_srh", "get_uh"] def get_srh(wrfnc, timeidx=0, top=3000.0): # Top can either be 3000 or 1000 (for 0-1 srh or 0-3 srh) - ncvars = extract_vars(wrfnc, timeidx, vars=("HGT", "PH", "PHB")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("HGT", "PH", "PHB")) ter = ncvars["HGT"] ph = ncvars["PH"] phb = ncvars["PHB"] try: - u_vars = extract_vars(wrfnc, timeidx, vars="U") + u_vars = extract_vars(wrfnc, timeidx, varnames="U") except KeyError: try: - uu_vars = extract_vars(wrfnc, timeidx, vars="UU") + uu_vars = extract_vars(wrfnc, timeidx, varnames="UU") except KeyError: raise RuntimeError("No valid wind data found in NetCDF file") else: @@ -28,10 +28,10 @@ def get_srh(wrfnc, timeidx=0, top=3000.0): u = destagger(u_vars["U"], -1) try: - v_vars = extract_vars(wrfnc, timeidx, vars="V") + v_vars = extract_vars(wrfnc, timeidx, varnames="V") except KeyError: try: - vv_vars = extract_vars(wrfnc, timeidx, vars="VV") + vv_vars = extract_vars(wrfnc, timeidx, varnames="VV") except KeyError: raise RuntimeError("No valid wind data found in NetCDF file") else: @@ -55,7 +55,7 @@ def get_srh(wrfnc, timeidx=0, top=3000.0): def get_uh(wrfnc, timeidx=0, bottom=2000.0, top=5000.0): - ncvars = extract_vars(wrfnc, timeidx, vars=("W", "PH", "PHB", "MAPFAC_M")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("W", "PH", "PHB", "MAPFAC_M")) wstag = ncvars["W"] ph = ncvars["PH"] @@ -67,10 +67,10 @@ def get_uh(wrfnc, timeidx=0, bottom=2000.0, top=5000.0): dy = attrs["DY"] try: - u_vars = extract_vars(wrfnc, timeidx, vars="U") + u_vars = extract_vars(wrfnc, timeidx, varnames="U") except KeyError: try: - uu_vars = extract_vars(wrfnc, timeidx, vars="UU") + uu_vars = extract_vars(wrfnc, timeidx, varnames="UU") except KeyError: raise RuntimeError("No valid wind data found in NetCDF file") else: @@ -79,10 +79,10 @@ def get_uh(wrfnc, timeidx=0, bottom=2000.0, top=5000.0): u = destagger(u_vars["U"], -1) try: - v_vars = extract_vars(wrfnc, timeidx, vars="V") + v_vars = extract_vars(wrfnc, timeidx, varnames="V") except KeyError: try: - vv_vars = extract_vars(wrfnc, timeidx, vars="VV") + vv_vars = extract_vars(wrfnc, timeidx, varnames="VV") except KeyError: raise RuntimeError("No valid wind data found in NetCDF file") else: diff --git a/wrf_open/var/src/python/wrf/var/interp.py b/wrf_open/var/src/python/wrf/var/interp.py index 3f5c63c..b7b7bb3 100755 --- a/wrf_open/var/src/python/wrf/var/interp.py +++ b/wrf_open/var/src/python/wrf/var/interp.py @@ -324,7 +324,7 @@ def vinterp(wrfnc, field, vert_coord, interp_levels, extrapolate=False, # Extract vriables timeidx = -1 # Should this be an argument? - ncvars = extract_vars(wrfnc, timeidx, vars=("PSFC", "QVAPOR", "F")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("PSFC", "QVAPOR", "F")) sfp = ncvars["PSFC"] * ConversionFactors.PA_TO_HPA qv = ncvars["QVAPOR"] diff --git a/wrf_open/var/src/python/wrf/var/latlon.py b/wrf_open/var/src/python/wrf/var/latlon.py index c5071cb..c2932f4 100755 --- a/wrf_open/var/src/python/wrf/var/latlon.py +++ b/wrf_open/var/src/python/wrf/var/latlon.py @@ -1,5 +1,6 @@ from collections import Iterable +from wrf.var.constants import Constants from wrf.var.extension import computeij, computell from wrf.var.util import extract_vars, extract_global_attrs @@ -8,10 +9,10 @@ __all__ = ["get_lat", "get_lon", "get_ij", "get_ll"] def get_lat(wrfnc, timeidx=0): try: - lat_vars = extract_vars(wrfnc, timeidx, vars="XLAT") + lat_vars = extract_vars(wrfnc, timeidx, varnames="XLAT") except KeyError: try: - latm_vars = extract_vars(wrfnc, timeidx, vars="XLAT_M") + latm_vars = extract_vars(wrfnc, timeidx, varnames="XLAT_M") except: raise RuntimeError("Latitude variable not found in NetCDF file") else: @@ -23,10 +24,10 @@ def get_lat(wrfnc, timeidx=0): def get_lon(wrfnc, timeidx=0): try: - lon_vars = extract_vars(wrfnc, timeidx, vars="XLONG") + lon_vars = extract_vars(wrfnc, timeidx, varnames="XLONG") except KeyError: try: - lonm_vars = extract_vars(wrfnc, timeidx, vars="XLONG_M") + lonm_vars = extract_vars(wrfnc, timeidx, varnames="XLONG_M") except: raise RuntimeError("Latitude variable not found in NetCDF file") else: @@ -42,22 +43,21 @@ def _get_proj_params(wrfnc, timeidx): attrs = extract_global_attrs(wrfnc, attrs=("MAP_PROJ", "TRUELAT1", "TRUELAT2", "STAND_LON", - "DX", "DY", "STAND_LON")) + "DX", "DY")) map_proj = attrs["MAP_PROJ"] truelat1 = attrs["TRUELAT1"] truelat2 = attrs["TRUELAT2"] stdlon = attrs["STAND_LON"] dx = attrs["DX"] dy = attrs["DY"] - stdlon = attrs["STAND_LON"] if map_proj == 6: pole_attrs = extract_global_attrs(wrfnc, attrs=("POLE_LAT", "POLE_LON")) pole_lat = pole_attrs["POLE_LAT"] pole_lon = pole_attrs["POLE_LON"] - latinc = (dy*360.0)/2.0/3.141592653589793/6370000. - loninc = (dx*360.0)/2.0/3.141592653589793/6370000. + latinc = (dy*360.0)/2.0 / Constants.PI/Constants.WRF_EARTH_RADIUS + loninc = (dx*360.0)/2.0 / Constants.PI/Constants.WRF_EARTH_RADIUS else: pole_lat = 90.0 pole_lon = 0.0 diff --git a/wrf_open/var/src/python/wrf/var/omega.py b/wrf_open/var/src/python/wrf/var/omega.py index 5d4d371..a88c6d8 100755 --- a/wrf_open/var/src/python/wrf/var/omega.py +++ b/wrf_open/var/src/python/wrf/var/omega.py @@ -7,7 +7,8 @@ from wrf.var.util import extract_vars __all__ = ["get_omega"] def get_omega(wrfnc, timeidx=0): - ncvars = extract_vars(wrfnc, timeidx, vars=("T", "P", "W", "PB", "QVAPOR")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("T", "P", "W", + "PB", "QVAPOR")) t = ncvars["T"] p = ncvars["P"] w = ncvars["W"] diff --git a/wrf_open/var/src/python/wrf/var/precip.py b/wrf_open/var/src/python/wrf/var/precip.py index ba8de8a..86756de 100755 --- a/wrf_open/var/src/python/wrf/var/precip.py +++ b/wrf_open/var/src/python/wrf/var/precip.py @@ -5,7 +5,7 @@ from wrf.var.util import extract_vars __all__ = ["get_accum_precip", "get_precip_diff"] def get_accum_precip(wrfnc, timeidx=0): - ncvars = extract_vars(wrfnc, timeidx, vars=("RAINC", "RAINNC")) + ncvars = extract_vars(wrfnc, timeidx, varnames=("RAINC", "RAINNC")) rainc = ncvars["RAINC"] rainnc = ncvars["RAINNC"] @@ -14,8 +14,8 @@ def get_accum_precip(wrfnc, timeidx=0): return rainsum def get_precip_diff(wrfnc1, wrfnc2, timeidx=0): - vars1 = extract_vars(wrfnc1, timeidx, vars=("RAINC", "RAINNC")) - vars2 = extract_vars(wrfnc2, timeidx, vars=("RAINC", "RAINNC")) + vars1 = extract_vars(wrfnc1, timeidx, varnames=("RAINC", "RAINNC")) + vars2 = extract_vars(wrfnc2, timeidx, varnames=("RAINC", "RAINNC")) rainc1 = vars1["RAINC"] rainnc1 = vars1["RAINNC"] diff --git a/wrf_open/var/src/python/wrf/var/pressure.py b/wrf_open/var/src/python/wrf/var/pressure.py index ff9e64a..5482fa6 100755 --- a/wrf_open/var/src/python/wrf/var/pressure.py +++ b/wrf_open/var/src/python/wrf/var/pressure.py @@ -8,10 +8,10 @@ __all__ = ["get_pressure", "get_pressure_hpa"] def get_pressure(wrfnc, timeidx=0, units="pa"): try: - p_vars = extract_vars(wrfnc, timeidx, vars=("P", "PB")) + p_vars = extract_vars(wrfnc, timeidx, varnames=("P", "PB")) except KeyError: try: - pres_vars = extract_vars(wrfnc, timeidx, vars="PRES") + pres_vars = extract_vars(wrfnc, timeidx, varnames="PRES") except: raise RuntimeError("pressure variable not found in NetCDF file") else: diff --git a/wrf_open/var/src/python/wrf/var/projection.py b/wrf_open/var/src/python/wrf/var/projection.py new file mode 100644 index 0000000..2db9fcd --- /dev/null +++ b/wrf_open/var/src/python/wrf/var/projection.py @@ -0,0 +1,748 @@ +import numpy as np +import math + +from wrf.var.config import basemap_enabled, cartopy_enabled, pyngl_enabled +from wrf.var.constants import Constants + +if cartopy_enabled(): + from cartopy import crs + +if basemap_enabled(): + from mpl_toolkits.basemap import Basemap + +if pyngl_enabled(): + from Ngl import Resources + +__all__ = ["WrfProj", "LambertConformalProj", "MercatorProj", + "PolarStereographicProj", "LatLonProj", "RotLatLonProj", + "getproj"] + + +if cartopy_enabled(): + class MercatorWithLatTsProj(crs.Mercator): + def __init__(self, central_longitude=0.0, + latitude_true_scale=0.0, + min_latitude=-80.0, + max_latitude=84.0, + globe=None): + proj4_params = [("proj", "merc"), + ("lon_0", central_longitude), + ("lat_ts", latitude_true_scale), + ("k", 1), + ("units", "m")] + super(crs.Mercator, self).__init__(proj4_params, globe=globe) + + # Calculate limits. + limits = self.transform_points(crs.Geodetic(), + np.array([-180, 180]) + central_longitude, + np.array([min_latitude, max_latitude])) + + # When using a latitude of true scale, the min/max x-limits get set + # to the same value, so make sure the left one is negative + xlimits = limits[..., 0] + + if xlimits[0] == xlimits[1]: + if xlimits[0] < 0: + xlimits[1] = -xlimits[1] + else: + xlimits[0] = -xlimits[0] + + self._xlimits = tuple(xlimits) + self._ylimits = tuple(limits[..., 1]) + + self._threshold = np.diff(self.x_limits)[0] / 720 + +def _ismissing(val): + return val is None or val > 90. or val < -90. + +class WrfProj(object): + def __init__(self, bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + if bottom_left is not None and top_right is not None: + self.ll_lat = bottom_left[0] + self.ll_lon = bottom_left[1] + self.ur_lat = top_right[0] + self.ur_lon = top_right[1] + self.bottom_left = bottom_left + self.top_right = top_right + elif lats is not None and lons is not None: + self.ll_lat = lats[0,0] + self.ur_lat = lats[-1,-1] + self.ll_lon = lons[0,0] + self.ur_lon = lons[-1,-1] + self.bottom_left = [self.ll_lat, self.ll_lon] + self.top_right = [self.ur_lat, self.ur_lon] + else: + raise ValueError("invalid corner point arguments") + + # These indicate the center of the nest/domain, not necessarily the + # center of the projection + self._cen_lat = proj_params.get("CEN_LAT", None) + self._cen_lon = proj_params.get("CEN_LON", None) + + self.truelat1 = proj_params.get("TRUELAT1", None) + self.truelat2 = (proj_params.get("TRUELAT2", None) + if not _ismissing(proj_params.get("TRUELAT2", None)) + else None) + self.moad_cen_lat = proj_params.get("MOAD_CEN_LAT", None) + self.stand_lon = proj_params.get("STAND_LON", None) + self.pole_lat = proj_params.get("POLE_LAT", None) + self.pole_lon = proj_params.get("POLE_LON", None) + + # Just in case... + if self.moad_cen_lat is None: + self.moad_cen_lat = self._cen_lat + + if self.stand_lon is None: + self.stand_lon = self._cen_lon + + @property + def _basemap(self): + return None + + @property + def _cf_params(self): + return None + + @property + def _cartopy(self): + return None + + @property + def _cart_extents(self): + return ([self.ll_lon, self.ur_lon], [self.ll_lat, self.ur_lat]) + + @property + def _pyngl(self): + return None + + @property + def _proj4(self): + return None + + @property + def _globe(self): + return (None if not cartopy_enabled() + else crs.Globe(ellipse=None, + semimajor_axis=Constants.WRF_EARTH_RADIUS, + semiminor_axis=Constants.WRF_EARTH_RADIUS)) + + def cartopy_xlim(self): + """Return the x extents in projected coordinates (for cartopy)""" + return self._cart_extents[0] + + def cartopy_ylim(self): + """Return the y extents in projected coordinates (for cartopy)""" + return self._cart_extents[1] + + def __repr__(self): + args = ("bottom_left={}, top_right={}, " + "stand_lon={}, moad_cen_lat={}, " + "pole_lat={}, pole_lon={}".format((self.ll_lat, self.ll_lon), + (self.ur_lat, self.ur_lon), + self.stand_lon, + self.moad_cen_lat, + self.pole_lat, + self.pole_lon)) + return "{}({})".format(self.__class__.__name__, args) + + def basemap(self): + """Return a mpl_toolkits.basemap.Basemap instance for the + projection""" + if not basemap_enabled(): + raise RuntimeError("'mpl_toolkits.basemap' is not " + "installed or is disabled") + return self._basemap + + def cartopy(self): + """Return a cartopy.crs.Projection subclass for the + projection""" + if not cartopy_enabled(): + raise RuntimeError("'cartopy' is not " + "installed or is disabled") + return self._cartopy + + def pyngl(self): + """Return the PyNGL resources for the projection""" + if not pyngl_enabled(): + raise RuntimeError("'pyngl' is not " + "installed or is disabled") + return self._pyngl + + def proj4(self): + """Return the proj4 string for the map projection""" + return self._proj4 + + def cf(self): + """Return a dictionary with the NetCDF CF parameters for the + projection""" + return self._cf_params + + +class LambertConformalProj(WrfProj): + def __init__(self, bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + super(LambertConformalProj, self).__init__(bottom_left, + top_right, lats, lons, **proj_params) + + self._std_parallels = [self.truelat1] + if self.truelat2 is not None: + self._std_parallels.append(self.truelat2) + + @property + def _cf_params(self): + _cf_params = {} + _cf_params["grid_mapping_name"] = "lambert_conformal_conic"; + _cf_params["standard_parallel"] = self._std_parallels + _cf_params["longitude_of_central_meridian"] = self.stand_lon + _cf_params["latitude_of_projection_origin"] = self.moad_cen_lat + _cf_params["semi_major_axis"] = Constants.WRF_EARTH_RADIUS + + return _cf_params + + @property + def _pyngl(self): + if not pyngl_enabled(): + return None + + truelat2 = (self.truelat1 + if _ismissing(self.truelat2) + else self.truelat2) + + _pyngl = Resources() + _pyngl.mpProjection = "LambertConformal" + _pyngl.mpDataBaseVersion = "MediumRes" + _pyngl.mpLimitMode = "Corners" + _pyngl.mpLeftCornerLonF = self.ll_lon + _pyngl.mpLeftCornerLatF = self.ll_lat + _pyngl.mpRightCornerLonF = self.ur_lon + _pyngl.mpRightCornerLatF = self.ur_lat + _pyngl.mpLambertMeridianF = self.stand_lon + _pyngl.mpLambertParallel1F = self.truelat1 + _pyngl.mpLambertParallel2F = truelat2 + + return _pyngl + + @property + def _basemap(self): + if not basemap_enabled(): + return None + + _basemap = Basemap(projection = "lcc", + lon_0 = self.stand_lon, + lat_0 = self.moad_cen_lat, + lat_1 = self.truelat1, + lat_2 = self.truelat2, + llcrnrlat = self.ll_lat, + urcrnrlat = self.ur_lat, + llcrnrlon = self.ll_lon, + urcrnrlon = self.ur_lon, + rsphere = Constants.WRF_EARTH_RADIUS, + resolution = 'l') + + return _basemap + + @property + def _cartopy(self): + if not cartopy_enabled(): + return None + + _cartopy = crs.LambertConformal( + central_longitude = self.stand_lon, + central_latitude = self.moad_cen_lat, + standard_parallels = self._std_parallels, + globe = self._globe) + + return _cartopy + + @property + def _cart_extents(self): + # Need to modify the extents for the new projection + pc = crs.PlateCarree() + xs, ys, zs = self._cartopy.transform_points(pc, + np.array([self.ll_lon, self.ur_lon]), + np.array([self.ll_lat, self.ur_lat])).T + + + _xlimits = xs.tolist() + _ylimits = ys.tolist() + + return (_xlimits, _ylimits) + + @property + def _proj4(self): + truelat2 = (self.truelat1 + if _ismissing(self.truelat2) + else self.truelat2) + + _proj4 = ("+proj=lcc +units=meters +a={} +b={} +lat_1={} " + "+lat_2={} +lat_0={} +lon_0={}".format( + Constants.WRF_EARTH_RADIUS, + Constants.WRF_EARTH_RADIUS, + self.truelat1, + truelat2, + self.moad_cen_lat, + self.stand_lon)) + return _proj4 + +class MercatorProj(WrfProj): + def __init__(self, bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + super(MercatorProj, self).__init__(bottom_left, top_right, + lats, lons, **proj_params) + + self._lat_ts = (None + if self.truelat1 == 0. or _ismissing(self.truelat1) + else self.truelat1) + + @property + def _cf_params(self): + + _cf_params = {} + _cf_params["grid_mapping_name"] = "mercator" + _cf_params["longitude_of_projection_origin"] = self.stand_lon + _cf_params["standard_parallel"] = self.truelat1 + + return _cf_params + + @property + def _pyngl(self): + if not pyngl_enabled(): + return None + + _pyngl = Resources() + _pyngl.mpProjection = "Mercator" + _pyngl.mpDataBaseVersion = "MediumRes" + _pyngl.mpLimitMode = "Corners" + _pyngl.mpLeftCornerLonF = self.ll_lon + _pyngl.mpLeftCornerLatF = self.ll_lat + _pyngl.mpRightCornerLonF = self.ur_lon + _pyngl.mpRightCornerLatF = self.ur_lat + _pyngl.mpCenterLatF = 0.0 + _pyngl.mpCenterLonF = self.stand_lon + + return _pyngl + + @property + def _basemap(self): + if not basemap_enabled(): + return None + + _basemap = Basemap(projection = "merc", + lon_0 = self.stand_lon, + lat_0 = self.moad_cen_lat, + lat_ts = self._lat_ts, + llcrnrlat = self.ll_lat, + urcrnrlat = self.ur_lat, + llcrnrlon = self.ll_lon, + urcrnrlon = self.ur_lon, + rsphere = Constants.WRF_EARTH_RADIUS, + resolution = 'l') + + return _basemap + + @property + def _cartopy(self): + if not cartopy_enabled(): + return None + + if self._lat_ts == 0.0: + _cartopy = crs.Mercator( + central_longitude = self.stand_lon, + globe = self._globe) + + else: + _cartopy = MercatorWithLatTsProj( + central_longitude = self.stand_lon, + latitude_true_scale = self._lat_ts, + globe = self._globe) + + return _cartopy + + @property + def _cart_extents(self): + + # Need to modify the extents for the new projection + pc = crs.PlateCarree() + xs, ys, zs = self._cartopy.transform_points(pc, + np.array([self.ll_lon, self.ur_lon]), + np.array([self.ll_lat, self.ur_lat])).T + + _xlimits = xs.tolist() + _ylimits = ys.tolist() + + return (_xlimits, _ylimits) + + @property + def _proj4(self): + + _proj4 = ("+proj=merc +units=meters +a={} +b={} " + "+lon_0={} +lat_ts={}".format( + Constants.WRF_EARTH_RADIUS, + Constants.WRF_EARTH_RADIUS, + self.stand_lon, + self._lat_ts)) + + return _proj4 + +class PolarStereographicProj(WrfProj): + def __init__(self, bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + super(PolarStereographicProj, self).__init__(bottom_left, + top_right, lats, lons, **proj_params) + self._hemi = -90. if self.truelat1 < 0 else 90. + self._lat_ts = (None + if _ismissing(self.truelat1) + else self.truelat1) + + @property + def _cf_params(self): + _cf_params = {} + _cf_params["grid_mapping_name"] = "polar_stereographic" + _cf_params["straight_vertical_longitude_from_pole"] = ( + self.stand_lon) + _cf_params["standard_parallel"] = self.truelat1 + _cf_params["latitude_of_projection_origin"] = self._hemi + + return _cf_params + + @property + def _pyngl(self): + if not pyngl_enabled(): + return None + + _pyngl = Resources() + _pyngl.mpProjection = "Stereographic" + _pyngl.mpDataBaseVersion = "MediumRes" + _pyngl.mpLimitMode = "Corners" + _pyngl.mpLeftCornerLonF = self.ll_lon + _pyngl.mpLeftCornerLatF = self.ll_lat + _pyngl.mpRightCornerLonF = self.ur_lon + _pyngl.mpRightCornerLatF = self.ur_lat + + _pyngl.mpCenterLonF = self.stand_lon + if self._hemi > 0: + _pyngl.mpCenterLatF = 90.0 + else: + _pyngl.mpCenterLatF = -90.0 + + return _pyngl + + @property + def _basemap(self): + if not basemap_enabled(): + return None + + _basemap = Basemap(projection = "stere", + lon_0 = self.stand_lon, + lat_0 = self._hemi, + lat_ts = self._lat_ts, + llcrnrlat = self.ll_lat, + urcrnrlat = self.ur_lat, + llcrnrlon = self.ll_lon, + urcrnrlon = self.ur_lon, + rsphere = Constants.WRF_EARTH_RADIUS, + resolution = 'l') + + return _basemap + + @property + def _cartopy(self): + if not cartopy_enabled(): + return None + + _cartopy = crs.Stereographic(central_latitude=self._hemi, + central_longitude=self.stand_lon, + true_scale_latitude=self._lat_ts, + globe=self._globe) + return _cartopy + + @property + def _cart_extents(self): + # Need to modify the extents for the new projection + pc = crs.PlateCarree() + xs, ys, zs = self._cartopy.transform_points(pc, + np.array([self.ll_lon, self.ur_lon]), + np.array([self.ll_lat, self.ur_lat])).T + + _xlimits = xs.tolist() + _ylimits = ys.tolist() + + return (_xlimits, _ylimits) + + @property + def _proj4(self): + _proj4 = ("+proj=stere +units=meters +a={} +b={} " + "+lat0={} +lon_0={} +lat_ts={}".format( + Constants.WRF_EARTH_RADIUS, + Constants.WRF_EARTH_RADIUS, + self._hemi, + self.stand_lon, + self._lat_ts)) + + return _proj4 + + + +class LatLonProj(WrfProj): + def __init__(self, bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + super(LatLonProj, self).__init__(bottom_left, top_right, + lats, lons, **proj_params) + + @property + def _cf_params(self): + _cf_params = {} + _cf_params["grid_mapping_name"] = "latitude_longitude" + return _cf_params + + @property + def _pyngl(self): + if not pyngl_enabled(): + return None + + _pyngl = Resources() + _pyngl.mpProjection = "CylindricalEquidistant" + _pyngl.mpDataBaseVersion = "MediumRes" + _pyngl.mpLimitMode = "Corners" + _pyngl.mpLeftCornerLonF = self.ll_lon + _pyngl.mpLeftCornerLatF = self.ll_lat + _pyngl.mpRightCornerLonF = self.ur_lon + _pyngl.mpRightCornerLatF = self.ur_lat + _pyngl.mpCenterLonF = self.stand_lon + _pyngl.mpCenterLatF = self.moad_cen_lat + + return _pyngl + + @property + def _basemap(self): + if not basemap_enabled(): + return None + + _basemap = Basemap(projection = "cyl", + lon_0 = self.stand_lon, + lat_0 = self.moad_cen_lat, + llcrnrlat = self.ll_lat, + urcrnrlat = self.ur_lat, + llcrnrlon = self.ll_lon, + urcrnrlon = self.ur_lon, + rsphere = Constants.WRF_EARTH_RADIUS, + resolution = 'l') + + return _basemap + + @property + def _cartopy(self): + if not cartopy_enabled(): + return None + + _cartopy = crs.PlateCarree(central_longitude=self.stand_lon, + globe=self._globe) + + return _cartopy + + @property + def _cart_extents(self): + return ([self.ll_lon, self.ur_lon], [self.ll_lat, self.ur_lat]) + + @property + def _proj4(self): + _proj4 = ("+proj=eqc +units=meters +a={} +b={} " + "+lon_0={}".format(Constants.WRF_EARTH_RADIUS, + Constants.WRF_EARTH_RADIUS, + self.stand_lon)) + return _proj4 + +# Notes (may not be correct since this projection confuses me): +# Each projection system handles this differently. +# 1) In WRF, if following the WPS instructions, POLE_LON is mainly used to +# determine north or south hemisphere. In other words, it determines if +# the globe is tipped toward or away from you. If a non-0 or non-180 +# value is chosen, PyNGL cannot plot it. +# 2) In WRF, POLE_LAT is always positive, but should be negative in the +# proj4 based systems when using the southern hemisphere projections. +# 3) In cartopy, pole_longitude is used to describe the dateline, which +# is 180 degrees away from the normal central (standard) longitude +# (e.g. center of the projection), according to the cartopy developer. +# 4) In basemap, lon_0 should be set to the central (standard) longitude. +# 5) In either cartopy, basemap or pyngl, I'm not sure that projections with +# a pole_lon not equal to 0 or 180 can be plotted. Hopefully people +# follow the WPS instructions, otherwise I need to see a sample file and +# a lot of rum. +# 6) For items in 3 - 4, the "longitude" (lon_0 or pole_longitude) is +# determined by WRF's +# STAND_LON values, with the following calculations based on hemisphere: +# BASEMAP: NH: -STAND_LON; SH: 180.0 - STAND_LON +# CARTOPY: NH: -STAND_LON - 180.; SH: -STAND_LON +# 9) For PYNGL/NCL, you only need to set the center lat and center lon, +# Center lat is the offset of the pole from +/- 90 degrees. Center +# lon is -STAND_LON in NH and 180.0 - STAND_LON in SH. +# 10) It also appears that NetCDF CF has no clear documentation on what +# each parameter means. Going to assume it is the same as basemap, since +# basemap appears to mirror the WMO way of doing things (tilt earth, then +# spin globe). +# 11) Basemap and cartopy produce projections that differ in their extent +# calculations by either using negative values or 0-360 (basemap). For +# this reason, the proj4 string for this class will use cartopy's values +# to keep things in the -180 to 180, -90 to 90 range. +# 12) This projection makes me sad. +class RotLatLonProj(WrfProj): + def __init__(self, bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + super(RotLatLonProj, self).__init__(bottom_left, top_right, + lats, lons, **proj_params) + + # Need to determine hemisphere, typically pole_lon is 0 for southern + # hemisphere, 180 for northern hemisphere. If not, going to have + # to guess based on other parameters, but hopefully people follow + # the WPS instructions and this never happens. + self._north = True + if self.pole_lon is not None: + if self.pole_lon == 0.: + self._north = False + elif self.pole_lon != 180.: + if self.moad_cen_lat is not None and self.moad_cen_lat < 0.0: + # Only probably true + self._north = False + else: + if self.moad_cen_lat is not None and self.moad_cen_lat < 0.0: + # Only probably true + self._north = False + + if self.pole_lat is not None and self.stand_lon is not None: + self._pyngl_cen_lat = (90. - self.pole_lat if self._north + else self.pole_lat - 90.0) + self._pyngl_cen_lon = (-self.stand_lon if self._north + else 180.0 - self.stand_lon) + self._bm_lon_0 = (-self.stand_lon if self._north + else 180.0 - self.stand_lon) + self._bm_cart_pole_lat = (self.pole_lat if self._north + else -self.pole_lat ) + # The important point is that pole longitude is the position + # of the dateline of the new projection, not its central + # longitude (per the creator of cartopy). This is based on + # how it's handled by agencies like WMO, but not proj4. + self._cart_pole_lon = (-self.stand_lon - 180.0 if self._north + else -self.stand_lon) + else: + self._pyngl_cen_lat = self.moad_cen_lat + self._pyngl_cen_lon = self.stand_lon + self._bm_cart_pole_lat = (90.0 - self.moad_cen_lat if self._north + else -90.0 - self.moad_cen_lat) + self._bm_lon_0 = (-self.stand_lon if self._north + else 180.0 - self.stand_lon) + self._cart_pole_lon = (-self.stand_lon - 180.0 if self._north + else -self.stand_lon) + + @property + def _cf_params(self): + _cf_params = {} + # Assuming this follows the same guidelines as cartopy + _cf_params["grid_mapping_name"] = "rotated_latitude_longitude" + _cf_params["grid_north_pole_latitude"] = self._bm_cart_pole_lat + _cf_params["grid_north_pole_longitude"] = self.pole_lon + _cf_params["north_pole_grid_longitude"] = self._bm_lon_0 + + return _cf_params + + @property + def _pyngl(self): + if not pyngl_enabled(): + return None + + _pyngl = Resources() + _pyngl.mpProjection = "CylindricalEquidistant" + _pyngl.mpDataBaseVersion = "MediumRes" + _pyngl.mpLimitMode = "Corners" + _pyngl.mpLeftCornerLonF = self.ll_lon + _pyngl.mpLeftCornerLatF = self.ll_lat + _pyngl.mpRightCornerLonF = self.ur_lon + _pyngl.mpRightCornerLatF = self.ur_lat + _pyngl.mpCenterLatF = self._pyngl_cen_lat + _pyngl.mpCenterLonF = self._pyngl_cen_lon + + return _pyngl + + @property + def _basemap(self): + if not basemap_enabled(): + return None + + _basemap = Basemap(projection = "rotpole", + o_lat_p = self._bm_cart_pole_lat, + o_lon_p = self.pole_lon, + llcrnrlat = self.ll_lat, + urcrnrlat = self.ur_lat, + llcrnrlon = self.ll_lon, + urcrnrlon = self.ur_lon, + lon_0 = self._bm_lon_0, + rsphere = Constants.WRF_EARTH_RADIUS, + resolution = 'l') + return _basemap + + @property + def _cartopy(self): + if not cartopy_enabled(): + return None + + _cartopy = crs.RotatedPole( + pole_longitude=self._cart_pole_lon, + pole_latitude=self._bm_cart_pole_lat, + central_rotated_longitude=( + 180.0 - self.pole_lon), # Probably + globe = self._globe) + return _cartopy + + @property + def _cart_extents(self): + # Need to modify the extents for the new projection + pc = crs.PlateCarree() + xs, ys, zs = self._cartopy.transform_points(pc, + np.array([self.ll_lon, self.ur_lon]), + np.array([self.ll_lat, self.ur_lat])).T + + _xlimits = xs.tolist() + _ylimits = ys.tolist() + + return (_xlimits, _ylimits) + + @property + def _proj4(self): + _proj4 = ("+proj=ob_tran +o_proj=latlon " + "+a={} +b={} +to_meter={} +o_lon_p={} +o_lat_p={} " + "+lon_0={}".format(Constants.WRF_EARTH_RADIUS, + Constants.WRF_EARTH_RADIUS, + math.radians(1), + 180.0 - self.pole_lon, + self._bm_cart_pole_lat, + 180.0 + self._cart_pole_lon)) + + return _proj4 + +def getproj(bottom_left=None, top_right=None, + lats=None, lons=None, **proj_params): + + proj_type = proj_params.get("MAP_PROJ", 0) + if proj_type == 1: + return LambertConformalProj(bottom_left, top_right, + lats, lons, **proj_params) + elif proj_type == 2: + return PolarStereographicProj(bottom_left, top_right, + lats, lons, **proj_params) + elif proj_type == 3: + return MercatorProj(bottom_left, top_right, + lats, lons, **proj_params) + elif proj_type == 0 or proj_type == 6: + if (proj_params.get("POLE_LAT", None) == 90. + and proj_params.get("POLE_LON", None) == 0.): + return LatLonProj(bottom_left, top_right, + lats, lons, **proj_params) + else: + return RotLatLonProj(bottom_left, top_right, + lats, lons, **proj_params) + else: + # Unknown projection + return WrfProj(bottom_left, top_right, + lats, lons, **proj_params) + + \ No newline at end of file diff --git a/wrf_open/var/src/python/wrf/var/psadlookup.pyc b/wrf_open/var/src/python/wrf/var/psadlookup.pyc deleted file mode 100755 index 77f3cb91747d888ea3b385d10f65df9c7c88c92d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347307 zcmZtPOU`{wk0tbfX5FB;)1gVxLqbB&{nDcWLUiarD0z}bAD#pN2Xfp~X zQUidW!*T3&fG^+7eD@doc*n(IFE2ad`CI?|U-|nV|JQ%>pZ_<1?tlKS|NkHO-~aia z`#*o}pTGF?PyYP*tH1d3*MIrvAN|FjzxvBRfBm=q{MFw&|MzeI`Rl*^=db?GpTGG# zfBx~`{qxVf_V@n$&0qZa$N$2gfAr_i-~7Elf34|n{rPwP!~f#n{PS1;;-A0y`+xrC zU;OjW{^HMn`ImqGr~ml8_%HqWXMg$Uum0tyANfW7^SA%}TmQd5{9ogT|H}X8hko^M z|NnjN|JYysp%LNfBFyq$^Y;_{P+LM|M(C8>3{WK|C7J@pZ~l6y=LeC{7?SQpMUTVUjF^Jm-C-iNzhA$i_4DKR>uqJde!u;`eD2%7FTcOv^Z54i`}VP4dVBl+df$G%eSE$Cgsiu( zkDs4t{xOKte0u%<^7j3?qTk8y&Salne}24weZTH}eH!EE zcKh?^>n)~Fr@!BKvcKMbKR(ZokF2lHSIfMzzP{h}d?x$r_w(y}yZQb4^ZK^4`Tg-U zAr|7Z2hn5v{`va+*+Koh{C>xff8O6;V`YAP=zC}L=jY|~^L)5v{l0t{_Vnxb?dSV# zMgM-jzrOC=|9*dezsw-sEzHO7u466weXc2ZfBAfSdi%T9;_;>T*HZhLzW3L+-_PG& z$M@IIn*DwI=k@n(I`aPZ^7HXJ3-|u^Znn2yZ`P@o^^EcT?Z#XC4y=u-%bjz~uUw>xze(2=;%P5qEG2;Ew`kGd# zvS{wtZ$BPcpRYgqJxlZXX6n}{+vuFsD8Z-w`T0I$^sgU3{n)ZTUVcBQWh!4*-7L$?XV_>+#D8W`+}+FX*N(z6!W+}g z9~!a->g(s*(wvu1zg`(2|MB)m&DX0bU<>x~^X>Kc$J@#Z|JH}^<4f7IdOWgz4GBo_ zd@vIQ`26lIR-)Ou_umCc2F%CLeEq)I+A;TB9A`Y*_)}}KCdh}V{fyBNzklB6!xV&} zJ)7k8i{Z4T=56lJN{^YXHUC_|WiM+Sv%!)4d<6#he))VcM~^WY0#%>=$Q)Vs`SGzD zYbVI@?ith736^w`%-8GJFXua=d6LiA%w~w!dbGk4^m@n0(b|zSU!SGd3j{yke}6uA zDQxxM@2~0g=c^smy*~Z2uU}qv>w^PEIrGH~yu9yhesEeg$&6fJz z>9eC=K6`#zR^ibFHWo^Vv$Eb^ze88w1TcipmtHy31`I8WC#DC}`~t78A$?^=UKgEN zMCvtT`+;6}A z+Eul1{rJkB9i2FjU(g2AFtWaWY?I@AyP4zu?&ccu*QY@2xTS7=7j+!_)sJ-XKRH0cRCvJR|S{Q_oLku{`T2}I$?m)!UL)oc5DNOn z?3QT^4yNq)*WyBP8LJX619}l#*}Ec-9mV%AyRhBFUI1{@5oY!R)S7!Z84QXsGQzL% zDJ0W{F8wwS88ZNJiQ87Rou4-6gkIYbj>f*3x0x7gv5!cCWygeBp8#vM_S}C#Ct;M! zP;M|)=Kp=&`0JNfmjPsrY_T&xEz9_cpD){i9K=3i2^N1bPGaJnK5qiM+ph|L76ZHr zkpqlya4b^%SdM--&%mD&k~%ZGT=!&}01g_z`<-^E+6$ z%J~5oF2!(MTzF45g^}JdqWmb}$Rdi)?BfrG+GTyWtQ+&azJL9^wBPA|mA}kpq5f`W zri}$#O)hT`PF|RHA;FaeyTp9GzW~nBO}e>e1K-6yZLguV`{9C@lyISpL)T~h6ySJx+Eyi`hAJZGXvtopNNNE5il=pv%4927LyJ3Abj>q zg|c^Y!Tn4A^cZ=t2!Mbjm@)!elc>qjGQ67R}_PURuy$F?7o zG>@-eB99eq^1r$xr`Io-pkrfN7A0qDXHY*tw&cJ=7Pjy^oW9}1^z)@3#_ju{>?;e} zz&gy2g=xR>HkJjBoK`VhGt6gc&;oa`s-NqZbs*@2J_Q95Th*3G5@Du9B~C|kGG3a_zvS&T;dW-w5Jjc`!d87@wPAyGa1bSi6!ji1!&an zR$j++k1Qd}(|#0&Gz4vgMKjZ6|5(W7F~J^M5wZ}OZ8&>B{ycH+wcQx?{W5?R){Q%~ z?9+O{ZQ>kRniykQ|FDI{xG!~U%|C8nc8tn5+t+}h`vr*v^(~Bl{oKHxmLsWV9l0z^ zwYJcPx_PRWCDUZarrX8jM$89r{-o$i0PPImNyPT`+bc^H5`atKA(9)>(rediok0nu z1RLARA~k+!S>PDVwaws1xL%+rIAoTtqJe!`uM%UH&)<}ybPu+AXGB;c@i#yIKnTVl z#2q$9wRXR3l3?hiHyG(11v9{tuPl2gWeM{e+Fe<~%{AdLWaTjC#~9H_dZAiz8#^JD z3h2j{Rn%l+CR|&fNa_!H@Y8&u|~FER!F!O5vE$)wk1={V}i+`_VqX>vm<8>D=wg zfW0qu`^t{CcW5iZP()4|aV9)J+n{9?IU9JQph?U<==PDK;i*lXgFU}LO;lc4@8ZQ( zDEG7kX!Hn~ zxe?1AUlN5Zfr^e`DbAR#tix<>N32{RKLK_|y)Tt)J4WW14d(mW(IX4xX=BtB91jQ) zfDF}Wf>APG|dID8Y0x7I6yg^F@}xr3#BKR4&~m?*t)Hb~B93w++=3 z$-q^z=q^RqtJ4h?Z_-;e<_4 zJ+`c3)?#ViZLwf80C?g0{#XJi@D~$war2c$%|pKgW*PWb{xPuJyVOg*Y#TI)Y*}2| zZx9kytP-19sw7vL3C4a;HznsT`oFSpfLjX08~ogq&so-!Q{8nGD+wi5R=pkAM7((O zYyD$^{bqM@`LN5*S0&WeGy)s8%=uFHi`9@Roln`=T+Ke(BiSma6Wk-zeZ!+GOB53N z1(HTt3|Ld~`HB{+rYvta7j$JY>6?V+S$`p$`7yfTRu7yR;5(k63QW)w(z2wbEYAK| zM7Wh_fUgRr-4(2+eX=iuzDp&N8KkC) zT9#ib1e{M*=I#XR{dRToc+Y-he*`u2abK7ud-A=zK2)jD! zXFtI~vuTO}#jfed(HO8NiQOvTvXa%>vY0;6!oJO7?UrID^lOx}*6oS>v8ugWk1V*S zEW<+hvMbJV`3#t2kJvh~}R#qH3rktI@>hTccL3JYG$3*w)$AyJ*&j=y zM&w$V&9&fcT~)*G%iKZwZT2bgs$N+3d7CR02k#@IEoJ~v5inM3k5Q^JYRNcH>lQ!8 zYDTZiT!jO)-J1D+$db?qg?fYM13*}(q!n5DA{^_GwXih^ zo@!+QuQ9uohFQ;2y4Q^9@t#Gb$!z)U#W`v}FOO1Vtg^-gBSzQ-6a8aUHy~6$J}(zN z-4N=`JyNB#bDEX4i!J6+yXnssVl2|G)A008k4pNRR z030oMetTr8`T&_~)w@}Vd_(m6$N_Bij*tZUok0LK@I|fL#U>06<1n&BEKLiyEQ!uG zLH$_4cTaZBS4Aki@5(CAam+}+4KQ{3wjbZHOaY;k29rG>mb2){tNVq+6m5)utzjGMh5Ir7Bia{L=?)euF^J)#mZ6?4>GJQ7+^s-*dzKJWdwWpth4ibKLX)j zVO8K5&iEmVAU&CWfj#DPzEtL^*YWOccplTVKlbH_6(9h@rnQptVK`4_;OxKdmxWDd zfufQm+aDvKgBV8BLNYH3?Q_*5OThQU4bh0?6r`CumEP0IPBw#j zA8o0?atLJDZ$-;*wCnADow#lEzMw~@KMKesHW6C|maB^AjBBwyao~|llLp)AV+oQX zts=EhZ13Jw-R+l%C+G{jM<%Aa;FRMLcv`)yhoqKS;>oI$R%EW}Hk@QM1!Yjqm zB&@DYvvvZueZq2eoGlR+x3#6}+&0L$C|lXyJ%iC>RHcoZoNmj>w_ECNN_zQcTh#;x ztqG0YQv+9)Jrch5jrk9NYSl9Ff+}O+R&?^;FAq3hZCJ;tgP z3%rVlQ@Fi9u7d&jNFC>q(pNc;moLuI>7;1N0UpuE*H(3JCnfHq&~+WN*(!o!WtEdU zVQ;@JZ;S`7=7WkD$^Z~jI2Sc`D^Jo1+1oEUp2mgU46@^NMwV4=DzaNE=X&VFeq`Mh za%{hNL*(S+$Az&0p?O4A%cbvQ1+JwrN0z|7=Aa(W+`~w3or3LVM})gZ=tilh=rSU;EpYyiai-e=eC`dJ}cu8Js`enD4*Y|u31K6WZVOAaN@u@NJ z5K|?V=Vj$KT}ah_2=1xCcbhrORX2KCSb1ATjH_RAUSgE9;m#PrAQ`gxvQ&AMt2};O zXEM|p?_(7i?QVrmZ*5}hJ>-&x6lHa3sAGb-ovtTu)2PdzQPjX0avt@imL>5kJuqLk zlbg2dA1geFlW@o%6-zT@#*NCH$-T1Jg|Nb?H#)PTZSKr!smu-nLQTWXd9^HAtVCFB zOq>mrb%Bz0Hhne=N}vTLOFKr>0aZ;$Bqu@AdE`le;eD*rZfoo+o11kC^4pYX-tJHe%oWLLx{07Or1Fy(bOr+Y>Pk*C=B%6Rc=|RT2r<^rkugD zAS&am2qMy$cMvLYrQ^0=EMev-FdxYci5KIB1Skk{Sy{OJ%fofQFhyCd&lAVdaInYb z-gT^k@TiS)dRch7{X#-zNqrp@4`xKtE7Osso1uNu2zmaI(XErKGhZm?)Cqp)-o9|Q z6gWk}_T?jN`-S{TELVqAf&>+msBYXJyG$VVwx8aNV$T<+6gCGIvl2T&c6R3Z^zn(3 z5l{E@U0KvV2^=hOXb=aN^mSZseRY6A zdK!L(W8Mv@Q2mlrX9lV&p>53RS8eP*Yts+`jOi3?KRO58=(ZmzUq^)ZvCQlN3@uA! z$}|{bH~Vb|X8mXj@%q#12sS;~NAXPqnU+_s-?Ux7jm&Nw-H*ELNY#jzAXLpcvVbo(=jcc+GuT68W&;{9 zvpU)b_Hg^-S->8!`m~;YRWbR+=tmZ_+Kk}Yp3M0(uu;0Q8%~19aoQvL%Hrb}!7~%6 z$o(?z(aIV{?|hxg>U`{ClZ)3*h-16L{=NBQvW=R+x-X#}bIW4eZ0D6F5{*QaLjTTXcCU-3T$pIDBJpBxJI9-) z*oEg8zB2Xz|4biqRP_Y&VG;3DynU`Nie?mP^sBgxh@jOb=HXJIsE(EB9wW{(j(6il zOu^`v^sN0Dj~c@SLGQpw$l?z3#|-7d>I&M@m0)7CBuTNrJ^j)Bg6tB4syoP3iXGFt zx98q&iwrFHM$cF8!622Nivh||1`rgbG_%{Xs`erfRn?O;ch>z<78Aii#p<^t;^>#N z4qW#vT%E*>>ef1r)^ymFW%{BPRz#BpCY9)nWra9pB}Oz>pz8_mI#y-ba4aC78zL@03qKpkMY^>Hn$DE8<`UAh(S(g_z^ zf4V8@6=`@>kHdmT&#x>>5~(OjFOYP9?6=ukU?W;hN5(_)3SGb2t6oHT;2h>I?i&*1 zQpeqJbk79Whr3_)U!SdMS(08E9N0ujTuNBrp{CbDadB?Ql4uWtkjr}lT=K?ibqk4P zeyF0}p4{87;-912tVk3TDuHNPpnJ{22o|Paa$Xmowk+Ng55LVad4b>=)#RBf5)B4W zAMc_4D+_ZO8_--wRjGBj6}-1!V(4{oP*6p|J70BRBUoak!|3ftH{m5ZP;Vb!%MDd* zx{pjwmyDc#39g?KRpuk=U}}K!rt@PO(SWo?^I3fq^VrxiEWo4H$2v)oj*o-x9V zb-LN}S@nuaBF72^+3L|+SIvwvnlAaWqvuyv&CqyLc!0+nosjf`u~rr%EAW^PD;;YD z+I!pnO1ip=S>t{au!jQ0mk3VeV)By{brL*t_;utbqH~xr%laxMxMLJ};joU`IAb)m zmzwNd!mK7OP!-{kqhPOYz}P5AAxzukmZejPO$0}M@ z6^{jG;%5X4kJ+`zNST>?utyRnTIqQ+%vV(@J;r^tG%i z@(Y9YB|ePOj7q*m{RHjmZJVN-!U_c|Q`DYfro1!ntL7oeq26F@%| z9v9=agQDeG@P(txBHS_yJ)1qox=AG}T_lU*%AhK)c=}Q?_Gi;Haxq=0tDJw~K4j5WLUn+g!Ow3w^N@@?LiHn4sG)ZalWW-5Q}5d#*ZQ zmlaWz6oZ-v>RDrISt@9x7G{hB_e?Iq*dYA2IuN?0i%cP_a$2t}L{s=}!FQZvEe|HJ zU0G%Qc5;y_x7RI8aCPquJSyWPPI8Y$q6EWSdF244;C~0fcZ@bkno2+p{+N!)XGj*u zV;$++M`T7X`t28@DZgBIv4t#Sh(T3}d~icTy60Szn)xhZhNFXSt(_`f@k(cg|4lqvDDvJXYv(!ALDSZ)Y;kZ(A0YAgY5a)r9#SS;}An zjMy;tTd7-r*iY{{rk2Hxcihp<*c;k9Z$r0DF?1_c?O60Y8X^OKaLtiL=arMsr?fFS zBMT>YPxAJUonJ({KfYAtU}u>x&Zz@1jmK&VXeM==F=B79R{L1CuYt{Z8S~vd<^$)j zUz=1Fh0xtuby^KijI#iH6!Xk}tPJ(to@b13kJ{mA7L=@K#{OK$*@#L}TNI1Qc|Fj7 z%M!sT^fm?eZ3cf6RbWqLGq+X0mp7^OzRg{&N7e!CVeLxaqN1cOifSh5SP>d^35kAW z&DvdFS>~%jWC}=`mtzMgG$-acSQ_(dfgFlAf;PFsmYxR+1FQ zhh15$U69#|Q@H&R&03*w_EGG#*thO&%X_VrPFI1zzKwGThlm92+rlnLvfpC91b7!- zbiWwgM1HbZ4A_VUUMa~wvQOV3Y3QNwvE?|I@Z$Vu53s~*q#O_FCSYuG0?y0deC?F>T>hcX) zpCjtOI&$8wl+F|E;ahiQWdF0SgBf@_XUN4%rpy#5J%Ahc5qeun86c>-g>7Y|v!01< zLy2uO2(c_N&uQ1}I#R_5>QMbfBGhktz66u0oUB<^%^0tu!TFMCI`^Yp@PvKcx`;2@ zw^1-_Iq@Ww+S^tc>#bz0TiT>gqF-e>cbW0LVf@%GL0+^1#^L0vcDh%l$EX4>u0fTv zk+fOAT?!VPhGups-wISWi6y^kfVSX_qG~TTkgfCWU8!+@4C_WbB};|+sAue zSs-K=$)C3sPcUyI+SbLd&W~NZ$xJK?VpaRpK+Cc_pDy2FggXh{q8Y-zq`n`md0!rO zAIl$}FP(LS+>Cm52{3Ej;<55)qi)C_XeC+&#bI;c9zpT!UXmfy(FyiPY&r&>Am`Oq zG(Eq^P`Y0<8{ROTXO~ENvFZC`dj?IstuWG>4bJbW<`nxQt_xXpIR2QCqq>!W4ZErk zh#h%|u9W;OwrIVt`;P;gpdJ~HeY+s$ZW=p;<=ECr(w`x>tfD%?LRG=YVoZC2Vb~wT zNF4ddQjq&}_5oR)ff?P)c!+yc-!wl4Ud_lpVgcGYbicstecbzZbWHM8IzJAwZhS#n;z)$bS&9kvT6Y|Ws!_=qTP!X4&^>vTeUmYy$R8hf{& zQj!$9T8CN#ycGbAe#vWIP}H*6C*<15szgde=X_}{g%RF_Py;M@s#p2SGM#Hxs2XUq zyF_DT<-r~ZYg=uZd*ZBRfl%qz@uyu(&^iHJWEfH>)B`m#Id@sFEF%moS4JfKwnIEw zp(JgWwRd%vrfuJqr2-`=E%uG0n(34D;$HVrzATs!9@2Mzpen zB)EvWu)1ZbkmzJdFC5H$m-&nlMC$6`+gi|MZDG|SHbZk|c{k`WZAsHXNX*~%i=&Bv zT8MIw_+MFd)N9la6vMiYm*24ufDPJiR?X4+T3(o+KE3XKf%EX}eA!+VaPOlMhr}kPBPbb{I$vI?byb>y z4S)RDI!UjMXaTWRoAt62uPo`u9R=K6A>)Xa6}`6D9p?NQwS(0Hi4ugBorXBvm>iiHP9JuhaK5gX}_l&7*`X6 zk~2+Ti--)3k>oSRolPTrve7b|*EXIR0c{fD7x*^5pmys z8BZCIfVsMfsxu*?IG$(w#iZmFLUmnE06}zoLSeS=>6948=80z#^sSw!gI!NlQHA!q z6iRt+GVb)NW~(c1dcN>8&AGRyk@UiW%@~=@44G+H7E;wRwmw~1c&M1pQu|oPW3pH8 zg`&w>@w>Lo&X>CwQXBa!!Tt1$Tk+|AR4o^?DPq16VfTyYeLB&O#)~5dL#)*z!6F%CKvx?F;tyUh=ex&zP)F!jN;9#vjWv_ z@l%gcq^_i7zg*l|KB5VB`V2BFiy^Fwx2~*H&a<)}f&T>~?Cb`ze8rQBa1O9b{kCPv z1Vrqv3{C0X?jcF9p*mD0*|q?(VLV7&d}JRNtLQ_x zUahBJLd&X8nYZh>^3DjCB@(MuKVRZFgt_|&>Rux0$kI(~H6|SFkvtjyXiF3gLsnxG z9-iHuM>fMK>#=1CL!zR@fP@{R=t#`WmD7m4F4Nv+`&L(dR?p6JnM$yy?(&{5OFx=~ zeMCSk*TF{6ndp}!P1kMrC}75}^1hD{>IT@7UfAmyBYq1M-hN4)S5?U4%f(A}*;Vhy z`tBlj^J86ihlx?{DX}wOV9-+mK=E!7_)Cp6pl{K&wZpCgIf~6@?paZzocTIAn_X6X zLNO=P>pCVEc%rHv8_jmVWML9d$mmF(&ySU2WWZ>{fxp{|KWx6MWucL-FF7s`6&a+S z;8IL8%gPJYvEh|fl>5=XmL-5WQt#MTr8iWns8IbhKVhftvHs_8}DNj@)h|TdV@#Avb zt6y~zDJrL=x1Y`;xoF^tgAvHZj;s9a+MJX74${DJe=qEO37#Uqt;Xoq1N5drn`EqD z|8=#%ZMA)yaPD=qCobk}c!taf2vsL}pJ319ko9?){;>bsFA(zPmAkpPvz;LE;M1R| zvULM(u;(3`-nj?2y4JJ1%_wJ~Hp42An^k7b?qRL-VLRyFw$NiNqmyJ%#Yd|mDEF?2 z=r5h~dTUg~u}>Hiqb$;$FVm%Mz*KKPZF<6aZ7w@r(+bUt;)_BMv0s{tD=5y?6oz)AatuIZnWwG2TbC z(~;GW7#T`ZKQ5h6r0u5%$ec0q3{oEZDH}UZX!G%+nr$_;nYZH8`^@m|7emmNpg&cP z=!Ek3@o|qxKNejP0PAq-+b;--ftoK@@}n7u^JD%{kX);P5F-UbgU47wcZCS;OY_bHnpsFhxry2K8AcgOR(cMjR ze>428_ioqB>ul+D7KU00Nbu1wNiW(tstfi|ukerXD=WQk*O|qcdo){_tZ6mCJSh&@ zUXR!P!s?}Sb;+B!Wq(|MUT42VMY49ds>7aePLbQQaL_BlVr79j(8!2}Q@ZT^%ojt+ zlZ3r5E+`ygB?Tk1UemSO=d7||?F*e|e0;&aD{glew# z_6rA1G}I zi2%sNGmhH|lXr!9_Y3#>bopVO%isOTW_RS;8xV7QfnWnH3B|@DS60Oi+YvU2`I|2T z8;RwZz6=J$A#6dt+_F$IxVZgssrIfE4Y*%!z*TAG_%LEF_mJ`>d7PDH#{~gRU4;7E zYG(&15(MA#RoyQKVudmDwslFCnBa@xPrn4YK*YXWh9SmS*I;b%1;WMjuIeJE)5tJ& ziS%mgc0J+kSB00+uR2$^21`z>5ks#dZt;@Y)y-r4Pv~&*gqXR>#zqX19e5X`xR1qQ zl?m!c__LGt{b(vX_Pny{PdBve^Qps&*E;swRj6?S?EA>y9h=jSCn~A=y0X;E1sJgq z7WOnB(N$8?S+4WQ(uvmROK3K5WMzS4orgJ}0&{?bQjz;e>sJ=XdXGAHE11`Hd=H#s z41pLVp&Qz@mj?@_u!+8p^+%^>p^!hc;Ar1jN4N)DG`h;7*v>~~YEaTtFz0Lo+woo| z(4x6CySKj7vZ{<|Lqf18Nn-#DcG)i}8j2IfVt)4Q^txs7I)L^a zB-V|ACrMcx)f#2&&(jU7Ku}zyC|nfp%zS}8Rk<-^w4drQ>Z2n}j*qQ>R3(%S5vs{# zxRmoPm+n0z*O@#M6r|{3MAMfjV6yw_@aeYJ!JIRjSC&1LKQ7?77K#D4^7CUPfeZTf z5%5bqp)r%=f|O7KIv~RsKQ{MaDe2;^;O%}@(jf?(x>Y0|9o14!Hyx>bb;vRSeKF?) z=M-++#AW4VY`K-CWOqX?VJ&;MdQWxX==d_=vJf5j@0`=hl4(ky3_|u{$p_BS z%>Z0gHydWQs+r<~G+6|vxu%Z^TN&lmrfD6+~pHij|NEZ8c606A+rZ9jy6iEdey z2}tOo93{F5aN3j85#&z(b&tBfH?gnDjEF}k@r}_DyCBdkCg_rSWktXqgiYX81Wey~ z*4{zB%u-HA5Vx83L*D1rn{3LhT<(UId>oM8e^kO`8#iXJmvBngq%KWa*yP-}4G*dAk<&M3H-^tz?k zXLgyWu$0zCo!YL9*}7-$T9%|2!#nd;{C!vzil4R+YuV)|y-<}WZi4H|0${^bg1X9@ zS9Af;U74DWHUE}D65|-CD@(c~m|bT>vbMm>YF|clRaysPm-D(LUdv(_bETB9MT`vg z(7)aJRfiB32}f`@$(7~UNsK}w<(i~3_riM2`S#1cj~S3P_L- zIk@KH92-06MCwF^M!)PCC@3Bo;Z+(N%{Qyj=aA=J+rabCXF|7XKNk0$WIQu(Fu+kcFSm3jhGhOH{Tj zGms>L<9bfYSYvRr<3 z>xhoC0Q7Rzl|*uw`(sP4@M7WwVb8-eM0?r%P9~EJ1Pmp;j5JK*lgGFiF-9)=ekRqF>Z_WeGon&nX@~ zlz@$PsB!v*>A*$CBls0#1W&UDsjg%UOpc0u0yd?&I|Fr!qL-rkg;5aJ?Wf#hkeI31 zi`@p2UaZc(%z1>pXZ~ffLKb%!%x+c8uj8o#k|&%a42iQfB53^{17BB8Wenp~MN~w9 zJxGPM;2_b{7-?qK79c*JVGr_b=U()a(IxibQfob53jZ@Ws1tdM`~(J-(=b7eCpd=& zsQm~$bVT^TIgeYWx>*fnazkw4z3uRTky9>L-Rzgy995F_c>2XD-TKvTu49{7>%+wb z;KGSEpzoL2#jZ1s~KeA!)BW+wVqr#57rw02YxElS! z6zRzr2CzrSGxp2)b$qq~*aPXEL3F<=*Sk2{NiX|%MML008pCE%2hqynJlFbEmCZ~+ zu_`gfVsqBsLqY7ubkkP>(D1cF&3k{^vC+yJ^Q!ntqsFG8K@k1p!>}qE>O8jIi=E^N zx7k(?vr*tTe$4*3vv6LnO8=~bsk--Y2O{X~i0yR|*6Fok)!AQ7BkHlH+w|M{u>W6kl|{v1K89xWs8@a`If0v}oSV zAmw!rk)1Drg+jF*BO{TQYud`!<@MW~`dT+9yUgA$g*f6~wsZR>V;xuyGnpAiE5Rd9 zujP$1Wl>dp>9++EBF252zQrycH|7I3h|<9xoRqd1Qik{ zfM?Gx`tLC^LS3rSI#HF@>ub@Yo>!ACL~hTzs4aMMCfcg+GGiNaj7JN`@yKG;iJ=)I z&Fmb`)m7#yw}sb}L1mK@pu!7Jd8@js;w)>A5ogRL&ZlgOOi@>Deqs}DIl?wyy*GPb zS$Mesf@+R3?~ZDWzZX!I8OiSJ)Ke{4-MA6+b;>KEn?*Fu+}r1}U^QP231pL$o7dy% zSJhthjaA)D`#`LDyAISw=}%pAcW8lrnZ53~?8>S$P^Va>n~}!%dc#sTiMZPABU&P} z&x-WRb-!2C)Tpl%XDy3O!sG3aQ6U>(gFSisoM?wx*$H7_E+q%;xFlm1Q==r`d2qk;jj%sx;U18l%jl$0MS$eb|x3N@$G-eW}T3OIW*j0;|bsb6zGXIF$AZ_Q1b-$$tN3@79%MB$u z(+|}_%dBTYJ?7k3)j}{3sIeqn3I;x*Aj#d;37QNs?9vpI7NwrjjS&9~8I^bw9H-Y} zHmQVa?fI%i)S~XX{OXps_S^7PfL-tAAt==ow+idZDu#I{oBh(&>4+6RqD%+UN8Qprkx0SrUB z^CdJD^X%JZJ6INK&5v&@YabZXBC9YDSrX~X62k{oj<`R@zOG@wKI0#DjEc~17}E2l zWI4`@azfX4G`y&DzY$C+HMqrNXEp_wrhEHEyAqSL|9Psq$~D(y3!t%Mt8P`^l^Czq;Y>%in{~Ekt*#*WCa}9-$gc!%l3vXC{8-W}uEItBn9gWrI8!I2PVnse zW3)ghL7kQf^2|x+rF$24%he(i#c(!`zBmV3?XzzEwzNFiBg-=0s+m$w-&MA-UlP>zwIWv* zrb7Z`e$1K54eTSOI1aJD1SrQJoIvK>y5p8*1jW+$@x?hXst~F# zh;F;eP{PrpL6s;D;?fp^w`OISvb+kHDuVO7AK{*44Zxl{o;%&d0-!nf5!JETZ>~TP zc+AFGM-a;4!T2$Yy6)J^h**-N#CmuPhGlCLyjYvH32IAcS`vb*u7-xR#PBBzk7E zK;TpT1a|-G+cDvo*(b)PN_c0LIee!Ox7U^Z?<`>V3qnZFUDVGd&Y9B2ii!3i>21hjhFAE#xyzcpzD~m%6U{hD}KEWQf7%Pi2u<1s0CE9XGzeaJoD6(`jI<*R~AeeRSi{s8TP&or7Ze)oYtP%RfdZ>`szo^ zG9j`7(=S%`sn*9bZmyi6vmsaAY?!W!e8{4U;XBGHMRo*EMnTV)Fh307K2qiGNB2tz z+;xz>6rf~e2-U&aGaHpsTyZdNw3Q!9gC!siP$SO5O_jBT_|ZfLiZ^CKH8pv z$qxY-twO2rX}a~anRWW9*1G&>e5p|OZa6SUEWh)`>P8k-Rig}dz1;vpP~7Jz`jO}8 z!i0WQfvS4AUOwwsiKvbhx*3S>gkwL7cc9V{ZF@CL?ABA=RO@zS+4+t4yV)LS!_bf7 zpSWbOI@RY`yOsUNZjUVf4VO0C73@K%#v>!UR+lKyW#)^^g10t?p_uH~C;7<_MKhAq)^6*cq+%tm&}i`yg~W#VEo^%BixhK7M!+C zGD<+V;PCxY(erDOEQ@-9Gvw}98Qs+&#BQ+)(~-KvIjAC<4C`zwqnrF!>1vFTkH0C5 z+BB3)f@6Mcg)t5@n~Vr2wR4X(QTI1XV?sp1@wO31G+wp&U957pC(gjWscyE-sp7-< zGKTM_9nRa_U#57#W@zm(#^SC)u$9F%+%fl$y}XdKtbHz!L>#Bl0qpw?Lw0DNN75JjtPD z>WQw=^yy{=ZDCjIxL(s0R~FY2o>?c8VkoB-_P*|D*(54#s=9n*1^R)Im|Y^^dEzIk z7CrEnO6r_12KpB2b-%dBryHV08oPT15>*H}W2^$_py}iwZcSUu!q)Ta`!=Q{bhWN8 z3^*p~B>>o$k!3xbR~C;KD^(X=L`gW(iE-Q?^E_*j5Z|=*^rK}-L9mYVHZuSIiHV~V z@+=oc_G4w&c866ZdY&QHEh@FLn6rqtCA}E9ZDmKIo5CT4MYZ03!5&-pSha^)AI(SQ z>7vTNhOXK$_lSSXk`xs4%$H497PfQgPd5^ZhT=G66$iAXyt0mwURjng_#9)(ni}@3 zi!ClT0T5br%R;wi3?qfD@Nq9)1$lMEF4nQGgzE^pWpOi^$uoo`#;d+7KxKu@5nW>3pZNRQ zQDIeB%FZ?Q>|&YJC(aDuh&!iqThT~Q+>l8KdtZd<0h(aodAnZq0q7Ml_ zaE@g=vb$MHCAXy`{m3**;_qYCb<`?%tJG1m`wyJsUW_xH-7Iu(2DKlHU*79awkpsOul`AWs;Rmu4nL{p<>QK9ddhfSjW- z3@{Y5FIQ?F!9c_c=AF;qQ6SCZ)Yw*foOMGInU|>SegR{2Wst% zokG+lT{Vc7rI5H!|MeDQpt0_cF@gt$-}aI1TbRhJJmQ}#tImMV1i{6KleL9%;ZcRf zP>QtnOJ!kNV_KFpXnF^fD0X8yB7L2Hn~Q=9wzYQWdAVg(?N|iZSj)tiGINn81^UeP z_FBLr*5By4|nhetKPxP88)HW)`=>sPB)fSMR^4R0P;WCvAIj^R1c+jq zYHeBaulF81D!J393FIdtH~ehRxB- zWGc&!#E(sneK23D3n-#rEc7i7?lD4R_b#?G_eJL~VP7ROaki$CUNJ5MioWiaKf2)pQq|Shv16s^JE})akW; ztYd~zy(8P$>_xXKB& zRj?;7N5S^s31&-yJ;;kOXEcxMuC7+DH(;Y(Kp$t-!5%X(DuVo>ZR1&ZbR_cW$C>*I z=@N|a1zGq4sBk?Gg(@B-%0|H+(|gdym1R)T5sV(gIzI+IEc-s1?KO5_kMz;*ZHS5i zTOmBorC zOU!KYdDBfLMS-Jhz~Yu|wURx3-7mK~Ct>eA`@I_ESWbP+D_!IpgH1Gb0RH)K%W~YE zC7n-IVPif*auInIWe`w>8eeC6Wz|W{m4#L6z^o_e)N#!AB*&O{Wpu-a-T6Y3sA!#j zc}m`dkHUg(YaKa=4+H3L+Tj^#A8>oJ-vmmRGv0rc)| zOf?(69WkWj(!kGqWc|tl5cZe_oJS{iMj+uZGWMd_VN7GC%Wi3G%K|Wi+b(Cy%S|^? z@L}ClwAstsO)304h%1Zr&yFyCk=?c5&>btfGOjxzjMrrVTh<9Lqgj$P!Xs(BoG(@v zOFW|GygH$A_oD<5o4?I<{$-VbNq_n~8K~>%HG_T2xNpBW?!*&Sow%Zz?8qxrtoZ~l zK((}A(p0p0`c*X3)|^&(PMiuZ;F6S|b)~%Z+wK>ie|e`1gRJ|iuF}_Asn@M@S_6zed`k>+eL3 z)2abIomsS33ELlocAKM6uv8(>wo(>b&S!`|OVJyBpjbLfe;@JUhe7Q} z9A_W$xsN=@>Bq%6b<8zNf$a2KK3#)CyVa-WOX4BUWFOIAoqRj}60tnxhw9+cn#Q`I zs{i8ZnS04cSDDU!1bg%=e67j@F!C`YPK)xrGxrsvh%~nKX*R(g#%=8?T=KyCH7H<0 zXg^CK>4naoEmbGEf-mF@i&L&I^%%=NZqRZ<&jsOC2o%m0MpB`=gQ(PQ=smO`7TYfu z_Z=N!2;(+eY)zS&88UZx594;fSiY#KVF&7FvVFUbQS5xx-3-a+)CKo}<>V%lhGOjU zAb=0skPp$7IS2Lj5i8uR-RYOm3TBv&ocRe4SiyMMRp6rYqP;zj6<9Y0U)nTIu$8FxIP3MEe!8@Bem0yB4Z)rx$IQ^NwZhYPSqCdRvOaUX3OCjd~%4{p6 zvU<<4=ts;~5vIY*VVJ@0`LT#N&y*?eddg~5_IquPaIvxh`(s!y>L+0TtPtmyuX8=- zUqa$;-X5b|C6Z=knS`+Sb;nc?5@iVk87m24((AV^3u%`Sfq4%L1@?%J#)^oY*pyWf zmpb1Hk}C^EA6y#kq6X7VR7QkH{BmjBwo18nrCG}YCi+ZE>x3I3BC507glRhi_IY0L zRfs9`Lv^WaxX(Jd8}X2kBx(y(L6%>ielf{R)XrBK)`)l*!@R%>9u;uUkI`~T6)_Y~ zTrDm)Av;1w#I!%IzgW0)uknZ70ixwL^nOBov4cW zs7n+7WpKa_ut_7j40uqawEQLodmSq;71N2F2Fmxxh>xu|@m;L>&OjYK&3-8-k3U=h z2G!jlE32-3h{rm?xE8#Q6nBJk`-M|jUu)G2qTX&KL)RqN=Mf7o&YefD;2!ikvc!%m zLu)Pi$5qvRT+4lgj04z+yja6|xk%zOeGfiI;I?2FLgy<6ud?6zF?vrw6us>uA5U9} zzIdXn#!fa>R4FtIXSNVcqv!&GCx%8vylh;^g1c9Pz#av@GrK|s25XkJP6;@wQ$KD{ z1l&I19FSml2|WeN@10CETW8Sc1rJ*J+r%%81iW?NbrXQ0y3~z|AY4e#sWy zQjPn_)x?+V^zc$t;NHd1>nL58rP%DMT9@f2ZYPVh#QCW5Z54=RJrk3XUS8N?t@dq- z9SDK*NYbDbH*JnsHM5oMY+T2R$>6A?BbGdXGL!U_M`lNIzM%b%^jlXE;q1nA)2`t_ z_fc6)>KBD$DYn@O;`JRygz4VBEic@T`F@FoZ@bWQ@AbYz?>6ITLK_XS|Ey=XiuiJ& z5DtCV=!xtK#ercqCBa89BoB6Z?XP0a2e$~;D_1j9W zuotte6P;l-~bYgzP*OVZrxtXq62wK1r@|b zt>_A5RgW#2)`c;29F~FN0gbP{GWmjhB z7ipe(g$lkK3isUCUtZoArV@8ITsmW9Mk9&?dqgQK8q8sK>%&);Ux!Xq%o4LJjocNN zt!{8#L~+=f#|f7!i+k8Ot>!j}UdfSyf-__V56QGC&Jl=gzbc+yqs+J3o~ux3H&e8- z@a93Si65WNHPzXpwdew=s%qOGE7nX(rf#p@b+n=GZA3jrI51rv+~T0!$in?3wWc58 z98LjOck{{u?jq1A0zWYmtQ%&-US{FBJyP{<=QJH^aR^W?yyUP9ouhzlLwYoyl ziq7lhD@$@Da5P^DC#|fy$#nN4{OZ=vZDke`-xp|HXMz3k@@^V2NTNn8xsxa(OU~;l zH^-(ZgV<)?VO^YBAC%2@q$+G83~`al<=A_Sbs9O$t^nsLC00>Nbi__yT0k#L3927g zR{6ADnz~9Qwx=}1a}Lbxk7zotrnGwfz&Yh=Yl1Ees(j-ti&=9^d-4kN{?3AeibqaylT(D=(AnLJ3RBK2#*CI#G^G{1w#H5Car$- z7!j(0qm4+nM_26uH#e*-peKq-`PuqsWtF*GOm6ZR^quUw$01fmgc5gufIZHwp84s1 zRf%q*BG7J21i>EF7(1J6aPX_394oRut>!icRoFjkF*xFD363jaQxJELh0+N@%FY+X zq%`y8nyx(NRD|CG!3quXRItk?Zd#`IP!+l?XC-Rm5BJLz@MJ5Dxq!54B5(QJl~ugc z8s$3p9QI4nfv=fC6`>m8(YeK7*HP#xD4vA_ebu&%64=R{{3xd`*ZsdMnlASYbib6t z91p=I3E=r?a2$X~sXSg|Z3A+WBJPftOk3 zDnwYrNj<37*{!!<3Ln>f797nDSg}^f!qR0b*k-B@ z3Ec|Jb{*xj?Z_F$VY=f{HaGA+^Pf5aJzNCZ{o;hO+Z8Q^=wfQa77C!nlk;KIll2ow zC+=})w=N(Li!QK0Kkkp~&q?pfNJ-q#;r6SFIoB}23s!D_%p=AQll00sjTaKv)yqeg zq}M&u-_S)myX)mH>_NyMxZjU;(f-*q_mS5>4)F3hvbAAG`20tD^1utMaHt5_Bj+_^ z1bZqln|`VFN#>3Drpsf$L}~oaEGtE|cV|NAwJo!ITha^Ci?@Z$JK5MC0rz&qbco&` zv&m5iOHS*VFC3?8f>|j^FK8nk=@C5aXBy)lxJAL9x0#g*YU3L zcq&v^76%X!qTQMmC6>jP#{?C3NLy!&fb@-^dyM8bA~6b3Rj2cIY4R2mR8EFkY^zml zOL=7(^g1y-he6I#uo@1~&SXn^ncUqZbn`~zM;7bEGslnl+MR4h)-i!-t+e|hgt`hi zd0zxz())av`ryYXY;&|hJaSoKHo!s#tX}SZ8AH^PF)?+-ePvaB@NQ362uA%qFzXa& z*e{`H_N(xF1dLW9Qx;<0ER_PbBoek?QoCKp*S^DT0a<2Sg;c?g!8Q5ETWtwiv$Bu` zc`Lo7Oq^M)v`XeE$`S_flg%)lA*&90?Tp}&lCyHFbCl2FUK!HSdy1=w;7{@=bKdRien;v(N^>g-+gf+rB=F48r94m?{2c@=&)tN8R#W>u+Jw8f_yI+!CLhgN= z`QKcCS|35o>OI;m*ReK1;%JsLucs)mwpN%U21a(ipyqpl=vgQ#VHnkq?w2AM6vXt) zQ4)3}9=#r|b+g#cJv4d&)|FLyzH?v6$*=_2`g=3M>4?}sV7p&puzQuSEZ`(8lr$Am zdEYKJd*`e6L0wuEJBBtIaaJf*m2E_ELIWUt`z4@31<#=Ba8Ya;NiUt* z)-oGAn{|a=a_$0V@%g@OQDgUVTDdZ?+0)gCHRdC_$5Z4UB@*Y%>Z)9>Tg=R?26KjjqxzpW2uY?x`x%#~7uDD8URF z?2%TU`QoKjkj&&#WD6Iv0GX$=TNS%cXv(dWJDo4t$s*Z(R9zBvk8lsGv;A_;tLd?( zit6Q!VZcDa>UPtHGRzWv<{tZ_uxMw5I-&LE%lH~ta38A{ac7e&z85C6EaBm;aXz53 zas|5|D@eIF0d{L8wD-fJ6t|&lzku>cB-q*%Y*(r(+=7U!bJ1&a7}5G8dMgXt8qfvZ zgX!Ku8537CW2~$FVw2R3pLrHZaxFRJD!-5YD4Y&14ea6K=1a0aP(WY+`5trh_%aa4 zii`$TLNQ}e6Xhfof&w;IPH~H4p4PgQKJ>nlUU`(aAY}{+>x2c}AJ<>! zUhQM<0oH2mG1iHxaQY0?Q#B8R9?rE&SHdw@{y(^FZFPs^e3_BBrLv7aDx}$!5g=YA z=vJqXqaL6R={&vdV#OudtI9U-pAhk-SC{j;BukI+B>cBuRJBj`UV4XbNH7BI$MiW* z%kJ)c)h#x`Kos#2h?FBjn$8UHC1H_}KOpB>neJEF@O1~m_^0ql#2BR+Tx;bNN3_5! z&kx~L>a4^z^WtF%IHk<+i;fa)!25o@V`RP@5?Wap!u6(9!2XSnRO!^}Y86;Eyy!6s zdy$nZOa3wR-XW<>xhjDOr-g6e(_(Lz6$!&2Qs{F{y^bd%EtRQ5i0ypgvU!&oV+A0*dGpX41+C$#9Ptee4ObAd!V(| zi30G>4bPXYT5!m9!2L4LH7G2ARbSC?GI+NAs@=QPH`v3Tjp`!SP%z{102eh!ql~r; zb9GwJI?}deJ;5H4#3(2B$Dy+Ah#i*m#iQNb+OjJDvm76K8K<>F7J9nlWoDpY;YM-J zw_~AVzKZD$*r;AGLT0eXjO>unni2C=DvmSW`KoR%30fE%;+l>K0Bw_fEIN9puL{qy zt^>Zp_dnhS&TOg~qv?63ccglEj3%cJl}*2xE42D7joA}GhG@i51R6S(6{*5hl=I4} z!n_?LjgS=EEya@vMyJr=LJCkSfH6GA8hwDSJA zLb2^vWhlC}$7mDebP5JUU-M(xM(AxH>(5GUuNm1VUt4L0m;yE=yUAzurT*>WcqLnZ zMLP!2=&buyhBReyR54$bum~3?63v1*(PhSub-*QSkT}4^0QPQP>B3FrVI!#UDfer8 zW`RlZ`D@VuhO7s$bBn~oDvs;l*v>w|A~wpczLSN;gwo-dmTBJq{r0#r2T>}E>qdq zq>86k-AotnQWJ7zv0s5#dGWZMj#DbfHPfeCdE~RINP8)+EbcV|jlx$;S5(UD-cHp0 zs=qccRzyDEgwzgu;2c&XSQb&PNqKaHJ}JbM*Wg>XUox2yLfeZ>_!unAMy0A|`fND(e;-X>`>^g81&L6i zKoRwvx3LJ%CC+sUeOp1uo}ZS*G~T*}Gb8Lq)_~V75u5$C#7~7(@cr#a%fjZwfk!)^ zmEAE?-HRB`m+0zE2=$}cj2vs#(mmZ@h;j%FK)KS2Xyg(fW3;j9&zZi{FSrN6I@1aE zNP_LAVHor8Tr)^{vcA+OYaT$PbQXLCygOgkhyvV49&ypEC4NA=?w4Lr(0v<|7OYei zEd*v#0EaQ0mrLsduR^1R6t@}v+J!5C86|I`NxOG@jTez6tlxIO5VvWt>WI{CKybZ? z&G{0Z!3#pK(Fyv&0q%SuKKx0J70uygZmx=_!*@UkEbF{~~z zvXdc8#TN2t`vnAnxBGU1lX#>8;VcwNh0U=l4@=qe#h&HgD6zq^R7x3N98iFQEZj~X z)qJ}5j$Y?oDTpI$HQi*s6B)zvxfBxqHy_mfs>^J{z++pVl1qm|9nm5}wsIeV@Ls5v zB~;J4T2*V87OvfEM32l=KS~>iPm}Y?J2nKlRY13&!j!}|;C8Z4%S z3i2#c-9)g_6G^6Ej30cd>S$M4IDOB_U0HTX>^Sy2F9fJKHt>pjhE6**Vyl~slR zyGu+-(!j;`#|<2n6Wj3nfS}}%sl6~|zU)4xC*D!p*DNF&_w!^MFiVK^(p@!}fevGTKPqbsCSc{PKQsj`puv8t~2$CWtVO(G^S`Oz;}H?pWiLCU*Q zOj3j)?2)3~olWXzj_SibMv5MVj@B?aWU%LH`usN148;OxjhoMMwY!crJ!|h-4V_;5 z#o;|2&Jsx^zK7<4s>cNBW2K?@QKleDcI8SgusQZi_0m0`aK=cv{C*~=IH@c(kYLO` zq{}gVCeK3d+)H{<-&r^?h%J~sBo2ML$E~hs3U5$<8LKUL_sez@TFjv87Mn1BmR#a= zTTeO4K31K_>K7G3YV8*2 z>?vQetyTOQ^Hqb0g>w!yHVt@HOx^sr3b=wBQY>)Go4Q|saDZ?KvwFTiuD|B78pD2N z(gub8UUrlHPkayT_r-R19ThBPtRO^;(6o|X`C}%<-*K64+5?tm=Swd9o;y4p z;Y($C_U*E(J4Q(_M8LK}2)T}@AZ+(GwvcVyw-uBGwN|OS*xL|+*dhAGUWFy7fF^>2 zD%*=zxG!1ss))!~v@U^*parv?G+kBWhjN+@=5Bgj$L7+0l`jb_SEpx|lEJI7qdNnv zhFErG6&BesO8Px&-fHeEEgBjm;w|NU{21)1t8(|T3XxAY&)zOJF$+xWAedp_KJaWF zWfw1@dOpl9T-@BUJVk&F_9P?7*2}Suib#6-(wKh$y$pPPsby70X9IsEivVe67wi%0 z?-(U0?!~63U*J0J4OtZj@0aUD!p0qd3pRgjVG%{)m~ElQv7PQ$S=9~gCA}&QF%x8m zWes?xj{+ug)c4|xmc`FUtEB1PAj@nhU)cVKT%i;2{PUe0#pp#x2 zcZ{cae^z%N8{*ovO0DI9LewuZ@7nzx?iHW%V8b+1qfd_+mAL} z#4tsh1P0(q*{BlTvY3qw<0^6wdtWD{b~dfK*`B4~v+Ev+kR>-9W>;dszL-%sDtT`U zJKYqQy!k})>raeXC+2fT@DsGo#NCNbjx)=BCji}h~N0JxNbwODz3v38ZUMW#zB^lNh;@RrjpXsK;M$GO$Rst<_!ql3fZ9aG6>?6Yw?1i{L zXkZ?liC+7K*fs|{Ulnz%%>jFq;_b2mD#7m4Q+bEAtJoi&dl#-8%UUSisPcj7W+hx> z5R%{G-fHdns$108e$h;3cW0!o#tKMK-Z6HCi0_HVw88T9Ulq2*knvd{`}C_^ON0)< z8A!VQDw7^N4)kF0_s0UrfYsROsK+z{0O721kCDyJlM?LvO<|l3X!~9!sUK~z2;1y~ zi@~ofFNbE=@$CSW)EI#{-7HohK)3wP{hO9o7NTk0I=Ux|IXxm{S69m$1RQg|{U(!I z7VnUJG^&h|pN^;%pmFhtpWkjGhWc*5s}ohavS*R%#90*hQcMc7MuyK%{@&fS*94t@ zRndZ|`SIma3DN#M;!iU_ROz5iD^pv}I#=tPO!&0>FEgd;#>Dil^ow-Q_f4= zvHMZ>Q9wCH86wEMLWR$=b<<70)JpARB>|&ftd+HzW+6_*e3e^@t1akxme51{bs0nb zw#Qg0>otD%HE=vDrPhaK7@gpyWi)mM5Xd*P(y}Ua2*Aam0btY3>d9&!2vl>jt#xtK z+6jPN>wX!FfOMa?;W}1lAE)rRwp4{TH~j8?0pz0OeVfTzgH_2k`(Rq@b?ko_7>X6_|o!gqk+$-Ifv zGB*c+1_6!j@wnXtWpAX~V}t+Ymv{%Hm~KjX(dK=WI}f+SqHr!d_hk#C&I%JQMw}n> z6aYs&0+}nCQRTK)77l@X*tg-vH5=k-YQM8-zsZyC%kV?4Bf|NfSwE_b6bO?I_B<-$ zPOG?H-S^0<>(eq;kn}>DZnF_DG0wO>PS3Qg@>=n-U@7Zhsn{u|uL?55Y=~N; zw!jeRQ>-I{maG&(Nz#_QW^)syYv#F`0d z{W2w)pfy6w@BY|00?SqIDP+lciCydEmL(TJ!{*0T9v!rK5k;|?y_r`mG0>{fLl#f6 zB{%h98Il!U9Kz0k%*YelQz~-?ar$M10L1i*4saIZO28iB_RN>G@za50^dOa*e!)F? zI^N!_G|r=6U{9vb52{|;sWxZsA-D&Hx<6KlkzQUrBxO6IA@V@k*dA%B)7oQ{@Ak&N zEredHLXipE*7NsG;*klD+5(|d6=#gB^Ox*)zW6&Tw5@d_d+Y?*Qx}|6YxfHqo7d|= zUvb#flCpQ(5iAuOKccY$H}1c(DjPoA73^WL;<1iZZ?EfgWIpnT$;$!zQQlf%e&R7OMk$P zg?2^MUL`o@Ojf3E&%FCl^my%THzWBX=Bt|cRbBhu9+^SVhXP=;j&P4KWTrqIfz6mf zRldPA6vpTl2kHx^JEXORiT8zH~eB#IO!%h%ugfrcK)hY(}$Wj{etUC6mZtR#Z zi-_~`3S0$OyscFsab7-iPh*}gyRD@2>KEOT1KJ_G)Hw?qY4yEPqGc7A9Z?-hDv+`? zRO$9~gb9|9+(*77Yrqw#@-^G+N{-b=>`$`Qb=T-q8jGjsFLl3UnX>{1wn*{}h0bcv zmx{dJPzwiD5Ug6SEZ!n>U`ljD2^iHxp!kJ6^+Xe8a95Tf@7AgxU9FUKXpmS5voig1 z)yGW;^~)7pt&OH^b-~=e%}=e75%8F=Rf4)xBXmN}>nX2b&)jnY=TodgX7Vcb3>A@o zg~;Z^27JprdcJJkumn&uEVIih=!kgRZd5L}vTT|Aa?8S6;`irMbwF>8G8ZIc8!eCzO5hYADzvjej%$)|DE01W28Q6HTK6Mn#cfER(T1D<2z$nx$P&NsAEuD z{E8Z~eRqt4VxE4!1P6vIA&S{O-RyqJHu`V&ZLH^dEwHERLbkR3dQ&_yInAmZSrQf% zVn5yndn!}4k5!~KbC3Kns+ljV#E`CyKD9o(ORTvu$J@#{lFvbbM!HC}bR+xj7veGg zR9mH3iu5*RR~x2;9&28YaAfjZIb zQ)`rMKAvVY2HPX>*y*bjb?>n5SCO+DtYb(qN3*O_SmKl&l(~y)0Zv=+dA`)LP)Wf! zSBZCAt#5XOX**w)mkFj#ly>RXmL-OMItRuKZ**Q-AC9MPUrO4EFL?gDTf*8{DbaY` zm4f2DhXK2U3+)?;7EAhI1E9p++&X|p73r22jy32?|eymJFm&mtLx;?7}fefMcZu-5RI@u z)~m>G;~SXAX)RM2x+*j9*q_G_L7W1$ecQX?E~^BvNtb@v+&|^Oo~ds%C2z5^?3tKN zdMtG}tzaL@v>tnmSe5k5^>=G_9qTHOr)z$MD8XLHd1Z~8uoecGEk<*}=$&l(k+*qN zoE9(R8~Ts$Jg^Bo79F84!Ctf8-2QCON_yQw$1`7M4E3!lUk$pSrOry z+`QP%V`7YK&WICvSu!G5nd}9w-}Vk!b${)yV5Cu3WCNJ8tUDo0 zU*8FL$5=s0>=LYc){^n!Nfp(B+NfMdW#6MVJzwSI*7%toyK41INDb1@+%s4Afcw!2 z7X2QozOri5#EE7w)}^snQTbVieo1<9iPI`v3}?!9=t7)ID}C^Icy=tO$93Qf}^V6p83LyRDiUytZRIkU5wC_TM@*~^w}_`VD}J9sCZ+X zMInT!Y^192e6-f#kev_#3;((OLSwQz(=RpfQ20J#4KhPkSY$=pyq7-gG1gJR4L%_i zlfR=Vc6H-Nut)T{a}SYTilJpyEF!~Jm;BJ5Js z?F)hBs+evwu;Nl+W7iSiB_7({Tgl0Yc=(;b(NJH}i;oYRE*m3!N9AyW`o z+oK3+X0z(M*p=y~yJMbez?qyplx{C)W~%ZAYejgWCx(U@xK6(NRaGCm#U#BR6!Wp1 z1m%q-b)a##XB8da%DgMfDh52m=F9EPC}ic6rbADg?P+C!?v=(ZOFU@pw%L@deo09{ zsJk*MW)l0-`g;?>l_ekw4~Vi#uv^|TY;>JMSu4VSRTx+OXj!&)stlu&1-?F<#TWLb z{O$~b3rm|*R4psB&6F+hJ+SdqH)OAePE^@(*i{4!U^r%kAuvCy=oRs8kwc|H?Ya4I z{TZ@es2(GpJRNoAvtwE1WFla!qL@rfv7^atgF*H8llN0#O=1&~*IHe*=8uBH#wH+n zVgMc%i8UBSY@1l5loV_Eoon@!J0>mGLE*yz>OGGLi2$1y8k zoH15>6jsG>V?pmZ}6W}=kLoq%d_QUdH@ zmS+@Tj{s@<#kyA-_3@>0wOP*u_mqj+=DNmtW#Nz$KvbiID< zS~K(zZJw(jpdL@Z%&f?NtsOc?l(TQ6T*BVV4rO5@03b?PS@rj#!vk`7Dker&-N&&t zTZ|hFz8?mGZslk9iy(kwf2^2dSv+7?HN|#QbyuF`1rqNCOf5@v#2Sn&xyh_uDIz3T z0yyP@@MC7{hI!jB9xS`Q6FDh+Y`R%RS6K&x9gC=r`4&*lma=)-@c6NH+z6+5 zTia;+#TLqk?59-v2gYP_k`vX9taBIf-K&Fp?iC}(`Hsq@B*H>9ri){dE%SWXRgvx* z+kQ!UNfB)`1h&B^dZN~5S|z=h!+k{VB$i{JWb3w>YHuz8?0L#4R^>))xJo-kRJ3?$;GQokkmM|z6o*#W2-{|NzTGAin=e%oI`v-gkm#00 zcm2Y?%@eO1riqFJr!wv2hp| z-@iYe!q79hAmcsG-Lfj*zc^Z?;Pw4-k!jJd;;;hEimWcvc4e{BYwZLuqT&EHR3Lg? zZCeCVB;38=zGc;)d`ZmY!-14-U$%3`NbkcU+1hoVN42&rDY2}kb}yi!`uVXC#fIHS zU?Wx;pt^H?WmW!cC#Wg}V*@&5el`0zYWkCRe*n!-^@Z>#i}v_3lk?;*y?V1YEsGgh zvaF6^Kut47^fW`V7Rp>_)`t0t>jEltaxQ8oFZuI-q&d7zc@ zzK*(WwaXS-7FH?maPf3QoHGh#Es_03vDa1@YC38L>tI5=7(zgXi^Gbvw0Hge* z==+HIMAv3)c8MUCVOY_1m+RVSum@MW`cXgia8m=CqQ~?{z8@^Bn2pzh>}Y2p>*x8W4Xhyl!cU2zqlRFcso*AhaH6@ z1bKH6*_jj+IYC(U+a9C5RA%XgEU1wYU6o`pWXqUk3kt7!$dOgn9Rhj$80@J(2)2(^ zoibyzjJ9LET-OkXESz%G@u7R1mLF?Zj30loqS2V^9H;~;>1fOuW7YbEHiA8RJ=13< zLD21&ogH*OvZ4w{cZ`*Nj8U+JZ1!}7n+Z#4PuNtWK-iuK#nAn#Q;56jrK?H}-5<>iC{6@~LWq9iz-ZT%dqfLZ$7H>s)5f=9R?~Ml?eNPPMm_DTSyuJ-NX@3$ky6ekCm>ikAv0qgdbi?nKr3fa->^hE+09D}nRO?eW zRPB6;`JQ-8?0%Ta3iR`IR-IkmPz&r4vy35-^Qr>5UB}vB8;P+CG(X;^AhC`}fqS9v znN0wJc7`lCFuGl}!U>W@s=*hklTBho-6H1_vJ{vEc#}uZ8vsO?nI@Gq&AYL9)3mFM zhSk}n5ragT2iwO+ucE`?)Nizp^SmWCy^d9Kw9cZ6Bq{H{UG{5bu~_~*_p~xPm&9vX zbPs*I%^>GfmMaTGQ3!=#_hn3F8{sQUf-LZtbxz{4>dV)_gC64k-C;KV?dFxm{;zZ8 z4TSFdwnKEetaXuaAS#5*z4HIaQtT>IFk>tl0EhJ$1^WZwj%YI}a+tX{8Ia%kZOgJ7 zBbAQ*;nikFz@FmdM|2e>@7|^YRqI);Evx=AV5A+Gktnz?dIEPcviR@>Sj@&Pe!8;M zQv^Q&kVb8KO*LaWvTXaT(PbHL`lDsxfn%A~`bb*rpcFwyRKjc5(yeF-#Lx*N;Fh-8 z-j1V!Vmh4i_N#2j>O?`2>(#qo6ewao)FN}g{j%nnB&@SEON7_$IoHv&tSYvPg|p)# z9`M7+?#6}ioJR(At4SGF;=zekPc$R(JMqkzd z>;a8;$U@Bk45$pj=lN~RQp@9?kwvX-qkXI-;#edWMF>3~27BrxQ@wm-u_D08ybTqa zfq1(L&!QFX3qw$>X4ZDv=n8Zm9bu7_FwGva;!4xkKXO@tK$Yq|FlF}(B@J~aSW@678qF-5nV&a^FYcqYP+9WJEG?A$RE+410^Ho>q1?5nGBPcAC z>|-btP2_BM`n*a5S5}qV2Lpi*j5{MvIcB!9(XlehpYPep9%J1*7E2@Pr8Z;c3y+k? ziIl-4Z^B;L7~8KZZrw1h{*-C((Ulpv)rc4NJOclIWP_r{O_Wx|=5(Y=Ib$ghR%CB0 zlI{rwx#}YNMRYKzU=ZlC3Wa_~EsZS3?j~_gzu2Q&antjK{0all^#4Cx-CLsMI0ysK zb@l!?)l3HpNig#DWu|ZGifj!3?49S; zy9QjS#ZpW|QX^PjwzxafX+c)jA!W#q3Ay7Hwz?QD3MLL&(I#q%5`mO*vAPS5v`%Pu zuc1_3)sg~8I{-qPG$uz@1DP{k+C&FNvwa9#HeWU|AzXjW1bf05&ZVI2MG~iva1Um3 zU&fHacKbAJ`>FNewMMb6iBHW#7>D}7A*PSdThV8S*-WeDBu_dTBSv%l!g=_%ORY~4 zUi@y%-Lxy))5@!}eMPsT<5}#r(Xc&lyUh-I-7Ex1E;yg{NcRlxwpt0`8-d#{L~rHr z!5#y;of6VXw@ov_DRyHo!P7gqR~GaI>g;U;STHfiQPcosBj!>JsffpG=G`kx9MWI} zd)5gw9aJ7XU-EWsU%)^mi(j(X^Q~1pr;D!N#{Q%!Ba7=4>F=egwAcV~WZQCUk-UkfX|6-ktEOo{8`=Tlj;s27wq~BQTwkumH7x{rb zsT=*t0(+Dd%{+3Jshr)rIhyWF>ygFen2NPIY8Ku${o`r$p$eD~QsHDq)`>!PZNoh* z`hF_h?CJ#dux9G6ti%qV5RdJwcBN2umD3daw=YwtE=*t<+2v`MP~maxw~vVzKkQF_ zyKSF_Hnwmt8iM!SyXe679U_BIW=cagFw5DGV-T14@{u z4Sm9a-^*YR#5qQWwWm>amuIOya*x)~82H$-ig*MWtpBVE9D-Q1F0o426W?}$Dz%9} zUc0%D)HN=Smh?(6I<0n3vUkP{?vatL+o0QqZ81-sx3UH#F;*7D)P6gAAr|a{Jt{M1 z0cMGCdh;^fs|cEIVTyJQQB^VD4uPaq6>|o_JIromMI)-!LYhax-|@1TeQci=Ypu0o z7diFqloT~x--kmApD$fm!V>hy+@=&T)Lw?4SXtS8wH`0Dr2K6jezF+KwG&9E{I1!^ z;;C^(dx;2GL%=i0-L0<$q1cff>=VarFD!$C`)H<5<}O#YM@obvQrj;JdMnhDnu{(^ zyTq2g(cW0T0l9sY>FuJn`~ccc9D8m6cQIog5x+mt(8Fi{BRN>m8K9IGR%sa&B%Z97 zvkP&Sr@=%r>^uercEPG(vvSf|Q19tu&g>C}%cos9;CGP2>7!W`$j*5AuHoBG0so!B z;AK9gKX|9&YSsE+6K8ZKO7eqO^JO_yeCu8cRLc(`az(|td)tL1C~7jnW*>``S>0Fx z>=E*f#$bDFi!OUFECc@L%Sl}>UkLUnh20Sl$5zJLf&w2-t8cr+X;8t+O7+-cfF$%w z39Mb*ckoY$lCuPh4k&UL#_GyVmf?U?Eldl8~g`ZSX%d>gc%tRye%w#8YoJLrofotIf` zy1bXvt75(+y_&NUI(6BVoP1@{Me0J)of+wj=kss7B)y9F1>DT)4t5TQDg8qI)Y1C9 z9ans&^~&N*ImKyqPEx7G92d3*9@}HRj+u4IlbjDfS%~n0ddxs?20R5`YeiVbF0dDj ze(LXC_VEEJOeoRfHXv(S9V=6dHvv)ez7T?z?$ba(KkZ)2$}u9_Oa#Kqe&0T_F#X#p z5PQcR!D=;L5EpiBKg0GyOy=8^g^L2D;c$o_uYJ8KBVhj1>@DfAe*{h;PnNM>j7b5K^_iz-!(UW)TJ2;a7-8?Go#(?>mJ`0p zs_-%#^~}0R{j>GWQZM!u`SUBgy0TK}vNoEYYu0`l4WeJu5Zp8*y_bfz>#TCb#zvbK zNfyRDEd{|x?j_QAR|UikL!J-cc4<2qg{Sm+|_IbgWlUvRN`@v`*LzN(}`3{z1r6^UMvzPKSPk1jw7F! zv)^pT-jrINbys9@hwsW_li&FY$ESt*UpoQz;BL2FY+GSpK8GDW3Up=3!Z()V@A_Bj z8Js#Jo84sYcf72q=0t%Urn7F-zk*|)WgVx>G@@3kG8f8NW6vgcWn<#74MRe>TizoJ zTi*u(%0ay1l-tL1=FaayG|=~KadCPgr?6D6VlmeiF6sdS!CRQAG>GZolYQ#I{^ z64guZrM(cne_JVwMEu^SBn85gBCLFeE}HjwIQ7mK3g31)bhi{ zwL8@9tmP+*1?o?+!=;>J;7&MZ-_n{hQN7VT&AhTyPq!-;r*`Fr2(j^f>{G#NVZBoS zbot3j3FQtaX#3%F^r@l}RY9EvS6t_cw6Gc(%(*n^IOEgp!aqn6cxL=wosWimLVTLeH1N<#b%X2 zHKM#3-ITA^u}C4>s!joT(2UcGCksT{aEYH09n1iMJ*hwWbs6mGQ_J{OmUC@R3TjHB zz#gG&y$tOa7|GU<4W7&}3|Z}BM*2LMFdv&{5bq=_G3}Bib>#70=17DZFD!AN-Uq7D zp?w+@UQ#c|#fc&3F8BCqChvG9WL|}m^a@Vgr}c5`()19`GTH}AC7UUU=2o zF1t#PvlC!Mi(w#{y_7krd@V`_0^3hPfw-l48ftEiFZskx=|g?LU(vYjVy{55efbMU zJT8{syV;evmwfo!w|Zq|4b@Bu-XCXxRtjKv;(u)P3 zUSNL`O#HqSRMV$$VVj?Uda}Y~PPf&ue1y;Tvmm&pv&U3Q`Uw(zi#AABlK*_Zi-4UZ^H zN}~6!$n<)H+pfevMQJfHU2`fEP})cJIO^%3cRJjzVMfVQ{2&r)+1W8m&pC%khM|NT(_f)^|E#?pchM8+dG=H zjXFm3ZC8FBY|RL-WC`tv2=SV=V^JXfX%|%UZ1R)E7?xYN8jA*&7s#=A`?AsNFJ)s+ zjeYhzR=ZFJwZ{NS;82?#fgFThI>A!D`ncOJ43(zLm$Nx?SFZ(xHP}uiv$^I!Y4%45 zK3S<&DOn*#RJia*$s^D6dbbuksv;5}sNbN9B3O=?|bN06xVGQI7IGg@k0_HKf>V^p3j;G>EF zq3B{pprDWT;iRerg87aiopwQusw<`!U=OZ))}wI;KI(2T!ORTUBg83tpTonpQ>UnC z6$+RD-)5G~Q1vYud%VPbc#KhA} z8s{*Ds`}7>n_6n@X+iC|7J~4Qs{{d5YbV4NpLPL>kHWg+g?8%NsN`kVoXKBU+&lJ3 z&8;nDC38Yf#`?;#ENZI~_9x81Oa)BTdM|76VS9wzcUrG36Vp}Rwh+9K@XVvy)`rzN zv}_G0*puIQ*>)MtEPyQRvjK)l3W&xjG@D!GO)`P2|CAny%TkkL0Baj$Kt92WF0} zP-nYH#D`G!>C+i|W&j7VUpDY{Bo$bbuy|$hLuLL2_RncOStL~y%tH0?Fv%lyagRx@ zP#&N4PV~C6_?=qJ+%Ux-mw&B_gD29?`93)(;;ogUn zG(0nN`)t4mW}Dk4ex&iuTx zl0GZE%9;9aWkHea5W$|DfV_9Jr)O;r+>^Q5+mx{Yy*_o-tvAaLfj!AIg{5 z`1*WFtf>-oFLmL@{ZAH?yW&(q+7O!CMA7pejd&;_ga!?90Sb#EW7s8_>vWzmtMQ((hJ z@p3AMW8Su1;(q>Mz6?I#M)ndZybDkSXfF1{4AeJorB1Kh6iif`3Icum1T-M$1^#FF zfG?Euwu^=0Kc^uqR55Ri23_BVfHfUms(gJFgLk|#$;}O6iC42VqBpLBJ*uPD-rJM$ z=&&bCDa%?r=00Z#O*6w5Zd8KR{B)Tfznu|Rma51u!ve|sJQzuv-lcDURhO5ub&TPT zS7^+JRMx>R=2J{p`jw)qtt}9CIJ;rjP>$JBe>j~oQLNBj#xsv$5TN`>gfow-;hx94 zeN?v58CkxeoLIE04oI``Q!O@MVjACAUs;Ip<{tf=D3)fQX1~_OiJfd4+fG2E6ef8}dc46K`%az5YiHN2lIiq;v$Kz+#xw=%(x}(YJzF7Uq zVpNtVSNHOxIZwNQ=(6`1z7+iKhZE?Y;d`~2ioNR~jEWy2 zHE3g-Z86q{?ZcYX3WL<#URhjPRAI;{IQgAUZvno`3FGDf!mrN6?BzJGS z^4pO+BFStr!}~IuQUHP#DO(8k(1F!eh@A1<@sg_K=0}ziK^AK-g_AV`*$`T>Rg?`N z+oyq%HSoML2)|Qd9%}K@MP9DPOC1_~GO~2IKsfe?qVJco)YqqFe|w*cA!}f%Zy#+O z?5W@!is;38N;&Qb;1b_f=R5XRMVFhW+Gzs~TK*+)J{u*FKUTq+^eZbxNk!Ya{~&wT zV>kjvYDR$9?+PWP0#BX0R~EO`yU>}!Izj^b(}f&~Svcbro$&mO=93kkX>ZGqVI<~h zUP-oOFBPz^Auuo2+nMDni(VIf0qJJv@4lS+xEX9#1FuwHBiPN_`1zzINe^7c^@nY#;3~Lr>1j=Co@0kv}qKvkVeG3Xt;fla(JU+TjFOslm!J z>jg%*j$(z`U|~neGMHWXVvThABVpPuKuIrkYqNNLN1sbwjFdcQ8s#aJYcl+`%nb7iF}WWAOck1}r`jX*fyni;T15^UFFqF5jQec4Ke$)}IZVu+KyYnHnbNW$m(*3-wZBt=aIkoLB) zOvKKNsNU%Bhs9DdS^3hH#rOkR^W~H{?}`I^!0zp`{h|+W9q*}pq<`x#wHBcD$U;Q& zTYKr4z*V&QUGeA>N(AWuH1tUFrpS|3#zT~zGUeMC{l+rvpHJ9*% zsoTr!UfXt=b$~y2udD?2HO=Bu3brpZlr>%$n~ERB1yqFqyAaZK<4=~#0rntS>QcN@5wt8-pLB5+*fDmeU2qRaG!u8~Bl=}_q7p(f_Eopd zTxrRUJpwR)n0BEtn>Noc^{mElN?H8-u;IP$-gYIOwlftHuWN_VrrH zx7B+V+~OY#1@>es(~4&M$}KUv{nL`X%qyh2?NVau?RgoE)aeiK(+b_YOv>6X3rb?< z^y$e`fKy5!Azhnb!Jd>0uPiJ~kp`T>8{8|4r)}Vj+qP+TUKX5pe&|r5JGfSi*~r6B zmh!n}V|g@&Vf8+Fy9PGU*?I$Lf_rRPiD7o^sk!{ov@3;;<*3CdWrP{09JI3SlJu%r z6v2=~y;fF&(fX2|UR$1-oY&(TZy!;ORBT^{IQwa3f1BVCrqSdb0VMD{FXzfK@UK?= z5;)?rT5(+72f3hrD&S#+U%~j3rPVd-qTVj;mtgGdw*V5Fn@(giZpR%WvzHS)?ZPR; zRP%JYRI|*2f4HG6{4-IfUE#f}*#R3>*$DQipr2{wqLk8(et|ty=rr@n5=_Q{EOe?FD$NWCnvvN=O+56RmuJ^btiN7XiokkZ%kG~tlf zY=AvLRLMeUU4MA{=$wo?^Z+6f*lr&IsyhCWU;e#(FcW+J&WO0O5|xzubjnumA4;uH zWsj(NCk5pI=}3m}$`TKi6$V}f@ZSU2!W^z{I-WDt^X)Nhw>uKF( zz;{((dkk2$D>h}RTz5Ye<7msSLE>r3(Lhkx?$gXWUUKy1A1z)ebJim>ih$iq)~XgS z*puI3OrNf-V5C|WT3LCR7y=RFj6k*zt?vNkK$%*P82948m>BfLdS+V)ifM~YY4cA} zAEG+#qAy-vQz=~RE$ddF#s6!Uz&(q7E@dn}wFNnlV>KHLg5_pypPJ<*K@&GrsFhf} z^N-2!Tax=J8c}XZ{LJjm-4M#Mpoi+Q<5T_HJbl#zs8Z z57eZd{I%G0zI1}T70uXzMY((1C3D_XhGe*@J6@gPRF1KtJ>5ASixE`b+lPRyONF1+ z%;bLeG67A++eU{aU0EDSuQ=ZIjmSemQpsb^kUv~)>3zIowF}Ez#VSd9$u~_id9X$< zX!IB3-FXz6vkmh!1ICQkWzr#gnIz!aoD}YLehBujW(W4v00s6`(mt>UiTo1{_Q=z0 zAK@NGc!m>Kk=oCBnj1D(due^{q;p|tlJXtUSu+sX(cUk|rq5s}?q|?ObeN!P2+nw+ zd(gx)A_xW^aod$@xn_H;id}GE4-a=%*ptPKto_m^l~SXPV9%%C1Zgb%oOZz}y>AXb z2u6?IXKP>`Qx?{;fATVEy`6L^8`Kd04}@|#h-TBne^em ztb$s-!bN1zju#fL$)J!G1utTBo8#k_nubcn&69FEHrK4WZz7Nu@NZa+z!{l3SL(&r5|}6~!E{;37j9&~BuluIGV%wzQ?l^W8a_`aEni>G zZ`c(p)rpddvj|!GbCm>3}c|EO4t20pw#8-7;f5Ub3>B>4KHQO%!t@C{5 z94$Jn#?IFYL;n0yPfu3PIoMebU0sM&m2FcDIY*@+0gB}X`d1dHR+~-r5Ex$3qPQL) zYFwncMetj2PZkrii$)}&dS^B09L2MuDOVL+Kq8j!xqD@?c2yB)>w?^Ry)0-eLPDKm zJ5v>pvWwXy7bL*DW%J<3VuOVCd&zE8emgd} zHYli!Y7QCf$$5Rhm%$ztb29==O0Y`qo^}}!&UJdh4dpi-=Vc*s;d`L5Ib_a|-B_Cw zDy_yVnR1AKWeH?kv}s+Y&A@8NY36NLyk$Ap6oV}y1x!L4k7ySR#a@PuJ$-tz@RS>E zW?#}PV>ljADX@v%mldC{nMG&Go0cpHvsh0WVpZ&TK@TzQhVI~D~vuLnCoM2t%c!iyG#O_-acf6qeX7RGY zeeFH=hfZxDE#AuEXMg+q#n2~97`v;)y5@IQCn#$zb;(DS89S|v#OE9&=*yVKjjD4oO(vz{*2Kd*I zz~UOdm>j8ty_?uz`v~_44yIk$AKAElIx0|M8+!05=kXoFF480Vwu}90a>Jv|K=Amz zp_V_aWM$&gH&IuXtjp&t9tpKo0_?LmZ3bJsm`c&@c>(Yox}+=ceps9auI zbPrtH+thvuXv;CQ`rd`sicPe;;~BdrOBQfl9=hj~#6b;pZMsdrpA(@IXq*wavVcO> ziSuQW%LFlHA0`AF*4$%et>Q<(<+C>sj_FgA>=kKsV@R7#%z1moPo&MYhlL7YYsZ|q zlqud;GuST~ch)1%+#GTaK#&iaJ|3QA2b*8&;~(iuR~B>lpE`F&xwj#PbT2!Rh;i)~ z*pqtc`7jIh@WUB_ zl+^j^7uXZXu(Hrj?Av@QVQoVw>bQnMU6sYW?K+6F@C1O~nFBtmc@taV>+or?N6KQo zXAYjZzV-Go@!_ssXcj8p@nZYfrBRJqWOxN0vb7u}_P=>dSJKR@L6c3@z22I;oe) zyW?epyXl#yt!+%eUh3nTAh5^i@9?D>plmeL_v29xHnChCd$Y3C?yM_ey@NjHZgixv zZw9|`A-Yvb;XaMgsy^ZuIK{n-(JK38{q^=Dx+W2`Uxuez(c|OSY&d}NSB`(j3$@$O zn2D*Ky&@X=xa!80vJBHMP8v0y%PUKYz7kbnk1WIXF@*=4;sJ6{fZIpT5tsd712+p|fLR($;Nc%pAAEw@LzHBhL>irT*!CL?I5k8=<=koM1uU2&( zx(6M$4Pn0uHNs-3qA_;JAKqj2-Xv3?`f~EM`?NGV?=lUsOAhGVOYzaoDBgC(U{w^H z@~_oZz}Vo=#3^djtaZ##POok83%|bYVz4TQ56EfQ4xhS&3O2zWCg-fb+b)H725Fj2 zH>*fqBa*h?yV6`60_NiFHNCPdA&<|~6vFWCWh!Iq(yXpQ$HzoR^6-O-ew{DJnB z1&!4R2+eyLq;Bd4Vy|6zl(mJ)eRpmSLDOkc(RCjsX<+XXFXzvJ7hr1BB6ha~EQG)W?;@k@Eq2+n06|MshN* z`sp-8&O%(b56dv#W$*1?!6 zAP?-3O8&Kr=L8u}Gf%tV9_^X|LihB31prfd#eRuzEnO8(XFpa%UsV?M=B6xpcgib{<_ zrKIf{< z?*NA7AK`QMY==`mqsx*(lg{(8IJLpixC@wSyuv4zHpad;RU}&4HI(y0UsCmqSEjLf zOkLvDrWe+i4M%&)eQvyM!Z9Ob(AD~|hNbsRV?{jKWN6i`EXHw7Q1;!tB;je7w3HFb z!*>lS0~OfK%T|6bPkE>^*}@?jvh6~H;{;2Vx}t^uU{5yc{6vF2XoL9@@`vTD%TzL+ zhp+w8g-Yx}!r% zM!J1ug5LR7r(LNo>wPJ)2sor z(GeopQ}i_0lg(W7B`*CPGIeF;q=pTbcqIc?Pg9ufGN+SxX=N$xykXmuCG}b1I5Sci z?9iu0W`jLanWNZXkKsJZcx5po(gX7;E=#TBUNU_f(qMaX+{fNcu}aHIhG;v*4T+HU zY2oA=ENzw<82ti!KKcdsAO^Nwhs_^LkYcgNW}I1u0Jve~dTgIX8(?Xtg zJba^&c?TpELd8RH59WLa`;?yT(~xh|bf;EoR|P+8s&>5O$a+}-C*91XfYvaehM3Cz zu*!``B;B#+qdM*o40RciI+yx&NX%_l`7uv6qEx#WpxP%*tl?UnK%2;^&G3PRT{mQH zQn~G;V4zdhDXT4Jmqq5|ezL-1_C5-GUi&Ny><=n#fFSm#k827MSvw5eX#7? zL~zCn`@`CePJrk6*fhj3QQYfZh9n-1F%!I0;jbLHSFYHp&Rs;KgaISAvV?8L4V@(Y zt|7M0T+Cpj_|%AOyBIG@GO|E!?BZT>d7W2aRm)&SV|uVrqA$C9(1!eUBfW%&jVDfV z;%|TC$kvqWmllG@!*|-1jrK)p1@`nl9k8bZ*(AA& z>o9AtJmAR^rUP2rsza;Pt443u)*`34!oB*(Ovn;5CWaKd;2K)*azpr10d?WtYWaUAr>~W zWA9=K?&Xt3S=XwZGxOGDGw*_fS=%Xb?y?xPZgY=5%l6FzgkyweJ0b#86|2(_rmr2d zBAEx2Z@VnFseuZ_Q++9@4&a)D6qB=43Z_B1#Kff&7F^RRDMndmf$eD)T~wjCY&;9t^D9ff?Lz((6D|tFKkopg z{&JlwMa|Fe%m{duQOf0&#Wspv=XPpSmKX);T}UW8ar zV}rK3RjbtUY#&(#+FR|)FQnCN`>X0wQR!nw&S0Me(as}3F8#K$AiL(QxIk!cx{R%F z4%uM!-~wmw*sU{OJQx!_?F#H+@P4uadwM$&KBh>iusznnv@6b``lu5C#I!4HPp1a5 zGh*w80()M)>TMTe-?cu>MyFDwr0ciANk+PJbFf)E3mVYi%@1n{h^EVer&r*6 z5fzhCwduh`wV@W>lb~i^4xH~ql_H`VP1vJxH29j5fPGmucULdi11Q(s=;COfIsefD zcf3T`6=;MoEo;Xj<5Tx#EO^xyGEeZv`i_`|Ph}8ayv`!EJ|Bh#;nhG!6;b;~?yrv} zwmnD!e7c-$$66!^onKyM%u>Gta{Gvw?1PWYTa}IKfi0o?a!N0%>Nfk^KeAMjE-jq6 z6nQ)CvIDOfK+8hlJ9h)5%Wp#>{P=e2>@nCiB+%$2p+7oWQ-j1K1<6vZ@Ocm0i^=QSZ5XWtsH06M#$|L6|uH zv7TqqNXHuQ882iH@RrLXOVTU;;CCA~lM9%qp`b6l6JI*Z6YSytR#y!d24ZF%45Bl2 znP6b_o*pAVX80Hszg$r5N`b_#UNA@qISVihLZ3XtoOygYk)W;pBSiJ$wqwz8*R>^*oNcU@k)-XoES)1YX}`E7~ejgB>nagx_{}lJN8L8?yO6C8NtyY zF$b)?Q<2)l3aEV+(Yx)E4B=a52txSPw6b4Smxk>T=*}X+_E_nw_c_6`F_TH|I;-qd ztyUlSwKJo>+4k;j7pU8n>;QmRYnqugvjH~P1K!Ru0DA-;rC&INvMS;X>v4O*NK~c2 zObGkF(<*X$aQ}{dN-Eb*fI-&swhOlHiW_Wm9|~c^iXzJGBlzC6{DRshmdwP5bkWS3 z)`aGrua#zKu$z*HwJKI}vL!QoaWln2vCwZD-R&bT2uj+gbNF9fa=exMMXFbz&tvgQ zYjb27DAc~p_X6o7Iu5cz2VSgq4hp#6HoDWU6jK*lmcZRkik~d@T_{_Z7WY~a&59Sx z!&er^QWemFJ(bA|>}k&uJ5iD9Il+GCF}SCzgC()vQ3Mx#Sa7@YGam29#O__b_Qqwm zT{ehTIu~k;;hjE$J*rjq(*DOqpx7SU0CwyX**D8#=nInrH4^?aGwd_IXVws`^((Hs z?V@b8l?3bw2AzhO2c@%ni9+764XB1MYP`7oD*a3X%=NsCpMeGUGKxMLBQ5%aiML(s zgur8;rs>rX*$(-Ty~~wsT$_D@Z=$ZOL|Pk4V1MMw#}Z`O*G6A{78c%CW6kZY&zGJo zX1P*PU?K8x8e(l%y&TvBebimiX4zFktJG)v$Xl{lD=TS*ZKkU25A4a=!ROuEE<`2V zJuf5oYYUJdEtKlsbv{RBCl#Z-VxA{U_*02JUcbr%kiMYI&SOe7mNr+HVQrUAq+Xy= zk<+XSINQ?G_#RjlF-|j~81ZE;Z@bhIlp)0!W1+UoY{=)5XQ_5My#p33S@6Ru6xgG{ zYX%7H0ikB%3;=9gcQdQ!?rB%jpdD>01hQa%y#Rag(W6iXmKB;MB@YErox4{SApByQ zi%r<4viIP+sBc6kqS?VssV3ReM^0V-XcjXN7$~zZgIf#e!5)BX?<$+^_))}6n|BBh zSZXduR_xb8VX#LxN*3eT9E_D;hjmk+9ECBmzy+GWmx>zJMk9Y@k_($8Zd3~camO3 z^jf3|(tZ40Hr96B|wM*XR`I4jeyimE4>~yOG z<-i`qW{D2Ms_|m&d&^liAgm#k^b&5ae&JLA%W0;B#VZ88eN1?{M%nrbf3{D<>zkus zuaWz!_c(X)dLBNq;2h&MGX>{ZG^3n>J)Ktodx`-J-|&c}D+}&4J_mYdjQhyqi7m&x3ZANMYVB{ISOMM641D%WlBB} zoBJhk{VO%N;}yG6^O$onc5Q<_N}NYUusyuR%7WKlX~va>kEejs5Ji#Cyq#&4pjN-R zcRA{f`G5(5#IB*_R4t-;`qcW=rC@Y@2Mi8u?AS|yy%N;hF7!hkXp;PF?Nr4J!O<() zqoTn1u+qEt(=%6AGT1e7(m&6&oIYlQdyRm&tHL8|z=GSgt=5MTp53%4?PH!@<3~ZL+kTnFY8Fay zh4Gs&IVkvHq$>;bXxPYeROCusQlBy}OCEJ6teDT(%Y*i&PJL<;)KZp&{mJsCg+E;e zdl;SaX)*)N0|*cwG(ILx5=|$u-~I45yE${$@2uKm(vor!v-#+2`+ zO!4K;t}HhzhJjDjHPqAQwV(=fCe|8RVDpE+XZ^dPB&m~4x#F9JAuHN(9Ti6U)QH-KN;$DA0nMg}Begm?IYqA#?&ve>UKMrXfNicT-6wO;QfxY{TvCA(*q zpDZy?^+MAAHT%pXyI>E{$UWC^BNXg}n7kEl9=4BP%5^Q@3VP4U|&_!&l}Q!Jv6=a zUJUqZc26H+%F4TQ1t}QVFNtB+51qXXA8e9@?LI9+tO^N9uWWG~S?Iye+=&nEuFT!r zN5N7jmyiIR`(;Q0wv`2ESF8YieeiwavSsL%fFP1~uw!PcT_M>w;ScuE)uXznUEUSd z&C~?;bb^D8d6h01O|U0>K7Y+*kzw8Q?v-U?-k##~G}!Y>i|-{bzUVBlr=#8^xvuMd zvf!SzP%t!SIw}I$r95#P5`;b@pw{OP&at9)Z3}QTYZf5blhVeKC0c4yD#eDS6L3#< zVeHco>TWavdx$PsyhWkLFpZr%$=0n^bTjjDuBfv12B@BHbrROsF5K}_76a~1yK;Cy zkyM7dD!P)+C}uJx&I(2I?v+LBU%la(xUAhZSlFL%g7YOfg+1I$<9VIKlXZyUy-lwR zVWEL5@=C2wl`Z&8^32;VOSjbz`SU?V+0#C2$c12in~9~f5>}R&hS#5VW#?ci6bSSw z{Yh?oC*9b+UBS1Haba7U$8V(UVMOz-lyxs@(8g(?D`6H#nzH!4 z3u9M_jYT0m&)q94#jvH>*^FD-Xku!UPfSQ3ea=w60P)F+VsEg!D!Lk!kH51bfuqto_3Nu<+9^g(~prECWi937@G5 zgsRZRT#g(2js;@mqtGoJ~O&hpawcr&vMJX@ zv9u8~!B@=7*_>5?i=})dRaPq$^oeUv#bC{p^tD)jWo0YLHblN!J<8tAdOdevyJXr6 zx}+qq7N9zVrVsH(6;LPVMTH{z$U^eMtFubL9$0x)ggpn1$BMu?sI-}iz@GlS-{2nT z{Li|W=8V5n*VN)zB*wp}UQTT98S7=mh7Hn=Y(kM0STG@Wv< z*w<`uFGgM|Fu-sgzU>Ncw=NI+!_BX{X;^0zm4;P9gTZ02&O}{VynY87ai@jv~0APSs?+ zjHoM{gJ5Q7W**@l5zg40)M4|kKUvtHl%ww@-%;#^-L$W=<+RJR$p+7t!5#tQv@6K1 zi*hlwRc;9Mu@tKl<`lr#hN!-59w1w+i@%o-Lwrs%Pf*vgAdKdj&}C~HWsY(}`MjJm zm#TJ36j%0M7Z4-+DFEP6ZO3ad(KYs9k5Fu^F4!Z%z51n9;MtCSs>xS%RK5Pp3GPI8wuQ8}NZ^ge+ps5~z#2I~wEbA~Y6yE)@v zXPFy%EYximX0mp0(E6OxwJ*!8?^1_?*rzd^j5~vV^y$em^wlX;S#8V_IT?_hM@g?@ z9AK?vWb@%GE9}?01L+`sY1@^p-|K6wWzJ*U#T9_`B`dYCtE-Y;t#0^HaCf?FGlq?9G!?!Ep!{Yr^_k8o_AWs5zS6?bcy}?#M`WyNMqV1 zGT<=x5~N)1OU0k4aPM+~wH{OYWM|>t{{Co$7^U~aV0U^uk>PkXN4JkybCtIvDiO^NgSRkJf*vbUWdN=;zbuj0n)w~VAr z4asPubP(2ahfh2Nu1zNdwVkh(Aj6*R%L#ziV5Qcli(e%b7}k{~*;IZA-6I>YU*;+} zk9j(4yS_x*ULo4)vb8L3+3~{NR!|Ikn7Zvnpl?A=DVlQ3+28)jKhou{=;dg79sv~! zIn4}dRfHgYaYVu#MU~fZIsx;FkWAOn+Lcp@CxF59CjtJhP3q!?{FB-_i0WnyY znRGCa3Z2W-F41Iij=v!Qd(@zgXg&#WUVE>SxB^7WTtvNNFQ5@puGb2uSFvdJJZ)4W zkYerjOA=m>kGSnp_3>)LPcL$^MR8VWIGvnU^Wwc*In_B;XN8baX||t&+=`xNVIb*Q zG?HFCT!|J@SF8Z{AS$oC4~_{uUb4bQCe#=hc)CUA~* z+ddl1x5xU)O2%juoug2fu!Zk&A37@XWXTll>Vv=1tfGC|YFrZ(*wg6`utySh zAEuh!$Kak_u7N$DDkCJyS|m-h+Gid^e?7#0+r?5g4aH7aHS=XFyZ0kw-0|0YH_Nle z3xsMyBKfnzg*n`IRo6U(Mi^OU{FN@=b_tgr4;)=hDQuO`VShdjF-4?nbHE-@?=0* z!zrlcm*#1Bpm!=^MY@zl#zJZ@4?kHU>~}b^7p-6Mt;I7X5nOzsh5iismF41Ll`|sQ zuTU6($*p8bKu@JojASz0+peUk))wkt4icF@N{rSSvw~Qp-Yj(i^6xhgZo3Hgmwg$u z+ros<%}R3SE>GRrN%|o-we4boUj51GBP0F6OopKF7q8qI#e}tYtZ%!Jz+FwvJr)?z zCZXsqDK$hu!88+f@!`@e<^Hu>c2i8VPlq}hg+l)17}?)ll!}HGHc1wFgFLWDPH_e( zNUn(z3B-m3Vd=`|XvSwh4647dFZL$|1Je-oH$v#Wv^`^u7SvofX^49+`xCh8Wy+Xv^urxlG;L`&*?>B&lQ#;A;Zv}DOPB)dfm zCgT69w$oz!;t89RnVD&qeD+Jho_4{f&)VHfMrY#=C0MlYwBxo5c~~V8nw(CqXq%HO zpN6n1*GnJ3ueD#2UW%o*Q?hNcPa{h^KD9mq$QoRj5kZ!RZ@WYWmERWN0URY7J5h|O zqCOAImr^!#NAt?c(VI2cR(AOzD+V35`eijX!G-@roNT*#DLogJv{ z$xu+vwisEQG{i7Z!x~oLjJ-=`w$mxF2k$wfX{j=2+pgfA;xW-Zmg6kXz#c31H$dT) zWN_=!md+#kj90+KYv-}6hxeVa502?f0odc|l_l+P5!I6g7cFp3YQ)U#(_l|=3icp& z!6n%9_S{`rp@lc9Q;edtYKM<6HO(U$0rQexrxWbNCqER&Tn*9VI$VG|q}wIhycOg` z62Bi?yX|744e5M2C2rMBa9#cM-nHVE4;`0 zkn$@lHO>Xzgh!pKGmX!3o&kboI~}Q&&`HTksrB}etL^$|41C!M`hc$3;bWm+O6>L# z>02ob_??~IUTAZp4a@!o2d9||GY}=)E<;`Qn6MgtY?VL^Q@pPwW8!v630a!k22G@g zR+aM;vun<CgNtz(z8b4!YnXIh%f`S*xp?&3d`Lixu~Lz{m*B{W-7Dd~kd*;X@WovO<|%j-;UyZGq} zp&%bQ^NCk znKn5NWiQoC7AD7&V@h)O_EEIxqFSov+X zO=0(lMm+Xz89ACqE3zBbESRxdTd>&5G-yM+KF1#;4wzqw&FGJYZT^h5YgKUw^ zz!{$>3yZJ@UcnY1xMMHshuY^$VwegL!5$d0`be*fC&&Jnx1A~EY@MXP#^(i zMMS@+_1HYl%U}$^$d16C|u@zIKH#@ zA|dU7=e;dzS<25$Fe9VruxlsQp&(0p?U$kMS+~5bi)~02N%`9RR6~ho-QHHz+eaDd zPPZjrwh9%z&Nfb~@%3H3gOme5cD(F?EqtGqU4|6wK^w2En6t&?DW>3=SC(CLz0)2{ zE=6a&tfHM6oN%3$g8UKl>>2`tn2~+jl-DLjdQJ~^T0>^nM5#@AKZ$e4i=9+JJtM-} z_o+z$K-CsV#sasi6UO!(SoLIO3)LukDlgvAMhA6^(i%dczeEr7VRjM`u;Z0q@>%m{ zWZUV7&9RL3WuAMz)QLQ6FOq9v@Q#SY!8^YEv`f!rUfdw z)=xDL?zP%wNfa$0bIA_xJj&ETE;IIEPuTBYr@$VLde#uL3jMBiGpGM9R5|UU$iKbx z>4i(N#HdJoRM$_~H1MHhNV=x+%E}=SJDeN^t1~m@Qph-ZpQ7YuFRXkEaORQiLN9K! zC0bs(?KBhUc_)0`OA}LIZIfKDU5sO40I;Xd5))3-#!=3&J*@JKW}@$_x>pujxHigB z>o2g8D5$7cMzs+r+yAMb$Pp5or9X9N1z!=Qo!Cn-ei!rUGTN=VZ6?`@++J7&?Zz3| zLhRsxTG*WmcH&h}-#$uPwW9`@x&m5w1nJBGDcx*OtQijqUs+Z`7guxJpy9sE(g}#_!`|@g*veAR2*cI>8d9@7Tms7At>O6O81P$FU3*s8?V{%nnPpc*U zp0BulOzr0SM`LT|b}AswW@ywMu%#o*Vz!)fd1X=jM)1-kl~W7WT_S&=q%%>sUEv37)4i2|Wh4K_ zg74U)va1k5U@G}^M&Qb#j1O05(L`_+Or+e)7|fR#9Cmgud9>?^pDZS5ca|iP(lF7X zQmrv|{PcD;^YV^;xUvMjt(?r}htEMJ71GOgk7`$JVYdr*;{vAHDP&w$-MXfIJDTb| z-vL%)vYYmPG#NDgSB52^8e)|uB`0h+~LH(ATwss1opJ= z5Nf`F@mSp?Kgv$PKmggc3+yQriLHrWpJw8H>nyP(x!!h<*RIqw?}&u%DF~%m0PD!I z{tB_59oNOLhVFSep3`iwr${}pCzxSnLANy^`L&AfV}2&7+$WcYMVOa!AVMP-6I02N zn1$8}cA%ji^YqGrPczwxI`+Ye$Z4(nCA>=21ZHa&1Gcv@%7s1>9#y9R_A*dbHg4#M zzGJUi;PKO^AwW=rN>pN%;)##B>O~u&fv*BxSuBuo}J4{^_NFI}u;2`&E|wv+wsH~fCG z>^iBjw}`6DHsRv4Q0Gf#s<|{i9TePl1#wlNp}Gf1m|j@gRA?^w@m?gS-0Q5F+b)g> zUfZW>YSCdx0Y{1KT@72npyF9nbM9VQ%0L^hCYY?L0PNm~oIa}9B78*41fx}Q`DCft zD%4FgKRK{(y|3>&K;S2fZkf4bMUE^mNP=9jTzeP(>bqwbLGIr1(&{4YJ?YEakc74CJM7Ggs*h+Le0cuKvSp)_I8aSd zx0FvZZUQr~M-FjEGlyGM{e(FbnbmCrTH}>+oFcrqD2RUACFk`F)NPlj?gN9e5r6w= zr9%+=vgKDFPI>Buc2AaNu+ad5ITc|0@;4a=UOj`AWnfZO>#yDmJGjps5oo@S!Bg>! zT-I9D}_O&F-cRcA+YcTW`(02V%8+6S#xsK$g=;e zeyf3v2v4_nd56m@op!-3BKw&~5urGwE=B&EffdlHRjIr70@irJJ)i0n=*xoqeHrYb z`Da9q%}L$Ml2X_n!+jop?NS_8U)E!h+{hA16)Oz({0`PSqL~yRGY?-`)_M(4V2`G* zEIeH~YWC_=0G)j$NBf>E;ZzY`VyB`aF&Ci8XiSn^7UX;h?0Fp3l?7gi^7eMBh3k^y zuVIK+V$b$rym#AZxTi~Q(89H(U?QGmbQRkp@Yt!~?j)8Y`nF4aRHjn)!(!fEq$Y4p zP)cYzIg;&<7e72%USG}TvxH04kn9iLPNDy5LxRXE&~V!&E~|(d46?gs*0!)dWbF)) z^<_-Rub9h}R z3VU^=&zh$WazqO{YO^UqhDF+0=JZvo1hFsGjVp}4jcB|%OS_lAMeX^4 zdjzB7T6~zj+nGZ3Gk5c{f^gCMUdm|n-a!0KA0NOSzOteVlA>_+G6h;V0*AbJC7lu`cQwdWHExiD($?j&IXRPIe;9xV`CTw zIveZe%Q@GfNCfY8s}s}}Er82@EB}sHa`@E?>Qs!N0wl?jG5=tXMYUaq^Qg>@z0v{t zIPD_0e@G;Uj?^r3XfJ3vcmm_{xc}QO0st%IQ zryzo6%hZt8{tkMIL>Noyk`*qUAn2{BGn^sDcd2LJ2yyeJY|`BD$l$15Dc=FzcRZ9@ z;T?Oh2jrSoV=gcyBO2^suv!*ft;1w&^D+p(hG2UTVl$7dEMPr`0M5bvmmgAQRryDt z+J|Qz>AXtp(HMbh*UWQZ;{MfD$QRa~sc}gi_sbwsZ}MT=ng?)f!z-yg`enUgSZ8Vi zZ7Yv#B_p%zOD3v(T1cqoO@e#M3iIi&eEQf`G;kw5j-$P&S$%2J+b*nmDY{1H=iz7U z!JgVVn0-Y>@oDK zUtuD54Ov~zx;Q52w#!IA`+o)~xup$hm?I>^sz^xTf&^0bj~#omRG&1?5g%?a6;7%) z4WD}6wS`=ikht_KkweMyCT*QA^OYS*WVd@i9JjvqD?9KE|Gb=YnajCm2VS{xKAp4K zhlQq9Cu)TNp(P6h|G*x@I|d&4W%Rez6rDqi=sR9%RV6~L?8d&VsATap1ga50?In16 z4Z)L@Xked?#i=}>*vW#Nm+|v`It5Yhl#we7GU+OB&Y)}NIg(;RB)u%|RS_kWZ-rf1 zum(giUryawjfm}O_Dk+vu~KP_$m*r)o-EAKj+dmDY~;)o*aHSlACqvc4}(2n`SPVB z3;Uzj^>U2mG(^%%*fR6TbHMvE_8tUa&%;+1ilL})W&tjmSvQIKMXO&Q!J3rB?PX3{ zK9^5cs=H>Kw(X0|@uH;O`l|`{%z4Y;EHm)j>-j`9e>z1IL@B({x zj;(pJ@HcDVGd$M*JgvvD^IkH$eJQHD$mPmHW>mI|U;(9P?ezMH@ zroYiWW_dM8d|39LCSodAmcjzW@5(~>$?{J_;7__=m){(i;Aq{Ya$czMynEYauwMP| z(FxV%MKOf-ec7aQm!ByL9tS{4wq0C$VCAnNNy^vLF75Xiy$5@ErfD_H80a^BgnJU1 ztt@@4fYEC0%9gm+-lLwF<+S7U(eg?Jw6e^3LntRMEtUg&3lP7M$5 z-MfUj23ghl64+y9>?Q2cbqa6~7`eA|z{yyGz#e90??U9oXl0M*b@I25ocL?!@!JRX ztmv%2;!VJwXW;L{LYD3$VogjvUrxnfC(v}d@TzjTM?zI{wxeD$$ldWMzrdlDy^!!eO?3-|v)7eo zNY1a%>wsJs+Fg$U((8xBSs`y{fRy-wvwP{luWLnayO^_b7SO5l1h$VHcT;QNI%_ww zcp57-msb{(-OECh_qNNNKFW=&K-rfCI0gI!C7)U{dAo{Sfo2U|OQ2}R>K<95ezUWe zEKu|0hPphBao3G`nd#?iW`LlDa78~^P>{8|HX81c>6}Fa_ApVS=*bZZE%s$jf5*#$ zN~d!7jF%4KK1L@(PD?z@%P7vSLuML1y?5~5?C;oK=tOPZ<+5n&wmJ){WZB31 zk~UYCl994d$=eCv=gZc8xf1%3MDpI{;wu**>6Hw~-d4i9@wTK_;Mv@DI&1kM?4aQ* z{KdR6VEc4ff_gcdJa_Dq&@XVyI=%Xm+ecAdQQrXkC;!O0y=sf7F5WwNnfWloXFPLx zWu=sH{SamH^ejNI2jR8T%3i;q<%&j=_jtwHH5nwZsCuR(Ivdy|Rle;KNcDc?0CFv# zW~cU|&@IjFlf4sl)KoaA?iC~6K7xVZ-OAF-nhK_|(OJTZQpRN2%WoqlLr4B(v2G0Q z8V2#M!yFKznpU!X|S`(O_~W4;{NQzH=AQxFR5d3@?^SAwOo!eCERGGI@0 z3bF=oQ|Fmhu!r<~_{rkb3o+#6i#4Q@Uca3s=Vi{a&q}fU;E$E%Fa?3zbc#YK(%nng zca>B0%=qoJnx=o_1?{hBZwfu;OLn74NN&5-LUoc*qu7ysnl{#8 zpAxsaD_>oKNQ`!u*;gaoA9L}i%V z_OA9(r;I*iKP1@+5kyY ztSmpSP=Tx-LQUHctc%3gyc{pT?h^9&a-yk%tZ0BKWLo!SA>!KT>|JY3hI(F?ZyzaN zuM+h*g(tWXHhUEc`PG{x#YzCz_A#MBb3>f`Iz*B9XaBY;+d4m*7f$wfWLcfrLi_8K z&4CCUEKSH9?RdGdANAT7=X7>yb!}!?#dzs_ZN>)gyGa$EJ5P0t^XZe`rX$YY5 zc7$G8%*G-Y*!5@ojx0C_be=xCOt$wY3+(ys6vrUfQqS?C)km>8q*E{Be#%D6-ioeP zG?Tnh37jLw+x6%=49-5y@D}=TQjg$a?8cqKPk+hEr+@R|!}c^b z3BkIuz#e{TpXTz5`d|n=zIRdZA8tr_;hH4NOFOsA;l?)j4D9i5WTF0__T4^aH2Zc8 z!z>#AkB{C~CmCMwg13AI{mHU+izZ0=u|X2HtUPfHL+KYV@p!l^3rMVphcW?svxaym zukQc}Bh>0mAC)+NexrmQSH_=L?|lJuzBfChE~9re=4gvr+iqcSc0@QSy_zo@pJp!* zyP7?B)%pNnxx9Te%NEMsHtn1K05-CfckgOgfi?W-<2IhGz>kszp>H^8Jh1B95D=)- zq~=%(WZRY6#70Gel8Rw$*!bMV0x$C|82WOLGB5bY=|w7sODE(=JO4;=-yt_KjX5CV zlNZg8z-@BLYNLQFnt|rF=1VEvtf<8QzhbdFUc6_o?VJ`8HCH2MPf&6 z%4YKLZ5M8=Njm^NzAM)hH+OMPm3z4FY%>~zof#iqq(wh)m_+*1>i46G`8ylMy&KTDk%Vb zNbkwgs=~fTt1Gi5@QdnB(yKS1F^&Aej904qih=OzXPeVGoOMPZ7PdaLxlL|CmSn!{eo1yRv<92T0=N zrTC8(W=D|<(-5$yM*!@>+vV<+1^4tWDC@7bkIEW^v|3rIFc}jBmt;svmLyK2A~aJO z_>g$jYUaIIVX)`3UsP@cPcRmW$5Z1_m)X_169)q6#x&E&f3U9}eQKJs2WSU~Vd%0L z5zR}WozawZcwp_0m&8hyYsLh3+D}}e)6)=PhaDb!sRFR_$iCxWJ)I)Bv35W+Z?c`r z;V?xAnhDh^JN7B2s|--~vzHr}--qp{A#%6qvc2TiJ1?5!(h5)H%&t z0p6OcrO9S?KEbVVTr?T`wDd;#Z6>9QzAXZ={yt3K+HX7P zqBg)_f3i(@o(9M(=3}6LK=8CHc>S|?D@UmAr(|GpHY-bVsc1Uz9gVejL9AOWcE?^u zQTfl@PCUIUE|hxZ0>B=?cq|gw!|0w)Tv;*$RrbNa^kED+)%opQI-L@kHa5|r7q&fF zc$4)V=pF>&Xm$>ikb|98oAH;7JEA50LDt;8vXY(L;2?Dd4fiSXL$~*31j7;|mIT+k z{?VkeexnmEjnTMXut#EH^b4rb<5^O?VbV#{F4s)Z$Vw4&lg4>>2RlW~BC}tYU9vJQ zi;rvSD7)onTEU)d+1QskrR}2?5-d~g!jr6`yB8*NURH?L*)|1A&8lRZX17aVQ8UHx zed5}j8^7sD0}s3HcrgpF2=~mRpbb4%w^RE+nk^*hJq99AwNu+_8e(*}kEvo<4azfn0rwpJ{Fga_gE?u%}(g+550B zv*wk7#r81K=k6V^#6wL6B?{T$gKc|1A1lx#o+Z=!C^XW63$x;~wd=F}O18TOo1v^- z7AZqO>h0Jo8^!m}V5hFVQBe-t**(d8gSR&?IYVKyR^4iw?fLvSJx~nc<6Qs zw9Lk~iy^4v)P#%d*De}lG!A0ElwF&fvcUFyYx(h|(8)gS!{x@=n6i|(SA`n&FwfDr zFpO$VoUMdqIdlGoOw4=<9|p?oC2V#nzdK%1Tn#spT`CC0tpi>2GJjd=4|RA}$uTNd z77Je(vuX_FfU{g9jJ`uUSm|_Cn_JofHxq4fe1>J6^*2XY6jf zz;{S`dXY@iP6Zb(=9y){_II@t@+akXdH2Wyg8=&Zl<~<{)t_jvN31{1ME(e5M;U1o zdw%X-S$Ok;?0N(RtZ3$_3fu8+Ak|C-o1v8IIGQI5wXrNQ*b};J+QqTFnL0jAC3R!D zP_-8lTv=>kIUZ=itdCE_sl#8}DHGFm$Pzf6-{!?(<88LJ+2_d7+iMMF7ZqnS4;{XRRAtF0X_sZo1u z;+16s(96r5c5xLI0O>HFw$o}uhZ2&RnG`nGdc^)DueG=7>XPitg5<~!P-bzX63ZS- zP`WDPZy}5<+gy2@z0{JLN4Ai~+PmC#{Z5$>I56pVJ6Kj&yqAV=bF5&Gi7K>_)bP=m zGhXR&m6|1}d&eZ5#cU!__&?G3nPlzvQhj-IFfu7^368z0rxhYpHHu_fheslTcXZur zmu&d%4NTg&ipRhn8<|G$+2B+;OuIO+SEYPq@rKlMZ*v`s3&Eb$r|jMAW$w!)^>g>h zqPZ8j)q4V$M~J`wp|rqpL=ITa$MB7pB>m~Xoz9Zb%?EC;=zDGy~0 z&Du_hvn99>^Q_l2URmLNx7xyraqPpQ+Z=7NA)uw3czk48=?~98S=lpOw^InS+NhOP zu!@`(P3@PEgCd@YzOs}w)V`DC6MN?+4Pd3FA@F<^f`UDKUf~H0-`k&j38K1b$vRhJ6L zsg8bS|7Y)Gg?lXhQBE_1;;Ku?dDjp}n$+;LnzeeX;`R}BCOt5>t@|cQ5(2Ji#P|Ut zqq=HXQF@111(tJ*`_CEn$07S2Q2CpdMJe?Gm#TG={R-vza)v22j+cY|`c^ z;5?-J+Ex65#XUNa8c6GNznnu4b_C2RUov-*)y&)WF>8637(>a+Zy(`>hy0?t$*_tv zR+f1BQp&fF&TOd-k4bu!uAXz`OQBQ=;Solb{=XfKS5`I-mMV+zKBx#z?37qi7TaoT zlhvL+!a2~%41r6u?+hQXk)bkY#HLL>A!3uNSO6kUn2>ncXyd z*Th}ebNZMf<_>@$s-j4h1AJf3$ssfL?4~}SRzF$dxXZ~LBaa?AjIP=p_=) z!y54@zbi|a)+ch{YCjx|i=7#;=X1(isM{Vd{l|#S5LhBQxtEx?T{Mz>Um{8Lc!TrX zF1V-8j>P_mMQ7Fnd){u4(Bi{!Q|jKms088XXadlAG`QHeMCvFU`;;7?5;xbOYFjQ}j;Cl%7h z&m=Z;q?{L@n0Ifx zhN$efRcT+AP%I};)W>g2Nq2#7vO`+}VSj;grzRhb}@c+8l43fzcuaROlkgJ8qN)w@kDm=o-UtunWoTXzo%&;^gDfY zX-H=5+3Us=l%BBFiQwYehUgMCG$R5}>C<|32Hf)feHcuZ13T?F?Q%`0rd@2GRZ^GY z!3w5S#CIuig50hx$lk3*e$ra064@^^vrA!tJxMCg-3(sGkB;i;-)a!004w`+eCt{_ z7NzRR!5-0ijh8OiH?S{D7j4QFEJnW0*rzhFi4jTpw?*TQSGGg05@fp`zI8-{J*BIG zJ$;f2^+A>7;Va9`FzNd;w6SS;?0qsEdpAe>Z8KBlcTv!jmCA!zVgVaf_b5ITrRS;=iUy!Qut(gxBcRIf z1=LrTJbRTy2*Z*L7+EZKCwo=r)XAk_59@bCKUwT~X(OC0E*@Dqp}mMD>huz{$Mwn( zzCAuymM()u`*Mumwo3pgn3%iF$frJsUU$1fFK!?U_9Q*NFN1z-lmRz>rbHum?&WP) zAZIDT;V-tC**jTrhdcv|HeV7Dz8ab<>ujptPC@&Pl&$O{B!W)gfdCh(AUirvOGs0e zGr+hM%1Z8d$UJqmdG_7hiMs8QI4JrR?D47TMOe6Zg75KCN|1QOUmsJu^Mdmu%jmHS z^|Iopjnj-?y#Bsyv*hAv?3TRVt|7Q5CFAonz{$Jpr33lax&=>lCsM82IUQVfSI&wM z%R-5HDeugTSxvrszNCogCFyS;bGGg77X@AIwI8d(MZx{sGz87tm`R@C6(e3*l6++TFM|pDfUA zSFe?8ICp@ukF|&;w0LbF1$$hcMRH{^cD&j&1X!gsd#Mj=Hmn&DO+AdNtymQ9feOZV zBj-4*XCqXL3unY1bSInIr3)bF?+X4 z{m?ypZ9NTimepmzt0>+?Frzz<-sB=@beTN!aaT7 zkf6nK-+KZS(+n5bQ+6VrR3dP`lwT?CdQ6@8us;aZibatu zUEmwovr$}!bgKTLIZaPwQGADly-mL*0%^kNRT*i(U( z>tG-moU47ej|reRgqHNOoVOQ>8bIUe6yw$f_8xsTT2~g(*tw>7rRs%EoLyqWM^!W~ zGWe`*xW`J^FT+T6v;|e_3a(3R3x|MrNtD+~CdkRuDi?6HSdt;oGANG{4RnSmR) zK3S09f)U}&r&Jw`{*?Y?@6n8=mHVT2jw}O`EdTGzU=YV#Pt$^B(ZQbVT-}Fh@=cCB zS<-DgaqJ+=Ii14xpfzW(CB3+zx+|wuekeh1oeE*1g-`O=fcKa^*VCteQ-_WUftX$TMRoU&=ACG@<( zm1P0-c!h=9<$0D&C6|;iRE>yPVU%_~8hE;1pF(_W;Ll0R=Z>yIK}gY^$KZpDYi_&X z;{Hug^r`IA^ul2tkCi%oM1dBM$q!SpGf_{Lc6F93!NM$Nu*ZPxw8|`5-SZ`1eN5Yt z1=Wc1X5s<}>YOc?EPUOSO4;Fqa~P!c9a+0oVB!+vH^V0`Q;JuYImTw13HCs@=S!zu z=7ryx;f(3)q`gH@CpTbwKEKVA-=DbIwkIp+#+EE#Wk)2{0aa%OFTuiVb(xrlX0I%4 z#EV0YuZ@Q*_F4yvrlZy-W@SlGfA*bl+g+>@Os ziy|YG;7wb1=u4l$=%yWxCbWNr%gq%2HbRIth1F%#&I7;qjZdHtrvTp=v#!e zPYd~~U;^y<$bv-f-Pr!6|zQ#EcmFtyK?5vTTVEP*|bNP4nJt`PxysOPjR1vqOq zAlp=w?A>e^IuActfZndh*z+nT5Gh!WV<%XcPqH#af7eT0SppzizvfdQc=KP`?6Ag9 ztqL93c}&vpTkFH1joC$CVNrIbn5WM{KC<+cjhjnE3!bx$Ydj` zuz4QFbL(X;Zy&AB2B?r-D}m}byu!XLC%vH-MkcxRk|q1N^%IJY6CKRU2&~#x!D`aK zvAW0~OTFgtRBEqsV%99Om1U(DVoye>6I0M?aSF!j!&D}jTlk)DVA4jk>_+peEbvQU z-|@<+&IM3olGpWmmMhuuVnVuHI)@@vy@|L1_FI)n*+N+YE)Cl;?SfrR`|r|>|2*Dl zS0a`-7sqSCfmJgP_Q)a5mjn(y>0l3(bSCP_%J%Q+1yIfS?Il*-%uhqm4@Jg;J(#wg z#{}c;@@QWl4}+fn5KBp-j$$L9LvG|tw_WN1K843}OKTVcR0^@P^}poh8IWvIskl}T z)pcyAK&Ij`txY$#kE;IZ&~%wK@89|hFz%i9$u}1I&??>9mqRg+x~cV%$Xa_3_vDnp zecHO%#hj#9AIg{$8Ve?3;a*wt9WRc#&SpRdX79*|hR^#bNorinQ=4+UVIF?6RDdt( zLe+9S(aM6iO25cuN$0L=FOlrX3e>HaSpmpq+Qr)AfoEodpUR53%y5@1S+P|aI466R zeqVOk69@LdGV>+NjdGq9cKYZZw?EVDlIxv@SRq}~ZZ!@1P0Z(V9Ach_61E9+3OF|pJ5uM1Y);27W^5DHK+p(#0 z=rfx~_O5`tVo^y34m5XfyRu(sXNqGL1g^mXd%9#Kwbg6C0(;)Ri7P8erDVxTP~K^X zB#kE$j=3pPzJT?cPUPf@>N1sKwltG_6RCqmbs?RvX%`b^`s| z-lx{5w>^m@`nUidts8>Leuu4{U_hwJlI+-vpWC^Low&ehCWfjj;Mlt6zc7ukO36wU z+js{xABd)v6%$jVDQ>6@FDCpK9$ozk6W833Btvb}Og%~QzM%|i>;Z^Z-+N_cb5iLS zk60C|w49|}?Ng{wEP>cMJ2dk?#T@Ng zc%kws!@Ht^sLCVTW%ziK(?^C9hMK_!P8s4^+fYz;7XD;`JrKf}4X`Ki(ex36&>;>O zl-ibkSvwZc(-wYbR2TUpI5_RN?E*OkG4nDSy=!VP@DITsFalB9&ae-&*tcHd$--f|?RbY~k83cr<2c zzAS@ZOPyPmeA@xCuab7|!^uqT8lsFwf7=DO^ynt@yO4nD#el6W>9gV#&^_$^-p+YK z^|Cx&ZAG;}zL$XjXK?S>+u~XFK4}-Fwew}hPh<8Hjkn$aHcP4{caJPM2mdoG4$kRw z9$b37?i!BORoY?zS6A^nNWW16mwhk|M~i=+(S&pO;(6GmiK(?M_l>Ol^@6?PsAi_% z9LhLdPH2Go-iP(6^eal=Bm#imC6(s5(?$4IRYogIbWru=V374!4PpH2GOKZ?!jkw6 z_ObUI$1CeQV-J}KK6ePRgSfh^6t7a}V2>>vv+`rHy*%@XLZ>u41X3kW{qC1V!COzB zq9KlG`p8MY>YdvzD&Y8mxefMoX-0fhx!$OCO)J<3-fp{cCdAspY|ZWM+{R9xb-x7m ztbPfnIg{1ZWVt#hws>Xv=Ve51pMek(xJDD5^>#krKIVj~Vv?l0#U3jwzs$MqQXRoW z?OhB*$H=s=0fem$4Qw!HUC$)yc)`?}8Gz}73q@9vP4g)+8x*ydymmq1M2{6K2&Am_ zJbe3TYf^_2mOd_gWGNH+l5eWx+^ISYR&%vu)?^gSHV{c zTN&xToILw>IY8w`URRdT$pFsNYK0s5CH^U-$GGt|`!IX{$$=rBHpEGMs1obefD1Q3f(&pQh*F z|Flau`I5aC_5c?Zccg5u=&{Tj>HD(rTdPaA`hyPMU z)0QL#Ezs4+1l{qXY=WA78h%~YQ>80!F-j2iD#jt@sc)y{m8FEa54o{c8@}=dhIhWi z!BzT}H4;Ma+J-#DY1=Lfh|`;wF}KBhix$zXbyw_kC+fCKMYCvYU$%rw2^4)aa+{aF?FM>E>-@NXvVJA zqhcPWBJDV`@H?L~T(Ti_(HhvJnrAcy&e4ay{3VK?to%Uvj6KCQdZPqkx>=du2)Kkv zXBoulJmm6ZvF{7nRR;(yrc)`adZ!#*ctP*WPRPM4Oxr$&1O3oFAo?~_R;DHn&JhmG z;JQT6oWZ^A0!69}9_$gH*VC!^-7Xu!}LlxUf{B&3L)>WqYjl zU61({^~d?05dnMDnC#11S)B^kU*16A{v6G1S8&g+xWFEZZe@j<+<63h`o}B4p0{o1 z%7S~k!i)M;MiyZOaP3s2tacTfja4RcR{oPky^8QsNl?FX!&~arDiq!q-7~EgJ-)o& zm4#EO%^?^DEZ&Y6-uF`pln`e{qjBG_3O-p}ScT)3KKg&Z9E-H$g}Ugm&v7q}F&X-2I3#+FrgpN8`O=ehHiFHU0pm_y z0s--9ZmgFL%fAnUJt|I)`G2yI)oY_cM!~^;nbkGk^Ri&F>Z~#o-@RKBxH|-DefY8c za#G`kCsZNS2rz^{tb5yKv$91tUrw3TMo(amWwWBWig(!U89pfS{igVn#VZxyl6S)L zt!UL>)l8}KR}g(|=>GF&O;4i;3LKu#x|)A!}9MVf*MiRe&jO z$kA*gOUzejBP6-SoV&MO(v5w}fyG#*u`KehI^}eV1$qncUJ8K9ez8Ev#Ti{VCj6FUO@X-$qD_H`b7LEP6DEr7tHBT=+YAIGQV8Bc7Mac3Hqc=A7!~vm zyubS8T4~hisyx$&VgP%(8W>)98<3-4q7EZ=ChGPvKR;IyBG^+K9u@bPi%}5}+jn=C z6VhCG@ni*eZ?k>3651E`Y#-s2I{1~tmzt_Ro;22IBVtlorZ3f=jiM({*Bhz?JW>l$ z#@nt_=C{4zX!}S#EB|HI&j6jmyj2l(8=pG&q|=H?%2us%)Ua-!g$OMafy%RH8|Stw zTf3Hx1wE4go;Ac=G1GgQxNL_HW<(CHED_7grJP=%eNE-OEJ7x1FLSQL%2Js4O2Y4W zWjv}=7J6qs)%x^V1F7{X$Z1JDKze1VW-X(PWRWh}F9V#+&a?}o_X;LXC&XEgVScih zq$&qyDEjOos|M^GSv2ZX0Bt5JeoWCvLl@}5ANFOAcc~A0j8oXD;F(`4<+h6pY!pc| zo7v6A%UaC9KW=iqlwXFwd4wkmxUHFT($kxoGa{z^ol1W%?TlXVA*@dgZ$w{NRwJuE zpOX8o%mK%1D%OgqVqgt_4}(3d?&=pi$m-7MGNO`8^D;I}uryzS zL+dt-w4m|~?oyN)@HyK|OvXFe=!};R zM*O_Y*Qkip)pDLy zab*b|YKJ5C$Ng=l5U@_zQctZs_}MW@=>aBDu1- z?K+qylsYPII%PnrCJ^j_(f3Q)-%Puq|r7>{2i~?MgLI`ys&r(&{$?LXe!&mCG|; z=pM#$tz8z)Hj@GR)I7uM@umyyg``_SuR**tVp`>4sJW&;b0&E@P zDGy&+Da>1o4)&on{>;Z=B=_LAAR*dp4UMoW7>`}(sE|Hc_ z|HdBd(W|k-*q`j?+PnEdj+u&7%&5Yh@sjk))`@-E%oIpsau8Ey@q0W;LJ?E)^WxD_4dsY%?a&kO>C{XG##oKpuE#LQ9ZY4*`Vzg?n`X`|!#NPvtVfsl`j*AHtW}Bq z_URcBGO1w%;m(q+WeQi=8FxkEHFo;yDz6wYKPCxu8!Tg zN73m%oa+42i6G&17PfJLU*jySZ1MFfrx=g>9a%j5BOq?Oly1KLwnqtU!JxkTH2%4O zv#_Jf%Z=ryjt?2#b=zuv8VKqW7&)R*9UUHFYh=uF_qK~Yr$YO5c+c%)%Bt46QdE9t z=TXqoH6mDFfdB;{wxDg=}$?^Tg-u{gfetX-sc$1Ay{N~)#;d`oPwKfKAdItQ4nqXCP5 zr(Hc+%=?lqA!Itz2QkY_831l*CQ74n7S!~S4enqaO5_1&bip2h#i$z>g;1@#yjIy& zkxr*~(UeLF%9CY4f)G0uTlX>*h-o`Tfel z885g8I@>QZ3onE|h(Qsguw`GSA*)|d5N~^Q^U2B}Y#(FY3V%V-Jzk(%1$B&5Y|{1- zekdHxn5E!%8j>8u#xT}m5X0UDg>MDiZCC0o*CZwBRV5>-E|zj`_fv`Y{=>2V=8qh@&ve+YoeX z$7!e7uI{R%+PDMGNn&}&ONjE;=kY^1xwJZ^Ah4mG%~<_oSZI;Qr{3|B#uD^Qr!3dr zhC=x)!MzJ^Y+9MCKrEH74a>9(khxN)uoyrL)9i&*W)+?V_PhhWUc31C>J&fIo7)0= z%8dt8Hgd@ZwVFqnrH*UCo=VW3-z_M2X^t6+=`z^!5a?}}y5m0n*9bi7`%DFO>5X#P zH&J>o;Cbxpl?5;<4Vq7hcs_hi7>Ct9!DF2b&xa#6k0w7^w6zu>G~ZP-N}P)ZrnYvA z?1vr9@QRGCtkj~HEL2Cik{oAP0b_QZ_-{I)VC3cOpDatP;vwehg(YXaqEL4FKC)i;b=Ml3Lsd&4c(iHH9-*NBT#Roa(%ABiv3o9(J)$+9xP`M@Dq^VqNg@WCd`og-Qv{x)SD^cNkse3QWwb{D6ly zGe;KOLnZ2Vj;xvy(LZ>0%q$dyaj1t)YxyCibb_2|wwplvHiTWM(`=!j6l47Qs0+xV zokxI_6)IV(7?z<2do0$`K7dnOb;s4T+M;1D;f13x+fo?|@ex{|D)M16Ao-cWai3nq9tFL z`(*JP-6_zdf^~{qteql+&!#cf?3HF*Sq#pLzmLHJy5I5A_cGRho0+U%Z5_#vOts%; z`uew)jRzYwox&OPeq`E2xA(49P}iKbTym>9L+?TEU)%c8U0k_su~*7Vvz^?gm(9 zFB#?KYK4DD&U#pN)AgRWT>@1h^}ftftfx_vDO9SqY<$Gqm1Uv7-y^!W z6PxY=1Ot0F7D)aA?E7%aI!-&DER0og9ZXF7N4}I@o>mL&+lq*nA3JtsNpCdj1~9qT zeHlF4$X?P*?S6?y!raLI$pQk3H-XNO$|Fl?(TQWb1l~rb)5nvKJP%)4a2_|mFQW@f zgSZt6ws(Wr_e(-`^jPj*SzsZBoTn3T*VyAWtfRe~s?pULiu!6Vo-BG^vwlu>-Y)}k z6<}LkpP$6x8Qz+?vf?{h7Qj^mp`f^Hz_Wd0V+Fc}7CsB^$bx$e*w`HGPZ*wGr~I8w zpH6{2OwO#=#4hY}hTR|^Iq#I_+Mfot=n zAgFb{U{8*W%iY_@?2%n(fqf8%jIIXz^UWhGwE1dsf=BGy%1X$*E-#T)Z*I$Z6UD(8 zt*21YRqP?RQ)8ddp>QD**m|CZFpZL~dzre&QC+&o%b&~JNAXXk9k?t6Mm=rnnhZ+m z^^O2r`1S%GS#XZmXKGk4-gRc(Wj5;k+LbV0?qx4!sB7N|+=I=XP9?2X)GY*%T+6;J zAX@%DEO7JDNo&3RR~gO_ZB+#V_K-c}1?MPKSev7ZpEVR^ti{ZOefC=^eA#v}NbJ=v zbuJ#;omQXm;w{AkGa@eK^k=-_9L8-%0A9jmR=aqxs*N)4TyM#Wv8$(bvI5!c4=rwx7C3?cNtt+2ls445&#xj3v??S&C3XZ=1cs{D{OqS z`1K7-OtHv+6`jd_(fM(RU=NOKWikJqe@qEw!R)NowFImeTevTyYH^n%%Z7H;cP?+c zDDJBpJzv)9%BONUq zTH!C`PO~g7%D_u~h*DPj=C_SdQ~ZMIm=fCw$0x?Ne^{L4|F z5n*M`-8`LN++P1^;Tqg+7kKrc-IK-f6bECLKbz$RG-X#&cJFY3^I$yWpM= zA))%RisXSvdDQw+W_8AkWy>_LED7qz`K6CwkI~(iLB^tPkw2z=>{rTw9vybZ3-0-B z;-`v$(R7(16oBt#>KaFrkv~B)+b*+K5h57W)S4#txp&weo!(ZPG=QySfegh;F_l$L zf&H;}Ya0U9RMcywYR2jE?W2&eA(gtv&g7X0VaxQ9g%R5CB|7W^m6 z%sMj>4cjltcJISn6sx@RXf>*Zoi7I!_9?RTzBBwGJr{u*N*1bRAq{q>;2e%-8sd^$ zpDu$vyz6uV>|qFwikv=D7>w(5%4IT0zfPr^r?^MX(Q=)sa0$bgEFm&iJ}-y-*#*ds z;@;|Id4%%BYW}#UynEYaRkW!@>3tgFr)4T#WO+6CNXbm;z2Y7=X_f{0J`v+IQv#^= zi^3`Bu(1=^o^0*icELSGS4(T97;j~P@N2)gT{wBiKB3hepW8=Ez4k1^IgsJbBNF9h z7?0IO&=gw@`b)K((Y&&TFkSS)?5-j~PYmI%;J(a;`WPzsb z6v$M8g>|ly<>>iqmxN-G|0?ZRsTnV@r`9&u!{hA;@CEM>>?;f0Z>|Fv>m&{n-6z@U zL2u^HRgD<*)r?k*VR4TM&6|VC zCdR&=7>CN=aN@(@+-@Jn1=gYR`2Ia-A3Eh_~p_s@nY$! z9s?tzF<{S^-pLl9^WigIa1YL}o`#&)YgunXiGomwlqEeaFPL)IBiuu2MjHj!{C-_3 zgjxRxJh1OG%PcV0dfIW@mEz4NgJ9)y`jS}q>EFch6ezCIRgDA#ckIb!`|4?1s@7nE zJ@zk*TLOEc>MJ_M`>S6JOpfT=+e*B)78Z==ZFjs_O3rv5R&d0q=koRuiT?Hp99)=$ ze)ZAbt2*{UP767-eGGM0wJSl1DEi;0;G8(fx?S?r|KJr;fEF`@Y<*OcE2m@X%) z)j=_9)p4!R9nhI}L1T1#I^_~CSC{#<*69?Sql~8RqOiJ-FZDP5GEQ%Y5A5-0CXVg< z!#Ms11kMqb?by2(I_#$uG5gj&{dW;FOS;WO4GBE9k0Og2PV|k$LVejpl)J>7HKmM0 z|M(7=vO(pkoErTCdw|B#nD8;)pH?RaeSyri(b(8Nc|WZxd!L+ijV7yF)pV&*d&MbF zmXNs#9IIpjePB=Tz6E=ft8BYcF>;pYlZAL|JRz7WUrRMBY`d^$yA1X~D?9cqa@F2R zNc^@@AFq`Y+sj$7z;);dKxy@^Ee!7I-GAv}`5~~UbD4&#XW7CAA+}urLV1Vm%~H5L zBf>>dz`aDd6vj+tV)I|g6BoaltzDfl%Ne~p*!a`dWW*ZhvF*w+QMKZXkCibEQR3|R zy~OL*MDdo!tYoFCa@UX!_wiQJjY6c6B|%|Z&t5urvg_rvvNG`Kzhfyh3 zg+uH!Nxb_x>VkvA&rU;dP#>J5@T&T#gI%YfM49j1UgT8g^~|CU-n8yYJ(b2#n8#7w zKE{`ni`UbMBg@1jj}R?=q+ zAS_Pse;blGb^TEExW}Gq@}MIN&gofCY*_&|*ppQIuU&ACKJ+D4b9DmFk#`xZLR~o9 z(R-JS+f0QHDnF@9OzjsPYS**ohXbxO~+U99TP44lKae>W6Act0A&xCZ&@82} zW4~mPEZhfs0Ibz}jS!b@yK*FGbt<95lAsJSaJHgF0uPkt`qO%08B zAp96%#pG}M`;!IBRcw_4!PSYJ)Ki&s9!sFR?GkBy@{fr_R?%@izvBbWm&KC3otu$; zM9IA?L-D~T6nn#^WD0uE4^fu$jC~F>EW^pDzO2^mBf6){7zBh}YmM!BC#;@^fIW0% zM5nf=Iji8Fz6~-JNyTL~X9f1OHvoHHD)_cbMq2)8KP6Tuy;tniWml|*Ea5y16n;3- zR0n+M9-P9?l!JU~UuIk_-fm?jBt8r7whQC(u*w;c?8+|{VJ2$dZ+3Q7Jtl3^%C%qY zVvyi`Dus<}8nc`GWe(1lV6!e*0#==>ly`5tLO54-ox2s)DGp8^b-n~L^$r9+=~V+? zSvl9If)*KxRszYP7uB71sr4z(g3i*AYL`~Lyv%u8WTxt28iLxWYzVeAnXA2^p zZI>b8Kle8ED$Vw0rFdM?#_=r3pFqF7du1`gY}Ux)h!no>r7o?FMynxgwq3Yuvr)1@ zf(`AhCk*`#wp@}i8qqn_xe|HNkd~#9RYnTCG3h1CysYC%6?b{5tn3F9PaokPJ9B2d zz@8ASzlKmB{Tf$dd{8p8;HVEfyLu1zq_AUO7C^7HgMxCH(cERhiw2gU#)a%Wg8s5g zD=R;ew8SM8WS`x18SLTnw$)11Qn{p*n%Cc>&^WmnzX`gQE8#zl65aE@v;)PgKdlIDDb*+Ujr>=*Y5! z^6PcKm*E_N+dOTB*y~((t*>1bS&X`scdslJ_C*tzM8QPKO4<7uzht$_4+Yn~-(7jK z1VmfakhE683zy0RW@eJrs;Wrn0SZ_<;o72^hM03+d(S8Zqdb<9 zh?0d0sYR2C+0uS-7}z~sb_vj)R-Zna2zO_6Q_WM%n@j7UUWS2omNOimS`4e?&Bd{W z>_TB*nn!2$OWBf9ahlNK4eo7M6310rkb^>2MVM7N{~ZD5su_9c{nao(S#+rUwoL_9 zt*^t$!Tz)l&I$8Ym%_Xn`|QFmKg6l`FBJ$w8opYOpC3wB9B|j)Z5P#5yEmW8@+{As zos>0?U{4=67s)sBda{Ih{j%_}dLeUJET@`g^!=E#oYMe=u71Hi6=ACh{^5kk%%{LeqK(kPoZq;#l7xbFIVgi_pn!E z?YL#2YCFaH`TD#}%ijj~GxmtgN6_D~j}}y*0XM!aLHB8S_Trh2m0gWt7rE~3Bd=eD z35LhK?o6?DQ0BBNJ6J03&O5ffXY1JL9Rf!e^`3tAr_71~?+OUZKO(xh&zU$d$fBvsR1}W=3TkGTf3jEw)zoMBPP@RMu13_u zptpS*PFza~_5_j6T|Vli{jMw~{Mr9Z9N3eJ%zfIP#Tqp-FJnQet%GAxo zDY!wi>}3M6YDlbZ$pRspd(5fM${?m8_~v34u|Ht+Hq%t1hKVP=6dwYz_AiWF^~ny8L9pF}p01)&dLmWfp&R0vy1L)Loh4;%ecX-X(lUl$}-` z4BPk<4fcF0KUL7YWcX>9SjuSD)5deBBAjr?+Z4Ua1F)Qaa4uhZvZVC47y73yqavy1 zDfG`e*)TLy;S$-iV-NR;xJPBIpqwx?ow7L+^x zd!E(3?P9OWFeJ+b2~Houo;p1Lz@7qYU=R1PeKZkGLxDXN9K_+Vvnv`8SK60kcjq$U zp3V<}J>TLUMtDbnhIHk+M9RZ~w~y!=4r9KYpJ;DxNC;Sd=)`3^%QnPH6>lFQggWXq zZo3zAvT5t3!U?0C=fgR%rR!i&i>-dBvPTmf44^KdHo$;Aa+M3#r0AamynR%>Stq`v zXy&C9k1WWpe$-N;G8zAAmk+(Fk1GqG)#WJ6MAy{h@T=lFM2tn7JBK-x#EzHTaIyU; zD0QN{;*@ChYE1}S?E*DkE!1sSxQvb6Mdm4zm|i3iQ_C}T9vjLtN55W_Gj`bqk!nv-6)Unp#LX zzfHZtr+d;iGjT>*rfPH*?D>lu$`2^i?PN4&?6E(N+L~5FLCwB0DN6CqyQf_eO&P#n zAB{DA+=f_CRpSN)sWhv*DtkWMko}Eo37A}3Fry3h2wi7pV0~U`FY%I}x@~5+U^dtz zg;r0e#Aa*`*powWrW5Qc8=lMCN1f2nz0E*vaUv81;Lbd9Z*H$FOZ%lZk1Uj(RMUJJ z>~Ye?hz@M2(pZ-|ITHo;h)cFzaF1`-%cQ3mqsvjG zB4A}1>RS0M@=Iu(KAJVMXQtpB;CP)yNb>>^`Jt_#S<3+VZ$d7 zzkQ5%EK_Ny!J>VclUjOO*_j%+9Zj&O&j1bXu@>fKu%~N~%u729u&2RV(m#!TgL}3j zjup*sm#%0uQ-dVSWUKsiAynJ;k^2(}@5|Ou0YUW=l}T6n%5m>hpw1ppzWOEDR1`k4 z@{0*Iarn~@qRL5tJ0QtC-Qjz(Ed0XcRv3V>qLT~QOW3S4EBxCh_iKF0-t!w)&+UMNPFiWLDhZWet1}MaF^Cgbk+TTmd zwe5reoW|{KQE;gn%-F|^rj~m19gK#-t@X&IRe7t03{-AI!h2US0k^|<&xe`Z&Yc)c z6zMjb|ErDB;1dpXUIu%Zzgb~m4-Hydi2gElqxWDCU9C$_enB|c!z9gs7`;!;ywW=2 zW*$>t^C589tA(%Gl}X&Mj}{yJdfq*2h<$>0XMn_mKU(EdMF_85o?uUQD6A}S;_ASa z#X!}Mr6_^{KDL>nO%`olRxSaQ@1?P?Iv5}N+3eF09A}lFhA#Y^g-G3&6$X2hgYDR# zLz31KaIK=z84;J*u~A(($1Z{CBdj6+xZ~v-wwqp9VU|T*3VIhNGFLfP{ntnRQ!;Y8 ze8!7W1<2~Qy%B4&4K#N;0|a4Xit1sza;^h>vViQ(R>C>-Z?w^6)b-a8IEP-3>Y62` zJ!NxFT5CNZUHcRs=h&oO6~Wx)i8%v0k}sWh!8yS2jIK)%puWt!HS9sztcqZJ7|UAQ zj@mJ`+l$P^%%fKkCo@2aJUio~iyxj`BBi%%SS6V95sf14c<3C&ysd^VK0H8js=JuM z9(H%eKGRk#XUanRh)=s|Gd{q-{>NtS{IFdvfyRv>IjgruB}!==$NF<64sa zUc;c^D1c*M&i0~hbq?maop`bshSe{Q!>U>(z*ThRXHJmVTzO#6s}6gz6xS6<%Gqia z$cCLR)Cl&7y{4I9PseJkd{TF1XxCpfAMJj!2Jxa~>o_?IlTO?0b&g)y{WU*yNS5_*< zS2>fMERP2+JPQ8GN@-6`O*T5$=(5Ot@V9_QS=)R`boi>^pDf;?)}xFyu(waAlyOzW zuXgsS26(r}r(Rjm7Fus!R))q7?=04Qzrr4G!@1OPJ43?8j;GG6`$PgfQ|UNsL4c+Nzamt)+zddFz5XGwlv zY9$XpS={SF1lcwSbsM4`{j)z1W*6$A{)N~pixYw=rXj+|F6OjYo6gT}F)woAS=LgCG+zdLq(1A?N?-h?%{=58pELHZMH1VPu!{>h+2F3Jaj6|+?7*I14(G`NsMe}* z1(Mb?ad3|Cd)fu(WS8)7yj<#Lts&Oz)x95kZ?l$S*?pRi+gV2MpwDJ-T}pwS%ex+h zRuDCVg;E3ije{>@y z8V1{XT{Fut+T=2=7P

dnxAa*eV&aT|;mVhq+yrNa>^gxWCVlLA>KN1g~9TMn=D6 zx#)ehD+92XXBXWl5ZL4P>Q}5p=O~h9u3msWrG1Q9%BQD~wCD4ipl}asu(!FqB^&t) zhGD0|4g_9pAGZGP;NCu_>ahqyajUoI=|m}Ivhi14G9p>@vdmW&-1BtgViQFnW&Q(u zmNW)?d}}+wquW*xi(_pYquSxQ$8Z)aqgWckWzm$K~U ztfZn|-QJZIE~Kmq-|OvpIidZ!Uc?VrxWnfsT0XT=@MuGJz|Q(yS;ECyo~I&pzm!9r z+ZN^*jq6ic1f>LLqva}RHqTTi#514TsE`Kh0rfcK_OD&kMOJ>s3+##M+`FdyCP&VA z!9AaB67pX$&_2!MtyfPTz0MnA=%Aj}dr2?3&lv)ZM$m7&kOGxTVd(nA67V#8-}2$x zE*QJ^D`0;_S|!^0sy?z;b!vt-{7TENEQBdfJ)H`rum(Q3r9wa&Let0Qq`;X~nRbOV zFW_u7Dgv3M9(t!}Czmp^V|7FCyf2-01yvUz;WA0aUo+vH{_zjyNVBG0afa_?$tMe_ zT*3>z!xvANT`D3e(O8oWLo8N}J`X=xDMPML;m(@=&Stbu3C zSo~iflhx{kcCuPq)qS#Bca~4P%s4N#3y}78QX(7v8}^9u%Ck^xEMB#XmDygvIqGJr zUGhN{GArh(oFQwb=4QvswUsf`oI1S^HldA`)3GYL79-qi*NEhhx8gcdzFOgTl7dU> zp?8Q{`=!Ir@7(c975pYb;T+05>(M1zZ)Vw~{Web?3oao3oL6g!nXQ>PQAhuLrr4XY z+`EXAU7pN+3Ws*=DMS&3xC!~A63tsytJU7s57VGx|2#6|_A$h6%_G>;2W+Q^sLU+b z^Mc|FWD+f{&Ee4i)>VS+%Uqj-?FopVK7u`E2oCJ2STy@oU;WAbl;vCi0_@@PR+c=& z7X1bGd^o-wd9%Az1SNsH^D@}eF*3&@?%lgwey<_v1OZyoWLEpY?K#C&GPKi&gk2O{? z41I&Z=4C-jk^fPU4=4(KUE_7qr1dgFqU;2F)HQ)TBITVgsduIoxx8av1i|Ac$=H#tiT-NRdKLzD|XZ<@hI{sf`Um#~BV`!M{9QCL|bsX9|U zwJBAYz%GiC>){-3elAbD7*R#0^C>u|XUb*oPvdrYxM{UHg!R_fx(1r&Q*e$IS5M0% ztnXkaL!|%u2?9<;w^Pwum&l#9lwgk&GG~^}DX4NpKUrexB@q&{yihfR zZPsKIcLdOb!p;3K6LY=ik;OHrZJdTAtySCAVl?2O-^&~+Xg7U?bAG2Sj`?`)cgE#et~9$zV|pcMgMGvEC1Cnv4Otuy|rc?{TeidX8C zMT&VEn~27nL$)lMm7)@e;gywhI(Ia|;YfPM$7dwQTwvG$mM-g#QaVGI3ti8 zYUP@6Qjb)>V^2Y-@5sugr;=rbl_m>GOyejvoRgCQ^X`+y<`iCKar!g?wqHT(ekn=k zl4aFg`1)ie&#(g&4z!shNM#o@4=+sFPJoP`+H@gtZ-oPU`o|fV?=GSNdzt~v4)(6? zOmR=q7hsPx>U4_j`@Edf>2_MBzQ6f2i@R#cz#c<1vcR5-a0o(z?i%8v-j5#K@yZdG zyL$Z{VZSP(B(f?ZBN%-6ZOlf1X{g!wnC>i8UOZa$vJ$m36`@|1_Se` z$)lX$y)`#oK1Z)@ABE44=e_NM?t9TNc5vgo44N^_dkK=)%-9a}so8STvJ{Ni0=X}X z1&VCUZ=n>djzzzo__mA5;fvmi9kgVXZj7GxoU)aIJHYY7;A*(Y)=Gk*nt5e~0^Aj6Rj_6=_AVLHF@6lA8s?RiUwtcGg?qYY%V4E|;x{5L z<>pEj?sX9;oP%0BcVD~Gt@_m2Zo0CJ{>Cr?t2JJ-TEB9gBg<;j%$X^d*zdYbW&5-X z&Ix7n`;yB5$6P*HbY#g!R>PjodRkVizXZG%lMAQ3vo)VAfm#)ENNaTf6ac!~hwaI) z25q}iGqbvi@M8-`SCJ&P$JeETr7~Cm!Yf8UOIqiy-!xQcy6=9Fqa_>d?@ECifwj`mcJu|o~)$1cd)I^=kiW3LWHcwz&UW? zEGd_4<9YYWinf&!D7vlGc}^&7)QE0vFNI)#Me$G8QNS4jsHV@qC+M9%dYj49)@Xv5 zFLb!F@>??nAUIwe^N1FGcXl$n4EwIpx-Ra?a#c<&Te+4PKWtA^MHYJ%Ze&kz$H;I` zlX^Larie?h2g;mgGDkL|)TNMm*Y>HDtv)(20(jY{@jGi~^+;Z8HQ54twHLRK@M#zL znm1v}$}-q%CuGYg_UZ)N|5$=6D_gs6JI_oRuAX&Hz8gYQyZ8wy_accWi(e{T&8nzX zf+#9lAjA+nJFSMQ-?_P0R*rQjZ;Ca6x%TP6wOyX6^;z#}KLKf__pDjRR*3=2Y=m(y zr;oMlwDPIdKOesBGMRlGGX2obF=A38ySH6psoKT^_Tb6uW#D6hplL#Nj0I0%z?W3JQXp6D;%zsaq+N)&LP24$>S6fc zTJYDdc!Oz(rHv>V4RV>iUB9WI#`avyc)>Ziw8j&O24_ zACu%-VwX)|8PAt)yMlYxU}==>=ScX+I0Q zcydw1cMYk!rTO#an7+~=i73!z@1j1+5HPtPEXPdL5gclL0E*RYy4ds~y9o=9Xw2;M zJGYPUXM^1or&P%F*x|$HWLwitv%{>KBDKN2e~gFzd=OQtDbD)4?Lv+8 z4i1SJ(bn|hBs_K=Wl}nQ%NxEF&y|H_5m4^S;eyu42wS`44MS{|%){pNWumSuGxIs~ zS<0g97r*-~=UJY3Brb1dDTlj&;mHcKJDmc1tfJ{uOkatHf-oP`F0e-~YV8De%m%FK zR7!g)O^W>q5c)NQ=ScKEmzHDitufXN=V)UngHKA#JS}6I+6wuml_l0Jo*dlD&w%c2 zrz5ZHWpd?>$Lb<~`j9;QOWK)t&v?N(2-ta=-%v6!qFvIN=@gv9TaIIfbL?(DgZpHG zzH3+E9D)A6jNU2cJEpHrj)!v)(k06rSF)Fn5}1{&B=NVI2*QdL;2bvTH1oDACGu-0 zKt{?sDw5?`$xGoh$)gi4bF9IRmyr2O_oSHrHx-F!+K@`2KJx6SF6-rqkp=gBD{xqi zauzmg^`;e=oG;lgoy{U8iQ@Y*Z7ln; z;(}cUU=KhsE8pP!!td8Ev1kFCoKd`S2M32LTG7n+E225A&fcx|+X*G=%jUfOHb_(~ zrxhaB+R>x}uP*eqivgGMm`*|ewTl4G!L03gd9x0`k|_%0kIY!9Uc)2{qz*9MIEWp=sl!UxyIU0KYTLD`qNp><2Zmi-@f7Xh(u2|zGU zr4uTzKhTB8t7am?Q77}IVD3uDGT0q&Ga^93emS*11>P)2B_=CNP`t?z#U?cS%<}D{ z1&W}Ur+GLla4+RmmY-1TBYs@%)898yPZkfkv{F`=Q-AvkpR6e0 zs*D77O)J=wBInkU56%#8OfVlSR$@1=o zgkVp81Yn-#4GN$N9P)!Pd)JC99sv83WZvGUd`l2Q_rGW};|2EoNQ844g7ikvr(MaH z)o!EEJB7&^3DZ0}5qhUK5rp26;7&W9EDYBUXOyq(mrHr789s{>t+}Ex8?UJ0%F3qn zUCeM!Hs=4j?D7k2R0tLvInh66`jV|0{ zJV(EzwGxm2+67GjRIAB6d|O>6Mj$)mmG8dVjHB7?W-)KlSj^pg35Noo&Um>D-Y;1~ z#0783t2FPMp)W{aZF20}YO%rvYiGQY)+*F35Cb@7L|j_EGn$M)LVjjOs2NPK?ZRt1 zk#9alHEZnIE?9Uwg&OLj87#`nPTqFqaEgXOYED;0z#e35eaTdn?_l{}h0>D+LUk`x zJTKhmcRyMAn8GsXrp@qgALR);szb5VZyINlN^KQPKJh~pK}ek+Qcm}wj<}MhcQosR zb0C7T6Hrj<^Q&DjdO0z$hoP9MkSOlLDv7#^a89It$LEe$im=LefISsIf@YoWM*P?^ zw5ls^c<}YfqHUel0()xW!uAx$M_*K4ZL8_t%?w{zaF4S=<~G>#NmMazRRUq)oARSx z59vKwref`C@^&vZe3mCmSml`r2SM}pF@-;kG3EOk>Z#3qTU?H;WSW+M&Tjy{AIQ9S zNxJsxwkvh*mwdl89%zxF@@-jGtopp^uP*0cRJ!_G0moEeRWQo$&4`~PY zvBr-FgkMKi++o>!SnZR4l(Xo=H94`K3QGSfdXGY7kN%2=g0jnc#vblr3TFrm2;4J$ z1bY&u{MseFVe9JdNgb3dK5GLY?2je3PeVP3f{~T-=MAXA9!BLX^)p`Ro=;^qw1rmR zm$SjDWKs0RzTr4gmD4UuBzENYGMuB*cvLs^P7xBJcN|x-52t)$?S1&2rd6_!X`?zG zECmAdaw@uZQ%_=&*46MkACQ#M8*>Kd;M}*F^rtWYn;|`P?w;|&@BH@UW!B*wh@oC) zHFkjD9G{v=cZpQlc!=}t+5)p?*Ut{0yo#{+*GI5N8O(H^uGf#6BRX|R=IOc7L<<|KQ#XMB5WaZ@2ZHR&zCVfR)`9+i% zED&Mu8tS_$ZXczUKbR@oGPhGk~$uwIT=%eKC%c;uR(NreeajnXJ=Tug^LK3g#lnBNQtmsr!?w7zGHF9$| zKjG3i8u)tpb{gWdUAK*b>ca)Xz|^FJJpjbE3+|CD-cM2N%8qcu${6-;k`${Vfj!No zDemdq3E1;eil>>Wo7$x=DvJvo(ab1{YulA0Ncwha0{6?5PgZqbmaQ$IEPMU%>D4cR z*Qy@b+F@=V{~f)!jQGI#7HNdJDoCijmc%RMXn_)G4$$0 zBF3^R3YL~MMmpQ!5#{<<0apLXPJj{Fi82Kq_2Uhy-f?2HDIlh z#^1Zi%IwNdX=25qx=f*F*4ahad0w`Vkwc^RF)6iu0qkK#c5UN1XwZC$BjG+rb-|vn z8^3m$aRzJe$^~@IsiC*@w_S>z-qwhWE=S8T)yue`?J{JG&sqISC{P*{dZ)I(hu+~| zf9(prQ+>qe@Q~Zb@H>M2eHt2BnhpxeSs-&4nteoES{-`lg}KL0xMr27k6=%BAMMNR z>Z%A6gSxDT6K7N(1#K|HzHC?L28>{juw%x{B?CX|X3~-@$-A#zMsRCtz@AjAuV`Ue z#gAbRcharhpAKAGXesxGA&#c=FxW+#etx18@ANSl$;Wm*KoHfUHGB@=TQ6hMY7N06 zUHPd5K?QMDo6dYGH5mPJiD#c> zfbGf2D>L@IGD@{RrAy@>Es|H^b&O1kc{Wynrn1+jWT`o=h}xtY?HO#7(>lZDNxv4_oyBIUHiVzboa!+K^oikDV?viO$rfPp=g5(9hQPUzDqu&35`V9%#E zUFcB6I9mrJ?HWn~vA{?Q!b`CwdXWwpf!nT}=UZMLzo3&dK$e$W%3flHtJS>D+g5R9 z$&A0+pVNy#-3%UnanqF@h*x$UwTWzgnfWkN3jbla7{ ztLmAuleg%@RESjM1t#~I5dsB3D59UNq-*!f8NE^wcC+#@IU1$OSnTvmJzZHuVWOtl zOdngimmo_d|PT>ij8mBc+8=X(yDu)Z~c;(l&8?V|G)%D!9Lu}}hW68E%JRbZyvY5%vE3h!K1G)QT`SfO5g7m77U=P_d zn#dn0aVE+#hxB$H;hrRte_sZB&{Fj>4cXD;I*s+T+Sr=rZCC25O#8@61hcUyV-`fe zce9IN(HZkEKQeu!Plj)vc4>0v>CiiGM^#o>=$)$S4!!gI&KWN_2l$w&3BAKJ{TkxZ z+MX_>cl_?d=!8qar`nY>2m7|%z(#do4?sJk8G7d>v`;g|a8}9ok)Qcg8t2TGdO0!j zOdQv#0%8W&0t2|#KL)6LSgBMj%}k+pLX}LH@rBh)b7(mp(O17%QJll?X<$RJHL@_* z_QUk$XQvVX@HyX?;&wtvz*o%#dqB?Va!m1nXPNw_R`# zHP}x%+oM4ewxiHlwg=Tj!JEwRw#$z8uH{cjTbT{y>Z_1AT}IzD0=2X2(bKnG*+*U; z5WcE#GF%S_I;|FVRgt6^1Y=n92xWJ2oc48ohzF~DN322@ivg5;@%B-z&)YL~dciCp zsHY*R^{M1ItJ=j+oZ;K?fBTqXyy`{#Um;TSicA{ODGe?a$)>Wq)SoPly-^WfWg}{w z@Mpi3Y)K#diqVte-ahgby=^n6Ev)NhWNG#|L>t@@Z94)IJfAu%rLm%i=|v7hscGd9 zThTc{E!~H0(fi;WR;Z}Sa6d~(2#DFnX$aeu==~=vqvPr6Biv&-&f3QQ(6)Lyzo#%u z3QfYw)@4R-Z4TT6kL}As<^q+b7@N55qH9&l&q>?fv11Qk;#p?A;2i5@L?3#mk~m;r z(VC%m$T83*5{5UNM6ij zvav5mc-IiV@SSCJ*0$L5Q{1D=2h;Jx?FxJS*=1FvRZHR@@rQx`baW z_=fCxnTAkYlTnw-y0=p)Vys zIRW;Lc-*YxVT=}0Yc_;w@2J1qM_T^4$SVsdsHjfP?~U%gOBpu=MEW;cWLG0Q2(&?iv zfhP0i&^sXfPju*=E{h4hvomw(ox2R4EV0$D$Iv?r#ma(g7TSg0DK{Q^$8w%Ny6)(l zCbJvU3pnSu!!ctYdZ(-ibN;D&blrP0z#g&vtZhw{D;VW;i4?BOFj~8YfC=L}qw7)% zar+o&*`iaTQ~)as{JFgPmF)Ho5QB}e8PQA(`fFy!+68RpOD=V*Wm#|AketQStJf;9 zQQ$Wf$!bxAx=hw}#y%8r*SJY*^`R{)3El}4NAJ_<^$cco6)INDxw= z{UNK>ZVA+VA<}>9zIHu| zIy8F6o)>pS&W@KtvfiPsnujTvW-4Ot@JNK$Kc5NZJkht0A}bm1eOcK|m5ijqx#rQ{ zE#_?>=Cm$yd9qZfmW_s8i}z*OSe<&ACKnWTQqRLRPZnQN`o&O!<@05w*0gso&D@4Z zV2|Zn0@!C%4tjy_$;r%=`^3ZoA+f5zu})`Q0&%DTiQ%_O39lAi6d3 zxU(xObWf==vswFVnKl@FWpM@I$cScgAFg?_Xh>z9dGSscg^R7lEIHZL6>Ql{hCf+J zFs}OH(Dib@Y|@#6y|kukW^DBqP37*DrAmQ&*r)xLlsNCpP6bC|&BLkAsT_s4!unm4L{WQFXUgwuRpfa4TKR13vy``w(fVpg z;>#rwlBarB_-G&Q`W-lNFG0%61@LJ4yyGR~)4ZG{YM*RmJeoI2RZQ3NClOQekTAA$ zO}wQf&kPXOT=~Ub!inEnpX5#VHW0Lk0ZF2n`|>%`Wmjv?aOpLq{~h88#v3@Zs(qSm zJYLme*q8G-_A~Zy4+>&F#YlYWkl~gFBfOL``gOw41*7Nk$x5O7xMH3nq~AVG-4+Of zJ;^)FU6c5B-W*whZdK*&QWr-XL+?}`IrL7Y22Sl;tUs6E7m*Jeyi+jmn)$#-oI&j4q zU<~u{X;(rRr0BlPACyBh((iQcvzW1owUr)>VZ(R4LIXQcVP)ks?rIl3uNawjRpA+& zWB7Kwl1axwtgINj8EiO*ot>#jR_jB_XjSt}p=NimB|E&khSW$ShvrK>tF%L1GD6iy z=s_v+-libCXj0Ads{YP+37wkyi1Kxumg86pjG+E22`&5!lQ~~v-=C2=qLVc)UA1xn zjCz_Gtt`DnQ#)#g(rKkD+P1@rty0AIslZ``cWvX7)ynR)X3Kg3h6LZ8V+BkezjK?N zLYMk-jNOhs*yHhOSAKo8aWvfXV$&llyhybR>S+t^>a!aw$4Hfa(es8Ij)m>W72DI$ zE`R zE<3w!F7Ea*zg|%>j2*+D%h36&UsC0@u_Som6(U?&TyK% z6tcnHw?-Dn-5WY=I>GhsUBJ1FiZ*_DrZ5miwIS8J2Ha=5?h%&ln2+u~PkhHqO_6-k zeAzw|4s$OZ(o!)@4t1{Zn*;ptt8sbj<+(#SpwX|yMljS*G`glwo)OQmqi3v7yEthZ zoo1RDuP$#&4y!ijB7c5ALKPK33>lHrrz0x}9SZ+_8P36w)}>f{jbG@U3LR3t^QPj- z;(C^lh^MH~fzk^`XXU$8%rb);dPfc;?YOe=JD*&WZtP+Xy~8q0t8?i5#vP$|UYXjH z#eD75=mFQUeT0Lt$SaE_XwmsSzSVmcx&0%YgL~Xw#Eb7NN9#o*D_R<__DI1w+A+7` z99l5#a>*6Vcv+h&H%3KV+CyA6S}9NG-SLH8G6GK2c|(l5tV4ZCdZ=?clFl!`cC1QD z+7>DE9FB>omzmNELo9-~TF=;rp6?wm*{oH-CV7KeVaaOk@PR#&I%fo~ERev4nBQ|gi-hz837bm)d?d$~xZ@TRCP?|rNShr6;P3SK0*xSaS zvPl4fSYq!ckF}iudp@`@~(mW>IV++j40()M`;F-r1YScW+NVhUFNRPL??SgwG$ySzzud@Jqc#BoH z?3b-Y5*obrii9Z=kdG{=xhsux=Jgt7v~6JHKFrs4?!?xvPK3s4R6RgoAx%4SV3B;`A#vHZH#f<9g@ z4_{d^A~p7WYp08#ocHwU6h5rst8|+J@{)yIER`{dy_i|(I?Wa$w?=kJAuV4f{kDtd zcG$~1KG$*@0$lXTlH86{NoE8rAjyGk7f9J`Y_J`KOK z!d@@d%P~`OkJvqtXz{>WLCG2*&n)V zDD)1jyt1&<1rzfts8!1k=cIOapHAd8^T^;ZB5QTk5^%P^hv6KGTx&=@Se+(--l1S4 z8W@uhs+X0}?1#Y~yC2TOS65LRU7Tp;e=rj$SH@3@zG~Ce;uwO{i6=`YuTm>2AiC5* zR?Eyyr?OeAY;+j-!oEIaiR~H!std1zJ>Y8H6%TFxFYP?>oade6(78+%k8xwlddNRdjxVTIw|~uP_&}B z+Vt=Psg8Zym)VVi=wQ#MK8I%CoW$*8a8Idn(lC|w1AF?MK(MFFJaQOC`=L|>)?hn# zpeZb~s@7ndDf)gS)tO~5@a;8y?P4`*)^qND4UkpPwXmSbBXEwaY-qpc|H{f<=E8ER zJ1c|5If6RVu2ckehD_OG`800%vrUYP_xil7#964emq28ZES@w3xqI6s(bC#z@IDpL zadNw)bhs6pFL^nMD=S2KL3Vbd%MC4)&(1Cjy&z{mWpkn_`l~#$>cZjyawz{p@Mo}r zfWiP-=Zxd_5m+mt#3b4$wn~6aZKBujqjj`|*yue{&=)ViCW*#;YMOIw+1hBqk=JJ` zl0~@4_>Py&woRy7ja8$Yp>7I`1AIxsbXkwlJ3EhXPv-siDeMnQbov#P!4Qt|mdood8sH8@}@2g}84cb&UyNr-xx##FV1LdE{QIk9@%FCBWj zZ?E3x(A{F_xf#*bwu^5l`-N;oH_lyw={r;7%CdIrJcZz^J|YhJ^M0-Si~w`hffzQ7 zmPGWEC5o%amHF!0C@HVb55bg0AL8R++aN z!sOzqAh@q9m737DP~BSJGWRa-I&^T2sLS8KJ!^gWq{R zHO_$b-UgeCjfI1|b|o}i1w1KuzB6;%74o|FQHVbI^%3paa)^jBz`E{Y$!{~StQ3(} zcnRCpK`S}t?(H}}E1wa0KQMPMxt7Lq*qhhqbNg&?->Kl$*|TXT3-pMk`>^5cIt3W$ zVf1?&U0S?CIK+vo$gmc)W zS+1dXYB7i2sWPI_JMis_mJz#VDOP!Bb5S)jvEcA12U$dO7 zv2B;ERwslG4%{yZhr~oBD?Dc1W(SIH)#0u$RN-CeTQ~=Ubw2#s<=BFj#px|0Xf%v| zH8at`j{P~BXV;?|1}yTdA*K)Qw1bWNsoZahdD`AH_b;fs?XnS~(XCa0r<$?%aJv#) zWtfV+JGsjzE8EOx>4QBu_R;KAZ1o;uWMX4Xal?b?PnK0v14OWrl=(77v|*wup)TAA zm3{e$D+?>oCmw@6pF*K9$~$~uPajMG2EM|eCrePb3y>kqrvGgh#9qh+?0Fj$j&nd| z$VlelD+^TV${?_(w+VnfT|^VuQzQ%6^Cs%avX5dzFU0`rOm}%^i$S3cu*Y~#tHGXE zwf1DCXmUHHU_?Nn<~P$}2`zYJJuL2DkuwxqD?<6SYq#RUKVYnIjzwWy`!N;9t>(_QnQJ7L#4*!>m4< z;6fF_RS{ls@+CTa*0s7<7C&CwcsMCU!G0OkDBc9;WSjJAUrtZBA@h}$S8K54dsx!x zMQTI}e_=_OsJ$z#+8Cfy$SP`&?OItr=tr~>+ROlV2 z%luvjRCJ>+`Tfy8b1u_<2ITb7b@pxU%aC&c2%5=`>|I3N^5kF-OVRD(#&^Y~d>5#!S=n5(!>M>jf_q$SrjGAm`ZEYC%X*W~orZ|y#ZPr9rC66jnJa++tJ-x{%WgO)n!JZ!6z@Cmff_n-_ z+l11a$ULfL(`vA%nOqiy@yy*j_9ClJbs}i+|NAn*1urB4dtYWwYPi(Ll|@DRWf_Uy z7REVn-6LA*O4TXA-`NGV?E==`9*wg~Qt@0d4CQ;LRouJTP_^18PE~cZvQjC#acy#> zRhZy31ySzmm#q$6{KQ4Qqj_#0nX^{|alXutly_i68K~75-Vt*$T^16)`pYW|g@wY| z+XB}LfN*}I(Y*^c7M@V}`EpB7mh90wR|HibCKJ#4K|!BgPl7V(j#`h#w$t)dvDXme z)oEpeS7ZjykR7!<_W4oEau!l0w0Sy(V(2ePU~~o+hX8bzETdgiTgd(zUCc-A8i*cS zy}vJs|Dej%uM}lf#w_zzw0Y>AiWR^f1kEg7Yg6QKF3;GzMxjoO9D3(dkYirfmAFVO z@oN{S3_f(b*p2l=p?6-{TGY)YSGx^Sy;IYA=$*0?m){u;f>u+HIA1pQwHGP$PC0p+ zYnMQ^3tL~zZs?s(`?BMA4Mq6tl*=T4_tN<$y@w?w z@)hFn+Pz8nGOILlPFuPls9bF~QgPiD%yoq9s|6eI}qQA9Yh^&Lxj$4gp^uFt2E z)~X~l16~~8Ny?XLlvsJmkta()y;WI(^Y!y5jN8wfo{3XR)*1ff?K*ct+q#UD?=0ZV z#dCqH1d4g8gr0WE&8@DAl3Z1`0QZKWSkY*e;=kf}E^fYk zWRG6H=zPl1H#1@pRVu}cW_4SgqVB4Ng>o{y^JM^__ekMn;J3Y-qO5(`{`Sv)1*M#} z*UZ!6KVEGwV^r$p?2OwkCri^dC!4)%m6)bJ7D*!boz{9rfPJ@&=1V9B>403`@p2SH zmkXHH_B0X!XuW+|o?saVut&aj^$X5n|L5t@JMG5db79?2R`O87tGbk5Tb+P&aO^V# zF0lsnG#%NAgL5!kGq^5A4!a)V9=@W!3@7gJ(Q=X2%pr=aO&a|8nfpgHYGkh*h zR^8_nA4{x3nyQZezuBS*K%KGN0;Mc zMQ!{lSv*VCxQVtC%KkJ+^q8vVx^&*e-c?Z3PM%k`Ubl~YY1eEC!vKzvMF;SDd#NzC zFlHF`o5;I;)T1W#9FzNwH8_1t5p(f!+5TUKQxZ#wZ?#J&mO~a-CB)u_C^A~OuXMnQ zTwj|l>o;D!?XqXRi_vpbPYpJk(I+?x+_ihY#N$8O{K-NJmwshH3MMAKU0|16VGdVT zDu2$jK3Nv?S|~T+pdI_1`&!cq_E;q&D7Fd+ZruSR8lq`LCr`EI6geTUlY++fp|dM1 zKS5Z7t%jyg0|sMSC-TER#idE4KeX{=S@>0dFQdbp%^tOO+r>5Xc~)_r z#nmP)Q_&Jf-G>|qE8d>FD@$swDXk>T7OLn3*u9IHuWXByU52%W0Gnh$ew}hDXqlP9 z=LG8QU2A!xlF&O3Fr0RU-}xLP$mwsWh2CLQW-43;?XGAGq4@joI|Wc(X2tH)B89b- z0r$@+XIfLe^9bkLE~QhINI2hJF741eo%CYdR$~smQ*~+Kcfj9ih$U3%5B=>Ez0&=P zhs;v)k$LyE>%$=%N*Xxpk)!1t>PvPIFRKFfs69Uub#)@8ES2w&?r1wEtIt0B^7wYFJ>9syMLhf_!;>?UaA-|84Cu*W>E2~y1S&1(H3iQ7l)Auev( z#T~wF`WKs|C}d}b-|d}nxWiWw@nk7rDn1&xP?oi#lPsC#X^IuxZ!=TF++0V>ampd4 zs-y8&x?C?)uZ8=vT5xt@IjzR>O+)C~r=~fv)J_E^yP5ACP!}gTk2lo`z`@juGh>agZ+nTF z?7e~6{890cu{N*!G~%d2t^6>0<&h1Z)LkCF?SfnSfFVY=*HDTpHoz8%f8sQ*^TYdc zhfODj87hUsc{WtB|Gy!DVog=f+b;1mCU`oh^iumbPl+ee1ea-Nsb zIh{{CCp@m+OWyW=1#Sk&+;(MGa3O{u@-pzjG1V?8riv}(6D9J>5BUzZW7-A0!Y+H6 z2xq&TpPDI}j^BQT?6;2r*_*ZDm6JCeS$Lv4=TvN!4v6Y?~@LMD$lITb)LIfrP=i*%-T||%B-yl91-;Y7cFg%Z1nzje z>?6EJ`0AIHUkNm9tIY8Fkc7XB|5xdl3d&5^YTK(JmJ)$#@*|=LyU%B8rG2z}#9rvmT=9WV3c!52gIiU7E zB9yHH4e|A-00)x|2$n3Cb%Q)M7R+8n|5tcfx+*7w(V5ZYEMINn9WQXSiW38J+S7nN zRecEdATxGmz#iyr+ZEhX^>Tqd<$A%M-Uwihn?|wPLKS7W zOIAu>%QJ_LC=Fsp8&Qd_JK?Xc_=CT=tXJQ3dV%Nlt(kR>`LlOEm7v?qSkA`ec;Of4 z9$EfgyQ+bCU0l)O5Xu{1rCtzx^-B^=Ks609C^wDZmkv|KNi|0)G zQm{WJh!@UT7r$1!^sQY(2SF{dgx+CgX82rE$a*>ZbY?0-@1PkX`n8LCu5yOnQ9`|6 zHXs|R!a3|{wOUfJ_`>izMUOGD$p(xpsIeI4&^uMU>5?}%t-kF_`A)G?p?9`m0^1|~ zw&R7~`J9$4k$276lZEzNM{NLpv|Us;^bV`D%@pFT0)ah0Sp8)AR>4{Hjw00G%NSDY zV!9m0vzNLGc>!Y{KC(>t=g<~BNkKcXCyAI9?IhRowW$Vc-Z#5Db{=CWUn%xkoQ2$}t6_faqHsF|V$BS~HUy`)W6#kB$;{mp;}Gp+hLC z3Qb)=MLS;7S|7~B=+*$K&gpuS%yD%BVfDpKj9=9jL^r#cp#gSU>2d$)ClbY6Y`YX? zeTs$6`JR4dsFNI+0pdv=Xj_*w_gvnw*P~9LStOmK5TkSsUs+YdF{bc|ezN2;%i1~B zlY;G+6V}!xzO+Jl{QLVEh$oBN`Bd{LBU(kL=6!Su{3#_lUxFS!=THi1EV;ccLQEb3IMHyBi{1u2))Q9rDi)IDRHh^3_C}D3#!kvO1Z=h+ny{FRSmKJdb1X+(!^zoflGnFQTtT3UFu+>$ryCwkxFPvIg?z!EYnl`5e97md))=oc#35{~uX!4$5lU<&sMq z-vRcB7e_Q;qY7ju%B87Vy9(!IyXmhXF3~8nq>OBr;)UL6@S$+3_jqcfICkdICB?30 z!ij4(;GDLUF8RRI%-ct`J(bY_doY6AE_j~zomMB1U+hc00uplf$x60z8CyU)EAQ6=>^`eOfqFo+dl?iYPgo(r2PV@4U)`CreaPCR|1l@wB2~>xFYBIVUHvktQcW`=E&;63Mt%cfU#$*9x?d6lOL)vYa;@^&+iX<{&CpvCjpf2+ zSG#1j#FHf}oN>tl?24|C)q0ix#};z6a>FwM;KAFi)d(PlI-wz} z_4NG70{3^hhWUO+|DA^TY^T@sxGAh0=yH+ql_i_qCrzS#`}mGi%`+>Xxe6;aeN=7u zDqEf`tiY}z!(koN%U*4s$@yuOXi3r4hi6jqunSPgW@E}~P?8MA$Y<|X4If0QAZ+Im zc$GbwW?SjaJ;FS-o0PrAG_5jn4R8PP?ISbW>Ie4p87|7d`lS67g!hM2E^wCTlg0Pe zVwT6V({P%ZJx}G+c$uaTfs420^U8vI@ICu-IIXn=GMP;xfIaYr zcdX}Wmx<|F&W83;qeI(AT=uI|I}L%K z`Zyg}w#qzGcJKq5xBey)r(Cmg$8!zM-(_S9ivsgQis?UR)( z*I4ufCGR+oqhDaphtHA0FLq4K+c7eVLG-jE0`~MaO-mOqFzu2L>a}f?v_+J=w_S(M z*;%J-BJh2gRbBHhQ_jBak`jl#l*N<9|Mk=2@5)Ilh3&I8l~(kLsxENy+phcsdrh+( z&P%tQ@k)tvg-2?4&>7R}f9Olc9XT4MqRlwSg8SUVhoO;ds|2Hn=ar4#K2qd5VvnDp z+T&}JRVc?3GN;cIRS@!={F9Yp*qy1IV^anTypVI8P6bbtfr1}iz;k6m3>_{ZM4K-R ziBiD<+t)O3_E=nhcx0I+vHzGPILG3j(RC^AACCv;sE?RVz&Z9doXaOmrO%pOILBh2 zP6eL6(<%r}85GaFR0zDJgD%Wc14u~!*%mO231QHfH4w=_^|()euCi*!mYDpwBo;N0tF zA1=+Nno>a1YB5U1Fu+27K_Pc}WP=ZIwCuXW3oI@Yda>2r-2i}TFL znMbgvwrR3$>JX}#K;w1HuU!m!&0_%7F7?2`ce33Too)HMNVurS>0MbVwW~;9RKfww z0HHFJMC_$ta^o}xh_LD-+|v~j{4`zPmjioBbj-}+39oWIJ6>>4lb~P^EHkpeo@Os} zNqDt)<&L_}9quuedpl=lZ$sENHfZniQB`{fYk+>ad&f)mqYJC#U&~#F=k8+RL~W(m zum!ZTvW)FF%Vj3FA^7>KVhDlU=O85lEZ>3dF_Sw}@`-hzuZ0{AYx>BwH1)x9emK!= zhpE-e;!ulu*}`rr62sR)igvz5a>olSQhc{Bi#;olRRAqdI(L&yDw`vF^p0)5vf$z- z8v%${ns*dE4zDUdvA#`&<64z!{_M9x z?`(eif9RbT$39sQ`nq+nN1kuzQHgHNOz0i%_t#99*(fmWvIxR+?rqw&(+UpA>8~LL zr-a!1a0vTzdDCVir(r|&JyS^ryz9)oADR8%$MY_ zI_^l})T?_xpE{N6v$oA?R`jD=^tryug>j+bFx!zWr;lNgb9$+%q_IDzCL*?I#3k6y;~oQ znLX=e(Se*7LZ9KYW&P6-dS8y2gL~yow~xp&h<-*lmHaK5Pg~On_JBFNc(c{Ju`j6d z+1jOyuhh*_{baR-*ToWGd*07V-FCq}HknPkz@ATK5CFgSD{RkOfM*1RmR%=mN2e0t zoj3*?!MdX1^@?z`vD3<6^DFhd?aC<+mEfRWoej_Vd(9ld3q@3-SYDr=tjyc4k`z>y zRZ&CApH4F+d>Xl6nO-L9$_n*g#rw&2lq|-qLgtgdD4n2dn3H_z$&$*e5yAFgPNpF| zTK{^oCGrTbGxm(g+kJawF{@6UnwJxM)l?*}ya+)U5k_?%PQLaS&L=B{+dCq{9m={- zr$A?CIr>r~ptA0n>?;en=%c-*kLpw#2wUoDTMa;T4nNt(8`K?Ha1J_qzU)$rSC>Jc zb(wR@rjJI?aGftbS<=c&c(Iy&xTdkn-nUNaUbx}=O_#|xjs z+s-Vz%wcu;(rcH9u!s^EsFKj=o$P0rc8P)e%;!|&SDcpM^6lk{%7or2o;>u9MYpmT zyNwk>?>O;m+jY)Xt}lzyHq;8eQzvJ+w3v7JLhlrB5`L!w|3mMrHi|(IbJZ@CUKs-P z&hso+zmnvt+)2DaVE_u#iv~_Y&Dw7b$oaA%eBa3 zhJeHS7%WxGAGXIjs0AkiIX_*TUouXBV;ff4?) z7-w7I+m(padrt-q{lk-ECrSyJ98|~J31H)8T8_aI9a^71bvs)yt^&Pwu^QzNm3H!C z`!wuZeT*4soCEvb4_{e0JpgT9wxE>O?j^HOfow`l8+?eTFTL|*f&Zm`iVu4q1;_ij zOtt2$?HJw9Sp(?R2F{4^K5_&6YJ0B`gL~Lk%R1an+;(a8Co}bB4U`!-t*NZ4F#u=S zIcaYA(+hh9Sory}<<;h2!83QTcTIZP37!EpQZEC0<(aXCO*T4*rnZg*_E>Zg{rVVu zzw?MY>|@;$n^!gj?CIS_DZjiN)s@8ttIn8a=MdR)y?keHEX4Noc1W;?a&NnWd)9;p z_JBz%nhh=vS-R(obL8sIGPvzxg8Pghut$ad$YO&VZ5aA@xcOO9ax{+^d9w0@VB1G| z0sUH8sS~P85NV4oU?7ABs zI{Hbo-p-OMI+ataU%Wixpk#^dOF2Dk`A##1b$#CBK~Mt;;zvHU1*!F^5ZV~@c~)#$ z50IRoG1)KqPGfScK-W)*wmaEtp@T*9GJx58ViPNsPRI=Oem*0>(@Zb$IVw_TfLsQ3 z|3t$%-+GgLxm+=uQI%(Kj@0m|n@hR5QJ}=jA3VVf^zVYp%{@4qi8D*kMl~}e=r|fU z2VOlRaCE}8K322s#;t~=$Zt2wQAB2BWu?sV!@(eWYk<%@fYFRd&K+CAKDfCmHQ*eP z#jb7FAz}7qhG5NE=$)eT;T$8dT|S$$)^7{k@pjb^l0TPvSue-Mt$tY(Pu=bs;_+%k zLhp1*rF~3#{cCmT9UZC5Y$wg-lVu&$qDjr<7JRY50R6NpN7#He$15~wd#_o27*;l= zSKtp^G%XJqh4CY#5nCi`$UO4QhAqBbuIBSN4%Qxutg z?#p7UT@`ZhocbA%JC9QOT|c460PVcYadgr?d(_LIE9QCg_GEF*RjiUSm|{k#Ko5{? z5!PzI1TtM4^JHbi@pdYc+D|LEsR05eUSZWS|8~c`0#gY|Ufz&A% zn0ATOMY_4XvQp7pnB1H;xd8-yQcpRMZ#72L@xrzzi^D6I$9XCM+b;(PRYMZFmMk{6 zeVWLt?1Y>Ic(K~Z$%~ptG}zNW$DM>vuWjV2`}=fuIjv5BJuj1Y1{*vO=aQ%>$PJ2NF$R7+g@EsfFjae32c9gM%rXqBaeBk!IZA&=(+cXa4ODxziC324>dhhQ zrn;<8KDPGhC?ufRJIlcRV~(DzZ2#U~#9wX}f`!R3*fRpxHtwa6rSdQqV}3DaZzpMA zm%wYy4BS#)J@qy(eS6y_D{mQ%EQ$@_?(7e{HzK%C;lMsK3Oz(@qM_Asupu8 zRW~*o?6H%i+J(QrtK!M>_y_0Ek!mJfyh;#yr}w)v$nQ{yD+_9V`J${6@lA)5F6~kr zjS0O|DBC5+d|Lfv1#*sNYa^AJX?4ljY%|e2a+@=_=$+4bk8$}0^;m4REcS!OV$8c+CH@pE4h8= ztlV~;s^!tf6i*l2PdL}u+A_sUA8PX$0=PoIw|mD@kqk&@GmRJGBN98G?*PFi)p%$;tGtgeN< z+AfQ7o0MYu-q99U7PxQ8jV$a~1+sDsKQ{KvO!EJQ5VGH;aum=8AhTZ)-_o(Q7#qA zwk#^NK+srsM%JZ2)h_05ofg>h3(n7YK?JDU`jiyLF7+HT_@Pn4+KtT#y`#!``-tCp zIPu~fPP}Asj&-6$Y;Nu1amjVBPK4j7n)%Q>-6^b-r2cPO@j3Z%i@KEUt?>d^ixCXH zQjS67owTP2X( z&W6$zEr6`>I}o!%Q+g|q&BITYN~!YOn#JI)tYF_!H|vi^&3LI&{`Kj}lG`kwmP7i> z^@^n$f1OBvM<7QnU+Uw^!jg0eZ^oy*gDgA>Vw#B`R4ZGT;8)qg1St);5Hw4~VfsJ$ zZTrGsfcH)tm5xYPZTimnZ5EObOljTe@r_xvQND{V~4e7O=y z=3Zoa^i`LES#$9}v{@DKSb{{Q0FUF@H)#<$WK^{V27eOL(7dG|x{?QPKarL``wNzMEYP>TF2aLun!Uax-pn7n!!8Fgp9 zD-p_RRwV?*`VO!s>{*(5WhFRWh@gyE9I_1ok?PnQwcyX1~K^pYuQ_{zx( zHD-YDwkV3Z#5X)3bJ~T^`P9MS>}u~koTIpGUQXaZOMbFkigM4iUReqPYjnXL`c^OJ zkoB2m!zGv>)pZHXoq2n*K)s?IkaVVQznrqHQ7FKM6)w@S8f)+29OTa!8J7ll1}KLN zzUsPzT>OSa6(TSiRJ-~J*fsx!uBol4p?4ljd}N__s$vk%Q7v%Var+qZVl5P$BUiWW zLhtCubQzvv;`h?Zzf$3976OfO=tx+o+XQ5KxCJ=^zWF{9-yX1kryiTDfA5C zJH7n&(fOcY`ZQbZ4(qs=c*_bHll&+$Biq?;YT(H-wtZW;zH7+vnC4kS$!az4%T2$0 z0$!b;PC98$%-Me~t75mC!CVC%*$g2r2kwKN>v29eQWYLLh7oIGq za;=4uFwCaB{c=LpSwqLlRu<4&eYNOMmdlNvgrWlMi3VKK^qO#bnB`El|D%?*F{(4^ynM7-gYq?A8rWt*bKG;2_T^w0tBt$%uv3l2WJAJvh_Cu;*`d3;K)~@;IJ0*F}_&ixT$9W8V zU{8Z^u%~J}1AA)kX*j1>%=2Vf_~l%a<*F_R_SCB2(A0FzJc2!K?v&Z@W||b+x{|rpVrX8Esq!OO-;S|5U19{P1L1k6S7W5un4inM!1A zG8oY*S1l_N3bcG0jX+tg22o87-IrzN)(<8AYxo*+<3i5cE-tWld$aIVdt_mdq42%* zZjAs{CN6icEb|Q9?bE3=uFE7qN)~XkKFxM_?KpRjEI3EFK7;KNhMMv68Ijs(U%pzZ z3+G6|Ha6id`{}5}3?G{-2rOA@dp6LAbF!$WkFKHa=~P&ySLS!Yh!AjVq?a?VH?KNNbW_7I2Oq09SltXpF_&U2|F zhVo0ggh!d-OZ844R~~xjGDlZe@jI`U_!v_3PDlC>RAD*gI*`t^I@LR`j`qn4@|$Ke zZcxwqG|iH_`gMwWI9_u!IrI(+KX;!jFmRP1o6>3bzKphO6htS=Y)BKR-dtJqhu5E% zRV`zO>XKrQ##q<(NR6&q_;PXQ;oC0jOXR;Vr@F303q8x6;UO#TNYV25Y-MTse%gp_ z))~$L0d_P6+r1^v#XE!dwJS%v?&#(>BX$|&L=9GFS}m*9MIf?TAD)~8?1QYu27Tl# zGsrBo^Q6>e?=qw1N)UQ1Snl3Fa`|0Jl^~^}bJaYJ zS93f^jevcZ&$nJ#sQ}+42KGP<+b+pmeV%ruh`BVG8F-=Tlf^5QMYqn)^uC-_%a|a( zLh58!1;h7#^XAFoO*b9_gM@tbwB$&su4dpa_e=7NHywFp}m3hBT-K=q7xDqgfb6S(Y6Z=L^JHu*r0w|9%_AB4$SUtbO?5pXeBE@8ML!* zN4wZ{M2F|C5%B8@eJo|RsooK|r@L?0xntp2NCA5^?R&p<`%iV%sZ-Vc zW8m(5X|iWmSG|eQnlFKYOlv;8Wm&hf6R2x(@LefQ=Bt{V{M3jTJ-gYmc&Q0-;GC2| z-!Y;~n@dwbQVAel1>PTD3+Ftw{c8$LbzMhcYw~b2+2KG(u|w~iSn7;Xy0Lkt-?)6| z+)BT6HI*#0juct^v!-v!vRPHO-^pI|P9qsfoLR@vJH=VqL4aZHZGq{zhh={`iM=~t zfK8aDXZkdGmb(-zpS|9)lBBO6D`T4(VKpi5RRYP6oMIW#N%WO}oN7^oQa(w zI|60bO|Mg2QL@;!tpi7v9W+r2XJ|vt1PO536ANfwY>(`1*$G)LPHS|6aT7k>j-W|i zH{zJQQXttMDwUUazf@m#E)$3p4~#5P?vS7cEHJAtC1YFj#SyZaqK!!kU+Ufjxrz`{PxLF+)}d^m=N4wSECT z$nE(tYc>I62&>mAvGrFY=4F_mYhfAASD7+*P+YB0p>M>&_B3Az_Fz3DdXEwAVVLiy zz@9#k2KIFM922cvWnPAbcgVbD!9C|3%2FAyr&1PnuJq9CRy8zDJ29eXR~%U!dBKgK zoU$q$+6$XFP+P@M@aMTwZ_ASMY6~S^JQU69CMK<8QHfzW?K?*LaWWW37FS*Uf-lao z;4OG#VCQYrva>m$aQr?7A7mwx2WF+7j)Ikw{+ zg(eJs7Y@#mDxRmTRoi>G$I{)7Q0wPdaK@NW%9gxeO2xz z>rM1M{t?c3NSFO3|HBTMk1YFSq9?x;hg@r?8Mr(B(vLze`J)>9w_6q`UN!UR9a*m# zve{FPab}tqTC)fpg*N zS_<__K+=pc4sarB06hlp&V7y*j`xf?I;8QEwQhi}SizA_`0V~TywX4d<<8*kbz-YV zc^HQevD$CL2)}c zsp|kWfs^&}?w2xUi}!RJ?D2H^Wf?0s=a(t;n3pkFg`<=;eIOg4xs&XbJ07q%IF4#RP}P=pV6=IJ5@fdnSPEer*X@`i`g)}^Hfy( z=5y%gRX=nOoheyL&5EJnr%%FhZC*n><ckz@70#DEJg*`?WP$B*1 zZG=}XoQSw58|3VB@#?Htx(l|~jCsm^%juvY6AYeg^S z?bjt;_`R6)d75J;v$x?MCZ`@l6kVT#=$=i(%JP4sF#!9^MkB8~+RW7gV>v~pw&Q#$ zRmruisbOng&M!~?W2qm8s%cH(PFF-AK3;#7>t=lR+y^%oK+R3TV^!p^LfPL5vj1MB z6wU0tZOxI}^EQsXd@YZEtjg-O5mvP(Bntzq>D&Es=}2cGasx+M0>mzFd%u(+PTuw`O*YMk=T`7uZ|oC4T`GA+F) zs)=zCbKf;!lN_|R)-mDZ#O}Vs`>rqTesO=zs)IFMk|fTD|8KuwAXa9Yy1B9LkwrDf z*D^?IPG{3tH=)}7vCZAGsB+)E#)M>4&)b?j(=}&_7W*)>>NxbqeObuYXEHb)eE&6X znwk80o5gC(WK+zRf^$-FnU~iX0ULR~s}q`%h<8SCV@Yt2XsbAZzKOR38#Bev*N;(z zW9{G^@N8zlqLv$na|CYPFWz%vD{e$=F&zQyO8dYbNV=XXR4AQ*dyoou1Hw7j>kD=@ zyOv+rW&6(D!-)O&AC1p$oypD_vatll&mmkDk;XEpnOu3Pz7IJdx~#Bfu9Cl#%?5W= zf)ak+{3mej{RkNsc@}!7%lcUVK4XC1sgfkH#~xYT+r+z2bpf9((M7pJzN6@C$Sj>4#*9%lPuYo_h3^Ch;0H3?Axj5|&Zh};H;*YTCDNG3 z7N$@n_}&zQo3XltOF+|SA4JgfYi1WO$?A+~2CNuBHAXK!M=v(Y-ufjM*M%?2yIyZo z)pGhNO@EO;w6T0GODTzcJCcyNk&ImCI5Dg@XD|x|_MDjI^b7k{In8IL9uys;lX{*M5PY z$i$MR>chC6j>M51^OkM~^U#uc%BplT7j3QIt}(7GLw_nKl}fZIrQA5oU04pzQQkE6 zOFNa^^JV1hfbj4!uSAs#3@6aHLHN(LP^Vupv(pi)R?5l4b3^kbY4*WT6O&?Ojxt&I)GyrcE3_DG0{2Lqi6MFFnjj4ALiWCh=%YtU^ud5 zv4-1*bCSfLw;{hV3|yx?@$Gf6#kogu$qK*I$r2vV?tWxZRe6M~P|@6Wap~mdsE#a# zw&4bPr?`&LJLT1dk8I_9DM#?i=A^W`=vP?e95G&7DlTl+(KDj%Y-%cM9{oyMxi2Ei zor6^%7v88MLL6}aRj!n6G-t&}bqvG$_pvaD{QSk7)lH`W;Kn;fX4Jx_x#vs%y3j40 zWB%&x71qs<@eiXhl-4v(?4N^q`*ReucZ$c@7cKYVLlCJo{!lM)s5+ zu0hFadHsF~yK_i{{WJ-m8eTscuSqLKS$b3}v!fEfh~UKUE? z1VX5Op_!)2FUaH2VP}lYYDJr>c@RGHWnuqVq!b=>h78s?$JMqh)jZ8`v6OZH7ub`@ zzoOZUCZ%!_bJ=^P1Gd=R%s_&o@6IXPZP=N4!>GVt1Vgg36=bbr=M5R;T$T|%~y@C8*PpfPpazvw=tB^ShIqAkIj3P77e*JyPJpYR;N5_scbXmZ-JW|ZamteS81Xv-k2@o> z8%4L`b8_Zoo?7-%Y_P}l)fgRUDF!0+4t1R$dpNqv#OBEV^OUxsNk&$*uSo>-PM?-^ zd0N*45Ny~Z3%uV7w8j`Kduq#;-Um@t!9?ht@_3lmgf(qtwC^U$M)?phHX@;48oPy}xuNawH$5bsBKy`5NTn)0{mUb@VmwUCU zHVRs$2h%V4f5W;nLh0Xpj@q&5CdF;mPFCyq);&hi(K&y$Izls>q_UME#raZh3z!K> zBK^g|#68s8!llwLzLX6bS%EfVW|e%15NnJ%SW%C0qLW7!x8|=PTv={R>dF@J&Z+m> zW6TW*<tg>+PC91lYV#|Vi`VwAx-3UIeVgj>d(~d%|MGw5+Cg{k*5>%i8 z_H;QbhN16zVn<*2E43`khaFi`bA^4u9=YT@3ihbZiloA=?;4Qp5CG)mElbWu=zo6< z_VfiEfjz~Ef<0ARfL@57Dp{hCg6v>Va~(L9);?VSDUH@_2;gvwagL)0+V?=B+P6B zp1SKXc`bnc&KHL#4S44s&gqgjO$h9YP8thnf4-y%{g*7itx7$>#WCLc-Qb+I6Q-+c6*Yx8 zOZ1w1IOpNuGxwT;v6&I>up%#r6BRN;mL)#3xn-dXxwSh+L2zY0Ieh7lnR^G}PJ!?G zFnXuYi^hrD{UeJ;jA;zL17ginAZT!O=pEQ4Pfx#cmhf(78k4_hH9xlD#`Utu$_Hu? zN{%|O01ERp&yQKBq`jtTSIqP!YAqEBy<_rkzu+9Hy4f^I9?d$YdZ)7?t9s`u5W0_{ z99`8m>f3GMPVCC`%d;|P=$$Uqiw&;%3cu6zK6;`i+uYLps{}}al#$*q0m6r{*?U{g zl+nGqDv+#@I2ccf~0 zEJ3Q4&k2rYk(AZGN`FYI{b;gm$(d|CVbt<~;Q z;NG4XL~7FrM4!6jJ@*c4RiKfCe^-p-8ee5Z+56Y1aDOS1pZUTg^|`s=(?SgLv-E9x z?JRR`5;o+_!0s2Qd-lPapcH1;rg2>dUB9wY%rnsv*n{sH`=yO{8U4z6&?3*A@ad9p zm{GJfqH`(l>hte{AQBkz+aG(UFDDC_F)9&KBEW&V>P^$zV_C zt-zj>$UCxff!d6bLp$`?k_GnkRo-Ba?R@8cV9%BX_Z&Wd{}{}vtq%4yF>ZFcatiD@ zm*gE;x>;DxeG+Wad>KJeDk4p{-r&38z>E>H{*Tn~;nkd1RTMs>k&7Ib)Xj(#$QX&)Z33wL?stKa`*Egtf}c zYmAIL8+FGR?!s}cD@y=a#*eE65$=XV?>sp0$g-Oo71>0?rP&fJ{N3A{2_WZ7GKSk} z9a*a7%5T%Yy15$8$sJzvW9NgaXePHzX!yb2RS?;P;97Ck0rQ+`L5 z#N8;m?F1&xvf9dr;o3je%OdgYHa7k01Yje6yxrD}IeaEtxsE~Jb=0)5cgU~=X07%R z+jr`c*WP9&fU1#&p|7ou-sznmdS?$}jSfmAo2J%Lw@T5)r9%7a2v)ebG=+?Zb~^o1ao=ydz`aD< zja|kKV=IKe-OQc48(?i&kV#){Brn{xQM%kJ!qlmXA6f9ij^d6idG$(g$i0cw=54V; zd36}PBh_T^Tffw8bQK8B;MGkraj7m6K#|gXNuN8eb=-;*ypNf_*D-TIrV64-LXXYM zY5-eTQ5~ngd?`UVRLc;Iu3|FIptflB055JR z2bbz?u4L@06oc?;7A}{S7af+e+0GflJrbjLX>_9x7J@zE-22pu3tgva_jcVjmQjvtZHs{iN5Z{z3PKBnnAY(ZY$bI&}z5>-iXj9m=} zHSW?(Q=p3w>=;#(>%&`CPPJC)!Ah);Ele*9-#b+ZCf!~Kfp5IEWC1pcZ0>YwJ}Q${ zPa3PXlqO_%CpUQN(D_Fei!|65&cT4q+vXC*^>hTz(UWR&^4%}LtolOq4%;`~&BN6v0!oY2X}D@61>3IjY*b#3aQ7Xp(kUJ%rymIlh)P z3D=4Fz@D5<%7;(CR!(C&!ijZ9QXMwS8vdquIT}EvN|yhj)GwjuAm!A&gOSgdGy~bE zDVEQK_JB8pEy;BrJ=$#o97nWmnBTF&f zD{p0P%c`JvIHq|!WmtFN&^!F$^x6c7u=DaBV@mnU<)L>@>TX$KZp9|NqFHDvGtJa_ ztS=o|$yrQC&^yB9c^k0nju`Ri7Y%^MT9(+Wj9-#Tm8z4a0#-(JBCV?;*d7*sb@TKq zwCAiNF6?ZJHO5>vI#EfEN(wixXn5ch>u*`kBeZuAOZH7|sbp#1M4qoc3`Vz|u-jBr z%qXO_wCBt6e6=z`a$_gZwxIy?^66LdeAlXAI@r6JdtpWu0g4j>bmmLC)x4aP{y77* zCdk}5YI5IJ&4XvJW*GWuf_i)1cE42fbP^}kJQJnxX!cmif_lmi$>p9e9a+|`A`7J4 z3l%YFHRRORRU!}FaBi_Vve?zJ!huK)(NT&0SHl@ERn2#dIkMjRrN#m9p2t8?Q4BN_ zy)jQ+t2Iu`+(rNLboVRwRW&LSLKpT$Rx}gB4INT%EfoIL4lP+C|NgT3Y`Y|hH?083 z2yL6&O|a*+ABAnLU$neS=)?Am`_qWJeZ=-hhj5sR%I{o!WqCq*D;RWCb?&*?CDo6+3qdU8f zj+tHkLIjC4u4cnISi7r1Y-;LApD$@9V>Znc){c$l{otbOT1>Pk_wG1NDcKRtH=HC+ z#t6qH2_4b9Uyw;dDi)c$xL;Nt+W^k7bn_)gUhA(3z&Qed@wN1}Pd8}t;`3$WtxN%&lN$@~kaGxq ztM2ZXTJz2sI+2H?nYY==aXes8l5_J^k^G*4BP%_tPwDkw^3Whv-Kv?p8%7q=sxc-` zr4SZA$8YbKL+|vKQd!VO#q7QQ{*du^m85kkfGVp+2d;908sUMTerY;EJ97`%*Yx>sQYr~v(It2!= zqc$OXs+)AJgC{#kNR(b5Sv0xQ4(Ofwn=avr#0Phb=&s5?hMr+6N|suSvce{>3lrq= zs+NqGVWO@A!8x8c&cQ#7oshCoyLjz{W_aS;FPNut<*A52IB<_qwo#$gyq%m_{Wt}1 z^%M{s!dbkh_M+A?6@wF{fIT9B8Abj=RV`eS%#+fGY97k(^ouPh6e-TCYahTK>9tW2 zXsiqDbLz1Dwhh(y`rv0cggfN;tb(r+11Isada?1xaBG@H`Axc z=*VJ7%c`U39h)NZ^hKGD%0JukC!~HUw(qI?tu~X)$Jm{GJ1$(v|-~CF+ zSEB%Xs*qOL|J-D{flZ2CXSaeq=i;#=i!S!#RR%I0;dyGvu7l~o6=*!QoLiP+f$}tL z3ivS!#r-u4l|LU{1}fKx)H=dBVB!5SoWqdZ>C@z=ubqH%Fi8V1P>YA4U;W|?jQT1R ziyZR%8Dk7Ih%ik)ZOnhr)(KL!tkf(ICbu>1=J|5U9w)$#ORvO%=A+n07G)g!1qLx+ zS2^Jvaar{``0B1>2!yt)96r-I^QBDLV$7fvu?^$E)FD#lOLE_G>3Mngi#aP#16(xc zE*iq`%#Z~~rMh5`>01kRWEtW_oA?|%at4*+ritv~9EZ;DHek&ehVIwva;I>uH0+Mi zvJ`TGbDB5N1nAdaE7+F-LOrxj_G%i^=Y7ALlL%;0Vh(uDnI3 z=wZ4kK0Jqp_ft4<h_x5UR==ps*h0Vtu{#R~koJ8rqFU#8rq}UGYxC~;65=t3^VpWFJ;YB7pzc#O z++}7{KXOh5Z&~@{I}L2mH!TZrsiivXWc6?f`HLM>?Vz*%~9)+BeVGQRjHfk;R*g*GjQmXOq~U3MW_nTb=I!dk%-N zWx+kC?tM)VhN^EmLY>(*x0_%OBUDW&a;?mf6}o3ERAA49xo{4GYi85-t6V_-aM3Hj z4FTXm=Tou{g_PMc9h;}tvGkt8ykgOiW%Xl$Dy_LcR(zsXYMS(|fN~DB7bgnmNOq1x z6q;AYAI`C=S0@;=MA(mL&D64_x#kPbabEN)L1N&#?U2)o_U=~3Bg@nm{*pIfM@BSd zoJa!Bd2v<&*_C%s6kD~5nwU*%XDv&E@VxC@QC4LL*dNQb=6d%_;9x`FF$y&yv}z`lon}IqnOq8TjuanR zjBukOH2PR5d*Yq+G9eAeoXX#P#E}(CIom?y3H(k+UM#w-)z{Q`ShSCcX9rzy8Dy@zFAz$V2#VrR zj_*jBaux4usx+8>(KWQ*oiE)|>tD_A6=|M+(TSSfT$(hI7<$L~kC{!m%Bp*WbFj#z z69RYcVLrvJH~L7u&YiDd>^}P-Ogm-Vt6$-FUd26Z^pIzvcL;dCWCMxJ?ijP5PC3Pq zWxtg-Men?bC0Uulg>a7O=?)^q#tCzeEUZkONXY4|QQgox(hk$F*sHsxHoY@*zxbV* zFWh1-Q@KB01mK!a24GQ;?@yma65x5sfi> zCB1SmXC_Fe&ZWg0UbwNP&KRUrze80f=4`S3c8>MT+;beAZIjhH$45`U5+cti5Jz?D z0?HB8%-rX&*4P}JIOwv}?Z^^^^xIHRxl6Irxe;wU{dm0TCLSCsGxKFrRP+Q~*iqAw zEJUfUVu3f#d02woFQ`U6-CZe{h;*Pqz50f|q{hnu<~o?JgHfL<9Wb);a*ZOn@_PD; zF8L^!a;e+tmr!hc8v224oNl5qJNqrk*C#D4@>%6AOWLZAxxzWok=sp1q%Y}8`9vXh zjOVF)IkHmEG-f0>8P%4`-3wz^Iac6p6bPI18Y6O%hn$W$nN-uq$W|2t6l71$<^_9R z_Df~n`~Je56TYH3%Ra&w*i-8m*t4zf9wXe-NkXvab!v>Is4;>)UFlDmPH1{$!GRUX zGQuMN+pkb(6{jVxC^{cascIxIFIj+%qKG>v%_r5FO=F)kg;&2c9l*M)9IhH6Te5Pz z;~M3pv0%HWUw{pTx#mohnZBBw2wAW`vM@*d>HPR*vXjQDTi!JF`YMo_H0J6Tq+9Ve zdIz66-9(?(QD?A6q<>AL-G_bcekEC1KTaCC-qz{KcZ3-#s#`O_aK@O-dCf@5ln2nW zg!r$SzIA8i-K}tr4CL%>zy^bVl|U1zH?zxJDSNoH$-{F!)1+?t3aA)&C&btJ8gD(%MN5E7;XLeQc~1+azpQ&T*=;#ij+H$TM^`JBMl8{en#Nd)`j+WJZDB;Q{8U`tgDU z=$#X49a*U#pV_6G(C_@%9x9KQe$=u$nsq3KBTL{ldz*e>=1R0UWVVz(F}in$X};^M zMCyG229PNWh0l@5nsqcEeXXuFK81R_Uz&P;2bH^c3cdyc6w{Vsofq4~(~Qlry^L{Y zH;8J?2Am_*uYSR^6Kb)kY|wgo`W0h13bl$Y?)H@8;)+X_Ej3m*gx>kv3|khO@^v4w zT`(41x{+}kS}v3C^-1L%6Q(Yu#}`y;x={_`wSe`IPEaw!|cu0}L7JE;_~hsj#HxyKm(w0KOg2Qr)= z+a(nOf<2XJ0ejR$lq|TXjh|kkf3BnWFv~w-cylr8|V1*8> zo5r{qx_k|KJQfQ#{mQj&gA0?!5{{1On4G&?^Y7(rHSve*=^i5>QyJ_Pgbb)m8q1W7 zXq?JyDL5w=BTc_VWx|yEwwKRwzqJ&pQhsH%*t(g%R4KpmR)Y0LMV!*?M+7P2yMCOc z%?ug6bIzIUF)FjFD$R0S+pSRF+*? znvlxUfz>aj&wSk<#}ZZojZJ;L*4i|H@Y&3}$t-kEniH2pn=j|jcZ~5v?^LyUDkw`= zL+>1nbo#~Im$h2}ehh})fGFva!u@a)hWO^+~+8Iu57726cT0V zX{GyNr0?{xPpY|j=h4q z+?3MuMd^X#`7)o^qsWQI>X$*5lFP0#ZuIfWqPb^_tucZC$yjx6|EVPu0PMe&`c=u6hz|rPoW=Z{nOB zV0Z>)`=L+=Z2*{+xdVH|{Ua-REHgAe4mW!zJ87&J2V*5>8~6@q{FBD!eBXACeVsyfuDaO=CWhrL9l+|*tGsavhHMS7!p-{6F z@^s~>p&;{d6$sAJ&6zK4-@Xe6=eXeaj?o5!KE{x8)91p%gL7WB*5P+L_lw@?;|o;4 z-)Vd%n{|?RxHF)sxOH?j5lcHnl)@=*-CqU-i&cSq*^LpMVzSj-bB}QW1?#aie3@C> z_1uuNL^GpZ-5Pdh>*kh)-+2}IhTFIr#HI)&=1W5Hs&NB*oC97%KC*K8+AK|qAO|?} zLMe;CgQA(uf2A933v=~OgCv3P3-*}YSyow?S2qO*rC)H5sAL9(kH9b9jwJtDbXbn0 zmvb;5=VGWmMqA4Eo*#4TW4}^g!%@vs&bIMH_^;9laG@?DL+?0#G}A{nD}F@p;0f-| zPgd(yGcT=G<}GP0Rc+G|R<~x8g{d6|LCTmlo)8@roaGHq`OZ?P_`l{&*t*K6$!Y-! z`S6~voKf$ZW_!7)4>q?UXAZE}%0L8%t~j!Q$gUgWNG8pIAcZz&Wgs<{;?96#p4T0X zD$zS_%4Z$*+hb(jY8}b#!r7ed-l5j+7XrDLS)AI})0d? zmJ=P5@ca(S0c?atHOZ=VWT2{;6Ws&o%%*Ykj{9Ne$2ie`>N_t!hcT>ek)nozV_;8R z#GlMaA7L~bhcn*u6+ItjWR-H3iX_W5o_Mi6MeNdJCOo}9vbd76P{E_cS%E!mX6@v2 zDfU`rvv)3ZT(Z7{bH39|8moA@oyNMexzboW!dbGC$Euon&F6ZGe3|V6P_LZ;Y?$S4 z^7FHfa852uc~(jj-M=0$S&G~{52H4$NMd{r7uK@;wUqL;0>C;tg5F_A?xxWcs9ycz zvT{E8&b>Azxkg48r7x>rknhADaE^$1<|_rxdwcHr0_@5X7(a$)-i~h0u83=pTe%Y= zjm4x-zm$qebIoJ+eEbmDV?s)_4L1fI&SCn-r*VI>4tK|CVyUX>K;EJf&@W8ar7?NH^<7(?%HbJaBYwc^24#h+zn6#(h`Wf-w@ zhRz!_AeCl0zumI3J4eyu3trhIRm&4PfIR@}d{~9^xm)1Kg1ILEf^(86oqq8g<#=SZ zPJ(s~8B21?JdP|AR5XEzhGiXDDOjx`Gf9<+lGQR}dHKl7`Ip&4rlU{VtGs)a|Kh(2 zfhPC8L-{RBTC3Bhzzzo z%-0>p(i@#cmHii(%-gAhtQp8HsWW|{F`G;KjUr|hg9EsDA%6|zigtDjnwus>(0d!1 z*z`q8m}?!G95#M_9QLwCupR_!(a^`cs z998YSm1wH^1@<&Vw`?ak-?F%l!(lB|27CC2+f8gwhcsYM7kRHF*YaUU7T-G%L6PV~ zk8RP>kXgqhHv3Bg|60fI0Gr?5TxqOXR`y!0V)@#9c+A^MW6i3=Ih@orjhYyWY36UA zZzsRT$kg!KD&Db`|WQt5-Sg#+0HxtIRq{-`0Go3-a~**wYt{f){84M^){FT40ax zdWqg+L<$Qj2FE#uo|C(FRZx-nWO`5x1rN2?FV~8 zG0#)ht{gKjZMO4t&zF7A;LY2%O?OlLT$7Db;K%1>@lNs4ihCX%*;AnOtgKxQrB75M zKyj=8-H*}Ru9wqBk4?V<9~!C{adlHz%W&L&rD(bAm(vS*3a6HVU(ML3Fa-)2@y(Cm|zT)HhcV@w{aj9((W zLqo-!+4q6n&wOdB3#z6KS$TK3$FeWk`^UD}ENj9FmStoy!E>JiTqD6)cmhLHu7!mT zsW3klYE9?>=df?pFG-tiWA=QBojT8lS}clzcVru{TLNsj>iJUg!kg;evZyLVe>;K( z=*l3GXr0K0a~#I4mu+W>f2tC8hMaZR?o`N_1b*+jvpjG32HE?4t~`Y8{H&j~X= zZ;Me1a;lDiKjtZN=!GY8r0T8|*u#L$?qxPl277tD95OFX)FPf5(`_fPOwyOnrx;4t zS5$Mc+4EF^SIY`AUi~<-a)S2G7qZaBHFtJ3k$TnSnr9tTY-mREr6Wt>S-+jDBkz2r zdgo+!_ZVZ8XF|B;^V=;8zr!`(QRH;i%ze^}_Sih-hbwjuz0-LZlWQgCZ99L6%g{UL zFBYzTQI{7S!(O~Nn7GTC>?CAs`p`RF11@HJ)%u8d>g+=%vt6E>2XI`|%@~5>KKD0I2=l{6Mq`pihuSh((KYRx((jdc!#Y+06~asdex zPI=gJuFSye78?xnFl{u?h{sM4#8cnd1#En30EAR#m8w&azQ;{72rRum{bClzsw9n7 zb!k8jotZJhHI>p&8cY7RWC1G;sg%0Z1SQGPxhCeS!G{35FaQ`7P=04uHEUH60yfPVvV zYyP327f@C~dCHPkzW|$ro6o00@2KgTra_cfS8LeEc2sp7=IF>u&TDor=g6{-EV#H_ zi4z%JF_^zy(Y3I8)fK(E)y_h?r_XQ8|1&!CB}S;$(V`jkogir~VM#TC->NrJX4avW z?RvDyzDhI=q z0hOco$-?xJf6n2Bux!u@<;9C2`*ag~u|IsqDCtmXhy4BHGNkgJJk$Kx+?Ksp(AD*Y zsao#42JEK;K^J)AwEFKXs*Y%lQMAk$$k)Sl?;o={!()Oy{L&06SC3A##F|^x zwdhBdXlQmXh)rXzk;ze`&iL@9oqy!A(CpPOHmRIga&d)Mg-WjjR>+K^4|7&)yOP~6 zN30t&G3T9Q6+69n6Xg@-hh(+R+1w*5Ov!9Oyhnv?a84HiYNkf+E^Gd%)YiTuE2)Ip z+f-Fg=j~kkcD)qX14fUEKsiX8nXlxt>r=9~0`w~jh2GnM9c=}Y8GqfUkRs+;6RdM!$}?yBl*sgc%uPL&bQZB3{&~-r5bsrMoxf~7 zn>mnt*o(lPx@Ffk&jkw8FI(nyz$*6^jIM$`ov&TI_{=8Qa}tcZU(8cy-|V+48A)-^ zsTNy1EJbP+#Rc|MjmYneWFqU|etGrF-c+%Amxi)|)mMX-?u{n1T~c*-Hp4zB!MXDV z_sC;iZG>~U$E&)UN*m|LD?@!}GoJQT7Vmz^V^!!C{8Y>?t16pWCcCNLVF$P6Xs6~raeay@9ucsDj%R&Wl zAGaf{J-Ay<*D}r+Wf1H5Leg0F)XY8SP|=e;(xtIr5B0oeBPEjz^L$CKit7Muc#G;+ zwqtd~$_+US=kPlv%dz~@RXZdr`Fsk_N%FUv?-Nw1Ex5A8D*YAVkk7HY zwP{o>D6bgNB8O2Cj1`?IKP2iny!rky#;@Fxb?X8Ezm%IA(eYBNn`<4z??@BQyjaxkeFXYi}jA2}ado*2EO*e-)O{qkO(#nZ( zU$yB%yyh_zxtEFnOl26DBjDrie9i3FnXkn{Rll-l#?v72#5A|pD0W9Usww29%<*}fgIil@M2%OdPmhYT1u`T$RB?!mq~9OCjlS+Fr1LSTu6>X*{}In2DK zXAHci>`C=2<(M;Hu)aZ#EXO23usaH{r!2ao4WQj<9|&o;&&xF6#SKB(W$(eBo-eSc z&v$@5U4;eq^j!o0Hgw7C{?1R=I)3MEz{bMeL21ggT;&98n7gaGnxRGSe62iIx%H&6 zn)1IkfC!ECRz?5rQ*BHYG7N~@C-mKI* zFY_!M*aP}r{Yo0^g(s|enM&n5498t{P2HMiF54NK11+$1HAb^pnPMyxdi82!NT;G( z0UK}6+)JMwE3(HJO|F%a(T9@mpu)-(5hp^fdxyauAbSn@$nvq4g}xXb0I*R%Q5`Yc z1(d<7W08(5XX9rb;T%!$oght0bd>nrXzfMG4kjg2Np^eTQKTJonVo>X+rPRO`N=PNWKwm z-){r8$EZjYWpN(^(X93~8St_>w5R)J_HcsJFX`DLK|}9g9Yz-Bw($gdr$W=vJB{U7 zvo^}9iWx;$mG`+q4{aDU(xdUlO?-f@;!aK8VLE~h6L+n;1LRK!BYvlqopG&jD2-P zCaO;CaZ&9b@swrV;GEn>H|t0<567^_$RC!Mm(@BqYVW6Em`Ab20#Ag19}`2t)L&6z+o-`zA5&Lc2Ra#%SvESZwNm^_ws@X9L12$5oTd#{ z^JUAN%jj0WzJpEvz0Kc27Mw$OZ#Oj+y5AvlQTjbLCwZ*H?_?b{%@}A0w_jS7}I)63ud<_jirtuFCSUvul%+%7B1 zX^)XND1IV&ma>H)5hmd7#~`Fr$gviRV&Vm6zEY+<{rpk64)Tve3_G)WmT>tjJwmP$-Ix=<8vByYtsDL%qepm)(-M$zK})H&+ZpC ztUL|aR|n^RO9rNYV@Zo(^m{EX!l|mKdRGHW{;K{RW2e`+`Q?wsKz`qV` zi+2jzsp9UegQDf;9xZwJvpWS$@Hxu6+>(eGMKMo>_T_rvf!8@{*S3*2Z>J)4W+cQ% z!Piv`Jj<$R*?;oeGe$SPmalc3y_j9Pm*al(r7*pBKdS9vCYIdLY=5yv=?y{*iR>bVzG3J)V0$d2K zMzbLR_a@o>l36-2^O}NO|5XZw1!zSFqni^A9ld?nkwwpI)z^{rnGsR$xiNHqNzT5w zv|LcQsiGq*WeuZ2U=K~dV+4CJUeip)V7)Bx*zCoY#mE*0P~2lBW*dM#2a&FRfo{&F zjA$sZYMPlo0nh#M|6iPg`Mui!&hh_O@8KLMd`<2eqc%?d+6g#EjB|A&X{;&$NE)kl z7+mA5%^LESl|0t$5;*7i)54h`O?$b%l$_0-FF42k8yl^SM4oOdDJ`BnX{_>(Nn?RU z&)jRmXKN6rUn0OM!=idgKF!;5ss*8h1}y7+s?P^7Y*{dpIBp(u57kX+tjfy6IdpNB zA~U@W!I1?x4;2FE2!XCPCXGc+=1ak+_2Kv5GvuNG#aTEpa5*ushe4XzOqFs&yU@`~ zH&4ITUv!@@i#F%WfDQj}yQyhQ-F1X>p0n~xmbNk8>CCECNs=b+?d}RVMn9x-=1A9Qz$qK2+9Dn1&{vrxNXDzj8Qh4|&gh_??Lrz#b`{ z8C2+CO+!Hz5nHEh3X9>+nhk%8k>jLZz= zjCutFAtt+CE?4k2;7alNHGY7NDJao`^{HY&?>Gps_RQ`VBT`xVd`KK~CrEBhiTyMY z&Q0&+BIeRB`NY0UEJe&k8mH>9wp0!nPrNPo7E07QieTu;e3@M+(uJb-)zk*q1%$F6 z$G4s_+A{rP_P-1kXX^F)rCc^z#*TjIXr69aiA-zN!JZdplDn+bW*DsU24D}fyJY?S zC;sn$=O6jM-}B%9>A&CpXaD%FMsvJyzucq`NtPO`}vRl z>?fc9`R70W`2E}b*=Ikm*5`lu7eDmqlljLI`^~ps{^F~zzy60`fAa_5{L^Q7;h+DD zFMgVT`|v~m`pL)N_mBVc>wo;_pM2lHef$sp`NbDse)ZKCU+j;6{^vjb{6}B>*-!rR zDzC<`umR`e^AeU`jel3z8-z~t6zP& zKk|Q9`)|Mc`pb_WzvtCoeEsXc`RbRS<@=wdYpV~x`sKHO_vJUg{4BGudOky2|Mr{X zTmAdvfBgCvzy9i%e-dHe{*izD;M4Da`n?a|`