From 5d36af91204dfa5e635caae10a1bd43e0f60f83f Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (win)" <24256554+attack68@users.noreply.github.com> Date: Thu, 14 Dec 2023 16:14:32 +0100 Subject: [PATCH 01/41] ENH: dual norm cdf --- rateslib/dual.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/rateslib/dual.py b/rateslib/dual.py index 8654edf3..b305af1e 100644 --- a/rateslib/dual.py +++ b/rateslib/dual.py @@ -1,6 +1,7 @@ from math import isclose from abc import abstractmethod, ABCMeta from typing import Union, Optional +from statistics import NormalDist import math import numpy as np @@ -566,6 +567,20 @@ def dual_log(x, base=None): return math.log(x, base) +def dual_norm_cdf(x): + if isinstance(x, Dual): + a = float(x) / math.sqrt(2) + base = NormalDist().cdf(float(x)) + scalar = 1 / math.sqrt(2*math.pi) * math.exp(-0.5 * float(x)**2) + return Dual(base, x.vars, scalar * x.dual) + elif isinstance(x, Dual2): + return NotImplementedError("Normal CDF not implemented for Dual2") + else: + return NormalDist().cdf(x) + + + + def _pivot_matrix(A, method=1): """ Returns the pivoting matrix for P, used in Doolittle's method. From e0d9c7e43e4921c756e85a36932f8b673a4eb8c0 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Fri, 15 Dec 2023 07:44:07 +0100 Subject: [PATCH 02/41] ENH: dual norm cdf --- rateslib/dual.py | 27 +++++++++++++++++++++------ tests/test_dual.py | 11 +++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/rateslib/dual.py b/rateslib/dual.py index b305af1e..7e9845a8 100644 --- a/rateslib/dual.py +++ b/rateslib/dual.py @@ -568,17 +568,32 @@ def dual_log(x, base=None): def dual_norm_cdf(x): + """ + Return the cumulative standard normal distribution for given value. + + Parameters + ---------- + x : float, Dual, Dual2 + + Returns + ------- + float, Dual, Dual2 + """ + base = NormalDist().cdf(float(x)) if isinstance(x, Dual): - a = float(x) / math.sqrt(2) - base = NormalDist().cdf(float(x)) scalar = 1 / math.sqrt(2*math.pi) * math.exp(-0.5 * float(x)**2) return Dual(base, x.vars, scalar * x.dual) elif isinstance(x, Dual2): - return NotImplementedError("Normal CDF not implemented for Dual2") + scalar = 1 / math.sqrt(2 * math.pi) * math.exp(-0.5 * float(x) ** 2) + scalar2 = scalar * -float(x) + return Dual2( + base, + x.vars, + scalar * x.dual, + scalar * x.dual2 + 0.5 * scalar2 * np.einsum("i,j", x.dual, x.dual) + ) else: - return NormalDist().cdf(x) - - + return base def _pivot_matrix(A, method=1): diff --git a/tests/test_dual.py b/tests/test_dual.py index 06acc571..63861a1d 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -10,6 +10,7 @@ dual_exp, dual_log, dual_solve, + dual_norm_cdf, set_order, _plu_decomp, _pivot_matrix, @@ -596,6 +597,16 @@ def test_exp(x): assert result == expected +def test_norm_cdf(): + x = Dual2(1.25, "x") + value = dual_norm_cdf(x) + value2 = dual_norm_cdf(x + 0.00001) + assert abs(value.gradient("x")[0] - (value2 - value) * 100000) < 1e-5 + + second = (value2.gradient("x")[0] - value.gradient("x")[0])*100000 + assert abs(value.gradient("x", order=2)[0] - second) < 1e-5 + + def test_downcast_vars(): w = Dual( 2, From f99a23a25f1f3aca3785da20d3f8840748c57f46 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (win)" <24256554+attack68@users.noreply.github.com> Date: Fri, 15 Dec 2023 17:04:55 +0100 Subject: [PATCH 03/41] ENH: dual norm cdf --- rateslib/dual.py | 5 ++++- rateslib/fx.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/rateslib/dual.py b/rateslib/dual.py index 7e9845a8..70e268bd 100644 --- a/rateslib/dual.py +++ b/rateslib/dual.py @@ -4,6 +4,7 @@ from statistics import NormalDist import math import numpy as np +from rateslib.default import NoInput PRECISION = 1e-14 FLOATS = (float, np.float16, np.float32, np.float64, np.longdouble) @@ -56,7 +57,9 @@ def __gt__(self, argument): def __eq__(self, argument): """Compare an argument with a Dual number for equality.""" if not isinstance(argument, type(self)): - if not isinstance(argument, (*FLOATS, *INTS)): + if isinstance(argument, NoInput): + return False + elif not isinstance(argument, (*FLOATS, *INTS)): raise TypeError(f"Cannot compare {type(self)} with incompatible type.") argument = type(self)(float(argument)) if self.vars == argument.vars: diff --git a/rateslib/fx.py b/rateslib/fx.py index 82217b24..15ab4bb0 100644 --- a/rateslib/fx.py +++ b/rateslib/fx.py @@ -1780,3 +1780,46 @@ def forward_fx( # else: fx_settlement is deemed to be immediate hence DF are both equal to 1.0 _ *= fx_rate return _ + +from rateslib.dual import dual_log, dual_exp, dual_norm_cdf +from statistics import NormalDist +def GKF(F, K, t, df1, df2, vol, method): + r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t + vs = vol * t**0.5 + S_imm = F * df2 / df1 + + if method=="GKF": + d1 = (dual_log(F / K) + 0.5 * vol**2 * t) / vs + d2 = d1 - vs + Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) + _ = dual_exp(-r2 * t) * (F * Nd1 - K * Nd2) + + elif method=="GKS": + d1 = (dual_log(S_imm / K) + (r2-r1+0.5*vol**2) * t) / vs + d2 = d1 - vs + Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) + _ = df1 * S_imm * Nd1 - K * df2 * Nd2 + + return _ + +def GKModel(S, K, t, ccy1, ccy2, vol): + d1 = (dual_log(S / K) + 1) + + +class FXOption: + style = "european" + def __init__( + self, + pair: str, + expiry: Union[datetime, str], + kind: str = "call", + notional: float = NoInput(0), + eval_date: Union[datetime, NoInput] = NoInput(0), + + delivery: str = NoInput(0), + + strike: Union[float, Dual, Dual2, str] = NoInput(0), + premium = NoInput(0), + payment: Union[str, datetime] = NoInput(0), + ): + From 8eb937cea134a66cef85777da823fbcd33922a1e Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sat, 16 Dec 2023 16:54:34 +0100 Subject: [PATCH 04/41] ENH: fx option --- rateslib/default.py | 2 + rateslib/fx.py | 43 ------------- rateslib/instruments.py | 92 ++++++++++++++++++++++++++- rateslib/periods.py | 135 ++++++++++++++++++++++++++++++++++++++-- tests/test_dual.py | 6 ++ 5 files changed, 228 insertions(+), 50 deletions(-) diff --git a/rateslib/default.py b/rateslib/default.py index e6abdecf..14a3941a 100644 --- a/rateslib/default.py +++ b/rateslib/default.py @@ -145,6 +145,8 @@ class Defaults: spread_compound_method = "none_simple" base_currency = "usd" + delivery_lag = 2 + # Curves interpolation = { diff --git a/rateslib/fx.py b/rateslib/fx.py index 15ab4bb0..82217b24 100644 --- a/rateslib/fx.py +++ b/rateslib/fx.py @@ -1780,46 +1780,3 @@ def forward_fx( # else: fx_settlement is deemed to be immediate hence DF are both equal to 1.0 _ *= fx_rate return _ - -from rateslib.dual import dual_log, dual_exp, dual_norm_cdf -from statistics import NormalDist -def GKF(F, K, t, df1, df2, vol, method): - r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t - vs = vol * t**0.5 - S_imm = F * df2 / df1 - - if method=="GKF": - d1 = (dual_log(F / K) + 0.5 * vol**2 * t) / vs - d2 = d1 - vs - Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) - _ = dual_exp(-r2 * t) * (F * Nd1 - K * Nd2) - - elif method=="GKS": - d1 = (dual_log(S_imm / K) + (r2-r1+0.5*vol**2) * t) / vs - d2 = d1 - vs - Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) - _ = df1 * S_imm * Nd1 - K * df2 * Nd2 - - return _ - -def GKModel(S, K, t, ccy1, ccy2, vol): - d1 = (dual_log(S / K) + 1) - - -class FXOption: - style = "european" - def __init__( - self, - pair: str, - expiry: Union[datetime, str], - kind: str = "call", - notional: float = NoInput(0), - eval_date: Union[datetime, NoInput] = NoInput(0), - - delivery: str = NoInput(0), - - strike: Union[float, Dual, Dual2, str] = NoInput(0), - premium = NoInput(0), - payment: Union[str, datetime] = NoInput(0), - ): - diff --git a/rateslib/instruments.py b/rateslib/instruments.py index b8a80058..d59a1028 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -59,7 +59,7 @@ ZeroIndexLeg, IndexFixedLeg, ) -from rateslib.dual import Dual, Dual2, DualTypes +from rateslib.dual import Dual, Dual2, DualTypes, dual_log, dual_exp, dual_norm_cdf from rateslib.fx import FXForwards, FXRates, forward_fx @@ -316,6 +316,7 @@ def delta( fx: Union[FXRates, FXForwards, NoInput] = NoInput(0), base: Union[str, NoInput] = NoInput(0), local: bool = False, + **kwargs ): """ Calculate delta risk of an *Instrument* against the calibrating instruments in a @@ -353,7 +354,7 @@ def delta( """ if solver is NoInput.blank: raise ValueError("`solver` is required for delta/gamma methods.") - npv = self.npv(curves, solver, fx, base, local=True) + npv = self.npv(curves, solver, fx, base, local=True, **kwargs) _, fx_, base_ = _get_curves_fx_and_base_maybe_from_solver( NoInput(0), solver, NoInput(0), fx, base, NoInput(0) ) @@ -368,6 +369,7 @@ def gamma( fx: Union[FXRates, FXForwards, NoInput] = NoInput(0), base: Union[str, NoInput] = NoInput(0), local: bool = False, + **kwargs ): """ Calculate cross-gamma risk of an *Instrument* against the calibrating instruments of a @@ -419,7 +421,7 @@ def gamma( _ad1 = solver._ad solver._set_ad_order(2) - npv = self.npv(curves, solver, fx_, base_, local=True) + npv = self.npv(curves, solver, fx_, base_, local=True, **kwargs) grad_s_sT_P = solver.gamma(npv, base_, fx_) # reset original order @@ -7851,6 +7853,90 @@ def cashflows( return ret +# FX Options + +class FXOption(Sensitivities): + style = "european" + + def __init__( + self, + pair: str, + expiry: Union[datetime, str], + kind: str = "call", + notional: float = NoInput(0), + eval_date: Union[datetime, NoInput] = NoInput(0), + calendar: Union[CustomBusinessDay, str, NoInput] = NoInput(0), + modifier: Union[str, NoInput] = NoInput(0), + delivery_lag: Union[int, NoInput] = NoInput(0), + strike: Union[DualTypes, str, NoInput] = NoInput(0), + premium: Union[float, NoInput] = NoInput(0), + payment_lag: Union[str, datetime, NoInput] = NoInput(0), + curves: Union[list, str, Curve, NoInput] = NoInput(0), + spec: Union[str, NoInput] = NoInput(0), + ): + self.pair = pair.lower() + + if isinstance(expiry, datetime): + self.expiry = expiry + elif isinstance(expiry, str) and isinstance(eval_date, datetime): + self.expiry = add_tenor(eval_date, expiry, modifier, calendar, NoInput(0)) + else: + raise ValueError("`expiry` must be datetime or string tenor when `eval_date` is given.") + + _ = delivery_lag if delivery_lag is not NoInput.blank else defaults.delivery_lag + self.delivery = add_tenor(self.expiry, f"{_}b", "F", calendar, NoInput(0)) + self.delivery_lag = _ + _ = payment_lag if payment_lag is not NoInput.blank else defaults.payment_lag + self.payment = add_tenor(self.expiry, f"{_}b", "F", calendar, NoInput(0)) + self.payment_lag = _ + + self.notional = notional if notional is not NoInput.blank else defaults.notional + self.strike = strike + self.premium = premium + + self.curves = curves + self.spec = spec + + def _set_pricing_mid(self): + pass + + def rate( + self, + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + vol: float = NoInput(0) + ): + curves, fx, base = _get_curves_fx_and_base_maybe_from_solver( + self.curves, solver, curves, fx, base, self.pair[3:] + ) + F = fx.rate(self.pair, settlement=self.delivery) + t = (self.expiry - curves[1].node_dates[0]) / timedelta(days=365) + df1, df2 = curves[1][self.delivery], curves[3][self.delivery] + _ = self._garman_kolhagen_forward(F, self.strike, t, df1, df2, vol) + return _ / curves[3][self.payment] + + @staticmethod + def _garman_kolhagen_forward(F, K, t, df1, df2, vol): + r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t + vs = vol * t ** 0.5 + + d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs + d2 = d1 - vs + Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) + _ = dual_exp(-r2 * t) * (F * Nd1 - K * Nd2) + + # Spot formulation instead of F + # https://quant.stackexchange.com/a/63661/29443 + # S_imm = F * df2 / df1 + # d1 = (dual_log(S_imm / K) + (r2 - r1 + 0.5 * vol ** 2) * t) / vs + # d2 = d1 - vs + # Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) + # _ = df1 * S_imm * Nd1 - K * df2 * Nd2 + return _ + + # Generic Instruments diff --git a/rateslib/periods.py b/rateslib/periods.py index b2836856..e115e42c 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -19,7 +19,7 @@ """ from abc import abstractmethod, ABCMeta -from datetime import datetime +from datetime import datetime, timedelta from typing import Optional, Union import warnings from math import comb, log @@ -40,7 +40,7 @@ CompositeCurve, index_left, ) -from rateslib.dual import Dual, Dual2, DualTypes +from rateslib.dual import Dual, Dual2, DualTypes, dual_norm_cdf, dual_exp, dual_log from rateslib.fx import FXForwards, FXRates @@ -54,6 +54,7 @@ def _get_fx_and_base( fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), base: Union[str, NoInput] = NoInput(0), ): + # TODO these can be removed when no traces of None remain. if fx is None: raise NotImplementedError("TraceBack for NoInput") if base is None: @@ -94,7 +95,7 @@ def _get_fx_and_base( if fx is NoInput.blank: fx = 1.0 else: - if abs(fx - 1.0) < 1e-10: + if abs(fx - 1.0) < 1e-12: pass # no warning when fx == 1.0 else: warnings.warn( @@ -910,7 +911,7 @@ def npv( local: bool = False, ): """ - Return the cashflows of the *FloatPeriod*. + Return the NPV of the *FloatPeriod*. See :meth:`BasePeriod.npv()` """ @@ -2357,6 +2358,121 @@ def analytic_delta(self, *args, **kwargs): return 0.0 +class FXOption: + style = "european" + + def __init__( + self, + pair: str, + expiry: datetime, + delivery: datetime, + payment: datetime, + strike: Union[DualTypes, NoInput] = NoInput(0), + notional: Union[float, NoInput] = NoInput(0), + option_fixing: Union[float, NoInput] = NoInput(0), + kind: str = "call", + ): + self.pair = pair.lower() + self.currency = self.pair[3:] + self.domestic = self.pair[:3] + self.notional = defaults.notional if notional is NoInput.blank else notional + self.strike = strike + self.payment = payment + self.delivery = delivery + self.expiry = expiry + self.kind = kind + self.option_fixing = option_fixing + + @staticmethod + def _black76(F, K, t, df1, df2, vol): + """ + Option price in points terms for immediate premium settlement + """ + r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t + vs = vol * t ** 0.5 + + d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs + d2 = d1 - vs + Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) + _ = dual_exp(-r2 * t) * (F * Nd1 - K * Nd2) + + # Spot formulation instead of F (Garman Kohlhagen formulation) + # https://quant.stackexchange.com/a/63661/29443 + # S_imm = F * df2 / df1 + # d1 = (dual_log(S_imm / K) + (r2 - r1 + 0.5 * vol ** 2) * t) / vs + # d2 = d1 - vs + # Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) + # _ = df1 * S_imm * Nd1 - K * df2 * Nd2 + return _ + + def npv( + self, + disc_curve: Curve, + disc_curve_ccy2: Curve, + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: Union[float, NoInput] = NoInput(0), + ): + """ + Return the NPV of the *FXOption*. + + TODO + """ + if self.payment < disc_curve_ccy2.node_dates[0]: + # payment date is in the past avoid issues with fixings or rates + return _maybe_local(0.0, local, self.currency, NoInput(0), NoInput(0)) + + if self.option_fixing is not NoInput.blank: + if self.kind == "call" and self.strike < self.option_fixing: + value = (self.option_fixing - self.strike) * self.notional + elif self.kind == "put" and self.strike > self.option_fixing: + value = (self.strike - self.option_fixing) * self.notional + else: + return _maybe_local(0.0, local, self.currency, NoInput(0), NoInput(0)) + value *= disc_curve_ccy2[self.payment] + + else: + # value is expressed in currency (i.e. pair[3:]) + f = fx.rate(self.pair, self.delivery) + df2 = disc_curve_ccy2[self.expiry] + value = self._black76( + F=f, + K=self.strike, + t=(self.expiry - disc_curve_ccy2.node_dates[0]) / timedelta(days=365), + df1=disc_curve[self.expiry], + df2=df2, + vol=vol, + ) + if self.kind == "put": + # c + k = f + p + value += (self.strike - f) * df2 + + value *= self.notional + + return _maybe_local(value, local, self.currency, fx, base) + + def rate( + self, + disc_curve: Curve, + disc_curve_ccy2: Curve, + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: Union[float, NoInput] = NoInput(0), + ): + npv = self.npv( + disc_curve, + disc_curve_ccy2, + fx, + self.currency, + False, + vol, + ) + points_premium = (npv / disc_curve_ccy2[self.payment]) / self.notional + return points_premium * 10000.0 + + def _float_or_none(val): if val is None: return None @@ -2382,3 +2498,14 @@ def _disc_maybe_from_curve( else: _ = disc_curve return _ + + +def _maybe_local(value, local, currency, fx, base): + """ + Return NPVs in scalar form or dict form. + """ + if not local: + return value + else: + fx, _ = _get_fx_and_base(currency, fx, base) + return {currency: value * fx} diff --git a/tests/test_dual.py b/tests/test_dual.py index 63861a1d..6413266c 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -607,6 +607,12 @@ def test_norm_cdf(): assert abs(value.gradient("x", order=2)[0] - second) < 1e-5 +def test_norm_cdf_value(): + result = dual_norm_cdf(1.0) + expected = 0.8413 + assert abs(result - expected) < 1e-4 + + def test_downcast_vars(): w = Dual( 2, From 7e3f11b572f75b7873a41c575fea9dd6741a9940 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sat, 16 Dec 2023 22:46:29 +0100 Subject: [PATCH 05/41] ENH: implied vol --- rateslib/periods.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/rateslib/periods.py b/rateslib/periods.py index e115e42c..3af348cc 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2472,6 +2472,24 @@ def rate( points_premium = (npv / disc_curve_ccy2[self.payment]) / self.notional return points_premium * 10000.0 + def implied_vol( + self, + disc_curve: Curve, + disc_curve_ccy2: Curve, + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + premium: Union[float, NoInput] = NoInput(0), + ): + vol_ = Dual(0.25, "vol") + for i in range(20): + f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_) - premium + if abs(f_) < 1e-10: + break + vol_ = Dual(float(vol_ - f_ / f_.gradient("vol")), "vol") + + return float(vol_) # return a float TODO check whether Dual can be returned. + def _float_or_none(val): if val is None: From b5d3c2e1a92fe31d16d0c83b491bf84a84d07197 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sun, 17 Dec 2023 12:04:20 +0100 Subject: [PATCH 06/41] ENH: options tests --- rateslib/periods.py | 11 ++-- tests/test_periods.py | 117 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 121 insertions(+), 7 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 3af348cc..3a965f21 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -56,9 +56,9 @@ def _get_fx_and_base( ): # TODO these can be removed when no traces of None remain. if fx is None: - raise NotImplementedError("TraceBack for NoInput") + raise NotImplementedError("TraceBack for NoInput") # pragma: no cover if base is None: - raise NotImplementedError("TraceBack for NoInput") + raise NotImplementedError("TraceBack for NoInput") # pragma: no cover if isinstance(fx, (FXRates, FXForwards)): base = fx.base if base is NoInput.blank else base.lower() @@ -2388,16 +2388,15 @@ def _black76(F, K, t, df1, df2, vol): """ Option price in points terms for immediate premium settlement """ - r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t vs = vol * t ** 0.5 - d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs d2 = d1 - vs Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) - _ = dual_exp(-r2 * t) * (F * Nd1 - K * Nd2) + _ = df2 * (F * Nd1 - K * Nd2) # Spot formulation instead of F (Garman Kohlhagen formulation) # https://quant.stackexchange.com/a/63661/29443 + # r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t # S_imm = F * df2 / df1 # d1 = (dual_log(S_imm / K) + (r2 - r1 + 0.5 * vol ** 2) * t) / vs # d2 = d1 - vs @@ -2440,7 +2439,7 @@ def npv( F=f, K=self.strike, t=(self.expiry - disc_curve_ccy2.node_dates[0]) / timedelta(days=365), - df1=disc_curve[self.expiry], + df1=None, # not required: disc_curve[self.expiry], df2=df2, vol=vol, ) diff --git a/tests/test_periods.py b/tests/test_periods.py index eb1aeabe..83df811e 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -15,8 +15,9 @@ IndexFixedPeriod, IndexCashflow, IndexMixin, + FXOption, ) -from rateslib.fx import FXRates +from rateslib.fx import FXRates, FXForwards from rateslib.default import Defaults from rateslib.curves import Curve, LineCurve, IndexCurve, CompositeCurve from rateslib import defaults @@ -1885,3 +1886,117 @@ def test_index_only(self, curve): def test_base_period_dates_raise(): with pytest.raises(ValueError): _ = FixedPeriod(dt(2023, 1, 1), dt(2022, 1, 1), dt(2024, 1, 1), "Q") + +@pytest.fixture() +def fxfo(): + # FXForwards for FX Options tests + eureur = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9908630928802933}, calendar="tgt", id="eureur" + ) + usdusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9798648182834734}, calendar="nyc", id="usdusd" + ) + eurusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9909918247663814}, id="eurusd" + ) + fxr = FXRates({"eurusd": 1.0615}, settlement=dt(2023, 3, 20)) + fxf = FXForwards( + fx_curves={"eureur": eureur, "eurusd": eurusd, "usdusd": usdusd}, + fx_rates=fxr + ) + # fxf.swap("eurusd", [dt(2023, 3, 20), dt(2023, 6, 20)]) = 60.10 + return fxf + + +class TestFXOption: + + def test_npv(self, fxfo): + fxo = FXOption( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo.npv( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] + expected = 140513.647629 # 140500 USD premium according to Tullets calcs (may be rounded) + assert abs(result - expected) < 1e-6 + + def test_npv_in_past(self, fxfo): + fxo = FXOption( + pair="eurusd", + expiry=dt(2022, 6, 16), + delivery=dt(2022, 6, 20), + payment=dt(2022, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo.npv( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) + assert result == 0.0 + + def test_npv_option_fixing(self, fxfo): + fxo = FXOption( + pair="eurusd", + expiry=dt(2023, 3, 15), + delivery=dt(2023, 3, 17), + payment=dt(2023, 3, 17), + strike=1.101, + notional=20e6, + option_fixing=1.102, + ) + result = fxo.npv( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) + expected = (1.102-1.101) * 20e6 * fxfo.curve("usd", "usd")[dt(2023, 3, 17)] + assert abs(result - expected) < 1e-9 + + # worthless option + fxo = FXOption( + pair="eurusd", + expiry=dt(2023, 3, 15), + delivery=dt(2023, 3, 17), + payment=dt(2023, 3, 17), + strike=1.101, + notional=20e6, + option_fixing=1.100, + ) + result = fxo.npv( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) + expected = 0.0 + assert abs(result - expected) < 1e-9 + + def test_premium_points(self, fxfo): + fxo = FXOption( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo.rate( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) + expected = 70.256824 # 70.25 premium according to Tullets calcs (may be rounded) + assert abs(result - expected) < 1e-6 \ No newline at end of file From 366ef853ee81d43ab2a60191a1267aa9ac281dd1 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sun, 17 Dec 2023 12:08:19 +0100 Subject: [PATCH 07/41] ENH: expose maybe_local to some NPVs --- rateslib/periods.py | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 3a965f21..3a38e9c7 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -921,11 +921,7 @@ def npv( if self.payment < disc_curve_.node_dates[0]: return 0.0 # payment date is in the past avoid issues with fixings or rates value = self.rate(curve) / 100 * self.dcf * disc_curve_[self.payment] * -self.notional - if local: - return {self.currency: value} - else: - fx, _ = _get_fx_and_base(self.currency, fx, base) - return fx * value + return _maybe_local(value, local, self.currency, fx, base) def cashflow(self, curve: Union[Curve, LineCurve, dict]) -> Union[None, DualTypes]: if curve is None: @@ -1800,11 +1796,7 @@ def npv( if not isinstance(disc_curve, Curve) and curve is NoInput.blank: raise TypeError("`curves` have not been supplied correctly.") value = self.cashflow * disc_curve_[self.payment] - if local: - return {self.currency: value} - else: - fx, _ = _get_fx_and_base(self.currency, fx, base) - return fx * value + return _maybe_local(value, local, self.currency, fx, base) def cashflows( self, @@ -2033,11 +2025,7 @@ def npv( if not isinstance(disc_curve, Curve) and curve is NoInput.blank: raise TypeError("`curves` have not been supplied correctly.") value = self.cashflow(curve) * disc_curve_[self.payment] - if local: - return {self.currency: value} - else: - fx, _ = _get_fx_and_base(self.currency, fx, base) - return fx * value + return _maybe_local(value, local, self.currency, fx, base) @property @abstractmethod @@ -2521,8 +2509,8 @@ def _maybe_local(value, local, currency, fx, base): """ Return NPVs in scalar form or dict form. """ - if not local: - return value + if local: + return {currency: value} else: fx, _ = _get_fx_and_base(currency, fx, base) - return {currency: value * fx} + return value * fx From 0e57363d61da2a478fcb35d87c94ba13384a6516 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sun, 17 Dec 2023 12:12:04 +0100 Subject: [PATCH 08/41] ENH: expose maybe_local to some NPVs --- tests/test_periods.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/test_periods.py b/tests/test_periods.py index 83df811e..69e35181 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -1999,4 +1999,22 @@ def test_premium_points(self, fxfo): vol=0.089, ) expected = 70.256824 # 70.25 premium according to Tullets calcs (may be rounded) - assert abs(result - expected) < 1e-6 \ No newline at end of file + assert abs(result - expected) < 1e-6 + + def test_implied_vol(self, fxfo): + fxo = FXOption( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo.implied_vol( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + premium=70.25, + ) + expected = 0.08899600982866121 # Tullets have trade confo at 8.9% + assert abs(expected - result) < 1e-9 \ No newline at end of file From e17b7df545862e66d98ec95b115ac8cf134292d7 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sun, 17 Dec 2023 13:25:23 +0100 Subject: [PATCH 09/41] ENH: expose maybe_local to some NPVs --- rateslib/periods.py | 6 +----- tests/test_periods.py | 4 +++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 3a38e9c7..0af24a0a 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -465,11 +465,7 @@ def npv( if not isinstance(disc_curve, Curve) and curve is NoInput.blank: raise TypeError("`curves` have not been supplied correctly.") value = self.cashflow * disc_curve_[self.payment] - if local: - return {self.currency: value} - else: - fx, _ = _get_fx_and_base(self.currency, fx, base) - return fx * value + return _maybe_local(value, local, self.currency, fx, base) def cashflows( self, diff --git a/tests/test_periods.py b/tests/test_periods.py index 69e35181..2eb02a90 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -1887,6 +1887,7 @@ def test_base_period_dates_raise(): with pytest.raises(ValueError): _ = FixedPeriod(dt(2023, 1, 1), dt(2022, 1, 1), dt(2024, 1, 1), "Q") + @pytest.fixture() def fxfo(): # FXForwards for FX Options tests @@ -2017,4 +2018,5 @@ def test_implied_vol(self, fxfo): premium=70.25, ) expected = 0.08899600982866121 # Tullets have trade confo at 8.9% - assert abs(expected - result) < 1e-9 \ No newline at end of file + assert abs(expected - result) < 1e-9 + From 22f9fcd56d360195ebbbfe562ae58986c7718d5e Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Mon, 18 Dec 2023 07:36:52 +0100 Subject: [PATCH 10/41] ENH: expose maybe_local to some NPVs --- rateslib/periods.py | 42 ++++++++++++++++++++++++++++++++---- tests/test_periods.py | 50 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 81 insertions(+), 11 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 0af24a0a..9625eda7 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2342,9 +2342,13 @@ def analytic_delta(self, *args, **kwargs): return 0.0 -class FXOption: +class FXOption(metaclass=ABCMeta): + # https://www.researchgate.net/publication/275905055_A_Guide_to_FX_Options_Quoting_Conventions/ + style = "european" + kind = None + @abstractmethod def __init__( self, pair: str, @@ -2354,7 +2358,6 @@ def __init__( strike: Union[DualTypes, NoInput] = NoInput(0), notional: Union[float, NoInput] = NoInput(0), option_fixing: Union[float, NoInput] = NoInput(0), - kind: str = "call", ): self.pair = pair.lower() self.currency = self.pair[3:] @@ -2364,7 +2367,6 @@ def __init__( self.payment = payment self.delivery = delivery self.expiry = expiry - self.kind = kind self.option_fixing = option_fixing @staticmethod @@ -2469,11 +2471,43 @@ def implied_vol( f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_) - premium if abs(f_) < 1e-10: break - vol_ = Dual(float(vol_ - f_ / f_.gradient("vol")), "vol") + vol_ = Dual(float(vol_ - f_ / f_.gradient("vol")[0]), "vol") return float(vol_) # return a float TODO check whether Dual can be returned. +class FXCall(FXOption): + kind = "call" + + def __init__( + self, + pair: str, + expiry: datetime, + delivery: datetime, + payment: datetime, + strike: Union[DualTypes, NoInput] = NoInput(0), + notional: Union[float, NoInput] = NoInput(0), + option_fixing: Union[float, NoInput] = NoInput(0), + ): + super().__init__(pair, expiry, delivery, payment, strike, notional, option_fixing) + + +class FXPut(FXOption): + kind = "put" + + def __init__( + self, + pair: str, + expiry: datetime, + delivery: datetime, + payment: datetime, + strike: Union[DualTypes, NoInput] = NoInput(0), + notional: Union[float, NoInput] = NoInput(0), + option_fixing: Union[float, NoInput] = NoInput(0), + ): + super().__init__(pair, expiry, delivery, payment, strike, notional, option_fixing) + + def _float_or_none(val): if val is None: return None diff --git a/tests/test_periods.py b/tests/test_periods.py index 2eb02a90..bf585dff 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -15,7 +15,8 @@ IndexFixedPeriod, IndexCashflow, IndexMixin, - FXOption, + FXCall, + FXPut, ) from rateslib.fx import FXRates, FXForwards from rateslib.default import Defaults @@ -1912,7 +1913,7 @@ def fxfo(): class TestFXOption: def test_npv(self, fxfo): - fxo = FXOption( + fxo = FXCall( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -1930,7 +1931,7 @@ def test_npv(self, fxfo): assert abs(result - expected) < 1e-6 def test_npv_in_past(self, fxfo): - fxo = FXOption( + fxo = FXCall( pair="eurusd", expiry=dt(2022, 6, 16), delivery=dt(2022, 6, 20), @@ -1947,7 +1948,7 @@ def test_npv_in_past(self, fxfo): assert result == 0.0 def test_npv_option_fixing(self, fxfo): - fxo = FXOption( + fxo = FXCall( pair="eurusd", expiry=dt(2023, 3, 15), delivery=dt(2023, 3, 17), @@ -1966,7 +1967,7 @@ def test_npv_option_fixing(self, fxfo): assert abs(result - expected) < 1e-9 # worthless option - fxo = FXOption( + fxo = FXCall( pair="eurusd", expiry=dt(2023, 3, 15), delivery=dt(2023, 3, 17), @@ -1985,7 +1986,7 @@ def test_npv_option_fixing(self, fxfo): assert abs(result - expected) < 1e-9 def test_premium_points(self, fxfo): - fxo = FXOption( + fxo = FXCall( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -2003,7 +2004,7 @@ def test_premium_points(self, fxfo): assert abs(result - expected) < 1e-6 def test_implied_vol(self, fxfo): - fxo = FXOption( + fxo = FXCall( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -2020,3 +2021,38 @@ def test_implied_vol(self, fxfo): expected = 0.08899600982866121 # Tullets have trade confo at 8.9% assert abs(expected - result) < 1e-9 + def test_premium_put(self, fxfo): + fxo = FXPut( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.033, + notional=20e6, + ) + result = fxo.rate( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fxfo, + vol=0.1015 + ) + expected = 83.874039 # Tullets trade confo has 83.75 + assert abs(result - expected) < 1e-6 + + def test_npv_put(self, fxfo): + fxo = FXPut( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.033, + notional=20e6, + ) + result = fxo.npv( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fxfo, + vol=0.1015 + ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] + expected = 167748.077642 # Tullets trade confo has 167 500 + assert abs(result - expected) < 1e-6 From 115d4f9e151c0e78e33799b9cee2caae829fb358 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Tue, 19 Dec 2023 07:29:10 +0100 Subject: [PATCH 11/41] ENH: build option instrument --- rateslib/default.py | 1 + rateslib/instruments.py | 169 +++++++++++++++++++++++++++----------- rateslib/periods.py | 55 +++++++++---- tests/test_instruments.py | 55 +++++++++++++ tests/test_periods.py | 76 ++++++++++++++--- 5 files changed, 283 insertions(+), 73 deletions(-) diff --git a/rateslib/default.py b/rateslib/default.py index 14a3941a..ecaed206 100644 --- a/rateslib/default.py +++ b/rateslib/default.py @@ -146,6 +146,7 @@ class Defaults: base_currency = "usd" delivery_lag = 2 + delta_type = "forward" # Curves diff --git a/rateslib/instruments.py b/rateslib/instruments.py index d59a1028..9ccd4911 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -48,6 +48,7 @@ IndexMixin, _disc_from_curve, _disc_maybe_from_curve, + FXCallPeriod, ) from rateslib.legs import ( FixedLeg, @@ -7855,14 +7856,13 @@ def cashflows( # FX Options -class FXOption(Sensitivities): +class FXCall(Sensitivities): style = "european" def __init__( self, pair: str, expiry: Union[datetime, str], - kind: str = "call", notional: float = NoInput(0), eval_date: Union[datetime, NoInput] = NoInput(0), calendar: Union[CustomBusinessDay, str, NoInput] = NoInput(0), @@ -7870,35 +7870,109 @@ def __init__( delivery_lag: Union[int, NoInput] = NoInput(0), strike: Union[DualTypes, str, NoInput] = NoInput(0), premium: Union[float, NoInput] = NoInput(0), + premium_ccy: Union[str, NoInput] = NoInput(0), payment_lag: Union[str, datetime, NoInput] = NoInput(0), + option_fixing: Union[float, NoInput] = NoInput(0), + delta_type: Union[float, NoInput] = NoInput(0), curves: Union[list, str, Curve, NoInput] = NoInput(0), spec: Union[str, NoInput] = NoInput(0), ): - self.pair = pair.lower() - - if isinstance(expiry, datetime): - self.expiry = expiry - elif isinstance(expiry, str) and isinstance(eval_date, datetime): - self.expiry = add_tenor(eval_date, expiry, modifier, calendar, NoInput(0)) - else: - raise ValueError("`expiry` must be datetime or string tenor when `eval_date` is given.") - - _ = delivery_lag if delivery_lag is not NoInput.blank else defaults.delivery_lag - self.delivery = add_tenor(self.expiry, f"{_}b", "F", calendar, NoInput(0)) - self.delivery_lag = _ - _ = payment_lag if payment_lag is not NoInput.blank else defaults.payment_lag - self.payment = add_tenor(self.expiry, f"{_}b", "F", calendar, NoInput(0)) - self.payment_lag = _ - - self.notional = notional if notional is not NoInput.blank else defaults.notional - self.strike = strike - self.premium = premium + self.kwargs = dict( + pair=pair, + expiry=expiry, + notional=notional, + strike=strike, + premium=premium, + premium_ccy=premium_ccy, + option_fixing=option_fixing, + payment_lag=payment_lag, + delivery_lag=delivery_lag, + calendar=calendar, + modifier=modifier, + delta_type=delta_type, + ) + self.kwargs = _push(spec, self.kwargs) + # set some defaults if missing + self.kwargs["delta_type"] = ( + defaults.delta_type + if self.kwargs["delta_type"] is NoInput.blank + else self.kwargs["delta_type"] + ) + self.kwargs["notional"] = ( + defaults.notional + if self.kwargs["notional"] is NoInput.blank + else self.kwargs["notional"] + ) + if isinstance(self.kwargs["expiry"], str): + if not isinstance(eval_date, datetime): + raise ValueError("`expiry` as string tenor requires `eval_date`.") + self.kwargs["expiry"] = add_tenor(eval_date, expiry, modifier, calendar, NoInput(0)) + self.kwargs["delivery_lag"] = ( + defaults.delivery_lag + if self.kwargs["delivery_lag"] is NoInput.blank + else self.kwargs["delivery_lag"] + ) + self.kwargs["delivery"] = add_tenor( + self.kwargs["expiry"], f"{self.kwargs['delivery_lag']}b", "F", calendar, NoInput(0) + ) + self.kwargs["payment_lag"] = ( + defaults.payment_lag + if self.kwargs["payment_lag"] is NoInput.blank + else self.kwargs["payment_lag"] + ) + self.kwargs["payment"] = add_tenor( + self.kwargs["expiry"], f"{self.kwargs['payment_lag']}b", "F", calendar, NoInput(0) + ) + # nothing to inherit or negate. + # self.kwargs = _inherit_or_negate(self.kwargs) # inherit or negate the complete arg list self.curves = curves self.spec = spec - def _set_pricing_mid(self): - pass + self.periods = [ + FXCallPeriod( + pair=self.kwargs["pair"], + expiry=self.kwargs["expiry"], + delivery=self.kwargs["delivery"], + payment=self.kwargs["payment"], + strike=self.kwargs["strike"], + notional=self.kwargs["notional"], + option_fixing=self.kwargs["option_fixing"], + ), + Cashflow( + notional=self.kwargs["premium"], + payment=self.kwargs["payment"], + currency=self.kwargs["premium_ccy"], + stub_type="Premium", + ) + ] + + def _set_pricing_mid( + self, + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + vol: float = NoInput(0), + ): + """ + Sets parameters for the option at dynamic price time + """ + if isinstance(self.kwargs["strike"], str) and self.kwargs["strike"][-1].lower() == "d": + # then strike is commanded by delta + k = self.periods[0]._strike_from_delta( + f=fx.rate(self.kwargs["pair"], self.kwargs["delivery"]), + delta=float(self.kwargs["strike"][:-1])/100, + vol=vol, + t=self.periods[0]._t_to_expiry(curves[3].node_dates[0]), + v1=curves[1][self.kwargs["payment"]], + kind=self.kwargs["delta_type"], + ) + self.periods[0].strike = k + if self.kwargs["premium"] is NoInput.blank: + # then set the CashFlow to mid-market + npv = self.periods[0].npv(curves[1], curves[3], fx, vol=vol) + premium = npv / curves[3][self.kwargs["payment"]] + self.periods[1].notional = float(premium) def rate( self, @@ -7909,33 +7983,32 @@ def rate( vol: float = NoInput(0) ): curves, fx, base = _get_curves_fx_and_base_maybe_from_solver( - self.curves, solver, curves, fx, base, self.pair[3:] + self.curves, solver, curves, fx, base, self.kwargs["pair"][3:] ) - F = fx.rate(self.pair, settlement=self.delivery) - t = (self.expiry - curves[1].node_dates[0]) / timedelta(days=365) - df1, df2 = curves[1][self.delivery], curves[3][self.delivery] - _ = self._garman_kolhagen_forward(F, self.strike, t, df1, df2, vol) - return _ / curves[3][self.payment] - - @staticmethod - def _garman_kolhagen_forward(F, K, t, df1, df2, vol): - r1, r2 = dual_log(df1) / -t, dual_log(df2) / -t - vs = vol * t ** 0.5 - - d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs - d2 = d1 - vs - Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) - _ = dual_exp(-r2 * t) * (F * Nd1 - K * Nd2) - - # Spot formulation instead of F - # https://quant.stackexchange.com/a/63661/29443 - # S_imm = F * df2 / df1 - # d1 = (dual_log(S_imm / K) + (r2 - r1 + 0.5 * vol ** 2) * t) / vs - # d2 = d1 - vs - # Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) - # _ = df1 * S_imm * Nd1 - K * df2 * Nd2 - return _ + self._set_pricing_mid(curves, NoInput(0), fx, vol) + return self.periods[0].rate(curves[1], curves[3], fx, base, False, vol) + def npv( + self, + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: float = NoInput(0) + ): + curves, fx, base = _get_curves_fx_and_base_maybe_from_solver( + self.curves, solver, curves, fx, base, self.kwargs["pair"][3:] + ) + self._set_pricing_mid(curves, NoInput(0), fx, vol) + opt_npv = self.periods[0].npv(curves[1], curves[3], fx, base, local, vol) + prem_npv = self.periods[1].npv(NoInput(0), curves[3], fx, base, local) + if local: + return { + k: opt_npv.get(k, 0) + prem_npv.get(k, 0) for k in set(opt_npv) | set(prem_npv) + } + else: + return opt_npv + prem_npv # Generic Instruments diff --git a/rateslib/periods.py b/rateslib/periods.py index 9625eda7..4179841e 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -21,8 +21,9 @@ from abc import abstractmethod, ABCMeta from datetime import datetime, timedelta from typing import Optional, Union +from statistics import NormalDist import warnings -from math import comb, log +from math import comb, log, exp import numpy as np @@ -2347,6 +2348,7 @@ class FXOption(metaclass=ABCMeta): style = "european" kind = None + phi = 0.0 @abstractmethod def __init__( @@ -2370,15 +2372,17 @@ def __init__( self.option_fixing = option_fixing @staticmethod - def _black76(F, K, t, df1, df2, vol): + def _black76(F, K, t, v1, v2, vol, phi): """ - Option price in points terms for immediate premium settlement + Option price in points terms for immediate premium settlement. + + (forward, strike, time to expiry, df ccy1, df ccy 2, volatility in %, phi for put/call) """ vs = vol * t ** 0.5 d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs d2 = d1 - vs - Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) - _ = df2 * (F * Nd1 - K * Nd2) + Nd1, Nd2 = dual_norm_cdf(phi*d1), dual_norm_cdf(phi*d2) + _ = phi * v2 * (F * Nd1 - K * Nd2) # Spot formulation instead of F (Garman Kohlhagen formulation) # https://quant.stackexchange.com/a/63661/29443 @@ -2420,19 +2424,16 @@ def npv( else: # value is expressed in currency (i.e. pair[3:]) f = fx.rate(self.pair, self.delivery) - df2 = disc_curve_ccy2[self.expiry] + v2 = disc_curve_ccy2[self.expiry] value = self._black76( F=f, K=self.strike, - t=(self.expiry - disc_curve_ccy2.node_dates[0]) / timedelta(days=365), - df1=None, # not required: disc_curve[self.expiry], - df2=df2, + t=self._t_to_expiry(disc_curve_ccy2.node_dates[0]), + v1=None, # not required: disc_curve[self.expiry], + v2=v2, vol=vol, + phi=self.phi, # controls calls or put price ) - if self.kind == "put": - # c + k = f + p - value += (self.strike - f) * df2 - value *= self.notional return _maybe_local(value, local, self.currency, fx, base) @@ -2475,9 +2476,32 @@ def implied_vol( return float(vol_) # return a float TODO check whether Dual can be returned. + def _strike_from_delta( + self, + f: DualTypes, + delta: float, + vol: DualTypes, + t: DualTypes, + v1: DualTypes = NoInput(0), + kind="forward", + ): + vol, t, f = float(vol), float(t), float(f) + if kind == "forward": + _ = NormalDist().inv_cdf(self.phi*delta) + _ = f * exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) + elif kind == "spot": + v1 = float(v1) + _ = NormalDist().inv_cdf(self.phi*delta/v1) + _ = f * exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) + return _ + + def _t_to_expiry(self, now: datetime): + return (self.expiry - now) / timedelta(days=365) + -class FXCall(FXOption): +class FXCallPeriod(FXOption): kind = "call" + phi = 1.0 def __init__( self, @@ -2492,8 +2516,9 @@ def __init__( super().__init__(pair, expiry, delivery, payment, strike, notional, option_fixing) -class FXPut(FXOption): +class FXPutPeriod(FXOption): kind = "put" + phi = -1.0 def __init__( self, diff --git a/tests/test_instruments.py b/tests/test_instruments.py index a2e36838..e0acd6b2 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -27,6 +27,7 @@ Portfolio, Spread, Fly, + FXCall, _get_curves_fx_and_base_maybe_from_solver, ) from rateslib.dual import Dual, Dual2 @@ -2959,3 +2960,57 @@ def test_fx_settlements_table_no_fxf(): result = irs_mkt.cashflows_table(solver=solver) assert abs(result.iloc[0, 0] - 69.49810) < 1e-5 assert abs(result.iloc[3, 0] - 69.49810) < 1e-5 + + +@pytest.fixture() +def fxfo(): + # FXForwards for FX Options tests + eureur = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9908630928802933}, calendar="tgt", id="eureur" + ) + usdusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9798648182834734}, calendar="nyc", id="usdusd" + ) + eurusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9909918247663814}, id="eurusd" + ) + fxr = FXRates({"eurusd": 1.0615}, settlement=dt(2023, 3, 20)) + fxf = FXForwards( + fx_curves={"eureur": eureur, "eurusd": eurusd, "usdusd": usdusd}, + fx_rates=fxr + ) + # fxf.swap("eurusd", [dt(2023, 3, 20), dt(2023, 6, 20)]) = 60.10 + return fxf + + +class TestFXOptions: + + def test_fx_call_npv_unpriced(self, fxfo): + fxo = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike=1.101, + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.npv(curves, fx=fxfo, vol=0.089) + expected = 0.0 + assert abs(result - expected) < 1e-6 + + def test_fx_call_rate(self, fxfo): + fxo = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike="25d", + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.rate(curves, fx=fxfo, vol=0.089) + expected = 100 + assert abs(result - expected) < 1e-6 \ No newline at end of file diff --git a/tests/test_periods.py b/tests/test_periods.py index bf585dff..94d1127b 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -15,8 +15,8 @@ IndexFixedPeriod, IndexCashflow, IndexMixin, - FXCall, - FXPut, + FXCallPeriod, + FXPutPeriod, ) from rateslib.fx import FXRates, FXForwards from rateslib.default import Defaults @@ -1913,7 +1913,7 @@ def fxfo(): class TestFXOption: def test_npv(self, fxfo): - fxo = FXCall( + fxo = FXCallPeriod( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -1931,7 +1931,7 @@ def test_npv(self, fxfo): assert abs(result - expected) < 1e-6 def test_npv_in_past(self, fxfo): - fxo = FXCall( + fxo = FXCallPeriod( pair="eurusd", expiry=dt(2022, 6, 16), delivery=dt(2022, 6, 20), @@ -1948,7 +1948,7 @@ def test_npv_in_past(self, fxfo): assert result == 0.0 def test_npv_option_fixing(self, fxfo): - fxo = FXCall( + fxo = FXCallPeriod( pair="eurusd", expiry=dt(2023, 3, 15), delivery=dt(2023, 3, 17), @@ -1967,7 +1967,7 @@ def test_npv_option_fixing(self, fxfo): assert abs(result - expected) < 1e-9 # worthless option - fxo = FXCall( + fxo = FXCallPeriod( pair="eurusd", expiry=dt(2023, 3, 15), delivery=dt(2023, 3, 17), @@ -1986,7 +1986,7 @@ def test_npv_option_fixing(self, fxfo): assert abs(result - expected) < 1e-9 def test_premium_points(self, fxfo): - fxo = FXCall( + fxo = FXCallPeriod( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -2004,7 +2004,7 @@ def test_premium_points(self, fxfo): assert abs(result - expected) < 1e-6 def test_implied_vol(self, fxfo): - fxo = FXCall( + fxo = FXCallPeriod( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -2022,7 +2022,7 @@ def test_implied_vol(self, fxfo): assert abs(expected - result) < 1e-9 def test_premium_put(self, fxfo): - fxo = FXPut( + fxo = FXPutPeriod( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -2040,7 +2040,7 @@ def test_premium_put(self, fxfo): assert abs(result - expected) < 1e-6 def test_npv_put(self, fxfo): - fxo = FXPut( + fxo = FXPutPeriod( pair="eurusd", expiry=dt(2023, 6, 16), delivery=dt(2023, 6, 20), @@ -2056,3 +2056,59 @@ def test_npv_put(self, fxfo): ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] expected = 167748.077642 # Tullets trade confo has 167 500 assert abs(result - expected) < 1e-6 + + def test_strike_from_forward_delta(self, fxfo): + fxo = FXCallPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo._strike_from_forward_delta( + fxfo.rate("eurusd", dt(2023, 6, 20)), + 0.25, + 0.089, + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]) + ) + expected = 1.101271021340 + assert abs(result - expected) < 1e-9 + + def test_strike_from_forward_delta(self, fxfo): + fxo = FXPutPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.033, + notional=20e6, + ) + result = fxo._strike_from_delta( + fxfo.rate("eurusd", dt(2023, 6, 20)), + -0.25, + 0.1015, + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]) + ) + expected = 1.0327823385682198 + assert abs(result - expected) < 1e-9 + + def test_strike_from_spot_delta(self, fxfo): + fxo = FXPutPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.033, + notional=20e6, + ) + result = fxo._strike_from_delta( + fxfo.rate("eurusd", dt(2023, 6, 20)), + -0.25, + 0.1015, + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), + v1=fxfo.curve("eur","usd")[dt(2023, 6, 20)], + kind="spot" + ) + expected = 1.0327823385682198 + assert abs(result - expected) < 1e-9 From aae993449a03c42977e38d4bee410215b489ca96 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Thu, 21 Dec 2023 20:41:22 +0100 Subject: [PATCH 12/41] change dual2 inv norm and fxoption --- rateslib/dual.py | 29 ++++++++++++++++++++++++++ rateslib/periods.py | 3 ++- tests/test_dual.py | 17 +++++++++++++++ tests/test_periods.py | 48 +++++++++++++++++++++++++++++++------------ 4 files changed, 83 insertions(+), 14 deletions(-) diff --git a/rateslib/dual.py b/rateslib/dual.py index 70e268bd..e4b2d3f2 100644 --- a/rateslib/dual.py +++ b/rateslib/dual.py @@ -599,6 +599,35 @@ def dual_norm_cdf(x): return base +def dual_inv_norm_cdf(x): + """ + Return the inverse cumulative standard normal distribution for given value. + + Parameters + ---------- + x : float, Dual, Dual2 + + Returns + ------- + float, Dual, Dual2 + """ + base = NormalDist().inv_cdf(float(x)) + if isinstance(x, Dual): + scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) + return Dual(base, x.vars, scalar * x.dual) + elif isinstance(x, Dual2): + scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) + scalar2 = base * scalar**2 + return Dual2( + base, + x.vars, + scalar * x.dual, + scalar * x.dual2 + 0.5 * scalar2 * np.einsum("i,j", x.dual, x.dual) + ) + else: + return base + + def _pivot_matrix(A, method=1): """ Returns the pivoting matrix for P, used in Doolittle's method. diff --git a/rateslib/periods.py b/rateslib/periods.py index 4179841e..4519cd20 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2483,6 +2483,7 @@ def _strike_from_delta( vol: DualTypes, t: DualTypes, v1: DualTypes = NoInput(0), + vspot: DualTypes = NoInput(0), kind="forward", ): vol, t, f = float(vol), float(t), float(f) @@ -2490,7 +2491,7 @@ def _strike_from_delta( _ = NormalDist().inv_cdf(self.phi*delta) _ = f * exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) elif kind == "spot": - v1 = float(v1) + v1 = float(v1/vspot) _ = NormalDist().inv_cdf(self.phi*delta/v1) _ = f * exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) return _ diff --git a/tests/test_dual.py b/tests/test_dual.py index 6413266c..bc32db71 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -11,6 +11,7 @@ dual_log, dual_solve, dual_norm_cdf, + dual_inv_norm_cdf, set_order, _plu_decomp, _pivot_matrix, @@ -607,12 +608,28 @@ def test_norm_cdf(): assert abs(value.gradient("x", order=2)[0] - second) < 1e-5 +def test_inv_norm_cdf(): + x = Dual2(0.75, "x") + value = dual_inv_norm_cdf(x) + value2 = dual_inv_norm_cdf(x + 0.0000001) + assert abs(value.gradient("x")[0] - (value2 - value) * 10000000) < 1e-5 + + second = (value2.gradient("x")[0] - value.gradient("x")[0])*10000000 + assert abs(value.gradient("x", order=2)[0] - second) < 1e-5 + + def test_norm_cdf_value(): result = dual_norm_cdf(1.0) expected = 0.8413 assert abs(result - expected) < 1e-4 +def test_inv_norm_cdf_value(): + result = dual_inv_norm_cdf(0.50) + expected = 0.0 + assert abs(result - expected) < 1e-4 + + def test_downcast_vars(): w = Dual( 2, diff --git a/tests/test_periods.py b/tests/test_periods.py index 94d1127b..760af872 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -1893,13 +1893,13 @@ def test_base_period_dates_raise(): def fxfo(): # FXForwards for FX Options tests eureur = Curve( - {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9908630928802933}, calendar="tgt", id="eureur" + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9851909811629752}, calendar="tgt", id="eureur" ) usdusd = Curve( - {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9798648182834734}, calendar="nyc", id="usdusd" + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.976009366603271}, calendar="nyc", id="usdusd" ) eurusd = Curve( - {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9909918247663814}, id="eurusd" + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.987092591908283}, id="eurusd" ) fxr = FXRates({"eurusd": 1.0615}, settlement=dt(2023, 3, 20)) fxf = FXForwards( @@ -1927,7 +1927,7 @@ def test_npv(self, fxfo): fx=fxfo, vol=0.089, ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] - expected = 140513.647629 # 140500 USD premium according to Tullets calcs (may be rounded) + expected = 140525.690893 # 140500 USD premium according to Tullets calcs (may be rounded) assert abs(result - expected) < 1e-6 def test_npv_in_past(self, fxfo): @@ -2000,7 +2000,7 @@ def test_premium_points(self, fxfo): fx=fxfo, vol=0.089, ) - expected = 70.256824 # 70.25 premium according to Tullets calcs (may be rounded) + expected = 70.262845 # 70.25 premium according to Tullets calcs (may be rounded) assert abs(result - expected) < 1e-6 def test_implied_vol(self, fxfo): @@ -2018,7 +2018,7 @@ def test_implied_vol(self, fxfo): fx=fxfo, premium=70.25, ) - expected = 0.08899600982866121 # Tullets have trade confo at 8.9% + expected = 0.08899248930016586 # Tullets have trade confo at 8.9% assert abs(expected - result) < 1e-9 def test_premium_put(self, fxfo): @@ -2036,7 +2036,7 @@ def test_premium_put(self, fxfo): fxfo, vol=0.1015 ) - expected = 83.874039 # Tullets trade confo has 83.75 + expected = 83.881228 # Tullets trade confo has 83.75 assert abs(result - expected) < 1e-6 def test_npv_put(self, fxfo): @@ -2054,7 +2054,7 @@ def test_npv_put(self, fxfo): fxfo, vol=0.1015 ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] - expected = 167748.077642 # Tullets trade confo has 167 500 + expected = 167762.455137 # Tullets trade confo has 167 500 assert abs(result - expected) < 1e-6 def test_strike_from_forward_delta(self, fxfo): @@ -2066,16 +2066,16 @@ def test_strike_from_forward_delta(self, fxfo): strike=1.101, notional=20e6, ) - result = fxo._strike_from_forward_delta( + result = fxo._strike_from_delta( fxfo.rate("eurusd", dt(2023, 6, 20)), 0.25, 0.089, - fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]) + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), ) expected = 1.101271021340 assert abs(result - expected) < 1e-9 - def test_strike_from_forward_delta(self, fxfo): + def test_strike_from_forward_delta_put(self, fxfo): fxo = FXPutPeriod( pair="eurusd", expiry=dt(2023, 6, 16), @@ -2094,6 +2094,27 @@ def test_strike_from_forward_delta(self, fxfo): assert abs(result - expected) < 1e-9 def test_strike_from_spot_delta(self, fxfo): + fxo = FXCallPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo._strike_from_delta( + fxfo.rate("eurusd", dt(2023, 6, 20)), + 0.25, + 0.089, + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), + v1=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], + vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + kind="spot", + ) + expected = 1.1010192011340847 + assert abs(result - expected) < 1e-9 + + def test_strike_from_spot_delta_put(self, fxfo): fxo = FXPutPeriod( pair="eurusd", expiry=dt(2023, 6, 16), @@ -2108,7 +2129,8 @@ def test_strike_from_spot_delta(self, fxfo): 0.1015, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), v1=fxfo.curve("eur","usd")[dt(2023, 6, 20)], - kind="spot" + vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + kind="spot", ) - expected = 1.0327823385682198 + expected = 1.0330517323059478 assert abs(result - expected) < 1e-9 From f84b2ea51d7f9564437745d77347822509451e47 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Thu, 21 Dec 2023 21:11:02 +0100 Subject: [PATCH 13/41] change dual2 inv norm and fxoption --- rateslib/periods.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 4519cd20..9872bead 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -41,7 +41,15 @@ CompositeCurve, index_left, ) -from rateslib.dual import Dual, Dual2, DualTypes, dual_norm_cdf, dual_exp, dual_log +from rateslib.dual import ( + Dual, + Dual2, + DualTypes, + dual_norm_cdf, + dual_exp, + dual_log, + dual_inv_norm_cdf, +) from rateslib.fx import FXForwards, FXRates @@ -2486,14 +2494,13 @@ def _strike_from_delta( vspot: DualTypes = NoInput(0), kind="forward", ): - vol, t, f = float(vol), float(t), float(f) if kind == "forward": - _ = NormalDist().inv_cdf(self.phi*delta) - _ = f * exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) + _ = dual_inv_norm_cdf(self.phi*delta) + _ = f * dual_exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) elif kind == "spot": v1 = float(v1/vspot) - _ = NormalDist().inv_cdf(self.phi*delta/v1) - _ = f * exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) + _ = dual_inv_norm_cdf(self.phi*delta/v1) + _ = f * dual_exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) return _ def _t_to_expiry(self, now: datetime): From 9e858ad541fffaf260948b09540a3b3810441f72 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Fri, 22 Dec 2023 07:47:12 +0100 Subject: [PATCH 14/41] change dual2 inv norm and fxoption --- rateslib/periods.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rateslib/periods.py b/rateslib/periods.py index 9872bead..26e9d9a9 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2504,6 +2504,7 @@ def _strike_from_delta( return _ def _t_to_expiry(self, now: datetime): + # TODO make this a dual, associated with theta return (self.expiry - now) / timedelta(days=365) From 14ea5fe670e753674764b854665e2964eca329b9 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (win)" <24256554+attack68@users.noreply.github.com> Date: Fri, 22 Dec 2023 11:01:08 +0100 Subject: [PATCH 15/41] ENH: dual norm cdf --- rateslib/instruments.py | 62 +++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 397ecf22..6ad56ac1 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -7859,6 +7859,32 @@ def cashflows( # FX Options class FXCall(Sensitivities): + """ + Create an *FX Call* option. + + Parameters + ---------- + pair: str + The currency pair for the FX rate which the option is settled. 3-digit code, e.g. "eurusd". + expiry: datetime, str + The expiry of the option. + notional: float + The amount in ccy1 (left side of pair) on which the option is based. + strike: float, Dual, Dual2, + The strike value of the option. + eval_date: datetime, optional + The date from which to evaluate a string tenor expiry. + modifier : str, optional + The modification rule, in {"F", "MF", "P", "MP"} for date evaluation. + calendar : calendar or str, optional + The holiday calendar object to use. If str, looks up named calendar from + static data. + delivery_lag: int, optional + payment_lag: int, optional + + + """ + style = "european" def __init__( @@ -8167,10 +8193,6 @@ def gamma(self, *args, **kwargs): return super().gamma(*args, **kwargs) -# class SpreadX: -# pass - - class Fly(Sensitivities): """ A butterfly instrument which is, mechanically, the spread of two spread instruments. @@ -8280,38 +8302,6 @@ def gamma(self, *args, **kwargs): return super().gamma(*args, **kwargs) -# class FlyX: -# """ -# A butterly instrument which is the spread of two spread instruments -# """ -# def __init__(self, instrument1, instrument2, instrument3): -# self.instrument1 = instrument1 -# self.instrument2 = instrument2 -# self.instrument3 = instrument3 -# -# def npv(self, *args, **kwargs): -# if len(args) == 0: -# args1 = (kwargs.get("curve1", None), kwargs.get("disc_curve1", None)) -# args2 = (kwargs.get("curve2", None), kwargs.get("disc_curve2", None)) -# args3 = (kwargs.get("curve3", None), kwargs.get("disc_curve3", None)) -# else: -# args1 = args -# args2 = args -# args3 = args -# return self.instrument1.npv(*args1) + self.instrument2.npv(*args2) + self.instrument3.npv(*args3) -# -# def rate(self, *args, **kwargs): -# if len(args) == 0: -# args1 = (kwargs.get("curve1", None), kwargs.get("disc_curve1", None)) -# args2 = (kwargs.get("curve2", None), kwargs.get("disc_curve2", None)) -# args3 = (kwargs.get("curve3", None), kwargs.get("disc_curve3", None)) -# else: -# args1 = args -# args2 = args -# args3 = args -# return 2 * self.instrument2.rate(*args2) - self.instrument1.rate(*args1) - self.instrument3.rate(*args3) - - def _instrument_npv(instrument, *args, **kwargs): # pragma: no cover # this function is captured by TestPortfolio pooling but is not registered as a parallel process # used for parallel processing with Portfolio.npv From 05281e8482dff5c76f505d986f71f7232c121ca5 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (win)" <24256554+attack68@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:47:31 +0100 Subject: [PATCH 16/41] ENH: dual norm cdf --- rateslib/instruments.py | 32 ++++++++++++++++++++++++-------- rateslib/periods.py | 31 ++++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 6ad56ac1..d63dc7f0 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -7870,8 +7870,8 @@ class FXCall(Sensitivities): The expiry of the option. notional: float The amount in ccy1 (left side of pair) on which the option is based. - strike: float, Dual, Dual2, - The strike value of the option. + strike: float, Dual, Dual2, str + The strike value of the option. If str should be labelled with a 'd' for delta e.g. "25d". eval_date: datetime, optional The date from which to evaluate a string tenor expiry. modifier : str, optional @@ -7880,8 +7880,20 @@ class FXCall(Sensitivities): The holiday calendar object to use. If str, looks up named calendar from static data. delivery_lag: int, optional - payment_lag: int, optional - + The number of business days after expiry that the physical settlement of the FX exchange occurs. + payment_lag: int or datetime, optional + The number of business days after expiry to pay premium. If a *datetime* is given this will + set the premium date explicitly. + delta_type: str in {"spot", "forward"} + When deriving strike from delta use the equation associated with spot or forward delta. + curves : Curve, LineCurve, str or list of such, optional + For *FXOptions* curves should be expressed as a list with the discount curves + entered either as *Curve* or str for discounting cashflows in the appropriate currency + with a consistent collateral on each side. E.g. *[None, "eurusd", None, "usdusd"]*. + Forecasting curves are not relevant. + spec : str, optional + An identifier to pre-populate many field with conventional values. See + :ref:`here` for more info and available values. """ @@ -7948,9 +7960,12 @@ def __init__( if self.kwargs["payment_lag"] is NoInput.blank else self.kwargs["payment_lag"] ) - self.kwargs["payment"] = add_tenor( - self.kwargs["expiry"], f"{self.kwargs['payment_lag']}b", "F", calendar, NoInput(0) - ) + if isinstance(self.kwargs["payment_lag"], datetime): + self.kwargs["payment"] = self.kwargs["payment_lag"] + else: + self.kwargs["payment"] = add_tenor( + self.kwargs["expiry"], f"{self.kwargs['payment_lag']}b", "F", calendar, NoInput(0) + ) # nothing to inherit or negate. # self.kwargs = _inherit_or_negate(self.kwargs) # inherit or negate the complete arg list @@ -7966,6 +7981,7 @@ def __init__( strike=self.kwargs["strike"], notional=self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"], + delta_type=self.kwargs["delta_type"], ), Cashflow( notional=self.kwargs["premium"], @@ -7993,7 +8009,7 @@ def _set_pricing_mid( vol=vol, t=self.periods[0]._t_to_expiry(curves[3].node_dates[0]), v1=curves[1][self.kwargs["payment"]], - kind=self.kwargs["delta_type"], + vspot=curves[1][fx.fx_rates.settlement], ) self.periods[0].strike = k if self.kwargs["premium"] is NoInput.blank: diff --git a/rateslib/periods.py b/rateslib/periods.py index 26e9d9a9..e5a3ca9c 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2368,6 +2368,7 @@ def __init__( strike: Union[DualTypes, NoInput] = NoInput(0), notional: Union[float, NoInput] = NoInput(0), option_fixing: Union[float, NoInput] = NoInput(0), + delta_type: Union[str, NoInput] = NoInput(0), ): self.pair = pair.lower() self.currency = self.pair[3:] @@ -2378,6 +2379,7 @@ def __init__( self.delivery = delivery self.expiry = expiry self.option_fixing = option_fixing + self.delta_type = defaults.delta_type if delta_type is NoInput.blank else delta_type.lower() @staticmethod def _black76(F, K, t, v1, v2, vol, phi): @@ -2492,12 +2494,11 @@ def _strike_from_delta( t: DualTypes, v1: DualTypes = NoInput(0), vspot: DualTypes = NoInput(0), - kind="forward", ): - if kind == "forward": + if self.delta_type == "forward": _ = dual_inv_norm_cdf(self.phi*delta) _ = f * dual_exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) - elif kind == "spot": + elif self.delta_type == "spot": v1 = float(v1/vspot) _ = dual_inv_norm_cdf(self.phi*delta/v1) _ = f * dual_exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) @@ -2521,8 +2522,18 @@ def __init__( strike: Union[DualTypes, NoInput] = NoInput(0), notional: Union[float, NoInput] = NoInput(0), option_fixing: Union[float, NoInput] = NoInput(0), + delta_type: Union[str, NoInput] = NoInput(0), ): - super().__init__(pair, expiry, delivery, payment, strike, notional, option_fixing) + super().__init__( + pair, + expiry, + delivery, + payment, + strike, + notional, + option_fixing, + delta_type, + ) class FXPutPeriod(FXOption): @@ -2538,8 +2549,18 @@ def __init__( strike: Union[DualTypes, NoInput] = NoInput(0), notional: Union[float, NoInput] = NoInput(0), option_fixing: Union[float, NoInput] = NoInput(0), + delta_type: Union[str, NoInput] = NoInput(0), ): - super().__init__(pair, expiry, delivery, payment, strike, notional, option_fixing) + super().__init__( + pair, + expiry, + delivery, + payment, + strike, + notional, + option_fixing, + delta_type, + ) def _float_or_none(val): From 9998a2a84607b896331c06a10dc92b7eedf3c767 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (win)" <24256554+attack68@users.noreply.github.com> Date: Fri, 22 Dec 2023 16:16:53 +0100 Subject: [PATCH 17/41] ENH: dual norm cdf --- rateslib/instruments.py | 87 +++++++++++++++++++++++++++++++---------- rateslib/periods.py | 6 +-- 2 files changed, 69 insertions(+), 24 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index d63dc7f0..e6f8fa4d 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -49,6 +49,7 @@ _disc_from_curve, _disc_maybe_from_curve, FXCallPeriod, + FXPutPeriod, ) from rateslib.legs import ( FixedLeg, @@ -7858,9 +7859,9 @@ def cashflows( # FX Options -class FXCall(Sensitivities): +class FXOption(Sensitivities): """ - Create an *FX Call* option. + Create an *FX Option*. Parameters ---------- @@ -7972,25 +7973,6 @@ def __init__( self.curves = curves self.spec = spec - self.periods = [ - FXCallPeriod( - pair=self.kwargs["pair"], - expiry=self.kwargs["expiry"], - delivery=self.kwargs["delivery"], - payment=self.kwargs["payment"], - strike=self.kwargs["strike"], - notional=self.kwargs["notional"], - option_fixing=self.kwargs["option_fixing"], - delta_type=self.kwargs["delta_type"], - ), - Cashflow( - notional=self.kwargs["premium"], - payment=self.kwargs["payment"], - currency=self.kwargs["premium_ccy"], - stub_type="Premium", - ) - ] - def _set_pricing_mid( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), @@ -8054,6 +8036,69 @@ def npv( else: return opt_npv + prem_npv + +class FXCall(Sensitivities): + """ + Create an *FX Call* option. + + For parameters see :class:`~rateslib.instruments.FXOption`. + """ + + style = "european" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.periods = [ + FXCallPeriod( + pair=self.kwargs["pair"], + expiry=self.kwargs["expiry"], + delivery=self.kwargs["delivery"], + payment=self.kwargs["payment"], + strike=self.kwargs["strike"], + notional=self.kwargs["notional"], + option_fixing=self.kwargs["option_fixing"], + delta_type=self.kwargs["delta_type"], + ), + Cashflow( + notional=self.kwargs["premium"], + payment=self.kwargs["payment"], + currency=self.kwargs["premium_ccy"], + stub_type="Premium", + ) + ] + + +class FXPut(Sensitivities): + """ + Create an *FX Call* option. + + For parameters see :class:`~rateslib.instruments.FXOption`. + """ + + style = "european" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.periods = [ + FXPutPeriod( + pair=self.kwargs["pair"], + expiry=self.kwargs["expiry"], + delivery=self.kwargs["delivery"], + payment=self.kwargs["payment"], + strike=self.kwargs["strike"], + notional=self.kwargs["notional"], + option_fixing=self.kwargs["option_fixing"], + delta_type=self.kwargs["delta_type"], + ), + Cashflow( + notional=self.kwargs["premium"], + payment=self.kwargs["payment"], + currency=self.kwargs["premium_ccy"], + stub_type="Premium", + ) + ] + + # Generic Instruments diff --git a/rateslib/periods.py b/rateslib/periods.py index e5a3ca9c..90f9a784 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2351,7 +2351,7 @@ def analytic_delta(self, *args, **kwargs): return 0.0 -class FXOption(metaclass=ABCMeta): +class FXOptionPeriod(metaclass=ABCMeta): # https://www.researchgate.net/publication/275905055_A_Guide_to_FX_Options_Quoting_Conventions/ style = "european" @@ -2509,7 +2509,7 @@ def _t_to_expiry(self, now: datetime): return (self.expiry - now) / timedelta(days=365) -class FXCallPeriod(FXOption): +class FXCallPeriod(FXOptionPeriod): kind = "call" phi = 1.0 @@ -2536,7 +2536,7 @@ def __init__( ) -class FXPutPeriod(FXOption): +class FXPutPeriod(FXOptionPeriod): kind = "put" phi = -1.0 From e79205fbc7ef7a6b80d4622a3fbdc9f2bcf29555 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Fri, 22 Dec 2023 20:55:21 +0100 Subject: [PATCH 18/41] change dual2 inv norm and fxoption --- rateslib/default.py | 2 +- rateslib/instruments.py | 4 ++-- tests/test_instruments.py | 8 ++++---- tests/test_periods.py | 6 ++++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/rateslib/default.py b/rateslib/default.py index ecaed206..a328773c 100644 --- a/rateslib/default.py +++ b/rateslib/default.py @@ -146,7 +146,7 @@ class Defaults: base_currency = "usd" delivery_lag = 2 - delta_type = "forward" + delta_type = "spot" # Curves diff --git a/rateslib/instruments.py b/rateslib/instruments.py index e6f8fa4d..783d4836 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8037,7 +8037,7 @@ def npv( return opt_npv + prem_npv -class FXCall(Sensitivities): +class FXCall(FXOption): """ Create an *FX Call* option. @@ -8068,7 +8068,7 @@ def __init__(self, *args, **kwargs): ] -class FXPut(Sensitivities): +class FXPut(FXOption): """ Create an *FX Call* option. diff --git a/tests/test_instruments.py b/tests/test_instruments.py index e0acd6b2..042c49df 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -2966,13 +2966,13 @@ def test_fx_settlements_table_no_fxf(): def fxfo(): # FXForwards for FX Options tests eureur = Curve( - {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9908630928802933}, calendar="tgt", id="eureur" + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9851909811629752}, calendar="tgt", id="eureur" ) usdusd = Curve( - {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9798648182834734}, calendar="nyc", id="usdusd" + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.976009366603271}, calendar="nyc", id="usdusd" ) eurusd = Curve( - {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9909918247663814}, id="eurusd" + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.987092591908283}, id="eurusd" ) fxr = FXRates({"eurusd": 1.0615}, settlement=dt(2023, 3, 20)) fxf = FXForwards( @@ -3012,5 +3012,5 @@ def test_fx_call_rate(self, fxfo): ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) - expected = 100 + expected = 70.217188 assert abs(result - expected) < 1e-6 \ No newline at end of file diff --git a/tests/test_periods.py b/tests/test_periods.py index 760af872..4a3e8f2d 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -2065,6 +2065,7 @@ def test_strike_from_forward_delta(self, fxfo): payment=dt(2023, 6, 20), strike=1.101, notional=20e6, + delta_type="forward", ) result = fxo._strike_from_delta( fxfo.rate("eurusd", dt(2023, 6, 20)), @@ -2083,6 +2084,7 @@ def test_strike_from_forward_delta_put(self, fxfo): payment=dt(2023, 6, 20), strike=1.033, notional=20e6, + delta_type="forward", ) result = fxo._strike_from_delta( fxfo.rate("eurusd", dt(2023, 6, 20)), @@ -2101,6 +2103,7 @@ def test_strike_from_spot_delta(self, fxfo): payment=dt(2023, 6, 20), strike=1.101, notional=20e6, + delta_type="spot", ) result = fxo._strike_from_delta( fxfo.rate("eurusd", dt(2023, 6, 20)), @@ -2109,7 +2112,6 @@ def test_strike_from_spot_delta(self, fxfo): fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), v1=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], - kind="spot", ) expected = 1.1010192011340847 assert abs(result - expected) < 1e-9 @@ -2122,6 +2124,7 @@ def test_strike_from_spot_delta_put(self, fxfo): payment=dt(2023, 6, 20), strike=1.033, notional=20e6, + delta_type="spot", ) result = fxo._strike_from_delta( fxfo.rate("eurusd", dt(2023, 6, 20)), @@ -2130,7 +2133,6 @@ def test_strike_from_spot_delta_put(self, fxfo): fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), v1=fxfo.curve("eur","usd")[dt(2023, 6, 20)], vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], - kind="spot", ) expected = 1.0330517323059478 assert abs(result - expected) < 1e-9 From ecf66ea154a9b7ac44b1f218f5a135e1e36b7a90 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Fri, 22 Dec 2023 23:11:41 +0100 Subject: [PATCH 19/41] change dual2 inv norm and fxoption --- rateslib/instruments.py | 38 +++++++++++++++++++++++++++++++++++++- tests/test_instruments.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 783d4836..e3d8f0a1 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8070,7 +8070,7 @@ def __init__(self, *args, **kwargs): class FXPut(FXOption): """ - Create an *FX Call* option. + Create an *FX Put* option. For parameters see :class:`~rateslib.instruments.FXOption`. """ @@ -8099,6 +8099,42 @@ def __init__(self, *args, **kwargs): ] +class FXRiskReversal(FXOption): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if self.kwargs["option_fixing"] is NoInput.blank: + self.kwargs["option_fixing"] = [NoInput(0), NoInput(0)] + self.periods[ + FXPut( + pair=self.kwargs["pair"], + expiry=self.kwargs["expiry"], + delivery=self.kwargs["delivery"], + payment=self.kwargs["payment"], + strike=self.kwargs["strike"][0], + notional=-self.kwargs["notional"], + option_fixing=self.kwargs["option_fixing"][0], + delta_type=self.kwargs["delta_type"], + ), + FXCall( + pair=self.kwargs["pair"], + expiry=self.kwargs["expiry"], + delivery=self.kwargs["delivery"], + payment=self.kwargs["payment"], + strike=self.kwargs["strike"][1], + notional=self.kwargs["notional"], + option_fixing=self.kwargs["option_fixing"][1], + delta_type=self.kwargs["delta_type"], + ), + Cashflow( + notional=self.kwargs["premium"], + payment=self.kwargs["payment"], + currency=self.kwargs["premium_ccy"], + stub_type="Premium", + ), + ] + + # Generic Instruments diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 042c49df..39f00148 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -28,6 +28,7 @@ Spread, Fly, FXCall, + FXPut, _get_curves_fx_and_base_maybe_from_solver, ) from rateslib.dual import Dual, Dual2 @@ -3013,4 +3014,37 @@ def test_fx_call_rate(self, fxfo): curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) expected = 70.217188 + assert abs(result - expected) < 1e-6 + + def test_fx_call_rate_expiry_tenor(self, fxfo): + fxo = FXCall( + pair="eurusd", + expiry="3m", + eval_date=dt(2023, 3, 16), + modifier="mf", + notional=20e6, + delivery_lag=2, + payment_lag=dt(2023, 6, 20), + calendar="tgt", + strike="25d", + delta_type="spot", + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.rate(curves, fx=fxfo, vol=0.089) + expected = 70.217188 + assert abs(result - expected) < 1e-6 + + def test_fx_put_rate(self, fxfo): + fxo = FXPut( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike="-25d", + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.rate(curves, fx=fxfo, vol=0.101) + expected = 83.595312 assert abs(result - expected) < 1e-6 \ No newline at end of file From 524aaf71a50c12e3a8179a6c8b6ce1637c99cad7 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sat, 23 Dec 2023 11:58:01 +0100 Subject: [PATCH 20/41] change dual2 inv norm and fxoption --- rateslib/instruments.py | 25 ++++++++++++++++++++----- tests/test_instruments.py | 19 ++++++++++++++++++- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index e3d8f0a1..55fdb420 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8105,12 +8105,12 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.kwargs["option_fixing"] is NoInput.blank: self.kwargs["option_fixing"] = [NoInput(0), NoInput(0)] - self.periods[ + self.periods = [ FXPut( pair=self.kwargs["pair"], expiry=self.kwargs["expiry"], - delivery=self.kwargs["delivery"], - payment=self.kwargs["payment"], + delivery_lag=self.kwargs["delivery_lag"], + payment_lag=self.kwargs["payment_lag"], strike=self.kwargs["strike"][0], notional=-self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"][0], @@ -8119,8 +8119,8 @@ def __init__(self, *args, **kwargs): FXCall( pair=self.kwargs["pair"], expiry=self.kwargs["expiry"], - delivery=self.kwargs["delivery"], - payment=self.kwargs["payment"], + delivery_lag=self.kwargs["delivery_lag"], + payment_lag=self.kwargs["payment_lag"], strike=self.kwargs["strike"][1], notional=self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"][1], @@ -8134,6 +8134,21 @@ def __init__(self, *args, **kwargs): ), ] + def rate( + self, + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + vol: Union[list[float], float] = NoInput(0), + ): + if not isinstance(vol, list): + vol = [vol, vol] + + _1 = self.periods[1].rate(curves, solver, fx, base, vol[1]) + _0 = self.periods[0].rate(curves, solver, fx, base, vol[0]) + return _1 - _0 + # Generic Instruments diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 39f00148..8e381cb2 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -29,6 +29,7 @@ Fly, FXCall, FXPut, + FXRiskReversal, _get_curves_fx_and_base_maybe_from_solver, ) from rateslib.dual import Dual, Dual2 @@ -3047,4 +3048,20 @@ def test_fx_put_rate(self, fxfo): curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.101) expected = 83.595312 - assert abs(result - expected) < 1e-6 \ No newline at end of file + assert abs(result - expected) < 1e-6 + + def test_risk_reversal_rate(self, fxfo): + fxo = FXRiskReversal( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike=["-25d", "25d"], + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.rate(curves, fx=fxfo, vol=[0.101, 0.089]) + expected = 1.0 + assert abs(result - expected) < 1e-8 + From 4ec9d3be4e72f56ad51c2c8738d779c3181d2591 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sat, 23 Dec 2023 14:17:27 +0100 Subject: [PATCH 21/41] change dual2 inv norm and fxoption --- rateslib/instruments.py | 34 ++++++++++++++++++++++++++++------ tests/test_instruments.py | 19 +++++++++++++++++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 55fdb420..06d7c19f 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -7859,6 +7859,7 @@ def cashflows( # FX Options + class FXOption(Sensitivities): """ Create an *FX Option*. @@ -8115,6 +8116,8 @@ def __init__(self, *args, **kwargs): notional=-self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"][0], delta_type=self.kwargs["delta_type"], + premium=NoInput(0) if self.kwargs["premium"] is NoInput.blank else 0.0, + premium_ccy=self.kwargs["premium_ccy"], ), FXCall( pair=self.kwargs["pair"], @@ -8125,15 +8128,12 @@ def __init__(self, *args, **kwargs): notional=self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"][1], delta_type=self.kwargs["delta_type"], - ), - Cashflow( - notional=self.kwargs["premium"], - payment=self.kwargs["payment"], - currency=self.kwargs["premium_ccy"], - stub_type="Premium", + premium=self.kwargs["premium"], + premium_ccy=self.kwargs["premium_ccy"], ), ] + def rate( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), @@ -8149,6 +8149,28 @@ def rate( _0 = self.periods[0].rate(curves, solver, fx, base, vol[0]) return _1 - _0 + def npv( + self, + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: float = NoInput(0) + ): + if not isinstance(vol, list): + vol = [vol, vol] + + _0 = self.periods[0].npv(curves, solver, fx, base, local, vol[0]) + _1 = self.periods[1].npv(curves, solver, fx, base, local, vol[1]) + if local: + return { + k: _0.get(k, 0) + _1.get(k, 0) + for k in set(_0) | set(_1) + } + else: + return _0 + _1 + # Generic Instruments diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 8e381cb2..9e6cb719 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3062,6 +3062,21 @@ def test_risk_reversal_rate(self, fxfo): ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=[0.101, 0.089]) - expected = 1.0 - assert abs(result - expected) < 1e-8 + expected = -13.370327 + assert abs(result - expected) < 1e-6 + + def test_risk_reversal_npv(self, fxfo): + fxo = FXRiskReversal( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike=["-25d", "25d"], + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.npv(curves, fx=fxfo, vol=[0.101, 0.089]) + expected = 0.0 + assert abs(result - expected) < 1e-6 From 68e35e701bf6c5c141be306a95149cca730395a2 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sat, 23 Dec 2023 21:47:39 +0100 Subject: [PATCH 22/41] change dual2 inv norm and fxoption --- rateslib/periods.py | 61 ++++++++++++++----------------------------- tests/test_periods.py | 30 +++++++++++++++++++++ 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 90f9a784..acab7bdb 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2508,59 +2508,36 @@ def _t_to_expiry(self, now: datetime): # TODO make this a dual, associated with theta return (self.expiry - now) / timedelta(days=365) + def _payoff_at_expiry(self, range: Union[list[float], NoInput] = NoInput(0)): + if self.strike is NoInput.blank: + raise ValueError("Cannot return payoff for option without a specified `strike`.") + if range is NoInput.blank: + x = np.linspace(0, 20, 1001) + else: + x = np.linspace(range[0], range[1], 1001) + _ = (x - self.strike) * self.phi + __ = np.zeros(1001) + if self.phi > 0: # call + y = np.where(x < self.strike, __, _) * self.notional + else: # put + y = np.where(x > self.strike, __, _) * self.notional + return x, y + class FXCallPeriod(FXOptionPeriod): kind = "call" phi = 1.0 - def __init__( - self, - pair: str, - expiry: datetime, - delivery: datetime, - payment: datetime, - strike: Union[DualTypes, NoInput] = NoInput(0), - notional: Union[float, NoInput] = NoInput(0), - option_fixing: Union[float, NoInput] = NoInput(0), - delta_type: Union[str, NoInput] = NoInput(0), - ): - super().__init__( - pair, - expiry, - delivery, - payment, - strike, - notional, - option_fixing, - delta_type, - ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) class FXPutPeriod(FXOptionPeriod): kind = "put" phi = -1.0 - def __init__( - self, - pair: str, - expiry: datetime, - delivery: datetime, - payment: datetime, - strike: Union[DualTypes, NoInput] = NoInput(0), - notional: Union[float, NoInput] = NoInput(0), - option_fixing: Union[float, NoInput] = NoInput(0), - delta_type: Union[str, NoInput] = NoInput(0), - ): - super().__init__( - pair, - expiry, - delivery, - payment, - strike, - notional, - option_fixing, - delta_type, - ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) def _float_or_none(val): diff --git a/tests/test_periods.py b/tests/test_periods.py index 4a3e8f2d..67b6e661 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -2136,3 +2136,33 @@ def test_strike_from_spot_delta_put(self, fxfo): ) expected = 1.0330517323059478 assert abs(result - expected) < 1e-9 + + def test_payoff_at_expiry(self, fxfo): + fxo = FXCallPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo._payoff_at_expiry(range=[1.07, 1.13]) + assert result[0][0] == 1.07 + assert result[0][-1] == 1.13 + assert result[1][0] == 0.0 + assert result[1][-1] == (1.13 - 1.101) * 20e6 + + def test_payoff_at_expiry_put(self, fxfo): + fxo = FXPutPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=1.101, + notional=20e6, + ) + result = fxo._payoff_at_expiry(range=[1.07, 1.13]) + assert result[0][0] == 1.07 + assert result[0][-1] == 1.13 + assert result[1][0] == (1.101 - 1.07) * 20e6 + assert result[1][-1] == 0.0 From ef00bd2ae40e9bea69ab216c337ffb2d20165590 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sun, 24 Dec 2023 18:51:15 +0100 Subject: [PATCH 23/41] ADD pairs_settlement attribute to FXRates and FXForwards --- rateslib/fx.py | 9 +++++++++ tests/test_fx.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/rateslib/fx.py b/rateslib/fx.py index 82217b24..5dc7a518 100644 --- a/rateslib/fx.py +++ b/rateslib/fx.py @@ -125,6 +125,7 @@ def _convert_dual(k, v): # find currencies self.pairs = [k for k in self.fx_rates.keys()] + self.pairs_settlement = {pair: settlement for pair in self.pairs} self.variables = tuple(f"fx_{pair}" for pair in self.pairs) self.currencies = { k: i @@ -838,6 +839,9 @@ def update( fx_rates=fx_rates_obj, fx_curves=sub_curves, ) + settlement_pairs = { + pair: fx_rates_obj.settlement for pair in fx_rates_obj.pairs + } else: # calculate additional FX rates from previous objects # in the same settlement frame. @@ -860,6 +864,9 @@ def update( self.fx_curves, fx_rates_obj.currencies_list + pre_currencies ) acyclic_fxf = FXForwards(fx_rates=combined_fx_rates, fx_curves=sub_curves) + settlement_pairs.update( + {pair: fx_rates_obj.settlement for pair in fx_rates_obj.pairs} + ) if base is not NoInput.blank: acyclic_fxf.base = base.lower() @@ -874,6 +881,7 @@ def update( "pairs", ]: setattr(self, attr, getattr(acyclic_fxf, attr)) + self.pairs_settlement = settlement_pairs else: self.currencies = self.fx_rates.currencies self.q = len(self.currencies.keys()) @@ -885,6 +893,7 @@ def update( self.pairs = self.fx_rates.pairs self.variables = tuple(f"fx_{pair}" for pair in self.pairs) self.fx_rates_immediate = self._update_fx_rates_immediate() + self.pairs_settlement = self.fx_rates.pairs_settlement def __init__( self, diff --git a/tests/test_fx.py b/tests/test_fx.py index 94a0548b..d0cef117 100644 --- a/tests/test_fx.py +++ b/tests/test_fx.py @@ -903,6 +903,38 @@ def test_fxforwards_cyclic_system_restructured(): assert abs(result - expected) < 1e-2 +def test_fxforwards_settlement_pairs(): + fxr1 = FXRates({"eurusd": 1.05}, settlement=dt(2022, 1, 3)) + fxr2 = FXRates({"usdcad": 1.1}, settlement=dt(2022, 1, 2)) + fxr3 = FXRates({"gbpusd": 1.2}, settlement=dt(2022, 1, 3)) + fxf = FXForwards( + fx_rates=[fxr1, fxr2, fxr3], # FXRates as list + fx_curves={ + "usdusd": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "eureur": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "cadcad": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "usdeur": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "cadeur": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "gbpcad": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "gbpgbp": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + }, + ) + assert fxf.pairs_settlement["eurusd"] == dt(2022, 1, 3) + assert fxf.pairs_settlement["usdcad"] == dt(2022, 1, 2) + assert fxf.pairs_settlement["gbpusd"] == dt(2022, 1, 3) + + fxf = FXForwards( + fx_rates=fxr1, # FXRates as list + fx_curves={ + "usdusd": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "eureur": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + "usdeur": Curve({dt(2022, 1, 1): 1.0, dt(2022, 2, 1): 0.999}), + }, + ) + assert fxf.pairs_settlement["eurusd"] == dt(2022, 1, 3) + + + def test_fxforwards_positions_when_immediate_aligns_with_settlement(): fxr1 = FXRates({"eurusd": 1.05}, settlement=dt(2022, 1, 1)) fxr2 = FXRates({"usdcad": 1.1}, settlement=dt(2022, 1, 1)) From 259fbc43b81ee59dac8808af9726a081646106fa Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Sun, 24 Dec 2023 18:53:41 +0100 Subject: [PATCH 24/41] Relate option premiums to defined spot dates --- rateslib/instruments.py | 10 ++++++---- tests/test_periods.py | 25 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 06d7c19f..a81ccb56 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -7978,7 +7978,7 @@ def _set_pricing_mid( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), solver: Union[Solver, NoInput] = NoInput(0), - fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), vol: float = NoInput(0), ): """ @@ -7992,7 +7992,9 @@ def _set_pricing_mid( vol=vol, t=self.periods[0]._t_to_expiry(curves[3].node_dates[0]), v1=curves[1][self.kwargs["payment"]], - vspot=curves[1][fx.fx_rates.settlement], + vspot=curves[1][fx.pairs_settlement[self.kwargs["pair"]]], + # TODO provide a mechanism for defining spot date with FX crosses + # which are only directly available in FXForwards for majors. ) self.periods[0].strike = k if self.kwargs["premium"] is NoInput.blank: @@ -8005,7 +8007,7 @@ def rate( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), solver: Union[Solver, NoInput] = NoInput(0), - fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), base: Union[str, NoInput] = NoInput(0), vol: float = NoInput(0) ): @@ -8019,7 +8021,7 @@ def npv( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), solver: Union[Solver, NoInput] = NoInput(0), - fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), base: Union[str, NoInput] = NoInput(0), local: bool = False, vol: float = NoInput(0) diff --git a/tests/test_periods.py b/tests/test_periods.py index 67b6e661..a2b686f6 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -1926,7 +1926,8 @@ def test_npv(self, fxfo): fxfo.curve("usd", "usd"), fx=fxfo, vol=0.089, - ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] + ) + result /= fxfo.curve("usd", "usd")[dt(2023, 6, 20)] expected = 140525.690893 # 140500 USD premium according to Tullets calcs (may be rounded) assert abs(result - expected) < 1e-6 @@ -2076,6 +2077,16 @@ def test_strike_from_forward_delta(self, fxfo): expected = 1.101271021340 assert abs(result - expected) < 1e-9 + # https://quant.stackexchange.com/a/77802/29443 + result = fxo._strike_from_delta( + fxfo.rate("eurusd", dt(2023, 6, 20)), + 0.251754, + 0.089, + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), + ) + expected = 1.101 + assert abs(result - expected) < 1e-7 + def test_strike_from_forward_delta_put(self, fxfo): fxo = FXPutPeriod( pair="eurusd", @@ -2116,6 +2127,18 @@ def test_strike_from_spot_delta(self, fxfo): expected = 1.1010192011340847 assert abs(result - expected) < 1e-9 + # https://quant.stackexchange.com/a/77802/29443 + result = fxo._strike_from_delta( + fxfo.rate("eurusd", dt(2023, 6, 20)), + 0.250124, + 0.089, + fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), + v1=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], + vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + ) + expected = 1.101 + assert abs(result - expected) < 1e-6 + def test_strike_from_spot_delta_put(self, fxfo): fxo = FXPutPeriod( pair="eurusd", From 889acfc88a0d8bc09a28f9766f5fcc7f2445fc4e Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Sat, 30 Dec 2023 09:07:14 +0100 Subject: [PATCH 25/41] docs risk reversal --- rateslib/instruments.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index a81ccb56..6b03c44b 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8103,6 +8103,27 @@ def __init__(self, *args, **kwargs): class FXRiskReversal(FXOption): + """ + Create an *FX Risk Reversal* option strategy. + + Buying a *Risk Reversal* equates to selling a lower strike :class:`~rateslib.instruments.FXPut` + and buying a higher strike :class:`~rateslib.instruments.FXCall`. + + For additional arguments see :class:`~rateslib.instruments.FXOption`. + + Parameters + ---------- + strike: 2-element sequence + The first element is applied to the lower strike put and the + second element applied to the higher strike call, e.g. `["-25d", "25d"]`. + option_fixing: 2-element sequence, optional + The option fixing is applied to the put and call in order. + + Notes + ----- + When supplying ``strike`` as a string delta the strike will be determined at price time from + the provided volatility. + """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -8135,7 +8156,6 @@ def __init__(self, *args, **kwargs): ), ] - def rate( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), From d60fb19daa06b6c997475545ad36f9b05866c513 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Sat, 30 Dec 2023 14:03:21 +0100 Subject: [PATCH 26/41] docs risk reversal --- rateslib/instruments.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 6b03c44b..40128b4a 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8113,11 +8113,15 @@ class FXRiskReversal(FXOption): Parameters ---------- + args: tuple + Positional arguments to :class:`~rateslib.instruments.FXOption`. strike: 2-element sequence The first element is applied to the lower strike put and the second element applied to the higher strike call, e.g. `["-25d", "25d"]`. option_fixing: 2-element sequence, optional The option fixing is applied to the put and call in order. + kwargs: tuple + Keyword arguments to :class:`~rateslib.instruments.FXOption`. Notes ----- @@ -8156,6 +8160,8 @@ def __init__(self, *args, **kwargs): ), ] + + def rate( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), From 753775f31cf8cecf82405206b587542e22a8bb37 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Sat, 30 Dec 2023 17:19:17 +0100 Subject: [PATCH 27/41] docs risk reversal --- rateslib/__init__.py | 6 ++++ rateslib/default.py | 17 ++++++---- rateslib/instruments.py | 67 ++++++++++++++++++++++++++++++++++++--- tests/test_instruments.py | 43 +++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 12 deletions(-) diff --git a/rateslib/__init__.py b/rateslib/__init__.py index ec952dff..239794af 100644 --- a/rateslib/__init__.py +++ b/rateslib/__init__.py @@ -114,6 +114,9 @@ def __exit__(self, *args) -> None: Spread, Fly, Portfolio, + FXCall, + FXPut, + FXRiskReversal, ) # module level doc-string @@ -201,4 +204,7 @@ def __exit__(self, *args) -> None: "Spread", "Fly", "Portfolio", + "FXCall", + "FXPut", + "FXRiskReversal", ] diff --git a/rateslib/default.py b/rateslib/default.py index a328773c..b17ae17b 100644 --- a/rateslib/default.py +++ b/rateslib/default.py @@ -294,12 +294,15 @@ def plot(x, y: list, labels=[]): lines.append(line) if labels and len(labels) == len(lines): ax.legend(lines, labels) - years = mdates.YearLocator() # every year - months = mdates.MonthLocator() # every month - yearsFmt = mdates.DateFormatter("%Y") - ax.xaxis.set_major_locator(years) - ax.xaxis.set_major_formatter(yearsFmt) - ax.xaxis.set_minor_locator(months) + ax.grid(True) - fig.autofmt_xdate() + + if isinstance(x[0], datetime): + years = mdates.YearLocator() # every year + months = mdates.MonthLocator() # every month + yearsFmt = mdates.DateFormatter("%Y") + ax.xaxis.set_major_locator(years) + ax.xaxis.set_major_formatter(yearsFmt) + ax.xaxis.set_minor_locator(months) + fig.autofmt_xdate() return fig, ax, lines diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 40128b4a..a78d4f16 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -36,7 +36,7 @@ from pandas import DataFrame, concat, Series, MultiIndex, isna from rateslib import defaults -from rateslib.default import NoInput +from rateslib.default import NoInput, plot from rateslib.calendars import add_tenor, get_calendar, dcf, _get_years_and_months from rateslib.curves import Curve, index_left, LineCurve, CompositeCurve, IndexCurve @@ -7999,7 +7999,16 @@ def _set_pricing_mid( self.periods[0].strike = k if self.kwargs["premium"] is NoInput.blank: # then set the CashFlow to mid-market - npv = self.periods[0].npv(curves[1], curves[3], fx, vol=vol) + try: + npv = self.periods[0].npv(curves[1], curves[3], fx, vol=vol) + except AttributeError: + raise ValueError( + "`premium` has not been configured for the specified FXOption.\nThis is " + "normally determined at mid-market from the given `curves` and `vol` but " + "in this case these values do not provide a valid calculation. " + "If not required, initialise the " + "FXOption with a `premium` of 0.0, and this will be avoided." + ) premium = npv / curves[3][self.kwargs["payment"]] self.periods[1].notional = float(premium) @@ -8039,6 +8048,39 @@ def npv( else: return opt_npv + prem_npv + def _plot_payoff( + self, + range: Union[list[float], NoInput] = NoInput(0), + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: float = NoInput(0), + ): + """ + Mechanics to determine (x,y) coordinates for payoff at expiry plot. + """ + curves, fx, base = _get_curves_fx_and_base_maybe_from_solver( + self.curves, solver, curves, fx, base, self.kwargs["pair"][3:] + ) + self._set_pricing_mid(curves, NoInput(0), fx, vol) + x, y = self.periods[0]._payoff_at_expiry(range) + return x, y + + def plot_payoff( + self, + range: Union[list[float], NoInput] = NoInput(0), + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: float = NoInput(0), + ): + x, y = self._plot_payoff(range, curves, solver, fx, base, local, vol) + return plot(x, [y]) + class FXCall(FXOption): """ @@ -8160,8 +8202,6 @@ def __init__(self, *args, **kwargs): ), ] - - def rate( self, curves: Union[Curve, str, list, NoInput] = NoInput(0), @@ -8184,7 +8224,7 @@ def npv( fx: Union[float, FXRates, FXForwards, NoInput] = NoInput(0), base: Union[str, NoInput] = NoInput(0), local: bool = False, - vol: float = NoInput(0) + vol: Union[list[float], float] = NoInput(0), ): if not isinstance(vol, list): vol = [vol, vol] @@ -8199,6 +8239,23 @@ def npv( else: return _0 + _1 + def _plot_payoff( + self, + range: Union[list[float], NoInput] = NoInput(0), + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: Union[list[float], float] = NoInput(0), + ): + if not isinstance(vol, list): + vol = [vol, vol] + + x, _0 = self.periods[0]._plot_payoff(range, curves, solver, fx, base, local, vol[0]) + x, _1 = self.periods[1]._plot_payoff(range, curves, solver, fx, base, local, vol[1]) + return x, _0 + _1 + # Generic Instruments diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 9e6cb719..f8d307af 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3035,6 +3035,31 @@ def test_fx_call_rate_expiry_tenor(self, fxfo): expected = 70.217188 assert abs(result - expected) < 1e-6 + def test_fx_call_plot_payoff(self, fxfo): + fxc = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + strike=1.101, + premium=0.0, + ) + result = fxc.plot_payoff([1.03, 1.12]) + x, y = result[2][0]._x, result[2][0]._y + assert x[0] == 1.03 + assert x[1000] == 1.12 + assert y[0] == 0.0 + assert y[1000] == (1.12 - 1.101) * 20e6 + + def test_fx_call_plot_payoff_raises(self, fxfo): + fxc = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + strike=1.101, + ) + with pytest.raises(ValueError, match="`premium`"): + fxc.plot_payoff([1.03, 1.12]) + def test_fx_put_rate(self, fxfo): fxo = FXPut( pair="eurusd", @@ -3080,3 +3105,21 @@ def test_risk_reversal_npv(self, fxfo): expected = 0.0 assert abs(result - expected) < 1e-6 + def test_risk_reversal_plot(self, fxfo): + fxo = FXRiskReversal( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike=["-25d", "25d"], + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.plot_payoff([1.03, 1.12], curves, fx=fxfo, vol=[0.101, 0.089]) + x, y = result[2][0]._x, result[2][0]._y + assert x[0] == 1.03 + assert x[1000] == 1.12 + assert y[0] == 0.0 + assert y[1000] == (1.12 - 1.101) * 20e6 + From be17057959b8a4a2f10e7d821238bfdae1a127e8 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Mon, 15 Jan 2024 20:48:18 +0100 Subject: [PATCH 28/41] TST: risk reversal plot --- tests/test_instruments.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_instruments.py b/tests/test_instruments.py index f8d307af..c8bd912d 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3120,6 +3120,6 @@ def test_risk_reversal_plot(self, fxfo): x, y = result[2][0]._x, result[2][0]._y assert x[0] == 1.03 assert x[1000] == 1.12 - assert y[0] == 0.0 - assert y[1000] == (1.12 - 1.101) * 20e6 + assert abs(y[0] + 61590.08836201352) < 1e-5 + assert abs(y[1000] - 382208.868402012) < 1e-5 From 893ea67ea4c756d9ec7f81d8b916abebb7e3d548 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Thu, 28 Mar 2024 17:54:47 +0100 Subject: [PATCH 29/41] clean up files --- rateslib/dual/__init__.py | 50 ++++++++++++++++- rateslib/dual/dual.py | 101 ++++++----------------------------- rateslib/instruments.py | 8 +-- rateslib/periods.py | 2 +- rateslib/splines/__init__.py | 4 +- tests/test_dual.py | 12 ++--- 6 files changed, 78 insertions(+), 99 deletions(-) diff --git a/rateslib/dual/__init__.py b/rateslib/dual/__init__.py index 430be014..ff006d26 100644 --- a/rateslib/dual/__init__.py +++ b/rateslib/dual/__init__.py @@ -2,8 +2,9 @@ import numpy as np from functools import partial import math +from statistics import NormalDist -DUAL_CORE_PY = False +DUAL_CORE_PY = True if DUAL_CORE_PY: from rateslib.dual.dual import ( @@ -190,6 +191,53 @@ def dual_log(x, base=None): return math.log(x, base) +def dual_norm_cdf(x): + """ + Return the cumulative standard normal distribution for given value. + + Parameters + ---------- + x : float, Dual, Dual2 + + Returns + ------- + float, Dual, Dual2 + """ + if isinstance(x, (Dual, Dual2)): + return x.__norm_cdf__() + else: + return NormalDist().cdf(x) + + +def dual_inv_norm_cdf(x): + """ + Return the inverse cumulative standard normal distribution for given value. + + Parameters + ---------- + x : float, Dual, Dual2 + + Returns + ------- + float, Dual, Dual2 + """ + base = NormalDist().inv_cdf(float(x)) + if isinstance(x, Dual): + scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) + return Dual(base, x.vars, scalar * x.dual) + elif isinstance(x, Dual2): + scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) + scalar2 = base * scalar**2 + return Dual2( + base, + x.vars, + scalar * x.dual, + scalar * x.dual2 + 0.5 * scalar2 * np.einsum("i,j", x.dual, x.dual) + ) + else: + return base + + def dual_solve(A, b, allow_lsq=False, types=(Dual, Dual)): if types == (float, float): # Use basic Numpy LinAlg diff --git a/rateslib/dual/dual.py b/rateslib/dual/dual.py index 86290c80..500e3fed 100644 --- a/rateslib/dual/dual.py +++ b/rateslib/dual/dual.py @@ -349,6 +349,17 @@ def __log__(self): self.dual2 / self.real - np.einsum("i,j", self.dual, self.dual) * 0.5 / self.real**2, ) + def __norm_cdf__(self): + base = NormalDist().cdf(self.real) + scalar = 1 / math.sqrt(2 * math.pi) * math.exp(-0.5 * self.real ** 2) + scalar2 = scalar * -self.real + return Dual2( + base, + self.vars, + scalar * self.dual, + scalar * self.dual2 + 0.5 * scalar2 * np.einsum("i,j", self.dual, self.dual) + ) + def __upcast_vars__(self, new_vars): n = len(new_vars) dual, dual2 = np.zeros(n), np.zeros((n, n)) @@ -534,6 +545,11 @@ def __exp__(self): def __log__(self): return Dual(math.log(self.real), self.vars, self.dual / self.real) + def __norm_cdf__(self): + base = NormalDist().cdf(self.real) + scalar = 1 / math.sqrt(2*math.pi) * math.exp(-0.5 * self.real**2) + return Dual(base, self.vars, scalar * self.dual) + def __upcast_vars__(self, new_vars): n = len(new_vars) dual = np.zeros(n) @@ -575,91 +591,6 @@ def vars_from(other, real, vars=(), dual=None): # Contact rateslib at gmail.com if this code is observed outside its intended sphere. -def dual_log(x, base=None): - """ - Calculate the logarithm of a regular int or float or a dual number. - - Parameters - ---------- - x : int, float, Dual, Dual2 - Value to calculate exponent of. - base : int, float, optional - Base of the logarithm. Defaults to e to compute natural logarithm - - Returns - ------- - float, Dual, Dual2 - """ - if isinstance(x, (Dual, Dual2)): - val = x.__log__() - if base is None: - return val - else: - return val * (1 / math.log(base)) - elif base is None: - return math.log(x) - else: - return math.log(x, base) - - -def dual_norm_cdf(x): - """ - Return the cumulative standard normal distribution for given value. - - Parameters - ---------- - x : float, Dual, Dual2 - - Returns - ------- - float, Dual, Dual2 - """ - base = NormalDist().cdf(float(x)) - if isinstance(x, Dual): - scalar = 1 / math.sqrt(2*math.pi) * math.exp(-0.5 * float(x)**2) - return Dual(base, x.vars, scalar * x.dual) - elif isinstance(x, Dual2): - scalar = 1 / math.sqrt(2 * math.pi) * math.exp(-0.5 * float(x) ** 2) - scalar2 = scalar * -float(x) - return Dual2( - base, - x.vars, - scalar * x.dual, - scalar * x.dual2 + 0.5 * scalar2 * np.einsum("i,j", x.dual, x.dual) - ) - else: - return base - - -def dual_inv_norm_cdf(x): - """ - Return the inverse cumulative standard normal distribution for given value. - - Parameters - ---------- - x : float, Dual, Dual2 - - Returns - ------- - float, Dual, Dual2 - """ - base = NormalDist().inv_cdf(float(x)) - if isinstance(x, Dual): - scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) - return Dual(base, x.vars, scalar * x.dual) - elif isinstance(x, Dual2): - scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) - scalar2 = base * scalar**2 - return Dual2( - base, - x.vars, - scalar * x.dual, - scalar * x.dual2 + 0.5 * scalar2 * np.einsum("i,j", x.dual, x.dual) - ) - else: - return base - - def _pivot_matrix(A, method=1): """ Returns the pivoting matrix for P, used in Doolittle's method. diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 6eab3955..1c078dde 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -62,11 +62,11 @@ IndexFixedLeg, ) from rateslib.dual import ( - Dual, + Dual, Dual2, - DualTypes, - dual_log, - dual_exp, +DualTypes, + dual_log, + dual_exp, dual_norm_cdf, gradient, ) diff --git a/rateslib/periods.py b/rateslib/periods.py index c88492b4..0fac69f5 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2491,7 +2491,7 @@ def implied_vol( f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_) - premium if abs(f_) < 1e-10: break - vol_ = Dual(float(vol_ - f_ / f_.gradient("vol")[0]), "vol") + vol_ = Dual(float(vol_ - f_ / gradient(f_, "vol")[0]), "vol") return float(vol_) # return a float TODO check whether Dual can be returned. diff --git a/rateslib/splines/__init__.py b/rateslib/splines/__init__.py index 6515108c..e0e23a82 100644 --- a/rateslib/splines/__init__.py +++ b/rateslib/splines/__init__.py @@ -1,6 +1,6 @@ -SPLINE_CORE_PY = False +from rateslib.dual import DUAL_CORE_PY -if SPLINE_CORE_PY: +if DUAL_CORE_PY: from rateslib.splines.splines import ( bsplev_single, bspldnev_single, PPSpline ) diff --git a/tests/test_dual.py b/tests/test_dual.py index 3415a66f..6382cf52 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -595,20 +595,20 @@ def test_norm_cdf(): x = Dual2(1.25, "x") value = dual_norm_cdf(x) value2 = dual_norm_cdf(x + 0.00001) - assert abs(value.gradient("x")[0] - (value2 - value) * 100000) < 1e-5 + assert abs(gradient(value, "x")[0] - (value2 - value) * 100000) < 1e-5 - second = (value2.gradient("x")[0] - value.gradient("x")[0])*100000 - assert abs(value.gradient("x", order=2)[0] - second) < 1e-5 + second = (gradient(value2, "x")[0] - gradient(value, "x")[0])*100000 + assert abs(gradient(value2, "x", order=2)[0] - second) < 1e-5 def test_inv_norm_cdf(): x = Dual2(0.75, "x") value = dual_inv_norm_cdf(x) value2 = dual_inv_norm_cdf(x + 0.0000001) - assert abs(value.gradient("x")[0] - (value2 - value) * 10000000) < 1e-5 + assert abs(gradient(value, "x")[0] - (value2 - value) * 10000000) < 1e-5 - second = (value2.gradient("x")[0] - value.gradient("x")[0])*10000000 - assert abs(value.gradient("x", order=2)[0] - second) < 1e-5 + second = (gradient(value2, "x")[0] - gradient(value, "x")[0])*10000000 + assert abs(gradient(value2, "x", order=2)[0] - second) < 1e-5 def test_norm_cdf_value(): From 5f211dce81ab3435e8539f4c9f3ae3c90cae2041 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (iMac)" Date: Thu, 28 Mar 2024 19:01:54 +0100 Subject: [PATCH 30/41] Python spline equality --- rateslib/splines/splines.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rateslib/splines/splines.py b/rateslib/splines/splines.py index 9ec3650c..4b655979 100644 --- a/rateslib/splines/splines.py +++ b/rateslib/splines/splines.py @@ -239,12 +239,12 @@ def __eq__(self, other): for attr in ["k", "n"]: if getattr(self, attr, None) != getattr(other, attr, None): return False - if self.c is None and other.c is None: - return True - elif (self.c is None and other.c is not None) or (self.c is not None and other.c is None): - return False - elif not all(self.c == other.c): + if self.c is None or other.c is None: return False + else: + for i in range(len(self.c)): + if self.c[i] != other.c[i]: + return False return True def bsplev(self, x, i, otypes=["float64"]): From 920675d1e47a931e6bcee14ae01e374dccd9896e Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 29 Mar 2024 09:06:25 +0100 Subject: [PATCH 31/41] DualPy: norm inv and norm dual calcs --- rateslib/dual/__init__.py | 17 +++-------------- rateslib/dual/dual.py | 16 ++++++++++++++++ tests/test_dual.py | 24 ++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/rateslib/dual/__init__.py b/rateslib/dual/__init__.py index ff006d26..9a0e27fd 100644 --- a/rateslib/dual/__init__.py +++ b/rateslib/dual/__init__.py @@ -221,21 +221,10 @@ def dual_inv_norm_cdf(x): ------- float, Dual, Dual2 """ - base = NormalDist().inv_cdf(float(x)) - if isinstance(x, Dual): - scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) - return Dual(base, x.vars, scalar * x.dual) - elif isinstance(x, Dual2): - scalar = math.sqrt(2*math.pi) * math.exp(0.5 * base**2) - scalar2 = base * scalar**2 - return Dual2( - base, - x.vars, - scalar * x.dual, - scalar * x.dual2 + 0.5 * scalar2 * np.einsum("i,j", x.dual, x.dual) - ) + if isinstance(x, (Dual, Dual2)): + return x.__norm_inv_cdf__() else: - return base + return NormalDist().inv_cdf(x) def dual_solve(A, b, allow_lsq=False, types=(Dual, Dual)): diff --git a/rateslib/dual/dual.py b/rateslib/dual/dual.py index 500e3fed..70497715 100644 --- a/rateslib/dual/dual.py +++ b/rateslib/dual/dual.py @@ -360,6 +360,17 @@ def __norm_cdf__(self): scalar * self.dual2 + 0.5 * scalar2 * np.einsum("i,j", self.dual, self.dual) ) + def __norm_inv_cdf__(self): + base = NormalDist().inv_cdf(self.real) + scalar = math.sqrt(2 * math.pi) * math.exp(0.5 * base ** 2) + scalar2 = base * scalar ** 2 + return Dual2( + base, + self.vars, + scalar * self.dual, + scalar * self.dual2 + 0.5 * scalar2 * np.einsum("i,j", self.dual, self.dual) + ) + def __upcast_vars__(self, new_vars): n = len(new_vars) dual, dual2 = np.zeros(n), np.zeros((n, n)) @@ -550,6 +561,11 @@ def __norm_cdf__(self): scalar = 1 / math.sqrt(2*math.pi) * math.exp(-0.5 * self.real**2) return Dual(base, self.vars, scalar * self.dual) + def __norm_inv_cdf__(self): + base = NormalDist().inv_cdf(self.real) + scalar = math.sqrt(2 * math.pi) * math.exp(0.5 * base ** 2) + return Dual(base, self.vars, scalar * self.dual) + def __upcast_vars__(self, new_vars): n = len(new_vars) dual = np.zeros(n) diff --git a/tests/test_dual.py b/tests/test_dual.py index 6382cf52..b83d9d04 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -623,6 +623,30 @@ def test_inv_norm_cdf_value(): assert abs(result - expected) < 1e-4 +def test_inv_norm_cdf_dual(): + d = Dual(0.8425, ["x"], []) + result = dual_inv_norm_cdf(d) + expected = 1.00 + assert abs(result-expected) < 1e-2 + + approx_grad = 100000 * (dual_inv_norm_cdf(0.84251) - dual_inv_norm_cdf(0.8425)) + assert abs(gradient(result) - approx_grad) < 1e-4 + + +def test_inv_norm_cdf_dual2(): + d = Dual2(0.8425, ["x"], [], []) + result = dual_inv_norm_cdf(d) + expected = 1.00 + assert abs(result-expected) < 1e-2 + + approx_grad = 100000 * (dual_inv_norm_cdf(0.84251) - dual_inv_norm_cdf(0.8425)) + assert abs(gradient(result) - approx_grad) < 1e-4 + + approx_grad2 = approx_grad - (100000 * (dual_inv_norm_cdf(0.8425) - dual_inv_norm_cdf(0.84249))) + result2 = gradient(result, order=2) + assert abs(result2-100000*approx_grad2) < 1e-4 + + @pytest.mark.skip(reason="downcast vars is not used within the library, kept only for compat.") def test_downcast_vars(): w = Dual(2, ["x", "y", "z"], [0, 1, 1]) From 4ca1cd50350f6c387117387e28637034c26789e9 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 29 Mar 2024 17:36:51 +0100 Subject: [PATCH 32/41] Rust dual1 cdf --- Cargo.toml | 1 + rateslib/dual/__init__.py | 2 +- src/dual/dual1.rs | 17 ++++++++++ src/dual/dual2.rs | 6 ++++ src/dual/dual_py.rs | 8 +++++ tests/test_dual.py | 65 +++++++++++++++++++-------------------- 6 files changed, 64 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0f97f950..7a8b5568 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ num-traits = "0.2.15" auto_ops = "0.3.0" numpy = "0.20.0" itertools = "0.12.1" +statrs = "0.16" # --- This section should be live in development to use `cargo test --lib --no-default-features` [dependencies.pyo3] diff --git a/rateslib/dual/__init__.py b/rateslib/dual/__init__.py index 9a0e27fd..8c3f3db2 100644 --- a/rateslib/dual/__init__.py +++ b/rateslib/dual/__init__.py @@ -4,7 +4,7 @@ import math from statistics import NormalDist -DUAL_CORE_PY = True +DUAL_CORE_PY = False if DUAL_CORE_PY: from rateslib.dual.dual import ( diff --git a/src/dual/dual1.rs b/src/dual/dual1.rs index 08a43cde..3b0b411c 100644 --- a/src/dual/dual1.rs +++ b/src/dual/dual1.rs @@ -15,6 +15,8 @@ use num_traits; use num_traits::identities::{One, Zero}; use num_traits::{Num, Pow, Signed}; use auto_ops::{impl_op, impl_op_ex, impl_op_ex_commutative}; +use statrs::distribution::{Normal, ContinuousCDF}; +use std::f64::consts::PI; use pyo3::{pyclass, PyErr}; use pyo3::exceptions::{PyValueError}; @@ -474,6 +476,8 @@ impl Signed for Dual { pub trait MathFuncs { fn exp(&self) -> Self; fn log(&self) -> Self; + fn norm_cdf(&self) -> Self; + fn inv_norm_cdf(&self) -> Self; } impl MathFuncs for Dual { @@ -492,6 +496,19 @@ impl MathFuncs for Dual { dual: (1.0 / self.real) * &self.dual, } } + fn norm_cdf(&self) -> Self { + let n = Normal::new(0.0, 1.0).unwrap(); + let base = n.cdf(self.real); + let scalar = 1.0 / (2.0 * PI).sqrt() * (-0.5_f64 * self.real.pow(2.0_f64)).exp(); + Dual { + real: base, + vars: Arc::clone(&self.vars), + dual: scalar * &self.dual, + } + } + fn inv_norm_cdf(&self) -> Self { + Dual::one() + } } // f64 Crossover diff --git a/src/dual/dual2.rs b/src/dual/dual2.rs index c9b4a67f..3f374d27 100644 --- a/src/dual/dual2.rs +++ b/src/dual/dual2.rs @@ -283,6 +283,12 @@ impl MathFuncs for Dual2 { - fouter11_(&self.dual.view(), &self.dual.view()) * 0.5 * (scalar * scalar), } } + fn norm_cdf(&self) -> Self { + Dual2::one() + } + fn inv_norm_cdf(&self) -> Self { + Dual2::one() + } } // impl fmt::Debug for Dual2 { diff --git a/src/dual/dual_py.rs b/src/dual/dual_py.rs index da8e888f..6e600f3b 100644 --- a/src/dual/dual_py.rs +++ b/src/dual/dual_py.rs @@ -222,6 +222,10 @@ impl Dual { self.log() } + fn __norm_cdf__(&self) -> Self { self.norm_cdf() } + + fn __norm_inv_cdf__(&self) -> Self { self.inv_norm_cdf() } + fn __float__(&self) -> f64 { self.real() } @@ -431,6 +435,10 @@ impl Dual2 { self.log() } + fn __norm_cdf__(&self) -> Self { self.norm_cdf() } + + fn __norm_inv_cdf__(&self) -> Self { self.inv_norm_cdf() } + fn __float__(&self) -> f64 { self.real } diff --git a/tests/test_dual.py b/tests/test_dual.py index b83d9d04..1720b0e6 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -2,6 +2,7 @@ import math import numpy as np from packaging import version +from statistics import NormalDist import context @@ -590,37 +591,35 @@ def test_exp(x): expected = math.exp(2) assert result == expected +@pytest.mark.parametrize( + "x", + [ + Dual(1.25, ["x"], []), + Dual2(1.25, ["x"], [], []), + ], +) +def test_norm_cdf(x): + result = dual_norm_cdf(x) + expected = NormalDist().cdf(1.250) + assert abs(result - expected) < 1e-10 -def test_norm_cdf(): - x = Dual2(1.25, "x") - value = dual_norm_cdf(x) - value2 = dual_norm_cdf(x + 0.00001) - assert abs(gradient(value, "x")[0] - (value2 - value) * 100000) < 1e-5 + approx_grad = (NormalDist().cdf(1.25001) - NormalDist().cdf(1.25)) * 100000 + assert abs(gradient(result, ["x"])[0] - approx_grad) < 1e-5 - second = (gradient(value2, "x")[0] - gradient(value, "x")[0])*100000 - assert abs(gradient(value2, "x", order=2)[0] - second) < 1e-5 + if isinstance(x, Dual2): + approx_grad2 = (NormalDist().cdf(1.25) - NormalDist().cdf(1.24999)) * 100000 + approx_grad2 = (approx_grad - approx_grad2) * 100000 + assert abs(gradient(result, ["x"], order=2)[0] - approx_grad2) < 1e-5 def test_inv_norm_cdf(): - x = Dual2(0.75, "x") + x = Dual2(0.75, ["x"], [], []) value = dual_inv_norm_cdf(x) value2 = dual_inv_norm_cdf(x + 0.0000001) - assert abs(gradient(value, "x")[0] - (value2 - value) * 10000000) < 1e-5 + assert abs(gradient(value, ["x"])[0] - (value2 - value) * 10000000) < 1e-5 - second = (gradient(value2, "x")[0] - gradient(value, "x")[0])*10000000 - assert abs(gradient(value2, "x", order=2)[0] - second) < 1e-5 - - -def test_norm_cdf_value(): - result = dual_norm_cdf(1.0) - expected = 0.8413 - assert abs(result - expected) < 1e-4 - - -def test_inv_norm_cdf_value(): - result = dual_inv_norm_cdf(0.50) - expected = 0.0 - assert abs(result - expected) < 1e-4 + second = (gradient(value2, ["x"])[0] - gradient(value, ["x"])[0])*10000000 + assert abs(gradient(value2, ["x"], order=2)[0] - second) < 1e-5 def test_inv_norm_cdf_dual(): @@ -630,21 +629,19 @@ def test_inv_norm_cdf_dual(): assert abs(result-expected) < 1e-2 approx_grad = 100000 * (dual_inv_norm_cdf(0.84251) - dual_inv_norm_cdf(0.8425)) - assert abs(gradient(result) - approx_grad) < 1e-4 + assert abs(gradient(result, ["x"])[0] - approx_grad) < 1e-4 -def test_inv_norm_cdf_dual2(): - d = Dual2(0.8425, ["x"], [], []) - result = dual_inv_norm_cdf(d) - expected = 1.00 - assert abs(result-expected) < 1e-2 +def test_norm_cdf_value(): + result = dual_norm_cdf(1.0) + expected = 0.8413 + assert abs(result - expected) < 1e-4 - approx_grad = 100000 * (dual_inv_norm_cdf(0.84251) - dual_inv_norm_cdf(0.8425)) - assert abs(gradient(result) - approx_grad) < 1e-4 - approx_grad2 = approx_grad - (100000 * (dual_inv_norm_cdf(0.8425) - dual_inv_norm_cdf(0.84249))) - result2 = gradient(result, order=2) - assert abs(result2-100000*approx_grad2) < 1e-4 +def test_inv_norm_cdf_value(): + result = dual_inv_norm_cdf(0.50) + expected = 0.0 + assert abs(result - expected) < 1e-4 @pytest.mark.skip(reason="downcast vars is not used within the library, kept only for compat.") From 9b3374cf6edd85a253bb1a1a87810b18de2579b3 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 29 Mar 2024 18:26:53 +0100 Subject: [PATCH 33/41] Rust dual2 cdf --- src/dual/dual2.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/dual/dual2.rs b/src/dual/dual2.rs index 3f374d27..1430aaf4 100644 --- a/src/dual/dual2.rs +++ b/src/dual/dual2.rs @@ -15,6 +15,8 @@ use num_traits::identities::{One, Zero}; use num_traits::{Num, Pow, Signed}; use std::cmp::Ordering; use std::cmp::PartialOrd; +use statrs::distribution::{Normal, ContinuousCDF}; +use std::f64::consts::PI; // use std::fmt; use std::iter::Sum; use std::sync::Arc; @@ -284,7 +286,17 @@ impl MathFuncs for Dual2 { } } fn norm_cdf(&self) -> Self { - Dual2::one() + let n = Normal::new(0.0, 1.0).unwrap(); + let base = n.cdf(self.real); + let scalar = 1.0 / (2.0 * PI).sqrt() * (-0.5_f64 * self.real.pow(2.0_f64)).exp(); + let scalar2 = scalar * -self.real; + let cross_beta = fouter11_(&self.dual.view(), &self.dual.view()); + Dual2 { + real: base, + vars: Arc::clone(&self.vars), + dual: scalar * &self.dual, + dual2: scalar * &self.dual2 + 0.5_f64 * scalar2 * cross_beta + } } fn inv_norm_cdf(&self) -> Self { Dual2::one() From e8db092431890f1dbb055fc28552651d7b63d689 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 29 Mar 2024 20:46:38 +0100 Subject: [PATCH 34/41] Rust dual2 cdf --- rateslib/periods.py | 4 ++-- src/dual/dual1.rs | 9 ++++++++- src/dual/dual2.rs | 12 +++++++++++- tests/test_dual.py | 33 +++++++++++++++++---------------- tests/test_periods.py | 2 +- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index 0fac69f5..dcebd2a3 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2486,12 +2486,12 @@ def implied_vol( local: bool = False, premium: Union[float, NoInput] = NoInput(0), ): - vol_ = Dual(0.25, "vol") + vol_ = Dual(0.25, ["vol"], []) for i in range(20): f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_) - premium if abs(f_) < 1e-10: break - vol_ = Dual(float(vol_ - f_ / gradient(f_, "vol")[0]), "vol") + vol_ = Dual(float(vol_ - f_ / gradient(f_, ["vol"])[0]), ["vol"], []) return float(vol_) # return a float TODO check whether Dual can be returned. diff --git a/src/dual/dual1.rs b/src/dual/dual1.rs index 3b0b411c..af99d9ff 100644 --- a/src/dual/dual1.rs +++ b/src/dual/dual1.rs @@ -507,7 +507,14 @@ impl MathFuncs for Dual { } } fn inv_norm_cdf(&self) -> Self { - Dual::one() + let n = Normal::new(0.0, 1.0).unwrap(); + let base = n.inverse_cdf(self.real); + let scalar = (2.0 * PI).sqrt() * (0.5_f64 * base.pow(2.0_f64)).exp(); + Dual { + real: base, + vars: Arc::clone(&self.vars), + dual: scalar * &self.dual, + } } } diff --git a/src/dual/dual2.rs b/src/dual/dual2.rs index 1430aaf4..2f786c4c 100644 --- a/src/dual/dual2.rs +++ b/src/dual/dual2.rs @@ -299,7 +299,17 @@ impl MathFuncs for Dual2 { } } fn inv_norm_cdf(&self) -> Self { - Dual2::one() + let n = Normal::new(0.0, 1.0).unwrap(); + let base = n.inverse_cdf(self.real); + let scalar = (2.0 * PI).sqrt() * (0.5_f64 * base.pow(2.0_f64)).exp(); + let scalar2 = scalar.pow(2.0_f64) * base; + let cross_beta = fouter11_(&self.dual.view(), &self.dual.view()); + Dual2 { + real: base, + vars: Arc::clone(&self.vars), + dual: scalar * &self.dual, + dual2: scalar * &self.dual2 + 0.5_f64 * scalar2 * cross_beta + } } } diff --git a/tests/test_dual.py b/tests/test_dual.py index 1720b0e6..04256b12 100644 --- a/tests/test_dual.py +++ b/tests/test_dual.py @@ -612,25 +612,26 @@ def test_norm_cdf(x): assert abs(gradient(result, ["x"], order=2)[0] - approx_grad2) < 1e-5 -def test_inv_norm_cdf(): - x = Dual2(0.75, ["x"], [], []) - value = dual_inv_norm_cdf(x) - value2 = dual_inv_norm_cdf(x + 0.0000001) - assert abs(gradient(value, ["x"])[0] - (value2 - value) * 10000000) < 1e-5 - - second = (gradient(value2, ["x"])[0] - gradient(value, ["x"])[0])*10000000 - assert abs(gradient(value2, ["x"], order=2)[0] - second) < 1e-5 - - -def test_inv_norm_cdf_dual(): - d = Dual(0.8425, ["x"], []) - result = dual_inv_norm_cdf(d) - expected = 1.00 - assert abs(result-expected) < 1e-2 +@pytest.mark.parametrize( + "x", + [ + Dual(0.75, ["x"], []), + Dual2(0.75, ["x"], [], []), + ], +) +def test_inv_norm_cdf(x): + result = dual_inv_norm_cdf(x) + expected = NormalDist().inv_cdf(0.75) + assert abs(result - expected) < 1e-10 - approx_grad = 100000 * (dual_inv_norm_cdf(0.84251) - dual_inv_norm_cdf(0.8425)) + approx_grad = (NormalDist().inv_cdf(0.75001) - NormalDist().inv_cdf(0.75)) * 100000 assert abs(gradient(result, ["x"])[0] - approx_grad) < 1e-4 + if isinstance(x, Dual2): + approx_grad2 = (NormalDist().inv_cdf(0.75) - NormalDist().inv_cdf(0.74999)) * 100000 + approx_grad2 = (approx_grad - approx_grad2) * 100000 + assert abs(gradient(result, ["x"], order=2)[0] - approx_grad2) < 1e-4 + def test_norm_cdf_value(): result = dual_norm_cdf(1.0) diff --git a/tests/test_periods.py b/tests/test_periods.py index b7119ef4..b8b304e1 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -1950,7 +1950,7 @@ def test_npv(self, fxfo): ) result /= fxfo.curve("usd", "usd")[dt(2023, 6, 20)] expected = 140525.690893 # 140500 USD premium according to Tullets calcs (may be rounded) - assert abs(result - expected) < 1e-6 + assert abs(result - expected) < 1e-3 def test_npv_in_past(self, fxfo): fxo = FXCallPeriod( From ac55439481cce5cbe471f02f9ec57a98ca1bdd42 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Sun, 31 Mar 2024 13:01:09 +0200 Subject: [PATCH 35/41] doc for FX options --- docs/source/d_instruments.rst | 6 +++ docs/source/e_volatility.rst | 84 +++++++++++++++++++++++++++++++++++ docs/source/i_get_started.rst | 10 ++++- rateslib/__init__.py | 4 ++ rateslib/instruments.py | 9 +++- rateslib/periods.py | 78 ++++++++++++++++++++++++++++++-- tests/test_instruments.py | 16 +++++++ 7 files changed, 201 insertions(+), 6 deletions(-) create mode 100644 docs/source/e_volatility.rst diff --git a/docs/source/d_instruments.rst b/docs/source/d_instruments.rst index 37e3eab5..2eb06333 100644 --- a/docs/source/d_instruments.rst +++ b/docs/source/d_instruments.rst @@ -34,6 +34,11 @@ Multi-Currency Derivatives Link to the section on :ref:`multi-currency derivatives`. This allows *FXSwaps*, *Cross-Currency Swaps* and *FX Exchanges*. +Volatility +------------ +Link to the section on :ref:`FX volatility products`. This allows +*FXCall*, *FXPut* and *FXRiskReversal* instruments. + Utilities and Instrument Combinations ------------------------------------- @@ -49,4 +54,5 @@ allows things like *Spread trades*, *Butterflies*, *Portfolios* and a *Value* fo e_securities.rst e_singlecurrency.rst e_multicurrency.rst + e_volatility.rst e_combinations.rst diff --git a/docs/source/e_volatility.rst b/docs/source/e_volatility.rst new file mode 100644 index 00000000..806a5b50 --- /dev/null +++ b/docs/source/e_volatility.rst @@ -0,0 +1,84 @@ +.. _volatility-doc: + +.. ipython:: python + :suppress: + + from rateslib.instruments import * + from datetime import datetime as dt + +**************************** +FX Volatility +**************************** + +Single currency derivatives are examples of the simplest two-leg +structures. + +.. inheritance-diagram:: rateslib.instruments.FXCall rateslib.instruments.FXPut rateslib.instruments.FXRiskReversal + :private-bases: + :parts: 1 + +.. autosummary:: + rateslib.instruments.FXCall + rateslib.instruments.FXPut + rateslib.instruments.FXRiskReversal + +FX options using the **Black 76 log-normal model** can be priced in *rateslib*. + +FXForwards Market +================== + +First, it is practical to have *Curves* and an :class:`~rateslib.fx.FXForwards` object determined +from non-volatility markets. See :ref:`FX forwards `. This will be used to forecast +forward FX rates relevant to the pricing of an arbitrary FX option. + +.. ipython:: python + + # FXForwards for FXOptions + eureur = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9851909811629752}, calendar="tgt", id="eureur" + ) + usdusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.976009366603271}, calendar="nyc", id="usdusd" + ) + eurusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.987092591908283}, id="eurusd" + ) + fxr = FXRates({"eurusd": 1.0615}, settlement=dt(2023, 3, 20)) + fxf = FXForwards( + fx_curves={"eureur": eureur, "eurusd": eurusd, "usdusd": usdusd}, + fx_rates=fxr + ) + fxf._set_ad_order(1) + fxf.swap("eurusd", [dt(2023, 3, 20), dt(2023, 6, 20)]) # should be 60.1 points + +FXCall Option +============== + +Next define an :class:`~rateslib.fx.FXCall` option. Below we have used the *NoInput* argument +for some arguments which can otherwise be ignored. + +.. ipython:: python + + fxc = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), # a specified 3M expiry + notional=20e6, # 1mm EUR + strike=1.101, + payment_lag=2, # premium is paid 2 days after expiry + delivery_lag=2, # FX rate is considered as spot from expiry + calendar="tgt,nyc", # used to determine spot and delivery from expiry + modifier="f", # modify delivery and payment forward + premium_ccy="usd", + eval_date=NoInput(0), # expiry is not a string tenor + premium=NoInput(0), # option is left unpriced + option_fixing=NoInput(0), # option not yet fixed + delta_type=NoInput(0), # strike is set explicitly (not as %delta) + curves=NoInput(0), # pricing will be dynamic + spec=NoInput(0), # parameters set explicitly + ) + +Get the price of the *FXCall* option in premium terms + +.. ipython:: python + + fxc.rate(curves=[eurusd, usdusd], fx=fxf, vol=0.089) diff --git a/docs/source/i_get_started.rst b/docs/source/i_get_started.rst index 3f259e2b..05168352 100644 --- a/docs/source/i_get_started.rst +++ b/docs/source/i_get_started.rst @@ -82,42 +82,50 @@ Which ``fixed income instruments`` does *rateslib* include? =========================================================== .. list-table:: - :widths: 25 25 25 25 + :widths: 20 20 20 20 20 :header-rows: 1 * - Single Ccy Derivatives - Multi-Ccy Derivatives - Securities + - Volatility - Combinations * - :class:`~rateslib.instruments.IRS` - :class:`~rateslib.instruments.FXExchange` - :class:`~rateslib.instruments.FixedRateBond` + - :class:`~rateslib.instruments.FXCall` - :class:`~rateslib.instruments.Spread` * - :class:`~rateslib.instruments.SBS` - :class:`~rateslib.instruments.FXSwap` - :class:`~rateslib.instruments.FloatRateNote` + - :class:`~rateslib.instruments.FXPut` - :class:`~rateslib.instruments.Fly` * - :class:`~rateslib.instruments.FRA` - :class:`~rateslib.instruments.XCS` - :class:`~rateslib.instruments.Bill` + - :class:`~rateslib.instruments.FXRiskReversal` - :class:`~rateslib.instruments.Portfolio` * - :class:`~rateslib.instruments.STIRFuture` - - :class:`~rateslib.instruments.BondFuture` - + - * - :class:`~rateslib.instruments.ZCS` - - :class:`~rateslib.instruments.IndexFixedRateBond` - + - * - :class:`~rateslib.instruments.ZCIS` - - - + - * - :class:`~rateslib.instruments.IIRS` - - - + - .. raw:: html diff --git a/rateslib/__init__.py b/rateslib/__init__.py index dc8e6832..0c751b1c 100644 --- a/rateslib/__init__.py +++ b/rateslib/__init__.py @@ -87,6 +87,8 @@ def __exit__(self, *args) -> None: Cashflow, IndexFixedPeriod, IndexCashflow, + FXPutPeriod, + FXCallPeriod, ) from rateslib.legs import ( @@ -184,6 +186,8 @@ def __exit__(self, *args) -> None: "Cashflow", "IndexCashflow", "IndexFixedPeriod", + "FXCallPeriod", + "FXPutPeriod", # legs.py "FixedLeg", "FloatLeg", diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 1c078dde..1d9550c0 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -7919,7 +7919,7 @@ def cashflows( # FX Options -class FXOption(Sensitivities): +class FXOption(Sensitivities, metaclass=ABCMeta): """ Create an *FX Option*. @@ -7945,6 +7945,12 @@ class FXOption(Sensitivities): payment_lag: int or datetime, optional The number of business days after expiry to pay premium. If a *datetime* is given this will set the premium date explicitly. + premium: float + The amoungt paid for the option. + premium_ccy: str + The currency in which the premium is paid. + option_fixing: float + The value determined at expiry to set the moneyness of the option. delta_type: str in {"spot", "forward"} When deriving strike from delta use the equation associated with spot or forward delta. curves : Curve, LineCurve, str or list of such, optional @@ -7978,6 +7984,7 @@ def __init__( curves: Union[list, str, Curve, NoInput] = NoInput(0), spec: Union[str, NoInput] = NoInput(0), ): + # TODO mandate some input for premium_ccy or overwrite the USD default. self.kwargs = dict( pair=pair, expiry=expiry, diff --git a/rateslib/periods.py b/rateslib/periods.py index dcebd2a3..a20dff35 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2361,8 +2361,35 @@ def analytic_delta(self, *args, **kwargs): class FXOptionPeriod(metaclass=ABCMeta): - # https://www.researchgate.net/publication/275905055_A_Guide_to_FX_Options_Quoting_Conventions/ + """ + Abstract base class for constructing volatility components of FXOptions. + Pricing model uses Black 76 log-normal volatility calculations. + + Parameters + ----------- + pair: str + The currency pair for the FX rate which the option is settled. 3-digit code, e.g. "eurusd". + expiry: datetime + The expiry of the option: when the fixing and moneyness is determined. + delivery: datetime + The delivery date of the underlying FX pair. E.g. typically this would be **spot** as + measured from the expiry date. + payment: datetime + The payment date of the premium associated with the option. + strike: float, Dual, Dual2 + The strike value of the option. + notional: float + The amount in ccy1 (left side of pair) on which the option is based. + option_fixing: float, optional + If an option has already expired this argument is used to fix the price determined at + expiry. + delta_type: str in {"forward", "spot"} + When deriving strike from a delta percentage the method used to associate the sensitivity + to either a spot rate or a forward rate. + """ + + # https://www.researchgate.net/publication/275905055_A_Guide_to_FX_Options_Quoting_Conventions/ style = "european" kind = None phi = 0.0 @@ -2401,7 +2428,7 @@ def _black76(F, K, t, v1, v2, vol, phi): d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs d2 = d1 - vs Nd1, Nd2 = dual_norm_cdf(phi*d1), dual_norm_cdf(phi*d2) - _ = phi * v2 * (F * Nd1 - K * Nd2) + _ = phi * (F * Nd1 - K * Nd2) # Spot formulation instead of F (Garman Kohlhagen formulation) # https://quant.stackexchange.com/a/63661/29443 @@ -2411,7 +2438,7 @@ def _black76(F, K, t, v1, v2, vol, phi): # d2 = d1 - vs # Nd1, Nd2 = dual_norm_cdf(d1), dual_norm_cdf(d2) # _ = df1 * S_imm * Nd1 - K * df2 * Nd2 - return _ + return _ * v2 def npv( self, @@ -2425,7 +2452,24 @@ def npv( """ Return the NPV of the *FXOption*. - TODO + Parameters + ---------- + disc_curve: Curve + The discount *Curve* for the LHS currency. (Not used). + disc_curve_ccy2: Curve + The discount *Curve* for the RHS currency. + fx: float, FXRates, FXForwards, optional + The object to project the currency pair FX rate at delivery. + base: str, optional + The base currency in which to express the NPV. + local: bool, + Whether to display NPV in a currency local to the object. + vol: float, Dual, Dual2 + The percentage log-normal volatility to price the option. + + Returns + ------- + float, Dual, Dual2 or dict of such. """ if self.payment < disc_curve_ccy2.node_dates[0]: # payment date is in the past avoid issues with fixings or rates @@ -2486,6 +2530,22 @@ def implied_vol( local: bool = False, premium: Union[float, NoInput] = NoInput(0), ): + """ + Calculate the implied volatility of the + + Parameters + ---------- + disc_curve + disc_curve_ccy2 + fx + base + local + premium + + Returns + ------- + + """ vol_ = Dual(0.25, ["vol"], []) for i in range(20): f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_) - premium @@ -2534,6 +2594,11 @@ def _payoff_at_expiry(self, range: Union[list[float], NoInput] = NoInput(0)): class FXCallPeriod(FXOptionPeriod): + """ + Create an FXCallPeriod. + + For parameters see :class:`~rateslib.periods.FXOptionPeriod`. + """ kind = "call" phi = 1.0 @@ -2542,6 +2607,11 @@ def __init__(self, *args, **kwargs): class FXPutPeriod(FXOptionPeriod): + """ + Create an FXPutPeriod. + + For parameters see :class:`~rateslib.periods.FXOptionPeriod`. + """ kind = "put" phi = -1.0 diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 79a3cbbb..df87ee0e 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3022,6 +3022,21 @@ def test_fx_call_npv_unpriced(self, fxfo): expected = 0.0 assert abs(result - expected) < 1e-6 + def test_fx_call_rate_specified_strike(self, fxfo): + fxo = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + delivery_lag=2, + payment_lag=2, + calendar="tgt", + strike=1.101, + ) + curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] + result = fxo.rate(curves, fx=fxfo, vol=0.089) + expected = 70.262845 + assert abs(result - expected) < 1e-6 + def test_fx_call_rate(self, fxfo): fxo = FXCall( pair="eurusd", @@ -3031,6 +3046,7 @@ def test_fx_call_rate(self, fxfo): payment_lag=2, calendar="tgt", strike="25d", + delta_type="spot", ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) From 6eb2e4323842ade16e08f5df307c7d2a16b5ac7c Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Tue, 2 Apr 2024 20:55:24 +0200 Subject: [PATCH 36/41] premium adjusted delta for FX options --- rateslib/default.py | 1 + rateslib/instruments.py | 2 +- rateslib/periods.py | 242 +++++++++-- tests/test_dualpy.py | 849 ++++++++++++++++++++++++++++++++++++++ tests/test_instruments.py | 6 +- tests/test_periods.py | 113 ++++- 6 files changed, 1168 insertions(+), 45 deletions(-) create mode 100644 tests/test_dualpy.py diff --git a/rateslib/default.py b/rateslib/default.py index e02384b2..046874e6 100644 --- a/rateslib/default.py +++ b/rateslib/default.py @@ -147,6 +147,7 @@ class Defaults: delivery_lag = 2 delta_type = "spot" + option_metric = "pips" # Curves diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 1d9550c0..1c23c9d7 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8057,7 +8057,7 @@ def _set_pricing_mid( delta=float(self.kwargs["strike"][:-1])/100, vol=vol, t=self.periods[0]._t_to_expiry(curves[3].node_dates[0]), - v1=curves[1][self.kwargs["payment"]], + v1=curves[1][self.kwargs["delivery"]], vspot=curves[1][fx.pairs_settlement[self.kwargs["pair"]]], # TODO provide a mechanism for defining spot date with FX crosses # which are only directly available in FXForwards for majors. diff --git a/rateslib/periods.py b/rateslib/periods.py index a20dff35..0cbb1a95 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -2405,6 +2405,7 @@ def __init__( notional: Union[float, NoInput] = NoInput(0), option_fixing: Union[float, NoInput] = NoInput(0), delta_type: Union[str, NoInput] = NoInput(0), + metric: Union[str, NoInput] = NoInput(0) ): self.pair = pair.lower() self.currency = self.pair[3:] @@ -2416,16 +2417,36 @@ def __init__( self.expiry = expiry self.option_fixing = option_fixing self.delta_type = defaults.delta_type if delta_type is NoInput.blank else delta_type.lower() + self.metric = metric @staticmethod - def _black76(F, K, t, v1, v2, vol, phi): + def _black76(F, K, t_e, v1, v2, vol, phi): """ Option price in points terms for immediate premium settlement. - (forward, strike, time to expiry, df ccy1, df ccy 2, volatility in %, phi for put/call) + Parameters + ----------- + F: float, Dual, Dual2 + The forward price for settlement at the delivery date. + K: float, Dual, Dual2 + The strike price of the option. + t_e: float + The annualised time to expiry. + v1: float + Not used. The discounting rate on ccy1 side. + v2: float, Dual, Dual2 + The discounting rate to delivery on ccy2, at the appropriate collateral rate. + vol: float, Dual, Dual2 + The volatility measured over the period until expiry. + phi: int + Whether to calculate for call or put. + + Returns + -------- + float, Dual, Dual2 """ - vs = vol * t ** 0.5 - d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t) / vs + vs = vol * t_e ** 0.5 + d1 = (dual_log(F / K) + 0.5 * vol ** 2 * t_e) / vs d2 = d1 - vs Nd1, Nd2 = dual_norm_cdf(phi*d1), dual_norm_cdf(phi*d2) _ = phi * (F * Nd1 - K * Nd2) @@ -2440,6 +2461,106 @@ def _black76(F, K, t, v1, v2, vol, phi): # _ = df1 * S_imm * Nd1 - K * df2 * Nd2 return _ * v2 + def _strike_from_delta( + self, + f: DualTypes, + delta: float, + vol: DualTypes, + t: DualTypes, + v1: DualTypes = NoInput(0), + vspot: DualTypes = NoInput(0), + ): + """ + Determine a strike given a delta percentage value. + + Parameters + ---------- + f: float, Dual, Dual2 + The forward FX rate at delivery. + delta: float + The percentage delta to calculate strike for. + vol: float, Dual, Dual2 + The volatility (assumed constant) over the period to expiry + t: float, Dual, Dual2 + The time to expiry. + v1: float, Dual, Dual2 + The domestic discount factor (LHS currency) in an appropriate collateral until delivery. + vspot: float, Dual, Dual2 + The domestic discount factor (LHS currency) in appropriate collateral until standard + transaction settlement, e.g. spot. + + Returns + ------- + float, Dual, Dual2 + """ + if self.delta_type == "forward": + _ = dual_inv_norm_cdf(self.phi * delta) + _ = f * dual_exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) + elif self.delta_type == "spot": + v1 = float(v1/vspot) + _ = dual_inv_norm_cdf(self.phi*delta/v1) + _ = f * dual_exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) + return _ + + def _delta_percent( + self, + fx: FXForwards, + k: float, + vol: DualTypes, + t_e: DualTypes, + delta_type: str, + premium: Union[DualTypes, NoInput] = NoInput(0), + disc_curve: Union[Curve, NoInput] = NoInput(0), + ): + """ + Determine a percent delta given a strike value. + + Parameters + ---------- + f: float, Dual, Dual2 + The forward FX rate at delivery. + delta: float + The percentage delta to calculate strike for. + vol: float, Dual, Dual2 + The volatility (assumed constant) over the period to expiry + t_e: float, Dual, Dual2 + The time to expiry. + v1: float, Dual, Dual2 + The domestic discount factor (LHS currency) in an appropriate collateral until delivery. + vspot: float, Dual, Dual2 + The domestic discount factor (LHS currency) in appropriate collateral until standard + transaction settlement, e.g. spot. + + Returns + ------- + float, Dual, Dual2 + """ + spot = fx.pairs_settlement[self.pair] + f = fx.rate(self.pair, self.delivery) + + vs = vol * t_e ** 0.5 + d1 = (dual_log(f / k) + 0.5 * vol ** 2 * t_e) / vs + _ = self.phi * dual_norm_cdf(self.phi * d1) + if delta_type == "forward_pa": + if self.payment == self.delivery: + w1 = 1.0 + else: + w1 = disc_curve[self.payment] / disc_curve[self.delivery] + return _ - w1 * premium / self.notional + elif delta_type == "spot": + w_d = disc_curve[self.delivery] + w_spot = disc_curve[spot] + w = w_d / w_spot + return _ * w + elif delta_type == "spot_pa": + w_d = disc_curve[self.delivery] + w_spot = disc_curve[spot] + w = w_d / w_spot + w1 = disc_curve[self.payment] / disc_curve[spot] + return _ * w - w1 * premium / self.notional + else: # == "forward" + return _ + def npv( self, disc_curve: Curve, @@ -2486,14 +2607,12 @@ def npv( else: # value is expressed in currency (i.e. pair[3:]) - f = fx.rate(self.pair, self.delivery) - v2 = disc_curve_ccy2[self.expiry] value = self._black76( - F=f, + F=fx.rate(self.pair, self.delivery), K=self.strike, - t=self._t_to_expiry(disc_curve_ccy2.node_dates[0]), + t_e=self._t_to_expiry(disc_curve_ccy2.node_dates[0]), v1=None, # not required: disc_curve[self.expiry], - v2=v2, + v2=disc_curve_ccy2[self.delivery], vol=vol, phi=self.phi, # controls calls or put price ) @@ -2509,7 +2628,33 @@ def rate( base: Union[str, NoInput] = NoInput(0), local: bool = False, vol: Union[float, NoInput] = NoInput(0), + metric: Union[str, NoInput] = NoInput(0), ): + """ + Return the pricing metric of the *FXOption*. + + Parameters + ---------- + disc_curve: Curve + The discount *Curve* for the LHS currency. (Not used). + disc_curve_ccy2: Curve + The discount *Curve* for the RHS currency. + fx: float, FXRates, FXForwards, optional + The object to project the currency pair FX rate at delivery. + base: str, optional + The base currency in which to express the NPV. + local: bool, + Whether to display NPV in a currency local to the object. + vol: float, Dual, Dual2 + The percentage log-normal volatility to price the option. + metric: str in {"pips", "percent"} + The metric to return. If "pips" assumes the premium is in foreign (rhs) + currency. If "percent", the premium is assumed to be domestic (lhs). + + Returns + ------- + float, Dual, Dual2 or dict of such. + """ npv = self.npv( disc_curve, disc_curve_ccy2, @@ -2518,8 +2663,22 @@ def rate( False, vol, ) - points_premium = (npv / disc_curve_ccy2[self.payment]) / self.notional - return points_premium * 10000.0 + + if metric is not NoInput.blank: + metric_ = metric.lower() + elif self.metric is not NoInput.blank: + metric_ = self.metric.lower() + else: + metric_ = defaults.option_metric + + if metric_ == "pips": + points_premium = (npv / disc_curve_ccy2[self.payment]) / self.notional + return points_premium * 10000.0 + elif metric_ == "percent": + currency_premium = (npv / disc_curve_ccy2[self.payment]) / fx.rate(self.pair, self.payment) + return currency_premium / self.notional * 100 + else: + raise ValueError("`metric` must be in {'pips', 'percent'}") def implied_vol( self, @@ -2529,53 +2688,64 @@ def implied_vol( base: Union[str, NoInput] = NoInput(0), local: bool = False, premium: Union[float, NoInput] = NoInput(0), + metric: Union[str, NoInput] = NoInput(0), ): """ - Calculate the implied volatility of the + Calculate the implied volatility of the FX option. Parameters ---------- - disc_curve - disc_curve_ccy2 - fx - base - local - premium + disc_curve: Curve + The discount *Curve* for the LHS currency. (Not used). + disc_curve_ccy2: Curve + The discount *Curve* for the RHS currency. + fx: float, FXRates, FXForwards, optional + The object to project the currency pair FX rate at delivery. + base: str, optional + The base currency in which to express the NPV. + local: bool, + Whether to display NPV in a currency local to the object. + premium: float + The premium value of the option paid at the appropriate payment date. + metric: str in {"pips", "percent"}, optional + The manner in which the premium is expressed. Returns ------- - + float """ vol_ = Dual(0.25, ["vol"], []) for i in range(20): - f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_) - premium + f_ = self.rate(disc_curve, disc_curve_ccy2, fx, base, local, vol_, metric) - premium if abs(f_) < 1e-10: break vol_ = Dual(float(vol_ - f_ / gradient(f_, ["vol"])[0]), ["vol"], []) return float(vol_) # return a float TODO check whether Dual can be returned. - def _strike_from_delta( + def delta_percent( self, - f: DualTypes, - delta: float, - vol: DualTypes, - t: DualTypes, - v1: DualTypes = NoInput(0), - vspot: DualTypes = NoInput(0), + disc_curve: Curve, + disc_curve_ccy2: Curve, + fx: Union[FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: Union[float, NoInput] = NoInput(0), + premium: Union[DualTypes, NoInput] = NoInput(0) # expressed in the payment currency ): - if self.delta_type == "forward": - _ = dual_inv_norm_cdf(self.phi*delta) - _ = f * dual_exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) - elif self.delta_type == "spot": - v1 = float(v1/vspot) - _ = dual_inv_norm_cdf(self.phi*delta/v1) - _ = f * dual_exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) - return _ + return self._delta_percent( + fx=fx, + k=self.strike, + vol=vol, + t_e=self._t_to_expiry(disc_curve_ccy2.node_dates[0]), + delta_type=self.delta_type, + premium=premium, + disc_curve=disc_curve, + ) def _t_to_expiry(self, now: datetime): # TODO make this a dual, associated with theta - return (self.expiry - now) / timedelta(days=365) + return (self.expiry - now).days / 365.0 def _payoff_at_expiry(self, range: Union[list[float], NoInput] = NoInput(0)): if self.strike is NoInput.blank: diff --git a/tests/test_dualpy.py b/tests/test_dualpy.py new file mode 100644 index 00000000..f65932f9 --- /dev/null +++ b/tests/test_dualpy.py @@ -0,0 +1,849 @@ +import pytest +import math +import numpy as np +from packaging import version +from statistics import NormalDist + +import context +from rateslib.dual.dual import Dual, Dual2 +from rateslib.dual import ( + dual_exp, + dual_log, + dual_solve, + dual_norm_cdf, + dual_inv_norm_cdf, + set_order, + gradient, +) + +# Python Dual implementation +from rateslib.dual.dual import ( + _plu_decomp, + _pivot_matrix, +) + + +@pytest.fixture() +def x_1(): + return Dual(1, vars=["v0", "v1"], dual=[1, 2]) + + +@pytest.fixture() +def x_2(): + return Dual(2, vars=["v0", "v2"], dual=[0, 3]) + + +@pytest.fixture() +def y_1(): + return Dual2(1, vars=["v0", "v1"], dual=[1, 2], dual2=[]) + + +@pytest.fixture() +def y_2(): + return Dual2(1, vars=["v0", "v1"], dual=[1, 2], dual2=[1.0, 1.0, 1.0, 1.0]) + + +@pytest.fixture() +def y_3(): + return Dual2(2, vars=["v0", "v2"], dual=[0, 3], dual2=[1.0, 1.0, 1.0, 1.0]) + + +@pytest.fixture() +def A(): + return np.random.randn(25).reshape(5, 5) + + +@pytest.fixture() +def A_sparse(): + return np.array( + [ + [24, -36, 12, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.25, 0.583333333333, 0.1666666666, 0, 0, 0, 0, 0], + [0, 0, 0.1666666666, 0.6666666666, 0.1666666666, 0, 0, 0, 0], + [0, 0, 0, 0.1666666666, 0.6666666666, 0.1666666666, 0, 0, 0], + [0, 0, 0, 0, 0.1666666666, 0.6666666666, 0.1666666666, 0, 0], + [0, 0, 0, 0, 0, 0.1666666666, 0.583333333333, 0.25, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0, 12, -36, 24], + ] + ) + + +@pytest.fixture() +def b(): + return np.random.randn(5).reshape(5, 1) + + +def test_zero_init(): + x = Dual(1, ["x"], []) + assert np.all(x.dual == np.ones(1)) + + y = Dual2(1, ["x"], [], []) + assert np.all(y.dual == np.ones(1)) + assert np.all(y.dual2 == np.zeros((1, 1))) + + +@pytest.mark.parametrize( + "op", + [ + "__add__", + "__sub__", + "__mul__", + "__truediv__", + "__eq__", + ], +) +def test_no_type_crossing_on_ops(x_1, y_1, op): + # getattr(x_1, op)(y_1) + with pytest.raises(TypeError): + getattr(x_1, op)(y_1) + + with pytest.raises(TypeError): + getattr(y_1, op)(x_1) + + +def test_dual_repr(x_1, y_2): + result = x_1.__repr__() + assert result == "" + + result = y_2.__repr__() + assert result == "" + + +def test_dual_str(x_1, y_2): + result = x_1.__str__() + assert result == " val = 1.00000000\n dv0 = 1.000000\n dv1 = 2.000000\n" + + result = y_2.__str__() + assert ( + result == " val = 1.00000000\n" + " dv0 = 1.000000\n" + " dv1 = 2.000000\n" + "dv0dv0 = 2.000000\n" + "dv0dv1 = 2.000000\n" + "dv1dv1 = 2.000000\n" + ) + + +def test_rdiv_raises(x_1, y_1): + with pytest.raises(TypeError): + _ = "string" / x_1 + + with pytest.raises(TypeError): + _ = "string" / y_1 + + +def test_neg(x_1, y_2): + assert -x_1 == Dual(-1, ["v0", "v1"], [-1.0, -2.0]) + assert -y_2 == Dual2(-1, ["v0", "v1"], [-1.0, -2.0], [-1.0, -1.0, -1.0, -1.0]) + + +def test_eq_ne(x_1, y_1, y_2): + # non-matching types + assert 0 != Dual(0, ["single_var"], []) + assert 0 != Dual2(0, ["single_var"], [], []) + # ints + assert 2 == Dual(2, [], []) + assert 2 == Dual2(2, [], [], []) + # floats + assert 3.3 == Dual(3.3, [], []) + assert 3.3 == Dual2(3.3, [], [], []) + # no type crossing + with pytest.raises(TypeError): + assert x_1 != y_1 + # equality + assert x_1 == Dual(1, ["v0", "v1"], [1, 2]) + assert y_1 == Dual2(1, ["v0", "v1"], [1, 2], []) + assert y_2 == Dual2(1, ["v0", "v1"], [1, 2], [1.0, 1.0, 1.0, 1.0]) + # non-matching elements + assert x_1 != Dual(2, ["v0", "v1"], [1, 2]) + assert x_1 != Dual(1, ["v0", "v1"], [2, 2]) + assert x_1 != Dual(1, ["v2", "v1"], [1, 2]) + # non-matching elements + assert y_1 != Dual2(2, ["v0", "v1"], [1, 2], []) + assert y_1 != Dual2(1, ["v0", "v1"], [2, 2], []) + assert y_1 != Dual2(1, ["v2", "v1"], [1, 2], []) + # non-matching dual2 + assert y_2 != Dual2(1, ["v0", "v1"], [1, 2], [2.0, 2.0, 2.0, 2.0]) + + +def test_lt(): + assert Dual(1, ["x"], []) < Dual(2, ["y"], []) + assert Dual2(1, ["z"], [], []) < Dual2(2, ["x"], [], []) + assert Dual(1, ["x"], []) < 10 + assert not Dual(1, ["x"], []) < 0 + + +def test_lt_raises(): + with pytest.raises(TypeError, match="Cannot compare"): + assert Dual(1, ["x"], []) < Dual2(2, ["y"], [], []) + + +def test_gt(): + assert Dual(2, ["x"], []) > Dual(1, ["y"], []) + assert Dual2(2, ["z"], [], []) > Dual2(1, ["x"], [], []) + assert Dual(1, ["x"], []) > 0 + assert not Dual(1, ["x"], []) > 10 + + +def test_gt_raises(): + with pytest.raises(TypeError, match="Cannot compare"): + assert Dual(2, ["x"], []) > Dual2(1, ["y"], [], []) + + +def test_dual2_abs_float(x_1, y_1, y_2): + assert abs(x_1) == 1 + assert abs(y_1) == 1 + assert abs(y_2) == 1 + assert float(x_1) == float(1) + assert float(y_1) == float(1) + assert float(y_2) == float(1) + + +@pytest.mark.parametrize("op", ["__add__", "__sub__", "__mul__", "__truediv__"]) +def test_dual2_immutable(y_1, y_2, op): + _ = getattr(y_1, op)(y_2) + assert y_1 == Dual2(1, vars=["v0", "v1"], dual=np.array([1, 2]), dual2=[]) + assert y_2 == Dual2(1, vars=["v0", "v1"], dual=np.array([1, 2]), dual2=[1., 1., 1., 1.]) + + +@pytest.mark.parametrize("op", ["__add__", "__sub__", "__mul__", "__truediv__"]) +def test_dual_immutable(x_1, op): + _ = getattr(x_1, op)(Dual(2, vars=["new"], dual=np.array([4]))) + assert x_1 == Dual(1, vars=["v0", "v1"], dual=np.array([1, 2])) + + +def test_dual_raises(x_1): + with pytest.raises(ValueError, match="`Dual` variable cannot possess `dual2`"): + x_1.dual2 + + +@pytest.mark.parametrize( + "op, expected", + [ + ("__add__", Dual(3, vars=["v0", "v1", "v2"], dual=np.array([1, 2, 3]))), + ("__sub__", Dual(-1, vars=["v0", "v1", "v2"], dual=np.array([1, 2, -3]))), + ("__mul__", Dual(2, vars=["v0", "v1", "v2"], dual=np.array([2, 4, 3]))), + ("__truediv__", Dual(0.5, vars=["v0", "v1", "v2"], dual=np.array([0.5, 1, -0.75]))), + ], +) +def test_ops(x_1, x_2, op, expected): + result = getattr(x_1, op)(x_2) + assert result == expected + + +def test_op_inversions(x_1, x_2): + assert (x_1 + x_2) - (x_2 + x_1) == 0 + assert (x_1 / x_2) * (x_2 / x_1) == 1 + + +@pytest.mark.parametrize( + "op, expected", + [ + ( + "__add__", + Dual2(3, ["v0", "v1", "v2"], [1, 2, 3], [2, 1, 1, 1, 1, 0, 1, 0, 1]) + ), + ( + "__sub__", + Dual2(-1, ["v0", "v1", "v2"], [1, 2, -3], [0, 1, -1, 1, 1, 0, -1, 0, -1]) + ), + ( + "__mul__", + Dual2(2, ["v0", "v1", "v2"], [2, 4, 3], [3, 2, 2.5, 2, 2, 3, 2.5, 3, 1]) + ), + ( + "__truediv__", + Dual2(0.5, ["v0", "v1", "v2"], [0.5, 1.0, -0.75], [0.25, 0.5, -0.625, 0.5, 0.5, -0.75, -0.625, -0.75, 0.875]) + ), + ], +) +def test_ops2(y_2, y_3, op, expected): + result = getattr(y_2, op)(y_3) + assert result == expected + + +def test_op_inversions2(y_2, y_3): + assert (y_2 + y_3) - (y_3 + y_2) == 0 + assert (y_2 / y_3) * (y_3 / y_2) == 1 + + +def test_inverse(x_1, y_2): + assert x_1 * x_1**-1 == 1 + assert y_2 * y_2**-1 == 1 + + +def test_power_identity(x_1, y_2): + result = x_1**1 + assert result == x_1 + + result = y_2**1 + assert result == y_2 + + +@pytest.mark.parametrize( + "op, expected", + [ + ("__add__", Dual(1 + 2.5, vars=["v0", "v1"], dual=np.array([1, 2]))), + ("__sub__", Dual(1 - 2.5, vars=["v0", "v1"], dual=np.array([1, 2]))), + ("__mul__", Dual(1 * 2.5, vars=["v0", "v1"], dual=np.array([1, 2]) * 2.5)), + ("__truediv__", Dual(1 / 2.5, vars=["v0", "v1"], dual=np.array([1, 2]) / 2.5)), + ], +) +def test_left_op_with_float(x_1, op, expected): + result = getattr(x_1, op)(2.5) + assert result == expected + + +@pytest.mark.parametrize( + "op, expected", + [ + ( + "__add__", + Dual2(1 + 2.5, ["v0", "v1"], [1, 2], [1.0, 1.0, 1.0, 1.0]) + ), + ( + "__sub__", + Dual2(1 - 2.5, ["v0", "v1"], [1, 2], [1.0, 1.0, 1.0, 1.0]), + ), + ( + "__mul__", + Dual2(1 * 2.5, ["v0", "v1"], [2.5, 5.0], [2.5, 2.5, 2.5, 2.5]) + ), + ( + "__truediv__", + Dual2(1 / 2.5, ["v0", "v1"], [1/2.5, 2/2.5], [1/2.5, 1/2.5, 1/2.5, 1/2.5]) + ), + ], +) +def test_left_op_with_float2(y_2, op, expected): + result = getattr(y_2, op)(2.5) + assert result == expected + + +def test_right_op_with_float(x_1): + assert 2.5 + x_1 == Dual(1 + 2.5, vars=["v0", "v1"], dual=np.array([1, 2])) + assert 2.5 - x_1 == Dual(2.5 - 1, vars=["v0", "v1"], dual=-np.array([1, 2])) + assert 2.5 * x_1 == x_1 * 2.5 + assert 2.5 / x_1 == (x_1 / 2.5) ** -1 + + +def test_right_op_with_float2(y_2): + assert 2.5 + y_2 == Dual2( + 1 + 2.5, vars=["v0", "v1"], dual=[1., 2.], dual2=[1., 1., 1., 1.] + ) + assert 2.5 - y_2 == Dual2( + 2.5 - 1, vars=["v0", "v1"], dual=[-1., -2.], dual2=[-1., -1., -1., -1.] + ) + assert 2.5 * y_2 == y_2 * 2.5 + assert 2.5 / y_2 == (y_2 / 2.5) ** -1 + + +def test_dual2_second_derivatives(): + "test power, multiplication, addition" + + def f(x, y, z): + """ + f_x = 4x^3 y^2, f_y = 2y x^4 + z, f_z = 3z^2 +y + f_xx = 12x^2 y^2, f_xy = 8 x^3 y, f_xz = 0, + f_yx = 8x^3 y, f_yy = 2 x^4, f_yz = 1, + f_zx = 0, f_zy = 1, f_zz = 6z + """ + return x**4 * y**2 + z**3 + y * z + + x_, y_, z_ = 3, 2, 1 + + x = Dual2(x_, vars=["x"], dual=[1], dual2=[]) + y = Dual2(y_, vars=["y"], dual=[1], dual2=[]) + z = Dual2(z_, vars=["z"], dual=[1], dual2=[]) + + result = f(x, y, z) + assert result.dual[0] == 4 * x_**3 * y_**2 # 432 + assert result.dual[1] == 2 * y_ * x_**4 + z_ # 325 + assert result.dual[2] == 3 * z_**2 + y_ # 5 + + assert result.dual2[0, 0] * 2 == 12 * x_**2 * y_**2 + assert result.dual2[0, 1] * 2 == 8 * x_**3 * y_ + assert result.dual2[0, 2] * 2 == 0 + assert result.dual2[1, 0] * 2 == 8 * x_**3 * y_ + assert result.dual2[1, 1] * 2 == 2 * x_**4 + assert result.dual2[1, 2] * 2 == 1 + assert result.dual2[2, 0] * 2 == 0 + assert result.dual2[2, 1] * 2 == 1 + assert result.dual2[2, 2] * 2 == 6 * z_ + + +def test_dual2_second_derivatives2(): + "test dual_exp, multiplication, division, dual_log" + + def f(x, y, z): + return (x / z).__exp__() + (x * y).__log__() + + x_, y_, z_ = 3, 2, 1 + + x = Dual2(x_, vars=["x"], dual=[1], dual2=[]) + y = Dual2(y_, vars=["y"], dual=[1], dual2=[]) + z = Dual2(z_, vars=["z"], dual=[1], dual2=[]) + + result = f(x, y, z) + xi = result.vars.index("x") + yi = result.vars.index("y") + zi = result.vars.index("z") + assert result.dual[xi] == math.exp(x_ / z_) / z_ + 1 / x_ + assert result.dual[yi] == 1 / y_ + assert result.dual[zi] == -x_ * math.exp(x_ / z_) / z_**2 + + assert result.dual2[xi, xi] * 2 == math.exp(x_ / z_) / z_**2 - 1 / x_**2 + assert result.dual2[xi, yi] * 2 == 0 + assert result.dual2[xi, zi] * 2 == math.exp(x_ / z_) * (-1 / z_**2 - x_ / z_**3) + assert result.dual2[yi, xi] * 2 == 0 + assert result.dual2[yi, yi] * 2 == -1 / y_**2 + assert result.dual2[yi, zi] * 2 == 0 + assert result.dual2[zi, xi] * 2 == math.exp(x_ / z_) * (-1 / z_**2 - x_ / z_**3) + assert result.dual2[zi, yi] * 2 == 0 + assert result.dual2[zi, zi] * 2 == math.exp(x_ / z_) * (x_**2 / z_**4 + 2 * x_ / z_**3) + + +def test_dual2_second_derivatives3(): + """ + h, f = dual_log(f), x^3y+y + f_x = 1/f 3x^2y, f_y = 1/f (x^3+1), + f_xx = -1/f^2 (3x^2y)^2 + 1/f 6xy, f_xy = -1/f^2 (3x^2y)(x^3+1), + f_yy = -1/f^2 (x^3+1)^2 +1/f (0) + """ + x_, y_ = 2, 1 + x = Dual2(x_, vars=["x"], dual=[1], dual2=[]) + y = Dual2(y_, vars=["y"], dual=[1], dual2=[]) + + f = y * x**3 + y + f_, fx_, fy_ = f.real, 3 * y_ * x_**2, x_**3 + 1 + fxx_, fxy_, fyy_ = 6 * x_ * y_, 3 * x_**2, 0 + + xi = f.vars.index("x") + yi = f.vars.index("y") + + assert f.dual[xi] == fx_ + assert f.dual[yi] == fy_ + assert f.dual2[xi, xi] * 2 == fxx_ + assert f.dual2[xi, yi] * 2 == fxy_ + assert f.dual2[yi, yi] * 2 == 0 + + h = f.__log__() + assert h.real == math.log(y_ * x_**3 + y_) + assert h.dual[xi] == 1 / f_ * fx_ + assert h.dual[yi] == 1 / f_ * fy_ + assert h.dual2[xi, xi] * 2 == -1 / f_**2 * fx_**2 + 1 / f_ * fxx_ + assert h.dual2[xi, yi] * 2 == -1 / f_**2 * fx_ * fy_ + 1 / f_ * fxy_ + assert h.dual2[yi, xi] * 2 == -1 / f_**2 * fx_ * fy_ + 1 / f_ * fxy_ + assert h.dual2[yi, yi] * 2 == -1 / f_**2 * fy_**2 + 1 / f_ * fyy_ + + +@pytest.mark.parametrize( + "power, expected", + [ + (1, (2, 1, 0)), + (2, (4, 4, 2)), + (3, (8, 12, 12)), + (4, (16, 32, 48)), + (5, (32, 80, 160)), + (6, (64, 192, 480)), + ], +) +def test_dual_power_1d(power, expected): + x = Dual(2, vars=["x"], dual=[1]) + y = Dual2(2, vars=["x"], dual=[1], dual2=[]) + f, g = x**power, y**power + assert f.real == expected[0] + assert f.dual[0] == expected[1] + + assert g.real == expected[0] + assert g.dual[0] == expected[1] + assert g.dual2[0, 0] * 2 == expected[2] + + +def test_dual2_power2_1d(): + x = Dual2(2, vars=["x"], dual=[1], dual2=[]) + assert (x**2) * (x ** (-2)) == 1 + assert (x**5) * (x ** (-5)) == 1 + z = (x**7.35) * (x ** (-7.35)) + assert abs(z - 1.0) < 1e-12 + + +def test_dual2_power_2d(): + x = Dual2(2, vars=["x"], dual=[1], dual2=[]) + y = Dual2(3, vars=["y"], dual=[1], dual2=[]) + f = (x**4 * y**3) ** 2 + assert f.dual2[0, 1] * 2 == 1492992 + assert f.dual2[1, 0] * 2 == 1492992 + + +def test_dual2_inv_specific(): + z = Dual2(2, vars=["x", "y"], dual=[2, 3], dual2=[]) + result = z**-1 + expected = Dual2( + 0.5, + vars=["x", "y"], + dual=[-0.5, -0.75], + dual2=[0.5, 0.75, 0.75, 9 / 8], + ) + assert result == expected + + +def test_dual_truediv(x_1): + expected = Dual(1, [], []) + result = x_1 / x_1 + assert result == expected + + +def test_dual2_exp_1d(): + x = Dual2(2, vars=["x"], dual=[1], dual2=[]) + f = x.__exp__() + assert f.real == math.exp(2) + assert f.dual[0] == math.exp(2) + assert f.dual2[0, 0] * 2 == math.exp(2) + + +def test_dual2_log_1d(): + x = Dual2(2, vars=["x"], dual=[1], dual2=[]) + f = x.__log__() + assert f.real == math.log(2) + assert f.dual[0] == 0.5 + assert f.dual2[0] * 2 == -0.25 + + +def test_dual2_log_exp(): + x = Dual2(2, vars=["x"], dual=[1], dual2=[]) + y = x.__log__() + z = y.__exp__() + assert x == z + + +def test_combined_vars_sorted(y_3): + x = Dual2(2, vars=["a", "v0", "z"], dual=[1, 1, 1], dual2=[]) + result = x * y_3 + assert set(result.vars) == set(["a", "v0", "v2", "z"]) + + +@pytest.mark.parametrize( + "x", + [ + 2, + Dual(2, [], []), + Dual2(2, [], [], []), + ], +) +def test_log(x): + result = dual_log(x) + expected = math.log(2) + assert result == expected + + +def test_dual_log_base(): + result = dual_log(16, 2) + assert result == 4 + + result = dual_log(Dual(16, [], []), 2) + assert result == Dual(4, [], []) + + +@pytest.mark.parametrize( + "x", + [ + 2, + Dual(2, [], []), + Dual2(2, [], [], []), + ], +) +def test_exp(x): + result = dual_exp(x) + expected = math.exp(2) + assert result == expected + +@pytest.mark.parametrize( + "x", + [ + Dual(1.25, ["x"], []), + Dual2(1.25, ["x"], [], []), + ], +) +def test_norm_cdf(x): + result = x.__norm_cdf__() + expected = NormalDist().cdf(1.250) + assert abs(result - expected) < 1e-10 + + +@pytest.mark.parametrize( + "x", + [ + Dual(0.75, ["x"], []), + Dual2(0.75, ["x"], [], []), + ], +) +def test_inv_norm_cdf(x): + result = x.__norm_inv_cdf__() + expected = NormalDist().inv_cdf(0.75) + assert abs(result - expected) < 1e-10 + + +def test_norm_cdf_value(): + result = dual_norm_cdf(1.0) + expected = 0.8413 + assert abs(result - expected) < 1e-4 + + +def test_inv_norm_cdf_value(): + result = dual_inv_norm_cdf(0.50) + expected = 0.0 + assert abs(result - expected) < 1e-4 + + +@pytest.mark.skip(reason="downcast vars is not used within the library, kept only for compat.") +def test_downcast_vars(): + w = Dual(2, ["x", "y", "z"], [0, 1, 1]) + assert w.__downcast_vars__().vars == ("y", "z") + + x = Dual2(2, ["x", "y", "z"], [0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1]) + assert x.__downcast_vars__().vars == ("y", "z") + + y = Dual2(2, ["x", "y", "z"], [0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1]) + assert y.__downcast_vars__().vars == ("z",) + + z = Dual2(2, ["x", "y", "z"], [0, 0, 1], [0, 0, 0, 0, 0, 1, 0, 1, 1]) + assert z.__downcast_vars__().vars == ("y", "z") + + +@pytest.mark.parametrize("base, exponent", [(1, 1), (1, 0), (0, 1), (0, 0)]) +def test_powers_bad_type(base, exponent, x_1, y_1): + base = x_1 if base else y_1 + exponent = x_1 if exponent else y_1 + with pytest.raises(TypeError): + base**exponent + + +# Linalg dual_solve tests + + +def test_pivoting(): + A = np.array( + [[1, 0, 0, 0, 0], [-1, 1, 0, 0, 0], [0, -1, 0, 1, 0], [-1, 0, 0.5, 0, 0], [0, 0, -1, 0, 1]] + ) + result, _ = _pivot_matrix(A, method=1) + expected = np.array( + [ + [1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 0, 0, 1], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + ] + ) + assert np.all(result == expected) + result, _ = _pivot_matrix(A, method=2) + expected = np.array( + [ + [1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 0, 0, 1], + [0, 0, 0, 1, 0], + [0, 0, 1, 0, 0], + ] + ) + assert np.all(result == expected) + + +def test_sparse_plu(): + A = np.array( + [ + [0, 1, 0], + [0, 1, 1], + [2, 3, 0], + ] + ) + P, L, U = _plu_decomp(A) + + diff = np.matmul(P, A) - np.matmul(L, U) + assertions = [abs(diff[i, j]) < 1e-10 for i in range(3) for j in range(3)] + assert all(assertions) + + +@pytest.mark.parametrize("sparse", [False, True]) +def test_plu(A, A_sparse, sparse): + if sparse: + A = A_sparse + n = A.shape[0] + + P, L, U = _plu_decomp(A) + + assertions = [abs(L[i, j]) < 1e-10 for i in range(n) for j in range(i + 1, n)] + assert all(assertions) + + assertions = [abs(U[i, j]) < 1e-10 for j in range(n) for i in range(j + 1, n)] + assert all(assertions) + + diff = np.matmul(P, A) - np.matmul(L, U) + assertions = [abs(diff[i, j]) < 1e-10 for i in range(n) for j in range(n)] + assert all(assertions) + + +def test_solve(A, b): + x = dual_solve(A, b) + x_np = np.linalg.solve(A, b) + diff = x - x_np + assertions = [abs(diff[i, 0]) < 1e-10 for i in range(A.shape[0])] + assert all(assertions) + + +def test_solve_lsqrs(): + A = np.array([[0, 1], [1, 1], [2, 1], [3, 1]]) + b = np.array([[-1, 0.2, 0.9, 2.1]]).T + result = dual_solve(A, b, allow_lsq=True, types=(float, float)) + assert abs(result[0, 0] - 1.0) < 1e-9 + assert abs(result[1, 0] + 0.95) < 1e-9 + + +def test_sparse_solve(A_sparse): + b = np.array( + [0, 0.90929743, 0.14112001, -0.7568025, -0.95892427, -0.2794155, 0.6569866, 0.98935825, 0] + ) + b = b[:, np.newaxis] + x = dual_solve(A_sparse, b) + x_np = np.linalg.solve(A_sparse, b) + diff = x - x_np + assertions = [abs(diff[i, 0]) < 1e-10 for i in range(A_sparse.shape[0])] + assert all(assertions) + + +# Test numpy compat + + +def test_numpy_isclose(y_2): + # np.isclose not supported for non-numeric dtypes + a = np.array([y_2, y_2]) + b = np.array([y_2, y_2]) + with pytest.raises(TypeError): + assert np.isclose(a, b) + + +def test_numpy_equality(y_2): + # instead of isclose use == (which uses math.isclose elementwise) and then np.all + a = np.array([y_2, y_2]) + b = np.array([y_2, y_2]) + result = a == b + assert np.all(result) + + +@pytest.mark.parametrize( + "z", + [ + Dual(2.0, ["y"], []), + Dual2(3.0, ["x"], [1], [2]), + ], +) +@pytest.mark.parametrize( + "arg", + [ + 2.2, + Dual(3, ["x"], []), + Dual2(3, ["x"], [2], [3]), + ], +) +@pytest.mark.parametrize( + "op_str", + [ + "add", + "sub", + "mul", + "truediv", + ], +) +def test_numpy_broadcast_ops_types(z, arg, op_str): + op = "__" + op_str + "__" + if type(z) in [Dual, Dual2] and type(arg) in [Dual, Dual2] and type(arg) is not type(z): + pytest.skip("Cannot operate Dual and Dual2 together.") + result = getattr(np.array([z, z]), op)(arg) + expected = np.array([getattr(z, op)(arg), getattr(z, op)(arg)]) + assert np.all(result == expected) + + result = getattr(arg, op)(np.array([z, z])) + if result is NotImplemented: + opr = "__r" + op_str + "__" + result = getattr(np.array([z, z]), opr)(arg) + expected = np.array([getattr(z, opr)(arg), getattr(z, opr)(arg)]) + else: + expected = np.array([getattr(arg, op)(z), getattr(arg, op)(z)]) + assert np.all(result == expected) + + +@pytest.mark.parametrize( + "z", + [ + Dual(2.0, ["y"], []), + Dual2(3.0, ["x"], [1], [2]), + ], +) +def test_numpy_broadcast_pow_types(z): + result = np.array([z, z]) ** 3 + expected = np.array([z**3, z**3]) + assert np.all(result == expected) + + result = z ** np.array([3, 4]) + expected = np.array([z**3, z**4]) + assert np.all(result == expected) + + +def test_numpy_matmul(y_2, y_1): + a = np.array([y_2, y_1]) + result = np.matmul(a[:, np.newaxis], a[np.newaxis, :]) + expected = np.array([[y_2 * y_2, y_2 * y_1], [y_2 * y_1, y_1 * y_1]]) + assert np.all(result == expected) + + +@pytest.mark.skipif( + version.parse(np.__version__) >= version.parse("1.25.0"), + reason="Object dtypes accepted by NumPy in 1.25.0+", +) +def test_numpy_einsum(y_2, y_1): + # einsum does not work with object dtypes + a = np.array([y_2, y_1]) + with pytest.raises(TypeError): + _ = np.einsum("i,j", a, a, optimize=True) + + +@pytest.mark.skipif( + version.parse(np.__version__) < version.parse("1.25.0"), + reason="Object dtypes not accepted by NumPy in <1.25.0", +) +def test_numpy_einsum_works(y_2, y_1): + a = np.array([y_2, y_1]) + result = np.einsum("i,j", a, a, optimize=True) + expected = np.array([[y_2 * y_2, y_2 * y_1], [y_2 * y_1, y_1 * y_1]]) + assert np.all(result == expected) + + +@pytest.mark.parametrize( + "z", + [ + Dual(2.0, ["y"], []), + Dual2(3.0, ["x"], [1], [2]), + ], +) +@pytest.mark.parametrize( + "dtype", + [ + np.int8, + np.int16, + np.int32, + np.int64, + np.float16, + np.float32, + np.float64, + np.longdouble, + ], +) +def test_numpy_dtypes(z, dtype): + np.array([1, 2], dtype=dtype) + z + z + np.array([1, 2], dtype=dtype) + + z + dtype(2) + dtype(2) + z diff --git a/tests/test_instruments.py b/tests/test_instruments.py index df87ee0e..d26927e8 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3034,7 +3034,7 @@ def test_fx_call_rate_specified_strike(self, fxfo): ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) - expected = 70.262845 + expected = 70.225764 assert abs(result - expected) < 1e-6 def test_fx_call_rate(self, fxfo): @@ -3050,7 +3050,7 @@ def test_fx_call_rate(self, fxfo): ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) - expected = 70.217188 + expected = 70.180131 assert abs(result - expected) < 1e-6 def test_fx_call_rate_expiry_tenor(self, fxfo): @@ -3068,7 +3068,7 @@ def test_fx_call_rate_expiry_tenor(self, fxfo): ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) - expected = 70.217188 + expected = 70.180131 assert abs(result - expected) < 1e-6 def test_fx_call_plot_payoff(self, fxfo): diff --git a/tests/test_periods.py b/tests/test_periods.py index b8b304e1..ef0c8c72 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -1933,6 +1933,97 @@ def fxfo(): class TestFXOption: + # Bloomberg tests replicate https://quant.stackexchange.com/a/77802/29443 + @pytest.mark.parametrize("pay, k, exp_pts, exp_prem, dlty, exp_dl", [ + (dt(2023, 3, 20), 1.101, 69.378, 138756.54, "spot", 0.250124), + (dt(2023, 3, 20), 1.101, 69.378, 138756.54, "forward", 0.251754), + (dt(2023, 6, 20), 1.101, 70.226, 140451.53, "spot", 0.250124), # BBG 0.250126 + (dt(2023, 6, 20), 1.101, 70.226, 140451.53, "forward", 0.251754), # BBG 0.251756 + (dt(2023, 6, 20), 1.10101922, 70.180, 140360.17, "spot", 0.250000), + ]) + def test_premium_bbg_usd_pips(self, fxfo, pay, k, exp_pts, exp_prem, dlty, exp_dl): + fxo = FXCallPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=pay, + strike=k, + notional=20e6, + delta_type=dlty, + ) + result = fxo.rate( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089 + ) + expected = exp_pts + assert abs(result - expected) < 1e-3 + + result = 20e6 * result / 10000 + expected = exp_prem + assert abs(result - expected) < 1e-2 + + result = fxo.delta_percent( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) + expected = exp_dl + assert abs(result - expected) < 1e-6 + + @pytest.mark.parametrize("pay, k, exp_pts, exp_prem, dlty, exp_dl", [ + (dt(2023, 3, 20), 1.101, 0.6536, 130717.44, "spot_pa", 0.243588), + (dt(2023, 3, 20), 1.101, 0.6536, 130717.44, "forward_pa", 0.245175), + (dt(2023, 6, 20), 1.101, 0.6578, 131569.29, "spot_pa", 0.243548), + (dt(2023, 6, 20), 1.101, 0.6578, 131569.29, "forward_pa", 0.245178), + ]) + def test_premium_bbg_eur_pc(self, fxfo, pay, k, exp_pts, exp_prem, dlty, exp_dl): + fxo = FXCallPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=pay, + strike=k, + notional=20e6, + delta_type=dlty, + metric="percent", + ) + result = fxo.rate( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + ) + expected = exp_pts + assert abs(result - expected) < 1e-3 + + result = 20e6 * result / 100 + expected = exp_prem + assert abs(result - expected) < 1e-1 + + result = fxo.delta_percent( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + vol=0.089, + premium=exp_prem + ) + expected = exp_dl + assert abs(result - expected) < 5e-5 + + # def test_wystup_pips_premium(self): + # # A Guide to FX Options Quoting Conventions + # fxo = FXCallPeriod( + # pair="eurusd", + # expiry=dt(2023, 6, 16), + # delivery=dt(2023, 6, 20), + # payment=dt(2023, 6, 20), + # strike=1.101, + # notional=20e6, + # ) + def test_npv(self, fxfo): fxo = FXCallPeriod( pair="eurusd", @@ -1949,7 +2040,7 @@ def test_npv(self, fxfo): vol=0.089, ) result /= fxfo.curve("usd", "usd")[dt(2023, 6, 20)] - expected = 140525.690893 # 140500 USD premium according to Tullets calcs (may be rounded) + expected = 140451.5273 # 140500 USD premium according to Tullets calcs (may be rounded) assert abs(result - expected) < 1e-3 def test_npv_in_past(self, fxfo): @@ -2022,7 +2113,7 @@ def test_premium_points(self, fxfo): fx=fxfo, vol=0.089, ) - expected = 70.262845 # 70.25 premium according to Tullets calcs (may be rounded) + expected = 70.225764 # 70.25 premium according to Tullets calcs (may be rounded) assert abs(result - expected) < 1e-6 def test_implied_vol(self, fxfo): @@ -2040,7 +2131,17 @@ def test_implied_vol(self, fxfo): fx=fxfo, premium=70.25, ) - expected = 0.08899248930016586 # Tullets have trade confo at 8.9% + expected = 0.0890141775 # Tullets have trade confo at 8.9% + assert abs(expected - result) < 1e-9 + + premium_pc = 0.007025 / fxfo.rate("eurusd", fxo.delivery) * 100.0 + result = fxo.implied_vol( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fx=fxfo, + premium=premium_pc, + metric="percent", + ) assert abs(expected - result) < 1e-9 def test_premium_put(self, fxfo): @@ -2058,7 +2159,7 @@ def test_premium_put(self, fxfo): fxfo, vol=0.1015 ) - expected = 83.881228 # Tullets trade confo has 83.75 + expected = 83.836959 # Tullets trade confo has 83.75 assert abs(result - expected) < 1e-6 def test_npv_put(self, fxfo): @@ -2076,7 +2177,7 @@ def test_npv_put(self, fxfo): fxfo, vol=0.1015 ) / fxfo.curve("usd", "usd")[dt(2023, 6, 20)] - expected = 167762.455137 # Tullets trade confo has 167 500 + expected = 167673.917818 # Tullets trade confo has 167 500 assert abs(result - expected) < 1e-6 def test_strike_from_forward_delta(self, fxfo): @@ -2094,6 +2195,7 @@ def test_strike_from_forward_delta(self, fxfo): 0.25, 0.089, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), + fxfo.curve("usd", "usd")[fxo.payment] ) expected = 1.101271021340 assert abs(result - expected) < 1e-9 @@ -2104,6 +2206,7 @@ def test_strike_from_forward_delta(self, fxfo): 0.251754, 0.089, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), + fxfo.curve("usd", "usd")[fxo.payment], ) expected = 1.101 assert abs(result - expected) < 1e-7 From fcea649707fab0047ba379eb876a4aa3d87c902f Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Thu, 4 Apr 2024 10:45:13 +0200 Subject: [PATCH 37/41] premium adjusted delta for FX options --- rateslib/instruments.py | 93 +++++------------- rateslib/periods.py | 192 ++++++++++++++++++++++++++++++++++---- tests/test_instruments.py | 9 +- tests/test_periods.py | 50 +++++++--- 4 files changed, 238 insertions(+), 106 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 1c23c9d7..11871f19 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -7930,7 +7930,7 @@ class FXOption(Sensitivities, metaclass=ABCMeta): expiry: datetime, str The expiry of the option. notional: float - The amount in ccy1 (left side of pair) on which the option is based. + The amount in ccy1 (left side of `pair`) on which the option is based. strike: float, Dual, Dual2, str The strike value of the option. If str should be labelled with a 'd' for delta e.g. "25d". eval_date: datetime, optional @@ -7946,13 +7946,16 @@ class FXOption(Sensitivities, metaclass=ABCMeta): The number of business days after expiry to pay premium. If a *datetime* is given this will set the premium date explicitly. premium: float - The amoungt paid for the option. + The amount paid for the option. premium_ccy: str - The currency in which the premium is paid. + The currency in which the premium is paid. Can *only* be one of the two currencies in `pair`. option_fixing: float The value determined at expiry to set the moneyness of the option. delta_type: str in {"spot", "forward"} When deriving strike from delta use the equation associated with spot or forward delta. + If premium currency is ccy1 (left side of `pair`) then this will produce **premium adjusted** + delta values. If the `premium_ccy` is ccy2 (right side of `pair`) then delta values are + **unadjusted**. curves : Curve, LineCurve, str or list of such, optional For *FXOptions* curves should be expressed as a list with the discount curves entered either as *Curve* or str for discounting cashflows in the appropriate currency @@ -8034,6 +8037,19 @@ def __init__( self.kwargs["payment"] = add_tenor( self.kwargs["expiry"], f"{self.kwargs['payment_lag']}b", "F", calendar, NoInput(0) ) + if self.kwargs["premium_ccy"] is NoInput.blank: + self.kwargs["premium_ccy"] = self.kwargs["pair"][3:] + self.kwargs["metric"] = "pips" + self.kwargs["delta_adjustment"] = "" + else: + if self.kwargs["premium_ccy"] not in [self.kwargs["pair"][:3], self.kwargs["pair"][3:]]: + raise ValueError("`premium_ccy` must be one of option currency pair.") + elif self.kwargs["premium_ccy"] == self.kwargs["pair"][3:]: + self.kwargs["metric"] = "pips" + self.kwargs["delta_adjustment"] = "" + else: + self.kwargs["metric"] = "percent" + self.kwargs["delta_adjustment"] = "_pa" # nothing to inherit or negate. # self.kwargs = _inherit_or_negate(self.kwargs) # inherit or negate the complete arg list @@ -8168,7 +8184,8 @@ def __init__(self, *args, **kwargs): strike=self.kwargs["strike"], notional=self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"], - delta_type=self.kwargs["delta_type"], + delta_type=self.kwargs["delta_type"]+self.kwargs["delta_adjustment"], + metric=self.kwargs["metric"], ), Cashflow( notional=self.kwargs["premium"], @@ -8199,7 +8216,7 @@ def __init__(self, *args, **kwargs): strike=self.kwargs["strike"], notional=self.kwargs["notional"], option_fixing=self.kwargs["option_fixing"], - delta_type=self.kwargs["delta_type"], + delta_type=self.kwargs["delta_type"]+self.kwargs["delta_adjustment"], ), Cashflow( notional=self.kwargs["premium"], @@ -8815,72 +8832,6 @@ def _ytm_quadratic_converger2(f, y0, y1, y2, f0=None, f1=None, f2=None, tol=1e-9 ) # pragma: no cover -# def _brents(f, x0, x1, max_iter=50, tolerance=1e-9): # pragma: no cover -# """ -# Alternative yield converger as an alternative to ytm_converger -# -# Unused currently within the library -# """ -# fx0 = f(x0) -# fx1 = f(x1) -# -# if float(fx0 * fx1) > 0: -# raise ValueError( -# "`brents` must initiate from function values with opposite signs." -# ) -# -# if abs(fx0) < abs(fx1): -# x0, x1 = x1, x0 -# fx0, fx1 = fx1, fx0 -# -# x2, fx2 = x0, fx0 -# -# mflag = True -# steps_taken = 0 -# -# while steps_taken < max_iter and abs(x1 - x0) > tolerance: -# fx0 = f(x0) -# fx1 = f(x1) -# fx2 = f(x2) -# -# if fx0 != fx2 and fx1 != fx2: -# L0 = (x0 * fx1 * fx2) / ((fx0 - fx1) * (fx0 - fx2)) -# L1 = (x1 * fx0 * fx2) / ((fx1 - fx0) * (fx1 - fx2)) -# L2 = (x2 * fx1 * fx0) / ((fx2 - fx0) * (fx2 - fx1)) -# new = L0 + L1 + L2 -# -# else: -# new = x1 - ((fx1 * (x1 - x0)) / (fx1 - fx0)) -# -# if ( -# (float(new) < float((3 * x0 + x1) / 4) or float(new) > float(x1)) -# or (mflag is True and (abs(new - x1)) >= (abs(x1 - x2) / 2)) -# or (mflag is False and (abs(new - x1)) >= (abs(x2 - d) / 2)) -# or (mflag is True and (abs(x1 - x2)) < tolerance) -# or (mflag is False and (abs(x2 - d)) < tolerance) -# ): -# new = (x0 + x1) / 2 -# mflag = True -# -# else: -# mflag = False -# -# fnew = f(new) -# d, x2 = x2, x1 -# -# if float(fx0 * fnew) < 0: -# x1 = new -# else: -# x0 = new -# -# if abs(fx0) < abs(fx1): -# x0, x1 = x1, x0 -# -# steps_taken += 1 -# -# return x1, steps_taken - - def _quadratic_equation(a: float, b: float, c: float): """ solver the equation ax^2 + bx + c = 0, via the quadratic formula. diff --git a/rateslib/periods.py b/rateslib/periods.py index 0cbb1a95..3810bcec 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -23,7 +23,7 @@ from typing import Optional, Union from statistics import NormalDist import warnings -from math import comb, log, exp +from math import comb, log, exp, pi import numpy as np @@ -2387,6 +2387,8 @@ class FXOptionPeriod(metaclass=ABCMeta): delta_type: str in {"forward", "spot"} When deriving strike from a delta percentage the method used to associate the sensitivity to either a spot rate or a forward rate. + metric: str in {"pips", "percent"}, optional + The pricing metric for the rate of the options. """ # https://www.researchgate.net/publication/275905055_A_Guide_to_FX_Options_Quoting_Conventions/ @@ -2461,14 +2463,34 @@ def _black76(F, K, t_e, v1, v2, vol, phi): # _ = df1 * S_imm * Nd1 - K * df2 * Nd2 return _ * v2 + def _get_interval_for_premium_adjusted_delta(self, unadj_k, half_vol_sq_t, vol_sqrt_t, f): + """Returns the interval for use in Brent variety solver""" + # TODO: this formula contains some unproven approximations (like dividing values by 2.0) + k_max = unadj_k # a premium adjusted strike is always lower than an unadjusted one. + if self.phi > 0: + # call option requires more difficult k_min. k_min is set as the point which + # attains the maximum premium adjusted delta. + def root(k): + d_minus = (dual_log(f / k) - half_vol_sq_t) / vol_sqrt_t + _ = vol_sqrt_t * dual_norm_cdf(d_minus) + _ -= dual_exp(d_minus ** 2 / -2.0) / (2 * pi) ** 0.5 + return _ + + root_solver = _brents(root, f / 2.0, f) + k_min = root_solver[0] + else: + k_min = unadj_k / 2.0 + return (k_min, k_max) + def _strike_from_delta( self, f: DualTypes, delta: float, vol: DualTypes, - t: DualTypes, - v1: DualTypes = NoInput(0), - vspot: DualTypes = NoInput(0), + t_e: DualTypes, + w_deli: Union[DualTypes, NoInput] = NoInput(0), + w_spot: Union[DualTypes, NoInput] = NoInput(0), + v_deli: Union[DualTypes, NoInput] = NoInput(0) ): """ Determine a strike given a delta percentage value. @@ -2483,23 +2505,58 @@ def _strike_from_delta( The volatility (assumed constant) over the period to expiry t: float, Dual, Dual2 The time to expiry. - v1: float, Dual, Dual2 + w_deli: float, Dual, Dual2 The domestic discount factor (LHS currency) in an appropriate collateral until delivery. - vspot: float, Dual, Dual2 + w_spot: float, Dual, Dual2 The domestic discount factor (LHS currency) in appropriate collateral until standard transaction settlement, e.g. spot. + v_deli: float, Dual, Dual2 + The foreign discount factor (RHS currency) in an appropriate collateral until delivery. Returns ------- float, Dual, Dual2 """ - if self.delta_type == "forward": + half_vol_sq_t = 0.5 * vol ** 2 * t_e + vol_sqrt_t = vol * t_e ** 0.5 + + if "forward" in self.delta_type: _ = dual_inv_norm_cdf(self.phi * delta) - _ = f * dual_exp(-self.phi * _ * vol * t**0.5 + 0.5 * vol**2 * t) - elif self.delta_type == "spot": - v1 = float(v1/vspot) - _ = dual_inv_norm_cdf(self.phi*delta/v1) - _ = f * dual_exp(-self.phi * _ * vol * t ** 0.5 + 0.5 * vol ** 2 * t) + _ = f * dual_exp(-self.phi * _ * vol_sqrt_t + half_vol_sq_t) + + if self.delta_type == "forward_pa": + # make premium adjustment + k_min, k_max = self._get_interval_for_premium_adjusted_delta( + _, half_vol_sq_t, vol_sqrt_t, f + ) + + def root(k): + b76 = self._black76(f, k, t_e, None, v_deli, vol, self.phi) + dplus = (dual_log(f / k) + half_vol_sq_t) / vol_sqrt_t + return delta + b76 / (v_deli * f) - self.phi * dual_norm_cdf(self.phi * dplus) + + root_solver = _brents(root, x0=k_min, x1=k_max) + _ = root_solver[0] + + elif "spot" in self.delta_type: + w1 = w_spot / w_deli + _ = dual_inv_norm_cdf(self.phi * delta * w1) + _ = f * dual_exp(-self.phi * _ * vol_sqrt_t + half_vol_sq_t) + + if self.delta_type == "spot_pa": + # make premium adjustment + k_min, k_max = self._get_interval_for_premium_adjusted_delta( + _, half_vol_sq_t, vol_sqrt_t, f + ) + + def root(k): + b76 = self._black76(f, k, t_e, None, v_deli, vol, self.phi) + dplus = (dual_log(f / k) + half_vol_sq_t) / vol_sqrt_t + return delta + b76 / (v_deli * f * w1) - self.phi * dual_norm_cdf(self.phi * dplus) / w1 + + root_solver = _brents(root, x0=k_min, x1=k_max) + _ = root_solver[0] + return _ def _delta_percent( @@ -2550,14 +2607,12 @@ def _delta_percent( elif delta_type == "spot": w_d = disc_curve[self.delivery] w_spot = disc_curve[spot] - w = w_d / w_spot - return _ * w + return _ * w_d / w_spot elif delta_type == "spot_pa": w_d = disc_curve[self.delivery] w_spot = disc_curve[spot] - w = w_d / w_spot - w1 = disc_curve[self.payment] / disc_curve[spot] - return _ * w - w1 * premium / self.notional + w_p = disc_curve[self.payment] + return _ * w_d / w_spot - w_p * premium / (w_spot * self.notional) else: # == "forward" return _ @@ -2731,8 +2786,45 @@ def delta_percent( base: Union[str, NoInput] = NoInput(0), local: bool = False, vol: Union[float, NoInput] = NoInput(0), - premium: Union[DualTypes, NoInput] = NoInput(0) # expressed in the payment currency + premium: Union[DualTypes, NoInput] = NoInput(0) # expressed in the payment currency ): + """ + Return the percentage delta of the option. + + Parameters + ---------- + disc_curve: Curve + The discount *Curve* for the LHS currency. (Not used). + disc_curve_ccy2: Curve + The discount *Curve* for the RHS currency. + fx: float, FXRates, FXForwards, optional + The object to project the currency pair FX rate at delivery. + base: str, optional + Not used by `delta_percent`. + local: bool, + Not used by `delta_percent`. + premium: float, optional + The premium value of the option paid at the appropriate payment date. + If not given calculates and assumes a mid-market premium. + + Returns + ------- + float + + Notes + ----- + Uses the ``delta_type`` parameter associated with the *FXOption* to make calculations. + + If ``srtike`` is not set on the *FXOption* this method will **raise**. + """ + if "_pa" in self.delta_type and premium is NoInput.blank: + premium = self.npv( + disc_curve, + disc_curve_ccy2, + fx, + base=self.pair[:3], + vol=vol, + ) / disc_curve[self.payment] return self._delta_percent( fx=fx, k=self.strike, @@ -2825,3 +2917,67 @@ def _maybe_local(value, local, currency, fx, base): else: fx, _ = _get_fx_and_base(currency, fx, base) return value * fx + + +def _brents(f, x0, x1, max_iter=50, tolerance=1e-9): + """ + Alternative root solver. Used for solving premium adjutsed option strikes from delta values. + """ + fx0 = f(x0) + fx1 = f(x1) + + if float(fx0 * fx1) > 0: + raise ValueError( + "`brents` must initiate from function values with opposite signs." + ) + + if abs(fx0) < abs(fx1): + x0, x1 = x1, x0 + fx0, fx1 = fx1, fx0 + + x2, fx2 = x0, fx0 + + mflag = True + steps_taken = 0 + + while steps_taken < max_iter and abs(x1 - x0) > tolerance: + fx0 = f(x0) + fx1 = f(x1) + fx2 = f(x2) + + if fx0 != fx2 and fx1 != fx2: + L0 = (x0 * fx1 * fx2) / ((fx0 - fx1) * (fx0 - fx2)) + L1 = (x1 * fx0 * fx2) / ((fx1 - fx0) * (fx1 - fx2)) + L2 = (x2 * fx1 * fx0) / ((fx2 - fx0) * (fx2 - fx1)) + new = L0 + L1 + L2 + + else: + new = x1 - ((fx1 * (x1 - x0)) / (fx1 - fx0)) + + if ( + (float(new) < float((3 * x0 + x1) / 4) or float(new) > float(x1)) + or (mflag is True and (abs(new - x1)) >= (abs(x1 - x2) / 2)) + or (mflag is False and (abs(new - x1)) >= (abs(x2 - d) / 2)) + or (mflag is True and (abs(x1 - x2)) < tolerance) + or (mflag is False and (abs(x2 - d)) < tolerance) + ): + new = (x0 + x1) / 2 + mflag = True + + else: + mflag = False + + fnew = f(new) + d, x2 = x2, x1 + + if float(fx0 * fnew) < 0: + x1 = new + else: + x0 = new + + if abs(fx0) < abs(fx1): + x0, x1 = x1, x0 + + steps_taken += 1 + + return x1, steps_taken \ No newline at end of file diff --git a/tests/test_instruments.py b/tests/test_instruments.py index d26927e8..0f1e3509 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3037,7 +3037,11 @@ def test_fx_call_rate_specified_strike(self, fxfo): expected = 70.225764 assert abs(result - expected) < 1e-6 - def test_fx_call_rate(self, fxfo): + @pytest.mark.parametrize("ccy, exp_rate", [ + ("usd", 70.180131), + ("eur", 1.00), + ]) + def test_fx_call_rate(self, fxfo, ccy, exp_rate): fxo = FXCall( pair="eurusd", expiry=dt(2023, 6, 16), @@ -3047,10 +3051,11 @@ def test_fx_call_rate(self, fxfo): calendar="tgt", strike="25d", delta_type="spot", + premium_ccy=ccy, ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] result = fxo.rate(curves, fx=fxfo, vol=0.089) - expected = 70.180131 + expected = exp_rate assert abs(result - expected) < 1e-6 def test_fx_call_rate_expiry_tenor(self, fxfo): diff --git a/tests/test_periods.py b/tests/test_periods.py index ef0c8c72..678ed4cc 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -2180,7 +2180,18 @@ def test_npv_put(self, fxfo): expected = 167673.917818 # Tullets trade confo has 167 500 assert abs(result - expected) < 1e-6 - def test_strike_from_forward_delta(self, fxfo): + @pytest.mark.parametrize("dlty, delta, exp_k", [ + ("forward", 0.25, 1.101271021340), + ("forward_pa", 0.25, 1.10023348001), + ("forward", 0.251754, 1.100999951), + ("forward_pa", 0.8929, 0.9748614298), # close to peak of premium adjusted delta graph. + ("spot", 0.25, 1.10101920113408), + ("spot_pa", 0.25, 1.099976469786), + ("spot", 0.251754, 1.10074736155), + ("spot_pa", 0.8870, 0.97543175409), # close to peak of premium adjusted delta graph. + ]) + def test_strike_from_forward_delta(self, fxfo, dlty, delta, exp_k): + # https://quant.stackexchange.com/a/77802/29443 fxo = FXCallPeriod( pair="eurusd", expiry=dt(2023, 6, 16), @@ -2188,28 +2199,37 @@ def test_strike_from_forward_delta(self, fxfo): payment=dt(2023, 6, 20), strike=1.101, notional=20e6, - delta_type="forward", + delta_type=dlty, ) result = fxo._strike_from_delta( fxfo.rate("eurusd", dt(2023, 6, 20)), - 0.25, + delta, 0.089, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), - fxfo.curve("usd", "usd")[fxo.payment] + fxfo.curve("eur", "usd")[fxo.delivery], + fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + fxfo.curve("usd", "usd")[fxo.delivery] ) - expected = 1.101271021340 - assert abs(result - expected) < 1e-9 + expected = exp_k + assert abs(result - expected) < 1e-8 - # https://quant.stackexchange.com/a/77802/29443 - result = fxo._strike_from_delta( - fxfo.rate("eurusd", dt(2023, 6, 20)), - 0.251754, - 0.089, - fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), - fxfo.curve("usd", "usd")[fxo.payment], + ## Round trip test + fxo = FXCallPeriod( + pair="eurusd", + expiry=dt(2023, 6, 16), + delivery=dt(2023, 6, 20), + payment=dt(2023, 6, 20), + strike=float(result), + notional=20e6, + delta_type=dlty, ) - expected = 1.101 - assert abs(result - expected) < 1e-7 + result2 = fxo.delta_percent( + fxfo.curve("eur", "usd"), + fxfo.curve("usd", "usd"), + fxfo, + vol=0.089, + ) + assert abs(result2 - delta) < 1e-8 def test_strike_from_forward_delta_put(self, fxfo): fxo = FXPutPeriod( From 0fa5e5f1459bd729e7e38baa88615a24fbe12a77 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Thu, 4 Apr 2024 23:00:11 +0200 Subject: [PATCH 38/41] docs --- docs/source/_static/fx_opt_bbg_eurusd.png | Bin 0 -> 531466 bytes docs/source/e_volatility.rst | 221 +++++++++++++++++++--- rateslib/instruments.py | 31 ++- tests/test_instruments.py | 28 +++ 4 files changed, 251 insertions(+), 29 deletions(-) create mode 100644 docs/source/_static/fx_opt_bbg_eurusd.png diff --git a/docs/source/_static/fx_opt_bbg_eurusd.png b/docs/source/_static/fx_opt_bbg_eurusd.png new file mode 100644 index 0000000000000000000000000000000000000000..440d85aaadbfd20dc702236af87126915b210c3e GIT binary patch literal 531466 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�UQ1WtST~Ux|$#St0@`N74F6GPl*A z5Bb~p%a!K&E~`P$)-I0lRRuchczN@#W>Hv5s=6UcsJ<1n%F5kaLuRxS2@-J1bkhTE zJU)F!=pW&=wz*EnMM93VVy~j_C~0JhU)N=%;U;kv2a=i8LS8-(1RfGX2#E>cP zwz)I*jH9&s=MIjSl0_qVh%0s#g1vuVbsljW@y5%wY<2j`x@78Txp9*33p4E5j}U_x zIa7NIps)J8Uh=1N!Pc#-TfsdZUbtdqzWpp>)2UUQF_8%WWk%&E$_g|&dD(PXU`fe| z#qmIj=&-FyhJRfyT+oC17=LTrGKn{Wc5?nmKCOk&@8=yZ+Syg%+fd{P{ggDz@8h`F zUvS6hQKlRCc-!uS1PF;y?GD%XX9p|5`S#FQDWq?Nnxmo@`?)A@65 zh|HDyyUO(+gQ+d9G?&%YN;kN%P?G;RTKp*ykCE@eoo)fSP52Nm(EaNytYpx+sE#xK{eu@WD4)=;N4rh=-Ly|)y~slD z&@fTfyixN0l&F|H7gN8P&39TJhD;YC?>!%6smyca-xn!H$wJE>s~((PEyXHuK&I7I zwm5Rc-Kcou;f6ir0v&bIt#K{*>U&1+kWMU z${PuB^)N$Ak0S53P202*@-Ntgl2_S3KXN$DeS0O~CWk6zv>l?CKmgKv!0l%ok!EKa zMpTys!Fg}z=Nh_Vd5BI!z(S9jz&0>y1JMy2FuTKgxUR!3+BSk|* zR0@flY4~=lWO{c!HSiry4_n5+1!X^U6b4hsBJK7I8>RZq%EX7=3r9c%WH&$NP5~ZM zP^k~QnlhOewQ?Ua!|{#p@%4Nt*Y*s$jt?0~cTeE%!Fde83-!`xmo1$@H`Ky4HX-r) zzKSL@$&5%<`+9yMgsk?59Sl;%20#+DJ_hnUKU}$<8Dv^#GV%yGw z|6H3ulZOUqXw}Lqo=m7}Nu>Cb>w&;J_DR5Lq(TDtqH8MxCYboN$t&lnFxvt88_71Z zfq|tNBmA*q2;#ok>-k>>zg5ji)N^^f5QKl4st%IH8je5a`|8iIMN51Y>W{fDAq2ud zjj;bt*59>RZc~=M$QyR2MEHguCuhSe#aSdmq(5KJ*MU~KK20(VkEk$4F+oU;u_-gt zd&{@thrF&PzU4O_CwF~OU)|Aq7yhbB;&jlz4#~|&V}C4)(BPu?$I?(8*hNP>w_1G;LIK z1xT5Z9Wski|9Wj;0P=IKjYqxC5HS3t`{4;D9;Fjn__tmH2TsV-4)hglB3S0+d)j`p z?T}~3B)b#oka36#KvooTF z7$aHWb!-`H$X_Yd$JE05ih-QKM5_^?(l^DN)?~Qo6W%i0Q*R)yE?V0r_ktXclep$+ z&~nINeq-U?m{t+hH`q9}pYlh+;BXUL1Cg_ulE8BNoapZ7S@Vj%c=ouj$Bn)U^=wn$ zFo)Qm`*+_${$4iEjL3QR|55gl0%m$j(Ml)ITjfYqObcAK znk@1oZmDn;mF<@|paNx{C80x(VSezFnkIN5nV@||wK=%5-`l_HT56_l#s*ogyD9Ge zOg(W`19K})DN3%#GqaoHOSwdeQfQu*Km>_tAMqk2e>!>s0K45_+nxW`V|_`LolPS7 zwp{dBt6M$BnTP!`*D{T2#ku6H zC4wHPUy{%7J7au`=0`8Sq;@eEj5>Nb$}EcitD@2FzO}Lu+!EnMa|?(BThA z2n>88TG0NLCGWw|oL%MV6L$mUt6wRx^^&5pG*>G70B1VgZo&gu^it5)Sqn{QOUy8MC}7A(vmXCmJ?dsis7BL1Mv94fGXm$lJ`1q>);MnGR=hwQ^@g#P6M4iG zf#kI@poJgv4}D8rPMq)HeQ%eA3IOaOJSIQX zOSTnTf$9T8LNSvzY~>Khb8m3L?yBN_zUq7 zoT6r#p5dy*3SXW4OcXM5pjJ8Fhn=jR9>{$tI)fSPjUTlV25vHAkAF=lzi@fA|7Op8 zIMpp64E$~5K1F{l-r6@p$pZSj@=Rq-0oTgR9j}JJNCNLG>zH;c$FrYWW{MJqgIF4S z$@vtYW1N|iw^R$2RIYvxlq0{HeMO%So8Xu(AFrH<;zW#=dU=#Zmr@m$sA}|($-;U2 z^QFA)mv>0GvF(FKqb9c_ie8%aV|EIa$RfjeHy72&QT@?V4`&mzvfYb_KVX&3-T{lZq>gu2?6%AXGRDPckKH})Iq$o3UhmiIdE%CQSCZ9_2h}$@Q2(Gqyi07>Zf2_? zBivq~NzpJBCAra?)6#D-p|wQn?mfN_6YY+^z?Cfjeiw8z*n$ZC)3h)mv?!^4>dNDr zDK_Rl-WS|4`FB$&Mh5VTymrSUH0Zr=dZyrQKm6RfPvx^HsJehqrgw9*s2rrE_FKHt z6(Q#s5Xhsfp0sXgZozp)>#}Vk|0c|$IUQn$JD>M9!DNq^r5B-k4bO$)_o0;rpRt_?n(VD zPC}7h0BTOltI?gL5z|&;wEal8lzimDh!d)5Uic-oj8zZ(*{!FxIqdqf+M~rxLrX)P zeX~m2@o%cc;ne~2Wlb7-l^!v&0o$EAFY##i&>b2kzW4gSobBZIPwihYNZ9~!h1k|*Xc))(w_jKUR;2t|>&Q4RMvn!?k zm}#sK`mgPkZ_V2JaLTbC@p_E#q0FI+PP#2YxX%WU5#gw_;M6~dko2GCFBsz-{b@0E z)+wo&;C?kL2)b&(RdL&Xe-6GjJ5ze6$n(2w`To~bb7rU$kq&f&-V)`GXMpFY@aODhU?0d#}HU)^VABgBt1 z%(h@)_2cPNpdzD(k^ap06Wik}5>qH5r2WxeWts9C`=uG%d(@{PW;-fj3V;o1^ zpo;><)C{&9AHi(MkGAIwCo>AF+@{yelWtatpX=d1$FJ(vKv*2eGmsX);84C#InVYo z5*)nT?EDYha1JkNT5eYbZ>!GuYer`$W5!8|vHemGx+r6>MbJTP*bV;>zgA!y z>w|ya#5(5byvyZRj>__y(ON$`WUSIC`rKk?w)2CLWGUC9R-AY7jOF2CILy{@ezBkR z$qDH4jPikBzdK(Lqto7Iw@7|xhqWWcyY#L+Df~`(oV(#TH0XLA1w2RTvC_I^IL+ce zX#{2uSBv{h7Zj8!8v!(nC1S0~Px@F=b{^C+fBAFu;q)r`R85ISVGG)=|guiAMo~Dt=S%giH>1l1H=#i`)eNCz4=@Dsa zwlpc^0HG4Yi)}Yk7IM+9!IhiQPI|O#76-TA)f5YkgDpuqKmvCa(tm=vLNuCwB(Nh| zUyct18e{!C@_gd7l2;Qb!&KxPT7CrIKey*<1w=fH!dMbL8)U(Qq4rcbTi~f;Co23& zlxBvt$oP$VP#P5C6C>!Hf5Y@gES<<&L-nS? z()j6;^TU_ZGVLz?UUD_+c5(<=ThhcU@VU$RTiy8`e^c>|Jr+r?umi^L^=e}?xS8jb z48!4_%Rw{O3Qo5T2Vb_n(5JIc7#{SxJIvvr_Z+=7++wg>XS6vXQT{GMZ zF;1`a=M(Pf;W3GwGbmGeSPuJF4J#8X3?@3&S0PN^5csid4V%BnBRKYZa^5~fr)yyU zJtLWsI}{FTG_Pg~ye3O}^`ia-r-Ex!bk1bDF=F|mwPRkQo(S=Pm(zQJkIkbMfpeqO zbR;b+Y{utUP~!_jhtpIH<{#gN z^HC$_HM{~Db`%>S(HQsO>Wcl&B0>~%iM8-9C#ox$4fQX`_YM=;Y1$CY|1s(Qrsl!> zrS|{4*@)*V5cqG_ng-|@b?VeQE5!!=g+<8w4%Y>u9@LShrPVMwUl1J*)OKH$0kfEO zpaLfzdI#V<1DS3qe85k$-laQa?~3TG=`srv zVSCFRbJE0gn1vd>u~`Sl7iK_{P*pZ8@dLCXp^4j;o9$%QkqRvD23D^B8k8E&=!a+ zaqVvN#?=;upr16odV>h7|CC4HgR<_T6UbX^q$ELOaNY*}Y zofrE~yCz^l$`JWvr!(SHqHCJbTWX8_=~Ih=n6yTh0vJvWZcyG>G%!$+XV0gJUTln3 z+iK+!4tOt3k$R7dZpx(AKOXAduV6ntF3!Hwvko2$|0#DUuH}(-v|dgF7o%EE2Grv| zR6?d|BL|0Qq^sQq)92RSuSSWRPRYH0fOJjUarbIZ`l*5uR9FtFWAW9)PQaU3d@&Cn zB$&rAGAqT_evuWt+ZfAtzLjya1d3mM91%(Sp;o*kwc{xpCG!sO6qx$PaKlE3kl*S! zja6$g{+g-rVDU#jOy6P&s2P_s$2b}yT~-CN>m+8&CTmr|qI*f_yFHNw6_SgBMXfGm zda8NB$f0mKlG5c}It{`6DN}1d`G* zTpyi)$Icnf$~gNuWiK3do=bCWNQG*EB!3>i535|2XmKF}JYCvlsG@tBI;oh?;fRyh zCTHW$$g)>kd(X&uJMed)Yy3>C7;0jDv6a`8h60;(LyLG$AxRkfn;nSLG0*54LW;fJ z=+-Ie27kYsHvUOxj}{wqH2dWj)SmQr?3MKmznJ-R_!jXRsZaiOOi!{n;VSKl~j2Mlbdo zSARi_qt&#=vw^jY&^C!fa=ES1Sk#X4oH|Czpa1ErKXJZAIy!Jrs zN2uDo1`ahN%3g&#AE_8_>vp4Ud@#=9^_^lf@aiQB@duAYGIo?HMA)ZL+_#ZJRWTL$;tPF*w8F!t`b|+{_xny0<3F*QnC5WLo{(jy zf+U;$H!f>|&$`+BXn1zgIE6fH7PWo!XoRUw?Oby_%GRHWP}iYP5gvSA&4^~j6AEj& zOj-X=LUQ^ZZNr{&-s}ihFQBNR*UbGxiy)acfH@kMTtY5|)k+WPpP5Gm(Mx3AUCr%S&-)#<@ z4fOqbcSkaekJmyAF7($(*F&bHT?L`(X%&3^O%R0uWCE3!FBR4Ygw>FR&nyBl7mo(SgP+o-Wwy!F>uY5K_;$N~P!|c19*5033YG zSFL5KiMh0#jCb!!lL@nE)Jh?F`{T^q1>(8u5Ht!VSrf}0Ke7X_^KRzS3CzW3fi`+4 z#ZRDl3HOL+(4+_uR4(37Zxcg&J<2x<)ccD`j zN%t%U)U)138$5N&8LbwdXq}fkqzWX%5tWAO{hfZ&?Hcpi+c+x&v7@3=40(*YIW|k| zvlheG${myhF^JDOFRUUp?xV;Ld(71GNjF2jo6wxfX2+6cCWzoi`#A^UZKR3!d1?TU zoCpmU49UpzW_ka*&qM}<*He|CZ8kFFeq(2=MO6Fc*=6F;c>?1x#XX;qsF(JC!KzxM zP2som2=%upp*W&8*66eNPdS-vtZ_ZA&1L}+OH{?poeCK>5JV2E83b%UN&B#)ns!sf z1nqjoSQA2t(dUYA+n~xrxrKQz#B6u;MG7KcJMbEz_U>Ssj(9@OCR%Pd52}fIX9HW2 zjWyL^($c`CZn4)TqG-d9ZW1A^gzYEM9lm1k2WA}xoi9blZLTDr*g9XEu>9~K%~sl< z_|Wl{%6j7c!|E=IR~|fLsqmf9dY`9+0KKA#@7Aed?ygbJLn?}WAT2}eo}LEe^b2%V zfc6Y|S!eoj7mR6knTKWIxrrmMc$K1ScK;OBCi5EEb#y#{bxI<3%ziz(5ysA>iHK0epbkf^0XIE1}aQz~>{-+@A^2$f|Nyx)}rp}oI zfH&wvNIgd*wkHom2%PtP;&C7O4m^?b5L^bDMc!t1J}AxkaIS@z;){Q?OcbC1w|s`bb4^r9zZ+$lVv_kzcB=j9X!Mnb|lcVyZeDR?TKATaeoIVML(Vj->v~l6T&rU z!ub+5HoiEP=y@nxNpJ5a)s#RsVIk4jquB$MUw5dd{M9_RtzO3H-aq}_D!_Abyy%*l z`I|2}1K#q$=`UU?ojU2S7DZ5F{#V%xTGh%lAl(N?OO7EGxH?L>?OkFcr!e)T*=c40 z+h%wJWI4~B81m|(iAFpBXuOc%*4q1+%D`2ZWIUXvGgP&{EW=ytqu_WU*WoeIt?qVw zz7MDSq7F~gGGfF{iAsWc@hkeV8^B6H;|lA`vi+VBHzl4j8ztxV?Tj@)VqUAPb1hA@ z07e~>(10V#d6rQxBUm3^xWCTfb6~%F9-3_~CH{dsdE&`ena1v<>2br?bMp0XrjquY zh`!lVd`rb^Gab&oZ23|oURifMLc^_y4PEleDW##J_PT%B{274l#I=2ISGqD>ve`Ku zY(UM+LrfyDO>kx6-Cn2r_KgzXOmADDGj1j`K$c(L#(OgzI)AcY=?KY$d|S^r=NSiW zM7fX@!4fvE%XMmT|4x*EkFYkX!VG|y9n?H6ZCu|@=;6Tv>TZelXk0zvY%!Rz_CIbQ zwVK+qxN3_zM~3y?`u#dQVw-jz64^AN$81@AzW5H)%Bz8eqq{n`pii9sIGuqat6a_K zKu&>&-g{8oR{n9$C5L^_3zi!p< z{c-LYlscj@_8li9SB>XaRWifUvl3Cfdqu>5waY}-mqBo?2PH|&b6H&H)x>afg1=tU za1mKD{t*n<#d8~1?ne)qf4zA$Y4I;Py))M9v}I(le>01z=bn-u!ea|^_0;fF5rEDx z9AdJ-&$=?rwesaD1z1xKc@JN*QUt;)dTN^{$`eV%nV^U0B2NgmEN<->U3&`i4^H70 z=0Y4yFkm(r+s-vKFJMb39RP7Pnp0VB{wUdu&imPYH|ocA;_sm67HNU?@RmZhGoxkR zpuiPuTz*f+a1gXSm?1y#UnrUjiTMJ1~*;*!e9(vpiM&sUDeFC)h5ie+pwbQI~fZ!bwVs1*~{>lP0!IMbv zKI_0cjFDh&|2qYycn^>Qfdwgumq;bB2E{X!ecM zg1d&&Ls`3!X0#}AhC4+|pD673ILx#wpSMs{E5z>H=%9I<*@w*H$~PFzNY+)&TsBrM z%E0nGv*9Rx9(CV#5ocbIVWZ$ z>|PMCf*6kmg_v}dYq>>Hd@rs)2>ta8oLl6FIec~vP31U+oa@Mq&o~KbN^f8^l~boO z0NG2ooz!%@BF5e>~uj{^OVrx8pp~={K`QxPsW;^IdgCRTgtCUwF)1R_aup4%= zTKRU<(rzJ4l^H7ABeQ#O-CO`yz05XAs(5RV(h-Is##?BC=i#hCXrfPUMF!Z|%Xre~ zsm?2%>`Aj$DfkNN^i=k`zVly{3w0Ex**lf56ZB z4$u|&p$P3Qc_-{nlI2r+6hWgfx;uHalu2_1ngB;YR^HD8fkQ-isgBs-kiDl1TV`D7 zvdP#-a(TCkI_Vs+mq!8*w%bMVI+eV*OU*`-HEQzwun6-5=u&x%lxF47mQ{`nY7eX0 zrUZ8N*_-?D7k__I`KH-dr<|byrx$2hO~+pUad$)hz-p@z4DCs;%d4;b5BNq5i497A zlZ^H{BCpG-o=hjmHGb1~x|wRS-h9|?R1rH(FYzl=;?Uv?fF&w@bflK1po6Y`ltyuB zrST|sHg{TShFN3pud~_pUeTB$zk4b$?DaNHVM=sGK$&zWKaJ9RbyT9_mr$B#%1~Ik zZ3obx2y>6vw|DLFaVeOpjQg7zDmN9cvUd$EQ zTR?stq5pTk;T4)=>K`4*gL8xs!#!+ETL@xRQ3cmjuW^rjK%LYsWfrgUw>MA`N6t-Z zX7M-aYKCheA98hhxqhyR3ZL-C(eodd>i*=jTGNPxa=Vet0HP=_JC9 z)TbH}Z?E%Q@H9w9^N{iSev$wKziz~bFVT4iM{jw%im$&p4KG*R(oJ_u`bnBPbxv$N z2!_e>mh({!y9IRAj~LDl2rWd8kci?RI5FUqW8%zv3fNZv6~bN!9L?t)rvL?51gzmx zoD_``n#`|~&1n*Jd<428a{V(_&AR`D>97GH!kvnf%ho>FiABaBg{;@)IpyBTTc=BYlhTA%qQ`~s}FMi{Smt`TIz4g7TX|tn}Dr)T!kR49GgEuRXK>54qqcuX?Ct!6*tXQ2Y zr})$m#Yx3+Ao-EhlCGZ(uW%!&X(vs6>*-aJnRj$)HmCHui2ss(1b&At%}5^X@Z<@Y zLa|BwMz%*rYu-7dy;hjV1sTCaoil*aQa1x8;6hetfYMm?ck31nqg=mk(G!~!24<#C+J%TN zk-sgZZJ1lAj3qw`_j(Mp08*cx0nLtgy4l1bbx?b9$MlTKd%HkN2AG+5kv5jL#=mxJ zu+}tj-}?|{BT12K2QVg*6#UHEY(6wP0D*bJm(2eDIIFF{P94p$bFyIKj2pDUQ)*c( zEA#fta&u&`^KYXt#4ao=4;G5d3OgF;yY2#WJLgx>AN^fx{>NXKkbD6bnZZHaRxkF( zu3-ZQydu2Jf_ZRae2K?no|AqlD=JH17WyA3;JMadt#Q^(&Z(_z~HV-zx$}QNA z-DCR+!7Y(@GY%-4fwDg#+F>9-Neg@qY~HfqZ@F+gbF7Tuo7xt}k8Y(QnoF(Y;u^M%z4$#;AyV#V&zOEY`sND>XJO!9 zo~@pAC611A74vYr%C?2#t$&33N%la`tow3 zyrszrnbytkH>-1{6`F`r15^1NG(!n6tMCV5HReim$ekZ}JwC0!Q(TnXx!<8OX%2H9 zu-zwVrhWhW2J)KZ#&^`Hm0V_^!ZAu0(6F^81>F8jPM24QtMj}TV|6GdIJ!+c93Nfr zNh3jqmLF|_Ii~5NOet&d)!-$^5fBzJ9Nohm>t_y5|E@#(=-0;*5ARw z-4SRGwMIwfZ1@CQoq+n@fQ2F#?64blo%~bt>WKUfrp(jaboQr^$X-1S-cj3A z%b=|{G8dP`#R;j_l-`{XvS}ZhcWf3?O>#y%0pqvA!Tn(~8l8`6`wZ|j&A543;!q6_ z&O?}I32Ph=CyB*dJH4KSzpUMpz)xKMqHiZ(E)T3q1i_=a1kh(AsWag5o7*=vvuCGb zn;|z~s~oe>YQ(RyhJe#k7`t%?dUp@d(xg!Ch=sijK(Pxn3Uc%Yz0aA0vTDwzzSC?^ z0Sl=4d}vS)21eDQ1`9-7Y#s`PKgs#T5a;U$3l?GGdo)4vFsLX-de4TET(vK$;sct| z2)}zCk+(ZcO270yv{zG*9LdUlvdnRxl0{p)*MoP?P?%tQ5KUEiRl1vK|5&v-0q{BW zxZb0-%U9>SvVf`C5FELVyA)$sHhxweoYYJ0Vx~y7GscAVsGFZx?YeXb^SLn}0$2Xt zC9A)TZSI#Bgr+(MCgCBS=K))LQ+tS3+#lX}PM`!>G-n8v739TRGpgTJ9uk-gc3~Vr zk6$*2xh`ED4V(OSYke`SX;}`3%G@`e^I!xs!Yf6A7Hkh}AUW#DOKv+<+bvYcV&Zd- z57NH*5(C5)b$6M`?`0KuN*co<58AVY(?1za6o?FG9kug>at9V4VZL`#Z^ZAsPjy|5 zW{boUD0UxANo{Ze3$|4WN(5MwRsL%puUlM_aZm9;ZT*Y zVG{z)j-3$8jnIZhVku3cI=ZaGTk~tT z4tQoFVmBC0p&B^10_bNv;>aW@-ts?yX_*w>Jd9MKEAjb-|3A}jsO!p-Oxr94J->_d z+Q3Kf5APE%yt4e{3=*hqsoN5N#RzZZ^%8TI*K zn<{TlJpp|*F_F_pq*IIeDfwN$&leEnvI;QQqJk@2*8IWv1b^c}kt$eM&HsAelL2#i za|Z5zPi*cn^y+}VaH?b`tR^ijSh5K|mVPG8B)3?(CAgTZX5*&ux|Jx5nH}@|>C}Js zngAH{@lL84uYV&aj;va00dgsw9^7H=-hJlK#JW9WW6A|jq3#M-hK*9auR6k~^G>5v zRo-t#*eP)9u99*nTY zWO9HA8bY{-WHCGuPyt9ytk_=}tIEP(vu|D1BmWyTXOnOO&NmpST9!xpNc~l}&e4pu z%f}glsz$t;^ma0y$Rtl%vOMK4ZHpNZ?#~ks?NpivS~!50+$@f=DFF+PyZdbcpxn6U zn$@QM;fox*C1t7K|00Nkz6riz+N(}!MTwAT#r&Re+Pv>0h8bW72`w!HIB>pNS9ZWAUyo(hC!y$Z;Fg;>rk4*dxeHgpL=<{F(u5#?Sl!9cvaqY@6A%rn zbQ9Ql#i5ykZNo4|njTTjjcaAROH5u!6Qy!O(<@kB`)ta|Qeti!hCUwz$$a#mjG)zz z`G_&OXOMduYmFpOX`jczC!a3}`^u-FHQ^QoA}w9;tGHKZQ=$9rr~3T#2^aXX`V-F+ zRg=xRm%DJk$9Rz~(9Q{6E>wxxcI^?t6F@L)@N^W5db2V%;AU>@n`GNGAkyIisMSqb7EJ0!dz%4vD;45a??0^_is z_WZxO%z&#!@P5^Tuk$}7+?j{uvje^;ddv{XtH7sfuXBNt5S2@GqX89GD3jAtz{3P<)r} zOQW+`ir)^MI@P#m*`0A}1Ks}^#+)n4x!;A6hC8|QuhU;KoD!{dQ zLHyUmdwd&Y7+a;Dx5MP$(szi`Jc_jM?uQ2JH8AKV=_eIfi0}w+KxEYkVjq&_$uP|@ z&(k)+dX5PdfYu-_O^v(hzl!5iMc9_07>WJTH{Xafdu^1(m|@*e0w&tOe2>&6NoQIgJUL7FQrv)u+$ykk{xMIH&{R@{S_3R*vG zv7B=wy~gVopxVd9Q!ESGV4`#s-2oM*bK5w2C{G>Q9y|Bx+SyD!9IL2F*JZ-TM=w8& zgq1gKK=(h}6mOk5E7}VNn-7=PQ#1Cff^9D0}r^VBR=)Bg92DYQ|>#&pQnd5rQ z-5KMM? zB!$Z>gTfRswx$`Ne7O)%zACjvhKF?_WNo$J#+4!CzQ-Kw9<_a`UksRFhFx6qX1OQeCPv0@hW)L>%EhKyzlq}DAInO!cYMxIb3ZJ zqf+J>6?>WY7c@0b;r$SytkcC2grduk+hStYP*H2T;ciCVbN1n7mN|_KGBC~Ppn@5^onwt%&-^HdTAunXEUKCP?>s+gf8@F;WSdhGYdHh>q+_S%qX@9Q5 zW^}A3+o$GJx-V{pPb0paM_QwM+Hk)2Zt6&xZB6pNQF3!{O_@0*>5fA9cw{SG#_27t zH%8@_rj=P!Yuc^HGF^#dkM#=bjWOy_f>Fn)od4{3sT=w}gB3;q+QCU%`z3=iYXiKQ z=f+|@Mz#*os2F09nX}4D*W1jz{uY6WH)qo`HUA}lnv_elVh2O?w`=t2aqc~{MMB4 zN0*XKK^>B|hS7CH^WjG6WUt|~&tY9x0o&|8RzN)%i-h5koICJc;~|+F&InbRFJ!Au zepp@H+kxg=IBrqEEf~k@iU@4K>JwG0oCn%qin}KO&+bl(Yd&zOfPDM0%oTf?by29a z>osl;SWm#Z95|r@^TX#yo!5sS7z0_ZHF^$xIQ)7~R#p8tuF05rgXCp(;n_NRk!|!( z3ixSB3w5GSa_^2#_X@H7tNbLuUuR5zQ(d0jYlxgb+i}f`x2GYsk&ke~1;>{XlBjuG zQ@≶ya%^J>+4ijP#W^q_|W#-*I<&SL}k0aT=T|!eAnth6~7LyLAZ7w=BR?XQVw# zVSh;QGB6*miJprx@Dxp^EMMpTlikV`TNtRaU>)21)C5o=vm&;WfLlRNFsplc*W*Ti z@m1#5Sv$|(*+i?ySB1}XU|%eJ(AjbO2YAX4;t4Wx$C&|@&w>jk>^9*c;>v^gtny2B z`1_BvV3OBh?=g4smM|+sES5b6k~F0Y?fS>ov^}ccPTw zPn^Ot??Ui9495-oQvvUX))>RUBkchYe$3~Xubo`BU()V$D#Mb0pp$>BRmu!`0-u1x zZE;6$rU`H?;r5rWgw}0$po%|~@(7e^JYSeC?&`(*QEo@TH;muMePK7h5fvcoM07Ln zWh@yr^$&IY({J}Pg!EIsFT>8p4;P#KvEXB|TI3fY1Nj}20hl=+ggbo60T@c3sKEdk zz?67VqUc@1o5p>><;B+z!}vk8+qYX!u%K@M^#SY_E)!rp&A=n!4f_-4M|iTMCcLnI z!>VvkQ1d#+MXlb(pCOie`sEVCbke$-j!eI=P?KjPE(sjvqR4f9pOAf~Tc2aeZbTCC zCrl<7dK8-dieTAJO`eC1{6gGtPV`RY)s}AHpbIJz$PDM)fuV2eqKK-;X2iR004jywv*HI5+;yk@Dq~foEXQkhrDXqJMX0D1u8ymFmzR3F5C$>;$a{+Q%M+OhYkik-GB#Nx{4WU zklm4gh2hI~ryte&Trru@eX?yN!uzbzKsxCbsmM0y{W}dZ@@sB}{_jRxa5K^y8i7wv zEjri!foT2!kr;TsTgYzjk_w(9pT-b4gabqZ5BYeDKig1n_t=V4pU8?9ekGT^Mlj2Z zi&FW}n@@9zhnbwHb_rPid>`>p);Dm8-YG5(azpR=8z;G0-FS|xd)(bn)|!NhWWhYP z)bHNv;$L#V)ji}F%!!tJb#pN9Al!=q$HSFr8?@`YbZa%cokU5@2<4Q1$U#ld|JIz}+iN1B5(Zul-kn_^?^sP}jvmRL$kQUSVt z6pEKf0uZin0zvHsI8rX&m*DV;Xf5{FLEKRW6x^O*L~Rw4F_)RHcZs*j2R^)|*LU;Z zrAIM(#T4L@aH7}NZFgy;ZzsI_|5v&6_HqQa`juBZVePWqdNhyZlC`nhkw4A(>wy@w zZ7rl7^*$u~rTv${4}Gc>xIbXT{C+WNb&2Vjp1jJOnVR%-SpW0SnNo|@q2Ko9A?mk1 z_4{>Cb4sX4$@(G^V_{!ze^j$W>8nN9;!tgw`Q0sIUExWfhE!-dif^9{oQHZYZiZQk z_|gNtqt)f}Wi%unHtq0C_8y*ZAEk>Qg4=}%YeJfPBCtIiMm>>ON8iC}Q@l2Gwz9bo z=^WInx%#VT{@$7=jRG6u;bzjebr|B#Z+f}-RtA%E#+f8%Ky?*-b$FFgGg6%j%mAtI z-sb$g1Aa%rQyx=O-L*b}KReJ~6E|}aLRF*!gyJX{SkH2y65mrMc%0^HH7S8Wyq38)bCq8T72a1iA0;y&1qDD0Aiu$V|^pOT&;GF{gwF`89a zH#qJNOBB0Le3|5GOkB~yl_;;=*Z#bLk8kM@eO>jF`>D^NZ=f64B5tQ2U{s{JEc)F! z{1)zemM7kJaCvulu(_RZCIkL@5lGKndn2|E_;hkBAV@gJX`BO!PuN<&u1g$lxFF4< zei9vp>Yq@&r(g0#d|ZRsB6)U?iynu`1RF?mArTe7pM5R1;hQFB8|G_Sa#(K-BYk(v z#Ss;M%{;;Q);oFeObHA*=LK|I`ZP*RrQn4oN)BBD9JUWP;9qa0ZX9v$(r(m-d{2=? zHYUoF;3s99pu>Rs&bCoiaUK>t^j_TI`j_e)r=Z-UUI=C?LpG?yv8!yS82>~16b0}eZfwCC_A}WC?UTqy&SIv!Qm}L$s zpLn>aF*tu2g1XD96z#f2MKSdp1DG6L+fL&$w$osE3iKp5DwI zdXX6?<7(@xWsT_XNQes>xB%gU)(I*C{4qE52BaGezM?cB=MU`Nxts^8nh1F9&ahRH zRz4()5q1@ua#s5^c4o}=-YpUv`FJSHof7C%*kl`l0u<>fQv31Kq6V*R?lS?X42EE} z`!2rF78(6xBp$AvSEzuqFw5>Q`tAVdku!2k0XV*W(&0q>o9x6>qka6Mbu{X)EIQqV zk-GHK;U`VXc$yc@Rg35Ei?Etm5{L0$wYhTUq?n()>FIbQ=d#6ap4!X@jJ z^v>mL`C2ium1)V5ZQFkT=Is|zzLqf&*6zIXO`%F)(pW9|dl;1qJ*3HfT6rky30)(K zHzOS&2R&{$g@vf!{5aY%aY~~@+hj8eJ5^1OmF+D`gBO@7CCF+e&ER$1c8VMnFb^Hd zjV))R(n(Ky3XXD6k-?|HjLE{oo?n*}s@MA9jRqIgR0>-9zK>oD!dCA5{q?pAp9`a* zM+t?0p?%k?KWWwQW1s@64as0{#DJQD^4px5m@9@!feOOXzTozF8n$urSPvyi(24#4 zr2!WxLyE>^e3Q?(orNvP`7;pDhzmcr3i2yo$-%=k#203t0<4h%Ua4Q?Po+w+*BQZo zRRL5L1iWXT2vSz4}?4o)i1*XDR2YKD^wep z6$>=!f;aG&jB#K=Ivnh0@K3@Far;&jKyUd4$Pdg!L6r$6rU9sb$|O#Vk~-mJMTxqRMj)DD5UvS_CKtRn-o_n{4#15--!IRIy{N>WsqyLHkz3b)BPW8Q? zc7xE(iz8w}qtIMYADZ!5;&4~&P^LJ1Ed7qEy#LFMr!UK>e0*j-|41JVi0mq&m@V?CRPrm)nP9gVv9qK3>!=VD9n5?o)WJfV?flPrLX%;>u;_FQv}UKKzmZ69?7K4>6lEu_XAc!>mG z&Wj*%{DK$4ZV&iOXmH{Haw;DgVWrJAv(7kC^&9BxqsIW@>_^=kpbQLHUjTupG()*@ z!RtU^$2#PS*ZWThkmrV`UI%jWVovk;uOzp z1ON@2%d$Wzos+G{fFe#%_ch?No_o#+4<`+~FoEs8#GW9Twj57Do>RiEHWZ(3d!;@@ z5A1s0t~`Wfk}jVNoaq)dm&xaPAHbsm2pT<1k-^DDVVsx|vCk27cJy+2lf&mq&InHR zEmD+H@kAKUOSU=k<{se1$=TCu(D{)X0uWsX?*f$9LKvr?;9)U$O^fTjH>D^qAcV}; z&=x9u*?Sk8EGT1$zD(4j1y#!WEA$z^CjZqmd}DR*K}?mZ)4x#r6?NB$f;dcqY$W+w z#D^w9TfXj_lX+VP|Bj8iv`iO*4E%VjZr)DsJ?3iaPHfJHy{lA8Ok1Q>#pnL2xK0Vo zuDl>D9L;ktL}Q%?a`r~FGVCgGkZ;zGx2r`iTXj1a4}k9XP^qWXok*ae;GWHo?~!Nx z+;+>K7Zd_6WuMCta`MmzgkF2jYEABwE$^?sDL;4hGnkJCfXyKeDA+?FQtlYqiK5Xz zmcsWeO9U|=79N9_PZcu&X}LpB*;cO0ZNF65@bJv+M;^>!&d8+bSu6}gUh?Q=*T^$- zY+1ghO=MdkppVkJ`oKE%I6Y}}ESTk`W~SmfUC=CFWm&T~CgyQ-q@;xknEDdr^TpZ? zFNlBju?w>ve@U}+W0bkH+R6IfX>11q|(uoGW#~sxjd0sH$&qsb$ zIt>E?TjT@7M-TW7vD-qBqm{d9&&(b+@OIyvUhc+6U!?CpN-QGuuAfM?3tH|n=UP2e z5KK-hy8zD}CbRau{1`GUQXB6mwb$HuJI zXXZxXD$}e*?FBzIkMhCS@-W|9Z|P!_b%@{Ih|upWCiuQQm?I+eI$0jbrk&{u=BiR+ zmVwiZIV~X9Ay~OH0C6%aZ1-swy53Am<;cb5WvhtCs)icewW~(8Ja} zkv%veF*MLJD0dikVj);im&GB0DTA*CU*zFAa52H><508}_WAk|m@7!qfB6WndkF{0 z2j6~_o% z59k9g&X%vFAHEu{Zc%che^~S$P|-B)F9Nrr1lOuGK$oI4- zS+t((P{uC(57GUBiWCEkFI|)U^Rl_jx$KaFLy35ZLb=E%=(Yb9W}nKY+x&aQ-AB?` zZ1OWZ?Vft!yJ<5{CBc9Dtz5?5kA|%sjdiNEc~9{#lk(r{3l`&}`OVs`)u+;bB&Q^6 zS^t^avrO%S+_<8=aq{xD74I$^qOP9~#J!C7k@)Y6h<(skI&bs1CbHK7MH#DK7+k(^6g<4@#l!FcZ8(R>mv zy#9oWhvs&yk4ol0k7afm(lD`t{bAJi8;rG>;*TnP#ae9+E2f+)N~^QCxO7z+t!QTN zs6EAL6Tw6T>Wf8}ve&Ur;sw(T(=vw&9aotSg9BB?gQbdMk$1j@3T(*>adQKTo;bA zfXAZnk+J*?>@aC{w$q*LS#_i@%~LlBS4AwwPEQE*;3^M3}T?y;t=!6{Af!njw(Dr@Kw zt1f)kOo^d%AV1?zxq&cu;5Pl~^FBXm?wp^h`fF%7XQwl`#F{OGr*_lZ3vQr+9qCo@ z+`z#OF8zGXlnLmd12Rn=q(0o?UX1rW^%yLzng}4xebbvG)36se0jT6nTrkyZU(smw zhxv2Yz0?D~QYK9CX~usA=a!-z^aGL|)#pt;+$6*dDxA)$l1s30T;|lddUWIY(vO)J zceEaPP&vJK>^ZVm>uc|4`&2uxXJ1A{ru3)jD_OVR54WU&NN0NM+=(HIkl(aet}v#j zYs|{|y0b|@#3oc!9Rm;ddP+D5H*Ay=i-t>kH`ZL`9J{UY&?YS%lN~HK`-N4F&=V8p z3*n7XzVDpytq(xdjz|g)#z;29=&*&3D}H< z3{B{HTi6$kP{5w+Lp_So(07%rIa@T9@^nca=aiBKjiElXO5AY$KdN6oZfmMo zwjhs-+m`OKCb7ZG$7Sa7o>0j9N@9+(it+kOA5_I4ewR~|K-EA_Z; zI-~(>IyvtXKjOqwo_Dq#h%&F-DDpoeD9nFFDnlM+xHu)pLHWa<6NhKGC+kh~*fyxc z&$sM>%YWJNveqAlBbyPQeBsA!lqojC_b($RG{9`A8PE1{*R<|~Cs-asH-_hy!ZWy8 zc!;8f;zhOW_1#@?6>c7C_}?2j3R!`4x}$87WYsA0@O|j%?fkXd)GM#qGK@#NFa3HdC0ULl zDR0-Q=!Sux)BYCw&TBlG9Rgd9ZO2TkuuaA3tl6jQV<2_^;+; z@!U@{j03#x0HedhTA5B$83#MXQ-aD_diAl3dh`=I=+ItMh3^c!#`+gR*VvC%-X}Oh z+-Zm`%6%){@-&zg`xD+Cv;C!>V(v5e(7+sJeiWkK&)j#@qO*wVUC(N*_)31Kio_=+ zKcXacEqK>4%FTZYel~0(`V;ptzWL5K$A(^QZJi9`-UYBu*(@)ijv?C!u*cr(g-G&r zSiHoC7v=GuHJVymqM2rM=aUwA+XpcaPuihU%t6f6xzS$=HVxN50jv4u^^0NzDJv4XC7B-l`+%fR`Z*@=$Plywy$IyOQ^1FPE zg%9k3D~JOx5GFv+#T$>l(D++L?mdY-sg z7p8#OjlNrwrL%lrE0_GVB6YRNuT|%=Vs*wkkbwa=2?uJAlrdxK{PpPi!>}#xd{crV zYZ$hL2wB>LDzk`QvF(!~S3b0vc zkZ}eO85us7uJ9Q!vyC_e*_rn!(EYW?-`IrH9}Fpd6nsmZ_*bG218MgBG*d7rUC_;& zU?%3Jw*Lv|@J)3_4_h<<$62>JgRLtiN!Fek)#G|IEW+bemdYh zKU~n5P;uAdqfIrMVC`aFrm^EYLR@|Xw)_iRFW+d7q2X3nVo$%!^l~#}4Ee_-wdjfO70KN#!zH6p ztgwY$UksY2Gv}|cIr}z4S}eF=Rjlb+i%2~;JNl@JdWnZOj(GIm4*Ya7nR?Re=^O@R z$5Umv2U|mI)ylGSlt})BRM9$XREC@}MZDDCipJD+>S0NdB7`1dMmT(K@B6RY#!Jw{K&0+`OjZNb))@`}&LdD2SWxw(@BTt=~$(MQ&vJ5YkuR24@e{eIoB2%czoAm-V?Z+rIYp z9{NGZP3)4+rvB!b ze1?=l;6e6V_-{WplaP7ADXE>Pw`7G4o1Xh7>J_@kTBsV3hJj{fW9Gi@gP%tT-K#%w z9@m&XW%t)A=3*G#dUpP14qSAt<;(+h_`Rc(oQNrV)m0`rAAg9tU;{U)^t) zBU{!F1g%#biE^HwHL)b_{v8<@z57A8-N)6{DB=T%?UK}Ajx<{Jqv6zQ8cKF?(1x$e5+0%c=if$EfD(8 zYt89`wZCqI-jSiaPe#jpotg`(^`pFTUrr`F;rjmkerin2wp;4pHJ;|SOmT3Vm?+}k z5vxUM{o$v!nQ7B97D9)6Xu~%vr+veik|zSKVSj3-&rugKF}hpo&yg!h&HFu#i&{Ex zv#)T9TjTJn&_ovS#nFXW^~4=QVD<{tzzjFz@&M~8>N@WeY6r*OgyS39U)j6;9`Fxc z?)u1pCA95pJ_QNVd36- z4iDA96SQYR)7&1FMRTXfp3IGQJz;n!-BTtle;;VFbn)@Bn%N9kEh+3S^UXd`<$}g2 z^8a@M+#rIiu8q9P)cnY@#E)OLtL>B>^}N!-ZZ;Jj2QNc;_7?M+hd%=vp$ zvpH>0zCGssViZl1jsX&4B zI|Q_*IfZWhn%ug?kXgMvb=l&JqfwV+2%Q z8i0o{7#F*>@BHMBsGneXz3*Yj5VC7d?5IBMvl_~RZ}vmk3_?Zs`;Z|E8^{~q#!Hlb zpIk&XpcP`Sc@*c+i>vNdI_B1MCyUi59o(-qs-)T~^XfLG7>?h)c5m(;#P3H7lR0~L zu$6;Mh@OLCqh{!fg+2I_jOQI!kHW$hME2*sN-H&vuEP^e{oPsyu~4YcpJE$wZhb81 z%f3I>iJkC#XXkFD{5xoMF@2ayYn}hf1fwW6^zb(fz-ff%V+ir`n@;$blfI z2GVmu)MRucFQn-aVS;NuEg*WhLx-V0iLa5zL0)~xZ9Qk5j0T}MAST!_*p>8_*p#qT(Qj~*PxD>_PhNN#g~bOgnu(j(}dOiUrPA4cD{yJK?DG~?sx*?C-? z#WGWuf9x@f$@BUgr1Yn2O!$hRvU%wMb8o%X3?|SM@T;?fdR!3a6A-^JvRk2T&H)}= znOk0_{sp>wkktS_#k`MvSi5G&2bF&?RcESrHRyK%gi0rh;5*ivj=#{_s(rVTiJ5OZ zWErnwo>jc^*hRtb1($G9Y7o|GnDw!^%6@0@TK~;WMV8m-xL6tS^M{M99p^A^(aF)^fOK>Xt2BwpF^-i2r+uRD zQjJ=khFvsNorC&NCwZjb%R}&ES5TIX)tPTGME=e!I|lYZdT}-|wIXn?=%&`IM^xDF zpMq+NXnl@x#0tb0{+eNqmxFGvZ2VWq*D}6*a|f@i{5!TLn>??&Z*_e&V-5MnX-b6+ z03v-v>!ALx?`A=Wt4x6q&VuF0$jBxPl!Bfmk0|KBmPE`n1=h<5BtCa3924<#4HIYHpUVl3#fKV&iv> zMxE^WaRMmnT7E2-)Ysmt`D25HhwR};lTOy8sKYMA@?KDWL*Di*gMXKYdeb+1-l&`J zdfHzk(S;OWwmlDL6PGtKWM$D~D0kF?(ax3Ns?2IVE3sQqy@=&ArE5)vV#UYNjSo6v zJ>r@l3Etsm|M%^;&gFaqe$?{hQWi+GUYAPYk>ADaAVbiyPvS{$VB4?DSVYF$EzloB zf`>5Rx%ozTjQply)5(Zfqvu3UeFk{GV{+4Er$z>~a)c>FfG&L3W?9((9EVVfRZ7sW=e^195_e%iw85I#$a1E^;NZ3Ek#2PWIF)X6_1__23-In%j%EOBfYFto(zCq;{qRPolXG1t!rlQd)-Zn%H0EEA>px!@8LsbhH&^OGa$*ib6}M6RU0hg* z^T(C8EAFi4e1QdqAy)5lz&6nrKC>dB?^eVVNlsYU{<_)X9kHFRobAWR;yJg59kI}% zA26&Sn006t4X(w(9U5Az4p?%2{<3z#Qu_S6*ARqR5!g1rN*jR(gz-(*cT_Mod@`U3 zo^lSieqBQPaMDz+2*jO;eFN5yEU3^rl@SlQWabt_wbkGiC&+oR3q^3u7nolbaCK18 zDqG92F;sJgxA*|aIY4t$8_-dnE1wbouP_J#PO|gbG1e%5*i#enG~8C`-{J zWH$hD%GIPEJVm|6*6*#2WC*6Nah~htWQ`5;sWKc~rH_Ojo*@sYoxZ5eAgh1AB{kLJ zGT+Zo1eCAZ?@kQzDj{D7&t4~85V4t#OfA{WLXL*?)&ux-QZ8cbJw&u|U%CxF z8%eN{@|giHnyC5V2fJKwsH+IMdt#{_U&j7S)TQXuBQ+0vc-f~8_A7#HVXE^`o#Z?& z*oFPuzg&NFqbyGw{Wo8CiQQ~sZG8#2DSe?ja@!wwRvtrs8Gfzdq2V&NhtS5x_j6Xp3m3?)?pgV=|A;$feCx!2Z7_~RKtvyHyWuEZ@ zoVvNNnQMAiHF!Ii@3aj3OLX8w=u(UPzQ-f&Cchzu=&aTw*o4?+yyE6j`d++)JRPIq zX|^);nUysSS(6)LZC?#77~|0<(#X}S4b%JBotR_p^H3?wk99^A2B*>@V(*c-Q6Y|Y zgbjb-&$N9qfB=b_>Mh_bCm+qV{uOLAAW+vH)pCQp9uHDX2dQ<=;o+oIk1%K zR86@JPOtdoda2MwkZ954{4McD0#d^g@JQpp6Cfz5>Ud<=sUbY54uGS;w*~aU#|Ih8 zz7n~4lNLGWv1VzxpqyMdC0<6PACPd=`uM42zaKZcfid>8`J5XFC(`G3vamzzi{-*@L3 z6xMsZ{4HGc=O0|=aLG|7(Htxl%yaIL+7%n-^dYOYYg3|{i@-}jtkv0Iz-A4vDN8{PnU6%_K8!#tX;8@JoUUFC^KP|Uoz!gGw%kg z2*ShUmxaDwp_W~+Y6YC3=5EjyC2Oo8T+YXz!JHlY%}g*{Q(|dq0w_t{+3?6C=O(V3 zB-8(D;?T`ZNl*Rz6cMb}-gI36=h7b0FnY$P_9f-+a?C0mh;3$+` z@y#fdFci;ZSD;dWagW5~u;QqF>B326ndeBsH}JY!SidrJiUuqaUN)**cIuF@+oh`s zPGFv!?@NtjKXd71&2_k*#mM(5>^1Tfg1wG?25vZPlv&z_hXU>9Hr484ykMp!F;`VV z3_##oWT|p1ln`A1Do%m${z0Vl%{fLL= z3mn%+r?q&Dzb6l4$9?CNKb2k!s_PSs6S5GF+tFH50=0%k1 z`jt>6|FHm$*tu5mG;l>FYLAnYUuZ4Hzerz0(I92^Daxbk#CXE(T+@D|aRj`pkhvC@ zi6KY`Qe+u@1$wD=MyD&3O@zrS+izqjRmE1n&O@tS81ZhpCokPSIM=yQiN?Y-Pc zr~6jsY^RDx$t>=knO`}65)C>00~^2By~;An@x$*MJz=r*thH;-z`jX;^c|clKC+w& zD<<~Ci8ZmMarpj+&iGNnpDoM~VjH+ZJ~)^X7yh9Q>Mf`^XRbJipb{1Ew6?C?vYMk ztnk)yhG$s;X?@V2_?vtB+_K~F-Z*C-qiz2OJs0PjChLD8wv0q!Jjw5yMvf8i(x_zL zKGO(>A6V0P#!=<;3tp+zGzED*F^BgZUy3uCV1sacSu8}WTA2ssO;WV!Ze z`M%w5W&IoK5M!nWnMMO2^3d|=bWC^@d1mUfCY;VSee=;N~xqdqX)%6Pdbh8NC303%Et{qqYv%I!Trvt z^Fmg^Ayn{O@O<~>-fvkYO}o*1vtI+$y9YPB>)qNW(dP(nK*8rKyy~$Nw%89)NDR$} z2PM+fks&NQbJZht;lA>1Prhx4?V=JU^}ym=Rr9#{J(0-@P|lPBkFX9q#v%0gYyqJ? z`u;lqM5T$xwVxq6j8Ulc4JTr z$OY|JR0_Av_WSL+TNhikHy$Pnes&bvFgFO`wL5>4?I?seiK5ib7R_TUuyD_5bSXQh%_U`;7K9|AfJIb zMwSHs;uI#mz)stTq$KCpD+LLJkuFS#J$+`SaU?HU@J`awpNnSk?a18$=Y6;YM|fEf zVEq}iYj~sjC@|GBHug6q!osdt7v`xI+eP#w>T;GVhEv%2-U;{`qpocB8m^sx+r?u~ z9>en#JA{cv(|g7R&445)0edNf^hH|09-prKuV^w)AFS)&=iKm@Pl4&8*=D+TAH6PK2h@8xf{eI97=jnvRHrcy@-d#g4CBN;;fyEm;LR&km6soN{< zOVM7~HhqBx$KSl+|$=3nJ)=*-7sO|+kb_NRp^ zX>QHl!LR(c40L_sW!bz*Up79niAI=!P3<2wVY{})|KK$q?D6^pD@h>1&)7Cr(yGeW zl?~q`tqR?pl*s!+q6944dkeLG$W^7B7q>C1mzf6B5-S1N8V;&ZJ}LbO{z`m=XBdn4 zsJ1Tlk68tyuht@zuC+>qvFw3Pds@u&Om>6DXoPOIh+lkllJZZsdGJL{t6H(1RSd~rI#ETT) zIj|6icyo*_p&U2pvv6m$01RF}Drgq*%sNspmU_M|gBKZuG9DVEQR#JZELQWstcy_I zclkHwUm5&JqIsThi?5~HD4R7@FGpW>r;!ma)x`F4pm-z}`5pAAws6LMoDN)>7{zmP z@kSg80`-&WL+}Bs9&iN5>c+qL;9Z#dtno0MCfF#eEjKpwA7lQ{M%aa#d`Q3ZLw=5G zThrfU-!l0QF3*R@-RdVvgn#1<{dgJVG_JPf2wi58vc1-(1ONRhe^L3;?CHm!o>e}L zxXg*6E3_klmrs}zcX_bnPkB02vpw(GJs&*UVclQMo7%m}3B=!#N`_u5M2BnnepTX`0xTuao|5xLAO z5aMC)aEyqexEw6zbwv2V-)Xr-8$M+qjre;@}wylKyK|3$xeFdAOuv+b41kMZGb+PE`{oSR(? zid>kUddM$h-clmtosD|5)oovq>gFL%2{EQeg+U`8=F=xQHya~CfwZ&8z{$0g zwrP-=cPHEITC9<_GyGXv4KBl!>Za}v<-0`}w# zVdE^(WG&I_9t|mNhL6+t8+Jta*tppx-&;!lR&@|(c>jctH(N5xPVL`*Pj|x~=)5-Qafto=HdtyCn_cyP^GE z_N1ya<8JV-$fgk}gNX;|A&2WppW3EL z1qe0A8#D}IH#jFHc%+qfANTJ{fFnacqJHJE_{|CQc};-6sXUtW*^4-OR>&~TYocTQ z*3tC~CYtmynFryf0{A5G%=-LKB7WrJMAo=-g-??|o$a4b%uwvoT|3?9q4$g#dCAw` zXeC$~->*(HcJj4o*IXy1yjv+5`tt=5)tJ}>C+z)Wqw*k@R|8u^j~WiHE&RNhoLs@$ zz^7&}LiSWp__OR+w-2GLBIzU00s^X=K3uojfIcAii5V^>IDWtr)jR74vdVVtKh#RZ zUw2uH?qkQONQ}?mK|)`lm&GaIDHr(m7@CaTiiBTv2^^zb8u&;B_uw>95379kpUomU zz5oxU7kusq!9hkKW5v}Rmze@uYY(=*<2JtK5xDO?1jmPjq#sEeH0VG zVabMB#6tqjU_Z<*>xMwx?Ibio53@qK@-J*GP3S2*O4WYAWSu zFMCfTuJX{+>O>6*={x4^0{%5g%O{bVuYCS@(u%I3lt14MI_%&?L#L{pq@0)Cm9&n_ z?`FJtSAZiNvLQj|hC*lj&Wgc@;Sj54Tz>x32Z;|Br9!QAUIyW^Zs41V(eO1Wd{XJl zsXl$>oz>?-%D>0LSTFhzyQ$POO=oyTB))%zeernK zaWty4+96oZw0LuRGWsgkY(b#jBUAWz$kxObr}4I5tdTa-o)V^~vFw5_e%};NJg%A` z_$`9LNS5i4?89)EpF6tkZdULoG7mAop zum+8U0Bg-p2(;+r>|C!B!b@H*ckOm6w{jeoh^bd~M_FIx<^{o*G1N{OX#~s$;d;MC zVRKuP-cQ-n61v{jmxQ%Y5=M>nilUw(_`!5zYHmuk^9~r+c3ZXh{p}CLnK$^tzZgC8 z62Q}Z*nP}1dneQ@APMyau(k~4BiJEiy4**xf`}3OH8a}i$!c5Jq3pl)(@CVSk_lws zh1;&ay~oAx0lYr=0_7{ir`3^h0Lq|%(o$!`^!O_VnBLwteCfB5{wPP&i>v&#*D94j z`U&!KnNp^k_ru#tX<)@l@jLObHLg;V;8(yZS7<2?;o@a9u#!L9GOvMKb>dq4cTuJc zVui|%lW^nT6fex_olk1k<8GxNEsr`v9Gwh_>1kL?Q_v@viJKx+WIuSb3?@+ixX}noh*h3W&4Eyc zOaml+CGJr*dny2#uf@pr;dYpXg|6Uhr%=4Favb;#a|bJClbWaCBN)=_EV&KkI9sUc z4J((9(NBXq zRwyO=4kModZ;5CMPP&&8pn3>Z@G;t=RXOA2AZ5fO63C%Fcg4G8&Mj_XLJz+_5KT-q>1TFz z=XwyTo=Nq#h3Q{XmrJ2ZrR}+vYau_WFL!!Lh)uqIW1IfaJ`<+3Cd-mDMa@8QAC2I^ z)epw3yH!_;6_%A>+@=bVtzz-VLb|fr$<*CkZ%uBR5MxXN7r>QrXNIkGJf!6lvGD*H z_!-W8Pg|%ebAB7$v_&(!4einbo-5xA|0{W4zXE=)j5H5~we@A*$$z)9zZ7vdEaM4J zlA0#B*);q;nZ`CuoGo!s(-~j(ezBN~e_eG?v5*kb(QgdNj3ltSK>zSZ%1wPe@%i@- zU!jZmY7sEJ)hz(1u_}FRJ?T}MTb{fzdS5UJ8GOws4f?ESS02>s|EMyZv@#;MZ!hQe zg5{g#av1m!?*NP{6F|Cq^J`L#M4wH#7GlW~dI@s_yxuzdUE%MTrpga^BwX{EQ`m+p zOGV{u9ci|XgVpYf6(QC`O><^d*Zm5QoU|E#F86-Oe~+&2h<;bi7t8-K{%eUhbezM5 z!2-}>#nxpV71C++-!OgGB$~ox#1bIVZ+NTZ*SEIauBTe4h25Ks54`8--zu|Sy2%+W z8uVe{gu&O!i2(PM_Zhn#jSp?vNmA^KzH0LxBtn02E4fDp!S9i%_04r2wBC8Q0BjtKG13jr zBQ^+zlHb7*b?hZ2m3E9tl^GKNqnBiO!{a{BF9**q9`{0&c)P5F%e^=Y_Ak|bgdf{^ zY>)q*v66+6(~~c7#_Y{k@!qP+mU==sw4yDt_&*TUvk?86_L=)ZZ$b-yX)*FO_MKow z|Mas?wT%W!9`SEfmK9%eZm*htDrqBPRPH7^AY+}mXKve&hLI5gMJ?ruApzvt;5k;d zFS;$WOwjP7durmUp6LB*x$kpJDXdJob09|@IC_3G+C+mL#TsEple10ICJVrCfnJ|* zYwthdwo(~)pKN?Df}j7CGu=2Y-h&-;iGQw zG|wYDW#lDRA9}CL+U^nLodZx)+t4u=(@$N;57)VS?rs%RIB}pI^=WU-<9aK6_H88{U~RO;$0?{vBu1i>9udj zKxxze_e7h$=pt`;4ty6p^)i9I*Q}r2+H?W+^u3yBA2;_TrD$%4Y?65Yi{gowchOs1 zv5MgS*y$JhZ)EIkykVh)N!Qd(PiL}}_kx+xRCUzGmK#2(2ckjVeNSNCFUG7@=^C5}cL9 z9E@;;j^GifFP1LeXw+u!el73iK#+aSx!`^aJPP>SomTM1Yz*n*@Fd(M|EW{6w}SU! z)|8JaHn(3YF6?tVi`9n>j2m`{bmVGdxAWn~v|Gr6yPvYV@3#8gzwC(zp<8-N&E=g|l;P*Y6J z5g?&t!97h75*7Y&RGwZ2G!0~QHv5n|?_K#8hz>_6-0FH)y~|k`3x2-tS#kgOG6VZE ziPY!q_K}Xm`}xmBn3$u;e>h;P8NxXl^nM*#jyFg}w-&&2j}T&o6DLY+ywUfLwQR4q zL`6BIL6Jv^Ke^|bA-2cm6Z~%qaj9zuYLn0)*g_0ux5Z_TI#IGUv{<@0DZ$4({k_KY zO$fgB^uT=SfpbHKQ$v0DfWH@nFFtjs;0HT=U>xl0wU|H*awt(fN{JFivRkCKnfZSl ziO4&JXUNLx6~HI01Aj0q!CK>nqf%E1JNRxOz2dcca2^!s$&&pu_?7}n0zWR{qGxJR z37=9tajHA(%CC_FomjbdL?$F6n;ETf`3HB!xPatAi&gTiz!9*fX0iw>B{fzEnvT{o zM(Hy66T0U8AVn+RosQwZE+Hhhd_I5z_!?1g>l%2nq-fQ`25QE0*7?skH85>TEIg#( z_zCCzFvK5b$e1tDBkoYc)$4w4a9UoBaoqiRvtB6o%KK$2Gsklhf$+zCq7HO_0dlRt z!m<+b*>4=W*U)OrSi{y7n~4K)UI}IE5e497dKtOf=9otUI(WT@SHHj-rniw=)gVc* zSogu)+%C?rMJY&uHLbTsLcOTV@9?v|`Q4-O-pD?Fkg#%D&=Ixd?lcwAS|D2n{*z&@ zVvfgskK;4G_|0Y4P|vFSqmQNK=l$`H(=K`TaD~gT+lB>_fW@=;VAtamPe$y_af+Ru z#Wnph1XW7tnwygCcq>7Vj|KIgA54BQ7p@EdUX1eiEx}))t7bw8GzwstC8B;c7gLjV z)+`}nF#_+4VBvEgxUeQ%fV9J;6n&2_r)mdQa=IaUR}3R{3OfvE#-o# zRYnaW=hsn~e&PyzG$jbkZ^4N;eLuG*@Pu+K&Z8`rq!-4txw$z6YJ}XbP`KSXX2s2G zjaR7BYHoCA0NXq4Wp`9&Sw@cMM|3ume@44?FyC#qr6fd_b zTz;M51C#&yFFS24$2ZWdcSo1-25rCHi`~|!Q&{}kGH-cCv0cbY3lQ|H{eX4R4gI^X z>8T{Tb2;ICH+K@EqGa!`f|ogPn}ufcd(kX@>mccWPDet!u!X3cWp2U7bUeOj9)PS9 zz798_mez0inTWJ8S=RnqT9BE&kKoF+x8J{0Y7+NMZQZ5czN#h!WG7ozpISx{*g1)X z{x+u**q6=v=yPQJ7O@CPuezy6<7t4VF=Q5*l*9T20f&m~5i(v7?!sWnwX4>b~ ziN#^cMrMB@TS&aeuYdagm@%U(U6Bv(lpQ0*0Dov$Kw5n+xU@p+drL;o6f<09Yv-%M96(S4ipB02I6?(k-sgfb$^Ye-}MpHg?j zrC+Hy&KOfDHWjQ2gdA;hZb3VBi|^fk<&}{KtbW;v9aXU7&05PgxA?>Pn04NEJeBxH ze5ezcehgoU1w$-71Rc|>-BabXuAo>BvzYic87rrsEBlWqm_c?mEpW*@J+q(1b$rv{ zr{@=dI3mdKU)xqxO6~KqW~1PhM0mlKnMXiRzQQhy)(;Iv0+&i=SNaBj)gKZU*}W;S z#xNbPo?UVK%sd<&Fnt{5f8m`d{uGfCp3PS*>g9wNBMQIMZt~sQHT80<*~R?p81!Lg zJJ-PFmhLuc?peq+8@o@#rDXkV*4>on+l?DIzr0Xd@|?~AJnS!|5HCP{lx)Mu{9%iB z9>GZ(Tk5smx0|-{&+uJ2t+uG1&d;$3I`wzvR8wr1=__s4NJc*ngJ`XO``U zD)TU1)9`T@A%_9EQRMH5_Hm^STkM9@Jv!NSiVs?p2}UIP3lz-Sh7|0CNYuLTXYvYO zz5D1GeRnDU)*F`)`&o%8f)?d`v}xj`=NZ@hcY88!>Ogr~b@p5ELLvvW-*x#+b96lX zhW4dq_9)^AHXbg39fjylKU~@_|IBld23wa!twsO5N$_QY%G88G{UKdK_O9Q)Ri4)P zs^SENU}0t5D&0%S(dJZ|*#dGZP4;kotZC0?(KJT03je$dzDjq`BfQZwS5m|- z&&7K+@GP>i{~JY$OQh%ZqV5_<{0p zI_$fF`;VJVB(p;|oh8N;NNs*db<&mP5EeWaCb;?tqq{zQ?gsz(ET-rO$>?kA^H$kBrBZp1D}H|JPGQ|POuCr& zyfq}GZT~I&9ko+myNY=p2fI>J@IM*MbLRMg-mG^kZF#_=K$rE}LE;<4X~UIM^OQ-U zsVnB9d6!<<5!3BZkHums9W7!Og6?qNoYAh{&F=Lv?fi_WlTXV!IQ&x?^yFUW_xM^C zv`$EO3L_RwK3C#he(iBu1ChZioQ+8j6u%+LFvBHi+0=qRUFM1IhvH}9i{03jbdm@K z4E*3cR3ANTuL^l2QRamC3eN$vird~``5YwqQ-5zhsa!vH=rY=KtFtFL>v|~%M#*e4 zSjqEzUjQY*(Lbg|MzPz2rD?W4bXeqy17wb}0xpmt~lfw6PupG%?XjeY){Kp$zO`x;4H6cETZU5+XZQ*dK zLmJW&BD$YMO7ZwVQcs6!L;&xw$C5@oP+9@1)eAIgyh}$zF@G%oUpgpANyxKnWLN(! zlwDHkyDfp)%ya6_8nf|$JqC+Le-v1sO2kq~(cMy^vW^Admq^8bFFqqR)8tIkc<4c> z82znLQz$&0FG!iuiLheR{HxhfgATbgct0O$1)^NLT8*qk&Dp6!c0$>W^Xl*551KTu zP*)EQ9^&akF8F!~8(@L#eu%8U?bDOdNzc@<&>3jxM|)a5vvM`y^|u2xfsPoJUYldQWqRK414NoeIB)M_eNI=#|?);7+MVjwwgY+2Em624)JGYQVPn zz`Ho$?q0l%IB?$F^6pp;LEDIuRvoJqe=sV6aX4%hMh8!VqxrI6}UxhAGm zr-Jy%xNXit5K~S)w9F+VObB*U<3EI}!u+ zVL*MJY!V z1l;~e-O3C&tysoS}x2;|C$Erq0o&zV8U%rFWuV^{{BIXnK z;xFjJ{QEMVotqp|&xs=^9;OEwdVI zHmHWn-keiyV3atMx(9)_D!VS(IwAlFFy3Jsr1@6c``84Ow+9#-tFJw8bk}15_dp&Zk zmhE3q4`LThB|~=EBD!!&6!C+%VMNGtbS(;air{JfbHd|P_Ft|ybKlagf%NBNJo0&l zu_}Bo-u2960>3D9n0)bg6H#6L)OGNvw4Y@jBKv?|VK`JfLV=}&a6*S||G0*i3TX`8 z6^3*809jfY#u5u?@HMlnD(j-|cs`$%%_cl@Nwck5&%%L5GJ`UkX{c*4LL2QZtNB(FPBjSk^<0ni{Bl_jq)YL=b zlKevR$XRF~0{03VFm&$utdjAF94bS+7&?P%cL;v|p6s*r3`ScS!8Oai?uPq9>vszO z-Z0o}4N=KWpZl#1HXGm?^gAfIDHl`lh@LoqVmIEDW7K93dm5Zsx+x~rd+-j1Ki95L zv`5s4y6Lo>=va-~xet7e^{XPF8MxU($4f#YHr~5pvLWgj5EI`UeZ_a?@zP5~bf4KY zBuB#peC8q8cH&c!BYIqlGCzyPoz_6*fe=h6sqiH&RrzpL?ciAzCQHuSxi`861t! z-=$6Y@>Y?D`W-xhd?>7sy6#hL8s}7*(GTw{BMU0wdp&mR=ra>chtUM80e7yQFYl2k zR$K-K9a^8a5^k6OpWg5$OoVrqisC-68y`fM{>SCjgB4O!@%sxWuW(mgkEO~LO0tS| zz`c1S>iEFp_8owb;uzLWCfM%?WF7_*P^C@{52w_m}xlT{-gNC<$ zO|5d50VNnN>V+VF{CrUHMh9DSzZ~RJ4lea9GO{r;lYEKdZ(u)UqHPLLY(54z(N`Tt z-SJP4iHlxKz!3G0*fLBDuNzN^%R}OVl<7QUy%q#0l?V}s|AF|L8A}3TEdv;u^*IZ5 zO;&+tg=@E!=pJp8$}Ef-9&Yy+#LQ#BIXC$Mx&4wA{ooxPvoba%o%MrXSBe04fLMmb z^X{(Wr-F*PlG`XmFQv^a2VG64jc_QT3i}9~9VNzbu;09~P8Z^$NA5bR*)Se`Re@l# z((pHeC6~rBZ6}wtD1r+Fb@K3%RJUnWBssdN<@U#L0!AYm1eyLKS8-miv7MU<@!_2R zho-ZRi|PxvKHUfcLrP04CEe1}4N^miib#pl42?8`NH>Upl!Ac75DwifAVYUE)G#yW zo!@)!{eRB>oPG9*{j6E*`(Rs8AZk+d0`^cBeY?Hk)AE>c2IP}>j8ZjMvd7PXyHR%r z0M?btFic@ru4MNPC=A7LvtX-66*SETT?};vc=`DpZQ|K(%`{fP5(HTCHfpa@4kFX) z9Ua+jYw0cn@&!wE{Mv^2ZLlc=R}<0rKY7-Z@oly*B4T3(3w^e~MicC>kzs=d?*-J} zhl(<0ell|9<8eZrm*qJW?@*xYHQEzG$7rJVrvEo;5TWVk^WP7?AjUQRCu?9g_t!io zXfx#<_ASh8xcEDHf4Fi$cd6e_l|97v3KEOYnyj7(H^Gd5MFlwvuyWn1tI8TX@E{+f zlry$6RJ$n4*`w3<;J;GjJqrkiWsmd23ZiRc6Kf-G7VQNV}4?z-lLj33djX}~- zA7FBb{AX-b_kJrOF~b^`VHOyj0Yr4l>C#^Kx-2Z5_yynh2@HYbLi!{FjRQ%e^0=~L z1?bwbbto*JP`LLY+F3VRywaOdIO-b z%aX2(V$}LdbB%05Wuju`-)t+79DD(O<;pP)tHv(LmZsB)g^K9ij$=PIaaaXcE5#a! zeqb5jiu`{0Oi5V$-NgJzU$D88eBf*{tHtY29G216d4kiL9PIihi6E62Z@tn=RnNc| zY|$XAOVnqg_=9O)_2&_nUWpA-{{;bzTFcZ){;{?)ea#J}7{c0=wv?6PqE5X%U;nhL z+u~w5PhT7fM|pdQ{QndH5acFq^$@bMTJbq)5%VfU00?j|6xo1RFQg3{EsIN}<%!Hg zI9ook=g_9N34JetTpwjrCvHOfm5$G!LG5GOvKWbiw9QQhi(g`6Eh(re!@q1}bP*>S zVjChQeZ-&n=P^F}ZK8R2f}vnzkMf(V{u2qb2&kE5wj-q-JeaYrqd)OBpQ4P?uXXvM z+MPG&(+b*_&FiXg8y?TQi0QX2LI43;87*B#4;>}zTm&8^@rF?>$3H5D58~}d-R=+| z`y7k_7o;IJ{bUle`5QOG+T4?<4Uw`%kM!Y==!Azc|FDzXuvq~rulhPnfR{)ITzW=n ziBV{4&BMr`j%_%Wxcpn zQ~nRCxtO=m>OVRSFAt=BUxV6?U2F1jqR6XuZ6<+=B1q0980#-z8{0N(>gvCzDgVm+ z-qBT|E7FL|w}qHt9E^PDlhOUCIi-y`pFNl%o9|ETJ;1pjL7LS?`zt{MmSa1GA}KF& zo9QG60XQ_g};cTUYfS*!G1=VgK-0zI2)RGrIGe*sRaE z&GvQ{5C6v=kDRAR3L-82xd~YNrd9xq@<3{!ZV$^U0X3Dt?C})lxdyNq8l$z7iq5=*Xs{SF&107fTOX>|idVUrQWcT- zxSM3yzAKFEhb$M-q@qyORu7L-t0_1gE`@sY{BPm~N-T}^%gXzE%ld=LcGTFNX%;A8=4*Sfo^{(`1BJ^AHTNgpZOod%V$@N=d=~imQ%NQyd zfUocFJqSM`U|PB5c}$t=o6rG7>_Ki4qcj>7P?5MTn?pr zdkfKrO5Sj9{FSOb7nGI>Xc`{9hBdg{#R9n(TJ*wmO(qBtpXFks*?oh$YgS2giB>L? z!vU&j&(gK=nNDg(u|PAlq8!xwg3NAFDZ=5klT8AkMS zUDuvGGM3+VM6yl_U6QODpS-aj(ua6+*#&L!O4^f-p<)6C2#)5fHxlmUU`8GsF{~6M z6`kC5MQS|ECMdwQLMvF<9$ zyv$DboiySwG+AlqWN8WCMKM2wG}#~wf@ro5mRR6k{RQQIAwQ$SPV>dNqK`PB0b^wd zVMWt#8q@+NT7?rp{=0wpmd8NMm+jX{cjK~|K8Vp;2lkj)dl z$%@bkfVgm`@<|C$TlBx*-9 z-=FChOKsVU*#Gk#KtpRlNWTx~pld)IF0Tg|vF}_RsQHdgC?||&jsVqP;jFi%Q`K$| z=(a8rQpLC3-1!yJF_ffT_!ROr(_l)WbwHuau#U=*C3Mq&03IO?RNL!^tm-;fb$)zQ z$r^bViE$s{)=&$y*Q=xK*hIz6743l^Sx*$&CkC`HmTpLA%t;$|=*fl>C#%|@|Ikp* z0pg!E0}hY3k3P-G>p}Y434i;CsE~i`ng01v*Rwopum7c$XF*_;IV7F(=&8}2mg^q- zD2rM*JX$utu*RoM71C~aY35$Ue8isZ!ZwAHrV&CmS&Za1MH^2WzT}~!)EAj3Jeh2- zrcuOizyBpAgtvrAq6hE8zKk$ydXn0ID& zCoGBXh8a&oLUbxL1%7RD)$Z?Pvm!y*<{tZ&4F$W+gQcclA)_jKw!{+frx3@d7X=&| ze-R>kAiGJhJ4xa0{9P|5tH1=pZ~Kq$yP)4Iv70$K9n@^qU*ySqV~Vm{C~xRf=wGVL zcqjW9;d5!9l`|GZRNSH>}^gWA$B=OwZt;wl#VhM$xOC2EYIQdnJGGs*g60 z(vN3+ZpI&N{?KTGs@D$RRa40lX^9;feG9`{=6IqB(cwz^R%Ek*B&+M|@_A61hyKyU zXQHULEeD|%WH=bAxe};5_MDweQMBmFIYTlXqMwx4B`xmp#5|;r@GTL132Yn6b7YwD z@hFZItQ1-Ifbkv1iwC*obtyVa(rf3xQ++caoe)5tHzl^L0jW2{`}PV7s^q1Hkxq+m z7K6L7=K_nT@H>Na^4uD?#`9YD81dY|+eBX=n>2_D7MEx*izo;M&pV=wn5Bv&*yO># z1yu!G^2SA_LWVAg^^xrBVPC0lqGgkyGD?Cwn%U%^La%w792RIarnj-`3Eu@guk2?T zVy$VrhX*yDM^tc@c_&iQpK;Gd2OjotBY0^Rn6oaw+1*sf$G@o+9YQvDdIgCFL2g=#|-- z&Pj|8z;Zp<^Hn}bu$MUpRM&_G?=b9Hc2ga_$G&rVR^RgWE@O`~SXg~c&k(7H9b?xL zS=O%sohLU-EXgXQCr-`^CGWMWZ^(ZXfxaT0 zFwJYVccQ(*k2Og36AXbFOl zBz#{MlK3Ot2iU$Hx}FVPGq1-El94ThSbEe)pjMB~ zf4nR|kv6fTG9P?V-Y8Cm;{`Vd-K)?cQR#Rz>flu{-NH*cO3(>QWxPV)MKE#Lb~vu#He5 z1P&H#e6#!b(D3P*b~b$?efjU^fVALKICgPH8to;}&i2}$^A^448##Jee+14*pf%s? zAl_5mSroC?4_$btMy%2i=zV1SFl=f>o5jb!Zld|E)OO$_tx510<5VZ1%E*85tfJ!2 zk|t=M_trYruk82kn#ZB81M^Mmq{U||f2mht9bc7=LvnT5=h8V45cjjX5McRBGrqko zI-WvXkg55d*j#pgXV}g*3Tn5*_T1D$Cwl7`y^8{l;Rz05T!nn z;g|)k2myRAM{6iEj{VyGj=u}R3O1B#ts)@<-)cd$qH_oHjE3b(Zphgo?AOHe6KTvT ztp}h7*n7n9A=~t!lg;B>$eF?kPlIrMGVfDpc4$h$1Zl!0>(^<<;L%f!^zg5IYu%$r zQ1o*}|J|vaDOqtR#CM_xM}<{ltCGUf#a8e2sl?UNEps}**xKG3_aA0gQT2e5eH}<)c z4AsVwhUUkyS^d-cb&khdp7S*gA^4b=r1(k5p$vMkmVn_kb=gd`K6|L|1(38~xP^-C z7Y(dIdddP%&~B1_;A3D{F;%OuW)65$UPyU8%3!y7^^Vz!p!YAISvL$q?b%=`1qs$u>w zKFo06e)|_%GKAUZV!OWR!4!6!8f33_J2ZZPd9mg zX&Y9mHf0yVAE0s3G2mO`E4n_W*t?_ZppZd*+%E3tSATSq?n{;FVJLCdS$+QsstvO0qe8&CUFcHn$ktGiCCrFMs|l z#$0@X!F9zIiQebK$qB^AL&v>-RHxH$8{bf*tpEB9ZMDEco2lS=)35?{M!pk)Iv~|D z$qXQhk&Z>|+4sTf5RWVKw1i^aQgle2#$82htt7gk71;ODim7{oUKh2UbUnM@vM5-P zpK^P#uJo?0C6ADgQ=v$DplpVhNDtz1p<%#2L0q2&1QN|Emq6;dsFGLP+5!@j9#axb63e zl*?#VQ;A-TtO7>>2>tZ&?o)`dr&AGJrnC2ktmAnYrpI5wUq9vb^beX^B{I+`++X|S zx&(P9nW^IPUW2jcy`s8L>vx?Rn<~C8BB`AVsnIx``t8S%9o~O6o3q<+`hKPO&}yx# zBx=e7N@}_T%A_~Z^E=KceM2YygQp*esBpIHR{_-&r1{<;g+96VL!-8Vk{5gUdV+3B zI;3Y+U=<><;6KLy%G!*EEF$ciV6;_Z*VF{&Wo4oFKQQA^d&As)%QDKkc-0!-N1xlk zmUgIqqq=j5iX8Zmmt-0$Hv2){MH&9x0_gYlYb1M1xsW5oj&MMm+z*rXjSPPuc!{Of zgd8tE6EeM{hYv~1KuLg(A<)@^dw&kMrW2vkG17okQ@FYbnEvy14d|gm6Lwg0P6_py zQ1|9Xm@8UQ+fP@^?1Dp5ajgY@89JMjtv}k8DHQ%Zx#KQ`Z%PzR5G-HYw zp_6tlDWFF(!=wFsHeK!#OM+$FR|q$)mo$7m>nT$}t%VrMIM+f(V0dS9ucReK1;$xe zZlLcCVk&zQZxZE`4%9^2P_}5dt*U|qvHLUDaOq&U6M`ITCwNJGEf=C0Bk#*_ zXOC#Itkr3R@<^#c{7*dzL@;~dWXL2~wQZ>PM`FondQ`X9%Op)I=D>Q}pdr6v%DNrdn>8E#B52zqjdHm?y%QA>qW+Dd9>xM|Ik6zlwD@hblJwS9nbNXFI zV)WTmkm+;ELk;dJj4H>qtcc1#40(nUkrcXciT!)H*19VLut$4SsC?7J45;<;5V7#D zAG08N&J>V?c1>I%g>qPLW0AL&rgIJA8rleliA<^M-U(SxZi8nmpsnayugw;8#Ar8` zd5fuBgmg}^GtNX&1*y@Dyt{#?vc(SXQ=kR?tcCjb0VjW5gvM6ZmgmD(Tej*$$ruco zurTBCqxx6HuQBgIZXn`2RRH7vF86rLCxY1$xqE6a3BaMsnRsUnyjo)=(g6-IAuTHTs_6>UG^n9p~760tNBKhbhDt;L;U1{Vlj|O zw~o)V*7ck6R1sH~7Sj_fDx7w-V9+S%Xc{kb7c7Ar+Vtk9Et~p|$qF6$th!J6t|Otv zUQP7dz9(A&<`>=GxN+D{joU9z$DK&rD6q?hD%Ti+Qg#G{0qF(vjV6lBF;m^vjnHld z0c0*xOAk_@AAziX!>P$IO5CF2)Y6~3lVhQPoAoTlKZ(!S?TbZ~*s`5hDlvY;d*s`% z@CxScSWV7eJDl|CoY)!6sO2~IVr5ojg;KYU9F^5L%jhdO_H#h~M&#su0DT|sE^Bgh zN2zHV`_{-Po0nXSJmDRc=G{x8I!W|oE5OCyG0B8Qd4~Fg{G?Eg&K!$Hu@-cUAeu)e;eoW?tlAHii8a&_LEBEK#8(>ZI7^O0Jq6*I zB6@>o;6InoHFBrred``D9nZ8Wv7O5|JwKxFk`xyzf`5xoaRc<;P9iG2{~F(FwCc1H z;lzcq3!#yj@BwLSw>p(eVh~VTG<-_S)TePb+h)+1OsFI5R>bBJg%Xjt7uSj8Ywgn? zsT9vxKV4I+O~#wY}TB( z_0eBBOr{x)3MhluF3#Y+J%?$8_zk|@(AJdwtWS=Y(F)Ulp+-(f0{L3{m>QK+6mFXt zCN=9}!oaxoCRM9C#&@gI+AlwXZvZ@I`6&uo23N$4KgMvg`=&Q-2YiRnU*b~v?tyHw zyg<&;kec&CqQSjMsAmZv&4K<7vHE5$hjGSSwEwceaAz)%=M1U=MyEBS5YNv_FMSIQ zkY6IE7cgH|Ht&QgthJxE1!?o4gw6opY30(36Q*6Dc`>wbj2D9(t!E4_Zi3w2q&wd+ zAA#Q$koE_1R!X%hoQ0J~PZfw|Ss5t!O}f~c?q z+;m-**FzNvVOaKh6z!rn3Xxbx1i&J-tR~#6G8vC$R~t@6FZX-~ zZHhd!%&tgN1`$h@rN}fqT<)PlW^C1!LG4jH?GQxD=(RZ#2%b=W|Mpi&fag*P$bpbO zGv|Gi@BZsGC`s7Mf1ALA5-hzT*xn^`UEtC%tR>Q7LfO*{BZtz;&lZ@wL;yp`of*V) zw0t>67ZoeGIw5a|NZNUboM$h)-<@+!kspF|t719yZoGG-yoC5fd?;d(@^6yC>h4p& z$K6j@?rk#%&>!%#{M_bE;6{nj!StU0?@r%5X*}!aVCv8tMRrf>z^xyVUu%96t8JaX z?$N#U^riH7X#u|=5b0!R6ONLQDe*>2mWDiUU5V9e@(X`HUMOlZY*oV4dYs$MmB8(89A4n>kYS|ukl#{0vRxxVuRo1Fhs|K)1OghWjH z_wZ)>@c}97WXzWSq_6xY9yPA9!iAn=$EYJDB{GRORsW=y31ogCqYg;_PCI(7`^n`i z9(kg0B|1Cm`5X^q8$32LPo9NY<~_4Ks?&eHLjA7l-PDCn)&u$P3AWD315GrY_Newy z-^G#DB?q5|y)Zc5Jb0WAyce)5;n`No{G;xsUO`}kMSPZ>QQ7}YL5wzOS@yRcE)xAE?WruOo4 z_-bEN_VifPR*ff4A?6pP4zK3#4MwXKmyb5gL3)Si^4HTQ0CM6jwVE=ed^vgq56}ov z4YWV1vkNYt;sM^b{vfGcNxWj8D#oX47tg;kSv?T$Nsq;L71)JYwyv1QZblZ1Dln#i zVLVHE6|$T`YQ?{wUwk{Iud9Z>2Fk?%kjStRw(&Mtdjx#=3$X!>uFdr!cE<=3K> zI{gz9=+9H{UrTP%2)49hpgtcUcEWN!(r}f~KkP^492AeELd-mmOIv*i15;`cH&UgmPx!c*;%P^p_I!4+w#@lAv5q+w_ zhELtOv>TXvlbIdreI_*K$@)n*dGSey2AWf@_x)M!Y2XaRxYoE4Di_fnXH<8nj{9q& znm3T#2lO>3;Y0pZOBbQGfFd1NnW<|RWs!*Bj*gH($#1?$;HKw8G;ghR*-t)GfOlI1 zOiC3hbaT_iUJd!&aY7QD#v1n~`5=z4JnY{R>z_ya`b-o153X5xPtS)NWG6u;Us8&m zg{h=>K72^=R$W*8-yBEk6#lXLE2+BNZa0R9+b^i6#M7XHq5B`YjGZ;<2Oi zj)(2ml(?@Y)|w-N@${h$g9usH=qpc_SrzIqTV7VDe8ZzFAyz5UR_1UuY6`y|-)>h^ zLYBiKlEOf8zP)w%N=y1PoOc7S8IQXG`c98VaKBnayCg%_bis@hO9p+o<%^bFz%EAq z+oo~hBKyZ|rPt68wCWLT{CHyVY8wVA4`-x*CBNdx-T6!+I_?}l_P4AeY^ZHHZ*SW9 zAE$X;KHYV`*=Kr$0O&WDv-S~j*cGu=<0pSI-QcF^hnXHbLQ{67MGv4|*l?z!o}c{u zB8DQf&MwcpF7Gk=+G0;cZ27SslQROk75nhXGe1sufnr_EVptsQ@Fqlq_oYd;2ll@d zo@NHd|D?uUc;^Nqg-P8{MtX6A_siUofrlTrsWfsJ6nBJW<@{Tpx9{Oxgj4)@`gSqX zJ;lqmW|bjkg*2x`n(5g6D_>)v=MRs8m^-XIjx|R=@*EvHUEha@>!l%cJqK55)|FWA zg=tG%;s+;<-u{_5D1nMbVHlRZncAaVTE_p@PxpKdeus2zUv>lk@h zY^*hDNrB!QjUV1!Y^JrD_Nt??W z<5DTE*LPu^`G0->_{Qw;C{rsuhzW{Rr2Kuvs)IKl`GD-_RnL89{fc7Os&Hj#WRyp3K3jb&3hjW^QHKrnRWJ-GDsr(Vk%)E9dE)n znjXp85*zwC&52xU&(_|AXB8!g#A_xib)}*rdkPUedoNTM2=cv2I!nT$?yPpF)r)^f zjt!gd3dx*wVpC5$auW=7$1kEQ_>XTxMil*SXM$nhF-^ci|)T_GpRG3``6DnsV8syI)6E7RJ=6KZB{Sr z)V}= z#~|?%@Y3)7^w4aeSqQ61d`G=dB2q?xIR3m&(B0I<;^2phLfFS-Vq$d(mw~d-&WVtN ztWhDb%jx6a3OMb!zopsQOv%Nw?g`UU17kH^vyC_bp(RwRG7{NhB1Ukc<=8Uv<6wZ|||>+`T@|7e#$HL|wfp(F%dZ zABQQNc+79%Qwf3Um^*~CLa)1R>lng<0_=kL*PLV~UP;}Yz0zf8&o4Sv*$`e(v@{uIrJkT;D`g@Uan8Ew$*UAP2 zyV-Qe$^C^J(7n%YFt3ihc*FQMy!V2?+-Qm-tBwUnl8-3_CZ9!X^Af*=%D55Qt}RhD zZelkdEaKZ1tUY@t8DMs<@1WX%mltUKNc$H{ygVx&0y$UO{T31beYXlXyX4l> zv|GhFx7jPKE2JSFu1iRkV-6&pF-BIaQwQG23|w; z@Fx)p2Xctr@5isSt>x^uK2R;sy$Ul~jky)SgYG+Y(ZVka&gh3KJaid7pZA$7Bw7>+RpOIZ*($Za{xri93S8 zzzBPyvZTN2heger08cnxlm>dpeT7l2p1-Nrp`fF6{17eg z_MU9OqCU|6{MvruQS8*Ohi6R#%EZk*<)^GA`o)}cwd=Yj`pFcxhZiE2%Qm+a$a(D! z921T1`0#HDiOn-m-XD}?qupFfE=6|?W02b;Dmkr}x4N&5M-+8f-w8Zz8!i++hXxd} z@vC~7Q{Uj!CUR5J#@VU(Kh{R=P5&>Wc?orHMok-$3Ob84&| zO_sr&M@MR2I6B^$O#IPw5h0B8E_bT#d4V{FTjNKLCfZUpf!-5)*Tj*}y@^Yn95oy* zFe|U2pwXyT3eiQ-Zo)c|gvYa?gn~ zQBG`A4Ect7-o|_9msm$L-czAt2ahdgmD>YyCJxach(u=|*vpvzSZjq*|2@QQ3g>+TWA&_i`n~AFlbVVlZeq@!DhG0cFZI0UR3BDQ6X5EXpj7**1KM@nR_ApRrHZJmfsSDblnUV$_Ye+Ztp#fWIFKdHxF>PSDAJP5D2 zRCQ)<9mo%FuEthX!KTxH;hBFEE-^t~ofeOa?0FQ>*P&_Bctg?C8vK42Nj zNZUOgtQ9YR0{Wg5r<)&_A$rhG>!LMRLHA{sc&p6#Zp+N+OTBsD$Cf6)kL{97Vw{Zv zdTi{j+Qs1vgh?`}N)-uio>jL-qo|M7&ixR7r$(;9lP*p#uH(hmw287URD|U4P@Crg zpu;Mjb9x)1=#pidc~U2()2GajHa)v^eZ}soEOP;&E3;@0r$MTZT`QLy)3OJ8u3E{{aAa7Y;_sqP1TTT%a`>6kjt|-y6>iOi(biyW7 zKd94@x-jq~T*<`97iC*P3dj{Iy$Bxu^dL~o@b)CC^BkU%9lNOw^HG)llPJY27g2#1 zmwfyNwiJ8t+2#6JZL!;?P2eUo2-%cr#M`lJE#lObjwd2ZxAIPl*!)$Wolxi5(;-SZ zD$Ml>rPtgE36YnLb?W|ZT}Ni{Q-7-ID)w;+om8pUbM^5OmhWW;;VKgdn`!{2-8 z<&C$win8zS!-Pl@8p#VmO-t-QP_Z@3)2Ejkr95MuD0^Hw+O_Eyck(9W)J^NfKZ(=Y zt;J@J4F24vE4X+`W!=|Y{+>-GQza9kjIX!+7@73EFq-`|Aw_xQ%=8|GC=kD$)8cxz z`R( z{8eW$4?FZ8V;y_0sP!vY+2ryf?utiBpXxutlh%0@__C6L)%>nCO_~MsazXH zGP2qGuhS}7z!!H5;qHa`!o7RC&-Hp(iEYtLr zaHaAQ+?K7apuhG3eYzwZV98A~U<}ursQxNlBg)5aJ!5e{9@G8BdTq2-Vjs>zJk2JC zM$+E1@9tGal@y+?Kf2X;HKq3@q5pGTRwt)+B3?@aAnJpst!n6O)RfM%=O z0yT<*pu4%8yOW(*E2g`vX%XrUDN*v&>}CMiLIIvBju^uxAQSWWhh(Qh9HioxYd4V4 zY|Or@e585F-LxKl*$C#*LS|Et53hsgb?ZRs{g7|ZhL#0OYs7tBbs0oJA+H2K#Sa#N z4i6=M{Sn}exVI7ITBqj6!2Fl0;)ZDVu$uFiU2=5l z756g@~?i#llhVT9mOEvf<*YL~7w@#FQi z8a;am=F>I#vZ~f=zopr^Zgka#mPCH=S*@%7`@>tDgYJRPD;QBxB;Z_r?5!)EG3>Crp(EvkbW0wgr;VQBO`xip@gO?+fzQ;}`YOH&vmAZ~oL; z7ig}m@rjxG!~UKgx1-7l_}`nu{_W|axYs^8{rvTF4gMUX=As|P{7`)XkIVk3!bwlD zc(foO)49yZ?{)IR{LL^X&T1dXeyJs&>mwQ4TI6l^+@sr>$;Q&;r*KMa(tgFsK~Y>=B~&2(K*AWu zQue2w-aEgwERQ<*4JLN%20UjpCW7(akPD81GTEtHhe zN){2tKmoexhn+}S%WyFFWB0=<28KBBbu*GCo{JC03VeI|X{@Q!Fh9cvJjX%!P(TLe z^{uN8uJ~1YL(c-Ws(j9^l>^u`m5}Gx1WvJi)Xz083d>wK&^udlPOew%7ID8QpQD<% zZ)&_uDDAMs`4w889?G0p(3GmxFGweSGduky+bR7fteCj)GvqC0#F?|AbT$NRSHcl2 zbgcdw##YZv%T2nQqsy?W)m_7X9M9e;NVJmDp6kPf@l?K)ULcHb<5l1Gz+aC;!My;A1irK*7@Uy=Z%LZw4Tt^TEam7t~>_ z*qJRgt@TQ^&-h&VlTTXZ^&Eq{DBFu=UVx!JD7#mL+w71%XsP(ud_Fa84#r)W0UfQ( z(}B}|^^^PTC(ay;vSxhSy0Vw?u7Ii5V1H&tKZ7F!|1tCR0W7cah1C=T@K{96I~Ew4 zHufrB`gs$1gj8vwdxdiOG?7qX*{2@R)+vz+v_AO;*{r}ms?KkncNuJ^$&aYO%J3Uv zh}MRGhm6M*`5}PxUexJTT_8e`-ptQc+m^TV6Kr4p@G=5cyoOb zsT*ZR=Le&@?Fq#b8B^v)CT#rI8Wnyjnz;!N;wF>-I%YxF3}O4_i=L(j-FUi&Q=ccE zc>7z4k7)`I6NK^Y15Mn|ZXc_&PY_Z!&RFxY*JpjM#rd4YwT6q5cc|>R=Gp+~#ZC!^Hyvb5p#y&P$^*X{reicf2&b z#gyKM;sMbYIVp!n6vv})AMHB>YpSF#j#q4i^-l$z`~lO|A)WX` zHS~o@gU?YD#(j4qJaBsdGhI6K?DruXUR+cIe--A0=#JKnbZ}bAJz3tg+W=d9+kpN3 zNJwERJ_ZA|jQ$SNtt0Q``&Vm54~yvZ)yrZ#ymYQMZFosgnypFP5UB4vViR~z=a$b_ zGxi($g}FWnNG}NFWa_CyGco2yvf{UlsMXzba7>o)VNJUt**Wh&o~eE0a4?jJ~VJ)voS z2BeCot|N4^*%29TbZ*%!gb|~dNFA-cyW-YKQ|`z=lh~vBy}$_5xEluj=^|yrp*5nB zc&!_H^QMGTb=(qT_?<)7%JCt0LN!Gf=b2+#WAF4o5f%E@ja-F)juO$zET{uZcCwVb zz`t4FXx0p%FH%_tGbgJYpL1k?J*a;573F$<{zl%`RKw%65dGI^nSs?W%hZdFtk$`@ zovz-sW;$rSbszEu_W6yI1Iu&|w)+9`sAnN4NG|%)d9Qg*IcU4%N<>L`a}{*@Sy8ND zbO<`~z4V?BOYVgab32(a0tOy)%Q;TK{QSUxuXz8`nMs*K>#qOHdhJ#7jSL;xuAbwI zpHE4``ni-V3a_cxG`x|s#0yHNch|YVDfmfk*!9GnCevH1{sH$OKEDxd2Pz9^3QKp4$i12TJI}mCEKOqdw~mZLrRcI&e2SF687rvlVd5Q zA>!`sqk;9rVM@h?qNfDFXa~dnT1;!57g3*%>086hY)BSA4yEa$E z75d=aw*7qV{nNwQZAjfmgMZ6vSicXr;qjFA=IB&d=-t+3O1!w7H&61b9cZ1I z3U!{367~q%E1z8^!XPc+cH%cbPaTo((7lx5 zQ9#R+RCdm?nvEXj2W2N4xB2zv0JJebIAFKU@aRxr({+<%8K2!E;K@@f*6Z4iHASdj zpwjgg1EVKg^)mmgQ1Lnq=#e*L(>N=E7gac5POn-jJY3*#M$ciQ!Ej`~cj^Wl7*}ps z?rXm=zq-B&UwlmaQ(9e-$&de%8545lAAX^1B$Bd@eE~N!d&1$Id?ZRpsl88SKP`u} z?SQ)(U{>de+gwg+Bp5zdG*(eC4Cr79;RwmPwK+Q*8S@Wa+O}|E5E8z zNb2bH=Z?xquoH#9DBzztYUdPKJwG+ZG2ML>sl!>>@YiAj-pJhWaAaxl8V-rdgPHsq z`t~mQF*lzD3QO#>;N2=Y5z=;|3Uj+gfrnyZfB!ftE%2dGZD9^Kka&zmg_$0Pw0M-#-D>%A|G{{l;o znDcGa^J|{wOje_0^+iTjD)FvqlsG%12=Bz~U(qS_tGHj!n$D2;&i~%Mi2H)8l@6W# z))}#ECclg#23@aLGbnfX=WPM2&Dbv1aIZEqFcHU8HLC8M*VjH?H@3`IYCzLLToD$l zDFn0ghp~@B5?o>{FP*pIW)DVl%httDk9)eRH$6(iS9f75w3o?-#YKsTibrxJ=K>fZ zitle!Olft3W_Ew$hIPJ_OM3joMk7jDQirLgCl1=F9tXXiii4IFN35mR8|^=!vACU| z&J1tiA)@e{#O>Pq2)_MshR?L_l!N5F3K)U=q<&Z9@KAl`o2CaVd?6Shz=dR=4bc5- z;X{nGW|vK28h7{PybfH0Tc5_8*NPDUE9n|nLaxYd!T#SMTbTms1HM1r4q7oMEi*HD zMtnm3UWNR7c_Q@(?Ji(!DZZt$ntFQ=HU9?>=8wI#>Q%k#K+e|tz|l{Bn227^omH2B=4%s+6z5QjiG4-a4i@MoM3LfC4h1xma!6VdFBg)oy|r!PrZ7lL0mY zu>$G2f>SALrW18&bQo)%o9pX!r*Wb~ZW7%`$AU$q59NCDRzmx|Di1$ELSN;cMu3(1 zBpO&!kK=wn#NI4d!J$T7^9Q-(>~vgvv( z>3DJ{uC693#*42=@m)n`kkA~;e+i;bhUiiEPy9&V_D~~3gBa?13VKM)y4xN=MQF}l z&$l=rMfvR+`Fd`2KLK!A)#iC~^nvYF7UV=|5DC2<|9-Q6$9yGt0o_QSi!ZYccnRjW z9-^0Y6_LNL<(TRS_m@Y~X^Ia5laN5_Gyn6V^UhqzXI8V8O~~afCdP>$)SM`i!q)>y zG)|#?@3IhvhmwO$_HWZJW=?HgYpwDX++Pq)g2{asa@IIbb|AC#EA1LQre{VitG&Qf zt3ZAQ>h``G;cDm`jkvv)tvAiP|6V|<-r2g9fOQ`xt_qo4A6mO{kNVzb<$p>5hLg-p zbj(0@Y{8FFXs&;PBs_8SDN4p4)SV)t?2qLwG;&(a%cZ^|f><&X?n6Wv!=tv;P{Ng_ zT#CKF(;+)Dy~Gq2h->!N$8R^Fp^eGo5Qs^q>H?Qbt>(l1co)3T?{_OzHc-+09a!`` zFh!75%h;01K%eA%Sx-s5Z6iAwC=b^oDb09S!i*oDX;w0N;Ebsdm}V1GLu=$sr1G~; zutkIb4IUYs%aggBsU&Yef}mpe8d>ozF8wiHRtKdE-aLCc$PhllEO^ISW3 zjweww$NL@F)?UlXri@Rrt}n~Cd}E*=d2&;qAo zCkpc>oh0qU44QyZ=2zK=zS7PZa_kdk7&)FyWa!n8no z0J1+Y>eZL-;0H!XC&J9_6uoRa$;4#)Ax^n zo*it-#J93h5fVrDw4-rbM(b1`s{QuFm+$canVY!uc&byG?w37gjA9=DI;q}=6(COQ zcbMXciWxJsa2I9`4T-Qk}t zxG$bMUqZG}dpsuSxqvQu1tQbE&$;X;*`^J>CWSp;g&469eTDyrVAv!t>$8T4(n@nO zAZx>)h-foTqYRfhqGK^j=fn4mt=Dh%&{{~b0Yjwqfk9WP0}M7B%oSuqCdk_P*nq7f zLAC0Omw^cSJWZy+vYTP6LyoQASx{_k{P4Z?z)Xo&hT(AR%pUUPsWDzGV`?MHRxwgY^y4%>3N1z-S$H@;Xi181v<@(u1M8 zrH`C=a_6_Fed_R1=oHQqfrh0AHMNls#MRP%N6xQ=lBWL(_mgy@*jNpS*!WOaoYdg7 z*?q~lFM<5&t(P}mZSLu87{#Y7rH$m}&v zKeXV=1f%8l5ix2{J;p1@Eu5T&+;yz!ls*Q8gNFV^c{5|7<% z(Aq8m$AOq3z{ehq(IAy5dcLqUTbNl?pgZL7FW>89?*olXi5Q8=Eii(P&(zf4C-CWS ztHtl(9uVLTT`BrAfDVd}3VJ9J45g|=a3bQESinC6Yshy=Y>CHm8s)Umc(1m)1mnAo z2%zb*ve_vJkdPYoLOFDCj z3UpIxLv*q$DV9vfvN4SzBA?0-5X(dbVB8`nsXhrYun&2(7RrEI0PYgF3bv5hqMb^Z z?D+V!yNoi{^Hp0+Q{52%j@eQM8wJh|h3*kKBU@c}pFm!>-mp83o}1pp7#Ns@hA9Tm zJvEye+k3-S1CPshc`@Wa$9%b1z+c~o8Z=hjnF$cKVW}_!F0oGq!l77Ms~vO`F^p>xnInFey%ZSowRSuMt2|086N%6m3_eI-a%h z(A3Ji^Xp6bzOthIf|^+|i^z{kRT!r-cmvV8wm-N#zB0aZA8}v2ckx2v-8Epv9i1P0 zkt!hMj2QSiWS%{p7+@JxoHY)Ew*EMVe^ z?<^Iw8DqW=4!Y@_ae=y{d{6zpA4sglCE)iHHS2_I@7zjSqY8SizPRkyu5M>W(shLs z5*dRzPtL$VK93l3Idu^u&hqD6{Vw?U^ZM;O_XFNXA{S7Ak8j2ph=sAzvY_f5Ty{MS}RK*6Mi<{}Vbubj|29$oW?EVi@8d$5xG&D6a62kKsHl!yKW7}y1i z9Yz(Ac%w=gsIf&$ub-3-lrus14R#W;nIzPk8r*|ow^VJ5k}y7PQY05l71Wz!q8p}7 z2m_k%K!pxD#26Gpde|Nj#L#Q{FD4xcpd>0KP@fNvIJ|Zs)~EOJ>*vcg!|NX6+t{D} zUc2ih5gZ`zv4=9qq&|FK5E?y~#6LZg$`BBBlo48%WJF-LcA|fktArwv{J)sBJK-OH z9Iv%5!JA?si?I{yl^(|&Z&t@;@uR6A^XAW=v1B1#=Sv829*#bZ;*Q`MZe|os53FDX z=eN1l4}cT4UbiW0h}tluZV>~nW_~X=|AjCpbVy~n|6<;S1evj6^iKBZASx(Iujp*L z0Qk@27RXu4J_HQ4jh7#~!JD+DwO!t!4$3a09Qw0dRDrB*ev!sH^dOl@O6Qmrn-w6Q2o5^wCZqd|Hz!Qvc}`e zA}+?hoHF*9g`?Y~50pU#l%r9$XN#c?gE@dyL0`K{wHAkmD@zRkV4 zxUDpkaLJoDIRe07l>YVmF}d&lns5+f*+OhN&jt}rP5xVW@tuAp#|aLVQE}S>+=o#zBB?--ag41jY-_Hkoz#Gn!nd3f6Qy8@888~>!l!EL#F1zEFCP=b|8?U!| zm7VjXHOGW+LvQC1u-=U=N7Hy~{$+2WRaFz!ZHKqD9@a>Z0tu|wOO8N_m$b>WPSFUT zFIm}0?=J}Dv@HS%eL@L0{swcJN3HNmXO3TeBL2n7q8IlfbZ_`IS&d^mHzd(#*(e>` ziGPt&0l$^?)>mp-Tp-5bG()owyp-Lk`cq0clCTswxiFuv!0na1*ydT?SV>E1TT@>| zsWj|Vy&HF&r@dKB93&i#0i9Z;r_wB?lUol9y6NQM>L&`KX2b>EyePwJl6ngs0W#&J zO+&hSa#5ZGJMzeM#A8pz@-**%ro`pIS22|v;{1tVSvE82jv-)>;#LF*t0^u@Dc6?b zyZp$YA{emN18IFII-0@ksc|(HS%awkv(GzNE^OOHKI8$K>vO?6AX8rqiu9{Rb;4jr zHVMlS>!+B7BCq$We?v+(d8(dxBW-H&;YOtb=Y5~9Og5*X1f6YnW{TkXQFjo^u1%sQ zoXa}hH67pW! zIZUHaNX=bA>dY?Vb!~ZC$Ezx(7gMEwfVcXvQ;Cx%h^}|8Q)S@{YE`6xLy)wNe*s6| zA17S1>FbzjikX$6)jjo+WDv za=HJY()ANhM73%VQr7wo)3b_lPIl8B8~N1K$ORlp(jjXrna$wqy@4fTd2gTbq&^zcjV}C?20@l6 zs=#>AiEw0}2F=okPs1&Cwo-*9olZdd!bC= zLWM9T_sNjW%J<#}HIIB0L73)-AvhnAMI5ob^j>mWmC!fiph-&QW7kx6D&x)rL*~o$<2PbIe+(d!yBq+$JT0DxhDJM=el? z{)vG5T#*}NY%kv_|HlT|e-CE=U<0m0Cg(r2K~oa!lIfE;@BPdk6udZ?Ye*vQv%)r% z^C)~VXk!D$6Ucoremzc1&m{6QP_){!wH)L?PXHA{)Cd~EK@LNUdVz{yGLr1SwHP$L zMhdNS_bHtO>}9VKwcMA&!vhYX&|Yg2s9~(QfcGQ(bF;{;>S!y)tPz`R~PtolV`|&PtT$zj*LQ1;%3P^RgV!`Y4WkaZQQHpo@Xrge2aj=8wcOa>K zbBP@9x_(z+rTrH?WxE?Mbo2--77MVo;KZ{gTUlQr6=xKF33lj-Is5bs9gJ0Sb-1!TTFJ7M2n z8he$RCs20>0*>Y0)LRWP+Vv7ZW#6fdgPjj(61QG&$6&&>$`I4nxrYUgL)q8eUu)Yr zP7>^3wQq@}V#QBXTw^ayK&E}!m?eeVOb?V17u6_$W7ER82L5@H-9l?0M;}ydz&1pm zulFJ*tFCjd(nHluQZR(c*vt!m7@vpSZ4A;zf%5053(xi8<;{bfEs4sOT@(a$P`1Td zE~t>}ow56gXyFh0p+5EBG2-uJ6J&V=F_CFoC{2w6_~d3KzF9puo2PFjTgFGZ+fFVS z>&08Z7u8ppvG+lK2x*H5akn(KPGl;q$)HcpWSa%9wMrquteW-y193`0FkBf{Ym|?X z=)wF}y^S`u(*<{npOo{2x;?@)?`=Oz+WH(mBgQ#Z(nihYcaN5p17+H`R$J<_Ti`f? z&|cfilrHP@uY*zFc(=kFJEzN{3j?LZlk32EEf*yF@F!Itcj#g2fsc4ND|du8?am4$ z6Kmi2@wAIx<)kM%Smwl^;eN;=*Qi(8L%r=S#xfnR<|nK=aZgNRQ5q&Kwo9dcewQ}0 zk+#~>;f75kBJwOxn(qhLG7Cn_<8c**9I6{l% zT>aUf6zyt}`&ZR0b-Gq{deMgE>L8L#`r&-%A1SAqTM5|*gU1{|CHNWQ`SjpBB;HG^ zR;;?PFHcovkkgW$W~=l=5eMY(Zy@Rs5RPb&A%*5{pYnydec-i|MRlNmLET*mM1FGtZw zJC^-@jrC$q+TRMl-;>YMkDM6{JlgiHi%iuDAleX1(jaTltIKozAG~sc{kBEC6Dr7( zr^hZ806Pi$6t`Re3&~8n$mfq?(uL$V3tLH6TsWP#-PVqzHWm>h8*Oj!33h!2Sjr%!5djVdY&EedE-3 zWbHH!l8R1uYC#%f=DBNiBt?zx^Hx0}EPxmIB~XTX+36E91OStjFZV1};|0!#LMc$S zed=!JQBOlxV-kljw)G^y^_*{$zq(7IX?QqkqBhJaO^!gL0$#QWMVntf=vrD3{uUcOmf-OL{N9 z5`WSEnucwpeg^u>&&QW${3aW!AOBM1f*)B9Y?QK9#aBlZU-G8ft0t zgYR`Tv{eZfXxphZ{r5Z3>~gw?V%qNdPb$XMdAvr7=tsPJ6tAeIgdwxkKL$Q;{7RH@ zwd2g&@jL6qFR23CXgv>wHrsKZBL z7zE&&qkyqh*_6hq+q&^s>9QOfBD#bzkNTkg9i!r1dZAksNDM4ps};;fv(x z`76_k;EVgq8T^!0i`PFxq$gx3+*QNgu= z?W4sYdu_)Gdhzq( zPzfSCbZV#9@q!w361b^gWD{iLKWbkmMy}A{vE~#CbWQAUxSgnWEWC9U#{wfqBs>zm zpQ!6_DPD(@hHhWWg`7#Pgt9(T|E&|vw#r}31R>*L?l5m?Y(d6D7>dHiRiMe^Aw1Uybf9_k&rL0cQh2-R7c4nwyVh4&NnO z2N^<%UAwZ5QyuP|4x~nc3d^7lm7?jO<`pFjfRET2nFb1UN>46lT$*Sh?&Fdu)n&s^ z*pTP!5OKa1chz|om-z>0Hjjug2zOJ(1P>oTqP=kk6f73lksGBHfi#?NRWE9*-c|zQ z>apSv)0+0kSqno}r)8>NbWo(IefYr9$gL1CJpOsK)V}hu!g%f%ia_Ub%{znaSFN<1 z8E++}5W>!i!DX$_LIi-1SC~Hw_4y<%EMdRZG`SsMnGqrbSM;R{d>kiPj)vun@PI=? z^0(K3u$JkJ*)F%j9g{g%V2VYc`GtOGOib3+v{Zc*FryX1!XSXYImgHj{+OSFpY4YQA${%|YM=bhgwi47 zdXae$GIUCn9=j*yN^vCJ&ApQd&L%bj{e?9baUb(!sv{!sKDWlmZ2@&=chw_=lAoew zmQ(N;;IagCs0%31xE$GQ7&G~;zx%G}90*<*iev#U zbzbjIQ$6V~RX4S!LEp7_QmvN8yz(?4@3gJET#I-?JS0C0uHb&!fu!mL+K+#R{WM$Z zjfE5;1!Qn78(QU1Pk$qGrI@|;VC!4}O>3y!=ZBpy6R>ygB%+VF@#H>?2Y-yZc!3&n z(_57@KhV-;!RltoDsG-tbk+f-aNyPhn*+AWiiGPcvYGr%S> zV2PYraAYxI>E+8^b#{BA_uZf36tp{FiUtkD*IL-11CE`u^sSl=MWl_0Oer_#wQ$2+ z=qG?8r*bhaQI+Ngf{!Ok$#Sd8P+LLW?IjV%YU`+^GmJD(uS54Gd*v39q+w+0?KY;c z>&L1z1x<>@fq91G_@vo}&o_p5{r%2@xB^xxR&jCN2c>2dNM%4b!o`Q3+DO+o7s@h|WR8BLf;@MdmiLK1 zMaS>2=1#hQF&DqRQ&uvgq$v7O-Nx%+Q*kc(*0S>$@=R|-0j77PYu3yRJStL=NUB6O zw;DHPeA}oPQdI@5iJz$lv^Q?m7}YV2(^@w`}I#G%sr#mn3 zH`l8(OopusCyJ3OHE%^WZM9$n9z4zDq6{quk>DlCEGW6}HJHfIJ+p}pl&(0X_c?r)8dJY#cm65n2M4S|tLmvpR>S4u|(ECNtgP5D02rNDuXOE4Khm!(U?no zYcX!#^}(JBfWlU+BSr}QijYRFL9jmw;mion>0%S{U9&;BGExXL$#eghR#=FSFo5H` z6etWYr3}QDYmBn`+%0f?*tP-w>aGt1b3y9yg*ay3`38ii^iW4b*vZ^9CC(i&Jy>C{ zPy=TlrhO+9}r5;?;Q}ye5JUJn)JXM`ulzS=~+v~2{}vF z=72oL+!(eBiQoI>F@{^553ClgvkMOCk*`%L$S?@k3Q{`4Cqtg(Jzm4NXIY5S<{Ue( zMAPfVbw!ltC{TJ;QWDwO67K^#h2%f|{rkkl6RK|$DwqA23*mmQoCCT}5Sz&I9kWhX_vl-z+{d-t&$q;XW9RSIz;#loUJIfH zY??17F{J$?8{|!K-mk~A=jMI?H}XrVEgn7PSju1~+Yk-|b!U$YsmaUpsTnD5fcLp9 z;b2!bdWoAEz)}t~;L2CZWBlBFN|a1;2WXJ6BGNc!!fV``A|!tw8<2Sc4mUDZ7_IOU zxfVYlin`s9h`CsjeNRAp*KKf+1qnx~6nfHa?0(dOwmvEa~Mqpej!|UR+Qa zlDAXNKQzXMY|N-`M3?H<;Ly9T5V*1&SWH=QgEOGC`S1W%aQB<3tLpWU|P{&P^?a|yK%@XmaW*E(u zhrXsS{3;U5EwEuvlzah@tayYScVC<_&T~Or4KcPl(aTx!U4^Q^Ez1OOa~c^cialiF zQE=%2-^`NaBp+GgOPl0) zBfo^6GPAgbG^oeg#6#}w9ElLOFO{$_tUmmOG2U5zXGHNpx266JoFw(5N;3hF=4yKS zl&}nW)VL-B9L%krf(~AVS_$$#4)a^RP!vm7jt6ECatR-2d;IqM`8)QWD$+C+P6+2o z@UO(vsFLz#fn#1#p=62@*4I(QEpExQ=SvgUvRNcI>3h9+0cEq-%&#aPJ($xyL=aDN z70aQBv9Ep~0v$&X+qw}GGy(Y#sL?>Tf7MvTimq!wf3*OM`8Vgbz(mxiE*5TO0vf!_5zVWX`6y&j|GZ!rNmdc1%twtB4) z$7c}L$lk9Pu2{d6ggbA(LvJB?-H0lVxb+y0Ut3Uiqv*3YbbNX_byGDQCs=d8lD?k1 znkN6!%PV`^Y8+HI)2;iysd!h1wmQZLw0txSwU(OIK)7w#+qKBU6|l`3B){^gVjs$454 zXc_#yTn~2e5ly@s`_T{H1Izzb3;8>Atb$VYN*VFGN>$B;7@l^dy4L^|%&L#Vq1K4Z zSaF(#cSjE2RX&hbP}6eM(PuE{uxOkIldo8Bi2R66_2b|eF6d2%MnKKfSOaIzXHh@m zv1CIN$O&Jnw8NMl1%W!^&8_mxLvYj{!>cyjA1PRitv>_(Gz^)aC_h9OeOVe!xY(;J za=DYfzie-;%&m_iU4ED41h!qib}7Js2E76W(@Gh^@7=g88vV``kyH(P1{(FZdN`?0 z7qKs*oGE@BaodbIbDQj#mGQ6nze8}7qGymJII;mS-5Txgp`_}}Htt~-$OLY~ecc78 z2#6#5%fto2ICyUzw8jxMqGbB7Pn|>qmOj4RF#w;yQ6>iuQenWLNGuJm756rQo8rdS zz>+%%3f*R0EX8)Jv~R7An+0qn0~!#5WGn_k>*tiZh#^0rBTtUynR7kDi$BW^gE&~g z)tDxV*;dJ&jlR>ta@f?fc7rPLX*6zC)r>rXpKqR9?(CNGIqzjAQ(hK(4d8nwCv90E z86LsCvByy29*=>N@8ev|GCl>kLu*H)zI)zZ;*jDt=U$i%XOn1N=+PzHCL#+KP@ZCe z3Zkllx`6A)A-X&8+gIx5Y5VU{uJ_Y3U}VXo-u9>=*;B@E%v~a>Qr)fx5KEpQrB;qN zoC{~Fh}&54bBCoGz+q`?np>g**j}%_Nk^11{Al7#g2S0eA0om6jgqx8c4~X+Rl=Y# zB0aJ5qX5}8|woZweZfgfYrqp*C9IZ z8|hdD-qLhj?Pe*M;bcOeec^31dB2=&C|?C3Ge4koAp#tiE6c9p%@o5T{3KYVhM_YnRZ_<ohN_E^1=1Qm@-AI|seYM%+A)=iY8*lEABiuIl>3l>q2WUpicPo4F}F1`5va8k7OiQGbi+D7WWFe z$vMvNN?KLP& z1XS@&&I^VJ8&F7zsb>enVxkqKH1D?=eES@ES`8ANH-WQ2Jq`qV8(HKpR}sz; ztM+*&R;l&yxa7-@$fPW!jaEPn1>@58Q=Ys21-&Qa=_{c@2}_$Aa>rSKbMQbSMUcho zEABTOyIuGo6hGlKVGVH{*RD*Ug$`U()U>B&XSz8dwDNB?0ZtW44=J|&L6PalVGBJx zFcJm8SW31a2)V%+BrCrn3R>fx z24K{%>Y&*Ftr^hhOY5AB=Z>2k#15o;-?SZ}JblQEJ(lzshK$^!AoJgK56!*?+@(+b zR>7Bb9jmVz99TEg2`_sGudG=f<-yr|6H2~aExSB_g^PXvC-7iwKV+=->{k_Y#-EQp z!~O!uTI>Eo+_CN$p9gIu8l0Z8Uf}dyiwe=&jxc*mOyH8-@1U^7!xnn<mWT8x74b}f{YgMI~_0o%d?dY)F)>S zLLUVXbsg8EV7;?jL@e+XMpp(N-|QE$)^sya#K(-Hu*? ztKKl;Y)MQYa6<9Zz7AHcQ@W^+Yb$Ijl^IxqQ$A*gsa+F`3p&b1xBH9dG*L=auavCc8_p&0o70wFNkuIL}}h<|&ZXj-nX( zsy17MV`V)26A5^u+Q@#;ac>t=it;Upd;^quR}5@AET?=RcFZt;4V-M{e)rwIzZ{1K zHQ!N{@W9NzC}lUAQM#-^mGD z(TLH5HpF%Fl)^vMmT^dlRd6>!if`o1I;pYr4@bNS1FdZRke~8nf~#K?FSawNN(^Q= zw8Wk(00K9XcM|;>Xm_}>?=iq}$2E44mWH(@E5BOXjm zsaZ%FdHHgIJq6mT&gbH&Z z*slrP;X2YE1l~$68e&esvAAyACbZ@2vr1BU3!+BtT&z?^%~ zJW`zW+7gN1KZs^)FG}7ut-t-?XMu|H=WpFj}GgK6*pBPPi7V2fZ({I^Msw782DJoBVn>YvX6c->f zNfg`@J1-za0js*$k?tINY;4qDF3ftBzRj5cYzPduD_@zX1;U;zGxb{Qy#jV;>SU}1 zoEVSO#Ry;Q%*v?R{HP*&}?v>Yav6-ttE?A{Hbn}aOOL+0H1wce>?c` z^P9D6>Q6WM!*r=|-&{zwc_=s`D!|%t$OOSi$Jtm|g**!KD%pNhKwsg)$COpZ{t9Bo zUT$P>S@M8hchoc%$>Jdw38YKJs;c8d-F<%MVt>A7%V|2usk(O2Uq2rAMl7PScsb1X zFt%yyL;@~84xPc);ypAUG80Rv2_x_97P1)N`x3BdlPK-3k77T`AeSX(t&HFDDJV{& z)h5HMuDZ0L?0ULUj8BE3Be~qQLrmdz}tjyWa*BQ^F zI}R+$Bw>fZs5tLwuYvUIrx}p74lP?t4ph$*;((wU$Xb7q|2J-9?-sYAaRha@Cx+_Z zo1%p_`mnvI&b+Ry=wWA}>#KLg~{9uF0u?b&bSYi!Ym4Bt#!{Tc9e?QOgYo)hOt$0>_Vr( ziUfP`gLq8NZXd2^zFyva9)rlchn%|0YjW3uRTQ|}mS#dY0aJH&i?Et+R4@51+eS>D z%9qaHISfiS_tk$yN%*|s><O}i8 zVbrVQx|Yz=_lTs4-&DZKa&EA4a(&A#MNvl0Fk#vj;d?isSA-H?D$f{~m$+?Q{}3~p z-j&8p{DnWgY@w;}*$>o6z5}o{he9g@u=uf|8d#syxwq4c{(L$yWwD9XBGZf}`yAN5 zYJoUNdtSh4N*(`VT;*F_Ci)y2nc9`yHd5);>8Zr0;ioMTzV_+WF?Fe$1rE+i<6TRG zp)P&shH+3_IhJKrR<4#6xCFExC}OX!`SL1&M$r@ktTPzVkEe$N(O5J-6eRP(`u(L% z3F1fQmj&W_pqdwon!}Rk#x+JbyOFYz&%*ag?z7ZZ`}<{lG2+rx3$wdRo_z3yxelcw z)sf!u;(A>nw-3jKnHP*ko?>yIYgRRO2aZp7IHnD6lU@1%vTf>*(*EYdMmFDWNtYxp zaGu19GGu!s2Dt7)ez&(v+QAA4=mHkgf#f_*QWID2LS!Z|9X1|+IzWONP@Rfpcgs(D z%75dJN3}gwhWRG03(55p_pML*91d)CJOBW?)BF-f!MK8@S9#>C)$a7_5^YmX$Vj|pxj$_K~jlUWtW-h0{&*y<1D+Ogc&_<5uS*|g8a2!-ee<4;H7ck{hxF4RH=+-?oiK!9+4W&tglGR(0C2jgg&|D9f4=sogv^fig&%JPh_VFnGM7A#W zyzLt@<&3#JRYl0iO(tS*pqxyTx8a{slpXy`xmvwfOU>?Qe~ftapA}MQ{??{dfNQL- z)5q#NvA*bC5@=xEZk**oNU@Mw@ziV~JjI&5r9rLAbs{_EQ3Yp9fL^RPXwrMc3#@Wa)Bnk%(}u0bzwl}LQifZ;i5 z&QSre6rBUeCZeztjNI5KmpX(135tGzq1Mx-?19~*;+f&v2ApJ0=@JPM`^BLMKnNQFB z!au5ga5r;!L1AehDy?KqIBCJE;pv4V9Q=W7Hu@=xq)kezZpj6rUJJybYefm0&e^qbf4yVt z#dX?n#;?(-;Oyr%wfFBAH3MO>+L5c-&RZ10l#q{wPybC1f=?o9DQtcI9V3k_*oH*y z)sSZHsDe}2`V^GwzM%F&!VCr(drKd_tCyY2*n-rr`6ykYRtie(oOHt07L$L>=+d>k zO&kF?OCjhzbWPyes}Sw=QEcOE+Oo$SUDFe{lJ&c8eOi7H>BQ2WZ7tSMjian8*zct+ZZro;d_C*S!-cNAyyn;k?|giU95S9xLXJa4x)UAE-v zZ&m#S@lbd24Sy~1-O&VkoWdqA4wOF?DxP}{k)5jnX5-#e$axj3cLTXWpg&Dz+C3xm z9+lpek9{)SS_DeZgo7sFRc$<<-bGPsgd?;hEKSCFZ<0M$Kt z4o%^Inq>3!6X-D77MA9c(dOCdpXE}Hsl_H z!S^OSqjg+INm$(3R=pERm-3EsEcK5}&1nlorb;IYymSb7Rsu&mD(Y8D=_~198^jTs z&;)IC+hCAy;SrDdOy?1K1y_!&6F{YGwa)Cm{6?J z?d3~g`u4(g4?z4y0bMZgHf78B3=lYOWD~okskiFOduWwvPY=Yze%nN|NoMtEuE)QM z)tm7ZeqW>xdVtP);%V3v&Zxe_xo_R!GAqn3glQW*=Hr|}Q(K%7tw&~^56$g9)JH(_}uAoy}fJYLSFLkuae!^ zKQ)lqnU!PpuNwMa)mZ=W)B%V=aCcn_rj3TJ2JIgmV}M}yQG-(5Mxo74v)?^j6IhqR zD;f$NZc*$_ecH9%nP&4}->6E#?O@o6YW`!U-Ry_D0pC{d^{L*?XspI*x%=K$s8P=@ zE1fJHXQ2IGk6whBcBCD}ho=Y&zIlp&7Qav-vU|3Hzb(tg`rUdZo%xrCP7*~b{)z+A z`hwyvB(+!B#~Gy=U-FKt(Am2M2Hk!otl#v0F^)Fl$gn7=`KW*;36?_t1d+y9y;yVA zdbB=Y3BjWetkdqIKm7G(<)@g zA?z!GlO!W@5}J8;`!oFEU+>*VqBXSh%5WuKUa-r&`|kk$=kNF!#mcW7xP7YIBJX)*br1MeIihYC$N7igp#2;{_JG$ zFe>Y+=K}&?fj1ED#by{_eFW)5$pK`4M77L{?}|>?Zl9Q3fngqY%D|=9A2asPG=D#i zL4Qe+EaF0L4Na~f>KTwdpPRI}>6_ydKn?66fQaDw;GYf|8^OYq0)+Be4n`|(pz0aW z(HM2d2ePm?z4mos-rKpSxQB{FV$jIyQ{9TtGd5c&6&$ z$7(3_*XO<&lCc>{Sm@qrE`+$=rGDKvLpzlZ=aq5*lU+cWbcg$<`7QKzZ9pcyd{E2% z1Bz>YUtRk<;geESC6O8l?_w;sQ8_iaT_VF{^w=7dtBC)_oHgSq&u0M&#mHpxsC0i9 z3cs$oAH4GS?0JPRl*~J^IB7l{Q2oYv)z7bl=f0KG6@mv*<<3_`uk8*Z3%Zg2n{4U} zC|@VYpLq*^Um6>L%p^@bT2|{JD(~=D#~~!&<-XFF|Get#^gGOjwITwFl}`-0^0BS) z?9?(Q2mDxgcr2SvyZQ=5N?mwHJ}BK1(hLoXq$nUUbcoU^$biTLDAE!Vhi(ZeMQ~I=Ksuyh2$7QRP>`X! znSq&ee)D~=>-`V*b!N}nEAIQVE_l}0|NH=*Qi~=*IrnG8MEITAv{q4l)L5nA_;nwo zHtfW08yLwxM>*L9e`q=iZ6mRf1OpCWQ*GAG{d|UOumAPIp8(9xbA|LU=`NCbe;F2{ zVhyB;w8f%%#MrYqemd=SwN_uZKSwXU`(=3GTVzt`hw%qeKH(9PN}>GNM#Z{Qq2{;Y zhQ3`&C%DYNw}F(^G|_S6guVd;ho-EUzqg6v)Il1K&hbK?VCB#Gg*Y&s+@U#@y@WU4*c;# zY>(R~wW04dK|=vq-TU7lq7XXWTCjQh1A~)3k{FEZY+D|8hemv%1}`x@ao$GML3>Br z-Xf>FZr-gG3ok!s6G%UvWEQj~FHzs$oh-5><5D?#*xReNQ8vZ5$Xk-{E)yRi-qUX^ zef-8tG&(-ESxRh^PG8p`_1bYk7@2rOpvnm@Uz;2*G+(kz?&l{~HiQy~{P6iKO4NJM zhZn$_-K+7<_AR}0xM4PM$ED!!!#o{1T+k@sHw7s_1#dHPuCZ>cq@4Sp)<{{k%vVQO z?{TE@jA`*b!!MA$rziqvR!vf?nq}GH3zWtEVkwL>>q~;%gT;DAudprd^*hL`rA08g zF;4u>`zbvy_Wol)+PkZ)BW?T|N?coeQ@{oBET^SuF?)bYze8YD0DJj@D9AR8Hdf<(-oTd6O)TK-|(G@DcbP$4n@EjSnUteA+of znSK6an?KZy>zaE7<+nO91^&EXo=2X)Gc_Fuz0+L#Q+Dh|NQmAfqv}hjsL>5%1|Q>i zS6TcYSbAiZ99kwcuffvNl6Hsv407G1cPb#Ue`1fshU0`k7eaDaMoT5kU_edjdSx0E zQ<}SR1aZ%`KU-|sWy@JRbRLF|6+K?3wYD@4ybj){{!g*(ZM!s!#fQJP0fMb7NiNss z*Om&P#sK}fe}nsO{-&TL_GkXhgY9xIcM{jtzO)#n_4hM#(A5(37d?}oQZ?1XcRM)- zml87ZksCzApxN`wvz`1##wFtGnho|ncnJ~L0*gh6V*x2+o%!0&+2&|Yi5k1qs5MdY zRerA})&}%>xAMvQzn1X~@61f`iyCX|KTDqXD#LEx;b_5uRWNR`>&KX1p z%idnS_9s1Z2SDD_CVT)9_geA)eSDK z^si7{0bfAa(UH-jWz9;(`n=I%iWd`vhlP3s^(3&k&&+?lDXw%{DM#=t1+`(0Qh;ZT zuQ>^B)R>fepCO_v6@OV9r^6Js-_su?9<|_*c36+a2ohH`6Lj}gCV_M#8WU5I`yBao zH@$_+80USvuD;q_`^Mkf8ed)p^y!+kzh=&Ze@$Xj5zAP&A z$HdC|=RSDOCn`ewzF*|x2Nc2TrOR*nJ1>Wg#M29p{o)CPHHvgEQSL+lG|y>4l{+8h z;pte9HOb@wJAa%rzLsqL&Cx)(Ze1d7>3pgWDxrqza1Fcv4gcv3^r-?jB*(Z` zke$#nEZpSr7L@b4b7gkMxBnd1N#q|fgdM?`C|ay|TQYrR>8`j!#u=gjN}Sw_9)fEL z+SV7R_j~_DRs{E_@Mh;?x3z;GC^8R!xlc}e2xQeI13S4})*kTrbCOrep^R8W=uG)K z@Za9UlZI!uw?@1?n9(Tqum`CkhOC;x*l=w0Q146bIZ z^S%Irx;1bIm@!Eu5OqAmpPqUfSCr>nFmc!EeLs1eDk*gyYW{Mj9G8c6KLJ*IEv>=Q z2IDb?!#-nyx1QT2Mf2?!e}lxKA1`N^%Ef;*f0a%AVUfhG`0KbGz2R>^lSu0S#}$?K zWd`|@%KRbHu{3D_fRuyg4g#__Oz!>Sntwd|9-Mh;nS_B|nR~FT`8mCT zy~cmMf44{{oCWVlvX^!$sd)5AgZ|9p(sjk7=GKRYZih>K|IGd&&yjAKe9D2Pk0KxW zfIf|NUYTMUzYEza%4IV8&+9I3-lQhFXAss?CeiyX>c4OfX{qlF zx9@(C&&`ht`~09&oYFht3&v2ziS-1&l+a?FoAn!xR3+e8*Uw3Ck^RZI!6%J((g;y;s8WDTVUxF$bs0FZwy z1@f(TlL)%Hg!eY4KGg3jTh1>uarpik6VPH&FS+4mcS|X zo@WeoJG2Hxb(bw!{5SR~k5RZ`Sk6GpHbNFSDLsdFK3J(bE?U}EJZJHV&9}Gbc^47R zZehU?w!9?8lsCNNKB}27Dl9SmQ+-SE7fAU8l2!_M&%GwugA)C3M2lFY{p2878Zx~? z*kfER!V*@x6@A3#OH zWQ+raW>CepPy3Kcw+H{MBEZjm@ zq=s?K!K9{&YfKNN2d3b|%ZMv84D0L72xLmN!!C9Q8-Z zm2NA@?sBmvC_3aVG=vY@oBzF?|6Jp7Ewjc6`Xx_oa*1b;q89PX4*StdG10W?d;d9+ z^E0yR1pSLhGhQON>Ot1sU$5jk-eULzSU?YFEjwR{fG^C09AXDHZZFr`#L}@rrOD&s zUs*ttxbHY_y*@&DV*x(no8X4#V7mteG}t-q4T#pwIPt-^pEHTDU^DOUEE=H=oqm7w zC3DOto`N>m8N2d{RjxOK30LNxk(p~o1e5Wep(x?@LhuIM0xmyKX=Y$4LHcZDMoOEs z@ZI;Xey={c;VlV^{xU;j&ykijH1$j%w#>+2=q_Q4?7GDQ^p!dv-#b>20Z6~Rp~e1O z=eY3BdTT+<-w<%>ue92==a-QZSCFR4jTg(Zsb1j_Y5-EN{it%{f|*WC^ML=tiJWRU z2({IEV8SNqHbpHWq)lUldP0WvVmKA{pQEeY*|ET;%_@=?8ULN7ArEiy>_zm-b=BmU zlG>W$T>~UmeL~^VZA>gd`W*`}$ojk6SS$vABq1QK_@YW6W(eWb=!CZVC-7(7CwgT^ zMI53${^F@~=?v>4A(_~_nXP(1nMn`@W+4u$=9N+1!khPCQ<6EnOx)uN;Ktz7zdnc% z2POy$$0>kMjs{i~JMJd5t*hq`K}Y2ng~+4v{8vbhZno13la<6Hgu-uMkz6$;H(?qh zenGxDnf|9!aPaF6VpWt<@;JM8r|dupQptT7VpCg)T7Zhv@_DT!4Y=TckKrpqfMZUO z4=U&|m4@@beOjNAiXSUNk_ue`tO%uY=IYO6bOg-ql#NrJd5o;GD;7Z%EPiWXIgjhi zb9FCAcRC@uPRuo9qvTo(mn&iwIM03WV&~r{G6d}Zo4FRI$FzHd2yOcJOKObiQ~Riu z$-|l9OJr|}^ZO%|6#-EG{v?O`r-T6O32>@E!EJ+*uEEahLO2-S)~M&S6Df1JI95w* zIVm#Vo*dtLxwJDm%q#C-H!e0{z~WbX_Zmkvr<^|WSx=sgQxd%B%=5*s&90cY3a%@4 z1YXN;S4A5qGuOJ|84%5WElmbjnXbb!vjl8whvprwp|(}_rK{GJr>09 z*LUf@@)Od#7I1YdB+4uob!FkhbtL34Kmy$@XuKZON!=OQ+weaSFeKpSjBC^RK@AF* z{uBWn-vt|NK(8xW_&5ETiX)~Sw9ydyDk*L9)vqn8pVnYm1f(y0{G zty|+$%Mg^mYmh&rVSKF0xSAIBP+fOl4z=VlQ(?LhyyOpSVr>jJ?N>G@yw!irTm1HF z4MSdU3*sv=j!JeKc+T&~BM8Rm7p=*7xpu4PpY2^<3VznU>OF9ftp)ITkQ0`3DHvQB zEU8+^&7z6>1D1rmd&~N{?e|Nn$Qt)xWkS{sNb7FEUVWorWOC>`M$&st9;M?1?=|?W zQ#M1nO$UH>{*LEjbxm@6SvEQud8#wPw?3UV(g*q(C_Kd;4XA-1L6*S9ZufktmvbBn z`_}g>oS-~NdKoby3=VCrz$Ip(p_B?nNFyH|nu>XAch&j~Uyw2>x>3m{Q#nEW-Kn9^ zOD8DBs^AFGnfl*y%Q@YR@o48>>&QeKkOx;_rjKOAgIwqsxL6cUo4|hJYcUG@ zjd$~;3<)McPx$AvT{&2EYbP)t8V(Jf>vv}W3SETD9{*ya?q5=0{M$465n{G$gWllx zTAfYACcIbUsVe+R8fsh_wwEmObI!|iOv^`uGaP`=V(sp-F-D4MiB%Amu|V(m!>uPl zQ3`jq+la1qBE_LXu`_}I0fWn`{Ku=(Aw^N;=PkPX90QwQe+l%kg~Xiz6%Sjg*0gXV zjSq1Pux2AP%6(C%2RQ%o7x*oC3T)LRYC7LK&8qwDMZO2O6M2*FQ6=t(E(+BQw5dMm z#%PSp5`YlSwHSR5COo2c8z_O$J7Uq6v47v86!rs%*sG0jSq_Cr@HnyFZT*IGA-5&g#ufS%j9Rys2?#jK@D?Yt2mc)q!aA zU^r{Ps;r2;XEEu2f+9k+JmHRksg^y26U}V^Y zy0{MDO+&g2BJZf!>54CqywC6MdFeb`jofeKyORbBvl7K_C z(EaL0X;!whnzQU>M?7;Ls^cd6p|wAi$Q=cd@HyHA(&cIP|5!sD8Zk)Xrc_A}ZMONc zbF&EYfXOt~cQ>#y%sD;HqIWJ3jjlqIwQlO1!I$5GTO|po{&8|g!*_6+Oy5MYQG7N0 zIycae7)&11{3ii!x%hDo6@I)iG~@CftVG6^`;G#ka)u`<(LAz}vqnTF0ir4P!fa7Y zU&wqK(LYyKaET}IwYwRZSeCVV1YVt>srKBZV*0q;_;v5c58u=m_0F8P$`CoW9G7qe z8bu_wnF0N@MyBP8)NKPExV)5xggw5O5B5KoAWzdq43W~<%APFd;{%RBAxyX0)#%Xo zB7OKOiY#bc0XhhR176FK`UWw$sXGy0N4qfSZ1Q7|piS$eCEs~gbFU0fW9damQ$xtA zNpm@iEA2txSC@IkYj@&l-d7W>CZE%x)EW5s7v^V%AM6}`2K`<3lgr2 z)#pb199&pMU9;KAxq#_D#(4CW$gB>UI;LopZ1&!7(m~}I4*~7Y~{Qes78wq5x2D^W;< zc{&GXh3r4_>Dy>KVR_c+)hl`JF-Ee@#RCm2&@CS|QTR)x24j3pN}T-5Yr$MESuWce zMvE*w%^QPh*f(_Y&*@kwuI7#3?yFx*G-~24+b6+c#ZE=2Y}$=f>H4^W^^xfA6mW^R zY;o)p18`XjqM}S+&O-1`s>ddIfI+Vi_HrLkFifo)#znJEpe1j`p_T_l&)o30JTdG>YE)aLoScXD zB(3K_r#!FiSzy_zz@t~aJqzj`+VcCnGoi|syKilVm+GQM>!`Nsw;}r-SRvwQ>153# zzb{m^=+XfodjQH1Pa@vzk2@aA1!}jccij}Epmh34yrPO-@W=`m{rWn4g;n7c0jm+X zOLi}6Pwd2>BH{QMQQ}F8Ajdj9fbe9!O^<(lq=WnN6Gvf+Wt z`yG6}KW1|xCcjOz^Ipl#?;$iGW7wCSk2?CGi02M{BmxloE>x`yd#Nh)Bv!2x%P;C8q$4DcoY*ZX%5y2AqP}R~Z-YwOS+3LCgjB6X z<1E`CLvz`U(RX-{O_XkaUO)$7w}aff3A8${t4cLd*;QDRdwc%#5VySuw-c6UViz;PKEk(QFe006 zTnokN_3qpyYk!p)jt=~+@O5wYwnl;z2+yS_XL$_%p~XCx99U}< z2*tR$7ZO(@C;t7efj8Ydjiq&<7~?N1u7yNANO`)dI|M*;BoKQE|G~pG#t4qwtgDCoYjb(rOsm%G2N>0BnXQm4 z%Q?K`n&Sq72LiW|7bq5>b1EtUeF#E9uEf_4ptly>L<1un9ep|Gf(#r;beJRuLPKs=S5r=RnNv zocLg47tNPE?}&u6nqm{X5<%#3!xy6Cr;Y?KU0l3074QyzepusL^yhUH#(4+JBx!Nz zyB0nBXO6|RNscY(-26uTG3LZJ&?v`S?x=S6L3>$j0T07_moWeaIR^v_UcxWu%)i6d z7_R6!1Rp;bMGd78!yHc0DPq&EvZ6|wxqNl&EAT3seXoeW8ExYlpKlqrB;NhB?Oij6r z?ruHq%f)hKxe%{FFE<)~r7Rey+RN=Q@aMVZNJXA^#W7a$p>X;TR82(@aDi^RGOIug z7@2in7m%(aXjQL<=Li~Q`N}7o$U%g!F>vZr`V(bi(?PU+op^pBM%*!@@|3;qu-tSE zMQXFL2_-4-`DPl5UZLEWHK@S_&)o;zNtrOSN4?y;ldQyDh3rXMWWDA^17RPMBQ-xI zw~+Av(iFJQi}A>`8c4SKq{{w|!k(1+r`*&RiZVL*+~b8Wv6Q?F2G8Ey%Ve>N+4Pyc z-EHE-`$f0YYkf~<4LES}lqG(1Gg(n@Et$}^JgVdjLiK+T`%~7B%7FME&(@K>Do_lr>@-C)-VN3{B zW+NU(g^4e56#Cs>spPTB`y$}%Ljk&NV-Q}1PWB}vT-X|%bqXF8>#gw_Z4l#JAqV;{ z#@|h`$xt;qxG9K+`+P57MMRL_u5Uow)GuX=u8xrNkqr>f?P|;>X!KuUn8Y(t?}<0@ z{z}t7c%=9v)&|gq!uT=NUrai^*KIH;23JClX9sS-GQ6CbIV$4LPp(_3ESC}WxCbqQ zdUM4-ywh%=53>pWpuVBS{4K6&WjKk;-}H%jHMR4nA^42TmS4qk%rqz9b^V2jwTuWH zykYl^l7Tvw3i=Vi{`T?efNU>d?VwMYL$CAxxCm{~s<7c>7!)vP#_)Vf=V_JtD;s^` z$#${EKg;2!6uWQ_%rl zInwt@nl_Q3@uTEU^7pf;Pvy;HRH6RNw+ThzCZ$Ja-E!PC$x|MJZep}HzdPm|A5(_A zcCbXt9+!2COKaabW$sx;^wRcAhks`AKc2B*KRjq8K4SzIuN#6sip%z2S8&k<3weL! zZwA#70|DQE?7ZmQnR^?Ks>c=I{RQw@O!q?><@H}fXjmUG?6)x^aio8J)2iy=+EJKmOr`e*V%VZ3bwWpSzV zU=p&xoxMYud3c_UoQ`jp(8BCjN@U*iJh1pS31qI~UM1Ik0@PEo$1y<&wj%E=at$`> z7zt=fUOa+c&XTK+Vb3j5vUBa+Swb<~R9g7}T65cp~Q{itLzP5=3~ix0>1 z{&+3s-3MVh%KZge5Z*VbWeBt#6qo$GBQ~!9Bv;pa0Ik zNQ5?ntUmoS<8+_eiV+C+t7`k`uEmpuuTP8Hne!ioJ(;*0_({=Zn`TSJ8&+N8Q@i6y zYx9bsw$&c6)@@F@H++(L(7aA^Z8w9bqllLL+L6)1wZqi*l^jDou(lV+jJ@Bgp{g)h zH9mZ0kl^vds>m4(AL0252-6=pOF&s@#5UxG01TcjHT%dvY_6?#?0tcIt)i$||K^Ot zR{z9sH@9eODVo*0r%k-&cz`s{=Sq&NXn^4aNqBq6DjMk@5oEIosNdG~MFW$|jV<7i zxx$$`x{~~n&u%|bziJg2JcbfvH@T{H|4d{DPlTQa;rbhBPjDn-dmXL3K*$CW1N}#7 z$v$W_=)8MWO{Nq25OJVv1fFX-bX@fl3W-atSF`9)=4YSK?T@6-x^)H?I=m-1b@cvA zXv=-lJ6OWyo67a;7ZHJkM9JKsF)mBFFzI;f;XCz`=m&2zb_f*3Y%gg|^mPtV*6S+C zU+B1fVw#>{dnB(r^yEoRuV&H4H09Mhp-ucpk7|UsHrLGTL(vZzezn6c@zaH~43iaW zVn1z`+4BEZH*i8hl4}Xd^~;`G9RGg5zHKr8q(V?)8iEaYRXW43zANhnlM1;)&Y@(d zs-6`GbM(nA#?qgjv0WZazUom{Hvh)E(uWkgyfda>w(K*Wl88I#)OXt*xjJps-=0ns z+1EyW2^LWfGr_^HXnb0q?uX{2Tm)`K*YhJJ$1!Fix%LF;d0n?EmjR&>XQCE zv^tViEI!EuWW%A5=Dbj@i3HxcfOCbxCT!TM(FBguFa?}?eWM;&fU{=ylD-GBH3 zC_@s!{_Jksxr6}mrn2vz(xjFra(JK?p_PulIa;wdkiLWPgOr{jgHWFcC5%Sy`{ zc(szA{P*xDBk&uKuSTdm7@(%GOg3vt7KJyg7Ah;S_gw&5wJQ8*EZXw|`j0Q${w)4IXJ*aaI(9)yP|uq=03 zu&*M=9tv8}5E^D=pJxSjea&FvEiB237{Ga5Gp)gqHJpQOKHm$sUvc!6>#awzl-J28=^E8mVf*0ZW_!`kF56#Se%mT4;@ok9~bkV$>$T{C-@et$lKf!}QUb z*;UUv(lD4=w#q1nAkfr3%BdnM%fuCxCc#M17&x}*yk^6#Rnfsgf}aP5wal7QIG7#p z@!o>%oCy8*#>C1P>fnDZ1|NB9Z~NrPIq)+n*o5oPrr#7%Q7mBPDY0_(!q<@@54PQIn`*RwL}KUU@DytvnrE z=k7K&FuQfYV64%$AW@xpjJjJ^Hr?M=IQu}xyrFM5C%Od_ob`uUH2uE;;09q7_q(By z>%_D|zs?~=X>O{fMKb(z+GT?OyV+&f)sh~LMlv=>UE2GA>R+A0Se3 zHw<3#t@mJv-oA|%&~~6=*nnC5j$itg?Sw7-CHaDFb@OWieiC7OOVT8#;(U>+H}(QW zE5BaT2YkZ3etN?9^M~8lda}6^9xw3vUwN>YTwCcp<*ep;VO<}xO?Hk=$@YkvME~2O zXB5V;J3(X%bKPVYen424u|5jt^s&2=2Ma;i#l5mdjVRy6Ex0cPzbSa?yY%PEmU_^d2W6cIIY% zOhoK&49OXe<`)!Izj4B}S4JxDbinnAh9#^nda^X@)H3c7-(ZmHiArM{B8l*{{?(<_ z7->L}*eIg~7JTuFa5e;;(OmunjwKDbblq1*>gQm|D)9S>O5NmgoN24PopkW59(-2zAJX+D9VV|ELG)rS+>Hi` z(~lSsX${<_y2kBKupu1FHC`o)-V&ZHH*)Lo z`1T8LrA^)w6+04HP?e7ir1-g{9}q^=iEZmcHGuT>V09+XB|nq^Ee`|P%IMBi_>ZB} zRLX6{$a(DLx&tq6t18_?08p2547?-0j(o61qkpu2Sh+K6%_y_JBe7=KWPdLSzk)pS za0RUHMacl+)=&9syc#|%&4U9jKObmh!&4NW-(|H=QH-?MCyF~4Y0stV<$mBTZD&yU zrYPWXv>z{`0!H93=$p&lzzwEU^_0vbt%x*1VPA7|6M{BJ zpMX@Y<$mHtK4kn497G=L9WHWMoZi^+r8d`$A<8@WRB3e_pqRCa+Xx55ZNf~wTp$r_ ziM-~v7j7dVn6+L$ZkZisu5@KIDRxMHW9S~^BX!)`3dIqUE;b2Qbdu{IV~4%2CaCd< zr<%@Hs=MYUu3sREXN{gC=`J3~Men=bsLf#_}4REwGKLQ8Gf`5ss z^Fpj??h_W0m#~R*op>sZ-M-!C%MtY~;*J_sN{>Chq0IBDE_%XGy|HW?cq}497J8I9 zRneia&jqnu@-lD0|C$pI75dx9vz=vy+JAYrAQPGJeIJ)|#2Of^F!f8PSMA!X9;)`t z2$G2Ahyv3aG^}DjZ1220aG7EHX;9wSZR|{GS;$a(t;LDzcS2Uyo)nO(%J=4i@|$Xz z0H0b82Sc2w2Wi-I(lp{<*==TeC|A!O6u!J67Vdp$%4wrl=M_yl$$Bz~j zKu(}rvc=()=yP@GEvrF(8akQ&&eq!G8$W)o-3Z)u2(}`x`+W(8me)Ndv&Ud2g^`!CKLn&vWf!r8ZfwJUJ6j5SM)TxVtvtx)T<4 z8Nv;07|v6*o&GQGuXqS-t!#9h7XTVh!6y`(v7m7SwS(N%$jH;Xbt_BvA7wGHJr666 z#&1>PT;UT~lzaQ1zNQ}KVbl9>m0T$%5kDgWi3f7X%uKk=>DXNJJSBNWSp-h(r3$d< z!n?QM(Dtf*{{gvvS_v4NW}I!hH}dem#eq)uxA!|q>*}C>L#*m*>_-=1jji_Ct5478 z&W0RQhj%0Om*EE2nfmT&#^bQ|VX2?Q4B253mu78`Q_2~IfF_Bhn#hMMBP{BnRtd>Z zlxF7{FC@JQ%~OGD z(rc%_NkT!V|4qT;$DB$k!t+N5*8( za57R6P!l_YZSxK$j)C;*(anRSC z{C(*{b;>euoCQySq#JA?KpK`n4MNq=i+KM2r=+(lj8nWYfndKZ*iBlglNGTLcg64Q zE5y2??Kv_+?`kQgNbwxl(!yvFMbQz8`97!snXwAPECrq0tz6ud-!H&A>^6x&&RO;^ z>2mT8#>kn&3LU72JLUhYp#w!!>~YSQ*C)bL6*2z7i6Is&M<~{0#Vv3@CYv<3y#hcZ znFLt24M*@r?S(k%QPLda%C^70jN6yHjkWXBcQZ4Qvy6n6;C}YSvlxP_Ls-L^xh$92eY)XcpBQOzm%nf~ZQ#lC(AjUCl969;iq(`xgWb~Fq&)t;{E&TONMjts zc<;cUdpf0;l(PxyGV`;%ZSk6K;Vw*%1pA>aKR6YHl~rpUkGDPD z_E~`ke+yi~qyAf_x1kwT=|a-LGRC%Ko@-u;&Q$wv0&;dW;)fn=5W!S+{q(W>JynyS zcYAdl-j1Tj4Yr%_=3N+UJ6(qGm{q0E)KxY8m8B;E!=JEB+>`P=H2iLpfld@cy6m}9 zhJknP$UKA05>9zOL%oO?gxx44-V&p4z|EcKBKMc?BT(|@Xk1^?8WOU5LsdntJ8{3b zCF$tG;K4po@EJ@(O#%hc^(yS2!ZF^rwI%`?mR@uA;SRK*H)+rTc>T>=FgY}oWu97W zD7(Y|C2pf+$nN9D z?yGQLKvzsqrd~`q<$ig>8u!kE#$J_FTKLgtGUD$Y6s}-vX);kFN&GeOvF#g7M8CAZ zzQ_6uul_x`gU&Y98yaC^m1@ht`iJpgdQF`$-h!AVHcTluB@m)ZfivjzN~OUOF<~Vy zBaYz83x6}9uOmJ$A7!;&RB-cSC;RIyLtk*)n0G80yd{pffYIHTnd=r28vsc>2Dkqj zZZC@ni<%gHYWrn(+s)PCcF2|)=|68t_r-T`gIK;BLH*1&Pb6p!f5Yvsnya;9%sOKC zR8M`lob|wwKRxBz!MqeCM|{HTGeD|imeWa>ey1E^H=}}LJF}Zj>gn;VWx02vH`Esn z+8DewG03()#D2^+#UF`qvb*6g-sv7jjl%J@_g50u&$K`mK+mmjVCg_S3&Ua~6XN2qfvw`W(&~NV>1cy8eb97noh|y5Tc@i+_IuhptPZ zV%+gwXGrS$2?jw306dvv!w9U)Bx5rH_+s zYcOQdH|oAbi%sI@sojytqs0qe03i(tSzyMX=Hd8nk3>B*+xnNdqcBc7^83XDr0%3k z-pAzv_ZFQm?Yx5fbcr@lG08v!7mW-L3#Jk)jcUwsxP0Z+v!XB~WNGu$!Mz_7wTFcCYDJ&RT~FP2{++;cpa^-FGSE$v zO`^t656d~FtI|o;xEv4N;G1>|qWCXxAE5Z4ML5(I{bYuc-c5B4NDX)IJ#guLo1;s4 zpC&IaFJTT|BenobCpUU>igJTu4m_?Oju4V&nO!!@-n^-!h9Erh+a+PncT5=S@#;OM zPgd?jNJd9Mn+Uwg8Crj?n(vy(iATZZh-v!lxN8M8uV~n&%xItM=Q}KTg#0CL{TMsK z>7GmwJm66;QNoBDwqz2}vnzQr4zgY3a5=M4N42!Vux_ z8KA%-utWgFl8ic7DiWouAO0c{l1o|o{)MFRJY`Fjs=5s$)YVt5i)V0flD7UpNu;3` z&i75o8EwWMA*s+YOntEW>9C_z2h6K~Hf-t?2fh`1)q~e22y${w!9*4ESk5Gnv1q`k zHzl0VJ&(pcyUkeS-|eMiyN)_M2@b6P^tLG|wpiu0jEI@|$DG_N1NCYM*L6z@#6RCz ztA4YUZk|SdJ*yD!oD=K;DiV4LP3AH921iaGEW{wT{JmttVZP2X@AW|&GoAeQ6kt!7 zLjCTEw0Wu8uVNJKvj`By!e~^E&>aYbQ4iI)aVqES-z_|)Dr}Gt??dpxG~p8kA$CpXq!(||M2q> zQe=Q&@}I;y@JG!N_`PAMgPya@twj2;ZYnSxAXE>RlD$u9X=tMzA5qqAX#|~la^)X* zkvlv%FGgIgNlrFA7>*y-7@xDiZ%C4qp)LczXId;O9DD81aWNgk_sHahn@seBqBzXy!4c*8f)aoS0HW zpPqWy<5CE+iVWyxF4_R=Pbi0Ucu_uSp$F$F%Jk#r16L?`{XkWc*gjW}U+!&zYQl`} zNR>uiPO>&z0m+4QD`yn(Ruk<9CIl|>Ik+wmDixQ80LSHZvk9ANN=Md>CEZSU6=%j3 zO{m0K6`4eCu)XvlAUop6UijTnRh136AqG6&ev!+g(LR{mYAtOX-{Ef|dUC|B(i*dD z6JTb|rK?CXX?eluSKpf_Srn?P3wqyP$eNVBMyL5(g<1P!(4w^?tDS*Rc72<@Q0fLX z)lC6@V&>AP&9g3--YSYK?my%oXgDGfY7Lx*@K>)N%=GbkrYNTGewMHwX(bHylvoj) zf`fGOsUa(dz04STq`@}3oxu+Tqx$5I>%87fH8F8i=7DHPr-NcbadgC{(u^p4v!ozo*d4w7Bfv*dNZ6N{NAM# zGezR|xcna(&C(hKkqXatc=G~_!~v_SnsJS~sR1T}9CtQgRvgz?*3Nr3WrrcYL1=Af z61pX4@5JpudKKet2$ERLjzViXOKwjG)^FK`O_;g>8wL1m+|1U00~61S0oe5$@5W=F zq*^uaCJs1>7@F-CIn-sq&xhXudx&0sVIjJkn#lz<;i!2^@Q5IFwMNmNDHUI)50ujt z^&~kb3${W20+F6imC9q1h{RIhh9hdmdpAc#o<1FY{~6d&~KEgxsQ;lbKoHOl1&i=5(M0ckvv*FogAAEF96Jv#ILM>)PZ}v^ZH>Te5^o zr|=%~sN94jXd|6xB4ATqH(4LK27g@qhDbYaYsa{OOBO_pVHPCKaA9LgN41Eq?YZ1x zs4#d@@oxfjH&@c-?<;|hhAh0HvJqKt?rV$zwYqp7>q?4376$o3cKNbP>XIoGSNn3^9jeJ_LDOUM+PiwGV)!HWEmZQxI%n60*`p% zx$UZ8$x8L^?%jVzk*HxNa>|gfeqCdfW;*LF_W^=fB_FrpoGQX~p;fN~#&p1vs0n=| zrBAZq#gau4cNzv#;TIw4qx@y9>3=8vo-4}(qq%ad$#)O4KX>nD1M%jVu5O_%h>382 zv4#W!bL8;e4b-Sm7bEy4p1GKbj-mOfCaWI98&67$-(wx@J4x_`0n~i&(l@XY(sz5S zhY5ma+@$!);R&Wr9VrNJ(kEF*+{CL8p35E2m#jsuLeM;^p_GVzn*vs7#@tJdU|M;~ zDk{+Kk~EZ0wan+}n><*EA2LxaEzB>Ih>6IG5 zhF&P4gx;^4Jk|%xK6iEDm?G_=J|SQ8esvxKXLo?it1FG`>Nnhw{vPOQt6)$RvXj3( z!0jTsH&S%uz;fTZSMxhO`@29WRZs3HOlx~7{kvgr-f<4YRZ6CIhU8P?-n@XKTwd$k zc;z32gZ3gP4`VN1%l8d*j&1gXkN+u*e=aqBPOuCweoQ$+;j1FRsTYP+9%p4EaXs?O z38)K5;=aUS1=5@6@Niu0qcDZU^JVl%X3&3Ust)pZ?mwSaB_l!t2spPlN%09E;n^Ti_Q1JL*@gY$x_XHLywR@q}$sQFoV`d z9y2Cxt>0e}xh;9XjLLONE^?|_=S{w`K0?A;|=w`rhDoGxJ-ZHf)W9a zR=byAp)3WrcG~#o^%at7kMHc}dSy9pfK=nc zf@%KL*}qvR->f=S@G_e7bM<0&4vhNccO(uM2YB zl(H6#DJbF~;g#a}#aSX#)|*2xX-Awm`;bM#7j$!Il7gSkxHha9y7e0C`_)1$&_gg2 zbiJe+70~&i?Nv)0`c3dG7P?o{3`{x0h6|wWg@BgfR`_cJ=KGBHD2z;PP z&?0uQ@O^q@=G|z)PKAO#m}p_@vl#yHR#wX92k!#zR=;@EdJlU=?zGxCQ~mW-kwKE5 zm-l!qlf5q1?>D3`BZuvY`&^CvMI%^a5Zy%cF@psGoa4J7`Ody>cFK;c`gy0aNEH;XK zrg>;Og{4kYCx(_N<#jeGD;3l)Z~sOA6?tv^>P}mJrG0vQ2R@U{4Lzf3br|BG^FbNl?)>2~mYSG#{`Dy@Tm2-+9y8|@az#9K^#W?GfV#fm zY~r97xrPQ;{!3RW8Z$5DwIauiQlVg4EwFHM#04i}hL&uid5uS6Qf8k;RpGfEWmzx& zlE*rWlKy#k&8Ni&`r`ovhf&^tOjt;lA3{RE6t=DIzjf36WGU*-2VPg{!Y(rfhQEuT z`$DI`#7ob`lyO|k^`J$q@R-I`fP-r$D%!7$L5ggnF@03REvG2_Us1Ed!_Y|d%^SDx zaq?^RZ!rx8NPn?)DWkfkD|e@&aAAUb1TGvW_lQ{IX{fXrnZa-4n^bvl78fau>HS;4 zOLmSa^u(KQ!pe`}X^1yHY{@6# z-+#f-_k7QwC=a(D%v6o#Id?u5mBQsu^JPTit-EWoI&}F0AcQwt{7l0CG53~TQNC~d zE-5M9-CYvW3@HNAEfNwcNR5D?#865P(kR_6B_+bpsepiVcXu;0_rAaX-`;EO{SNjM z9?Tk8tUInauj6x^@_Vy*>0e5>U^V{Svp*LUQ;}aEdFPm+*-16$uL!R)l`Daq#-Wu- zhRSAX9Jm#}iPrMIiWr)B5?&=vydc0Srr^S!zAaMe-l>im9r}*Hc}vmV;8y~Uo-4EB z*-AK`dB%ot4a=RrbO!cGZvF1dDN@k15WF|e2D}$6Td9G@mz6IYlP{?4 zo`F#D&C4HlFbLX^X@WOP9X7*ucl@)zCQ$LTiRaem+mpn;y2o>D-+j#e4<^iaS~P zU=A7QylsB|`yr6$1qP?AGvGs3!eDy0eGbb#2eUkvv$Gkf+B6wF5m?oQ7gyk|)x&|q zoS+t*XJ#Y^3uujC?py*?J!D}$du|y53?!_%UOn1AK4W%8r=ThhY|CLr?S5ro7#w`T z&w)*Isib=5MT?Ie_OCk+h(nRr`RjT#^DE6^==S?r=Z^{APfgBYo?Aep+~{@RuEB1! z{ARrWr~EH8M(?8RnDGb>tXtpj(TEGlnmr@LdRDblYU2HsHlhWiVm?^G-18D?pplYS1FWj%!IZvYGDqZI%HRozZ6 znj{%k1gPl%vMi{-fD01uF|bs5hZt4zAMT#L5^qOf$*UsxE)fF2YfmKP8g}iEXSTq; zy`AH4bIrL#Z=cH?k@T!Q@t~cfh%vsVu)NgKG+l5ZVgSSUU1l{K zQ+HnqWO+PK~F+0-<>yqdMrZ9C-Rtmn#Q`mQCUv zzePa^8x8uN_0$?Wxy<&(?ORUtMLl7CI``9&wty;~LjS7$86??iV?Z|XA3s|{^0xvS z@ood~#kJkFl>!`@Lfdk!Pq@~G&;$0bV9jXkI%+C-h6^R-_jdzO{}p{M!&hcQ0Z7w? zy50cJXS8#+lbhx=TFKIM4-#K~4w$oWr}pH20^WJVZbTWu_Y^d4h%yaww532c45xR! zl`y!Mg1RjC8_dJ(-s@ldjfje3>)mqp-y4s`x}sdlV!|raap{vQ%;M*bFV~GJYaqxc$2u5tlbsfyHQ^d3NvMx|v_cKL|1j@}6=DL;Y1QCm zw!E*mqi!^?M^?XZW}RG<*G8Sfoa>z3q2jp0d#MM-(flzO*g3w%n zTODaZ@Y33@!5(aj{mwGlIPYKYBGwUC>p%-xXfUQb#T*4Zcv#^yst6Lx+PD!+HQ7i~ zOFWytSZCV2IL4J`qM;?CNmVmd3b=J*K%!8xR0mNJL6yR6J|Wo-*=9*J3MYKSY=YsZmaKPdz-duhKVJenhJ=+{8y_ zasrY1d=mItI|!Lw+HfKF;lYSD6msIIN-QRN`jEaq z;C$cq1ypnZ19j~tbYxPYu)s|Im6K&-V~qpup8AYzhVI*B((VFexvec*A2n;oo zUDnqYQUC)JLb?TI>A5WC^I`S+H*`AMpHk|Co-#VwNp9&cxRrcX_;5ymldJI7Nn}X$ zVXZ2mP*L|0jf(N-_mpfZ%AAyrItsB&GE%DmomuM5#9@M{n^7B)h@at3OjY7{Pzt!x!BIb(^Vfdv!a&W&^%u|T(386Peq$o5?yY^xh|_2U{5=E=QH$y z&E{5)am$FfJWH*QncF+U&`!;(eoxbXf_!T9Us1ddiPV*QC*3zc!3#f91B&Ws#OfpO zn!Pl|jQAX*VD9VXYFG;EP5EnHr7N99SnHGa_*vImzihZ6Vd?bcELeRYu|nD~lgTk} zn;0{`O`B$Lab>ldj*&UU%zx-!ffhYE1$s7vyct#WV^S-?=G`M;x> zv{-}F@ZhW8b0uHOoeHW^ZENCy;0)yA_0`jodM)o%mlEN}`_15E&DnJT}f zjfmiol*m(wSRh06{`a8#fs5R+G!7}Vw43sn7px(@WOBb$G=6t@&-NG8cIGxfQBSmH zuchV$rPSRhB%7Ygh(9(eUeGPy$`wn;;Tlxf*KJ^kKj9V%FR%$7=>vuYccz> z|9XPdm=|41Xg}OvDMoHKt1E>G5jOJa3!<3{>ujFCZ&rsT77ijy!=eHAv1@1>oyu-6asi{#%_k8+v(6Zsx_61upNW? zH){@C%A$18=04bMPJ7kvjcB@-rtGj>b&%-yOV>Fs87b_%S!`8D!q4VN>4jzTQKi^{ z@=l$`i*I1gcd_g}kmDuuJZaB%t+_tSt3B|`UYt2>Z+5EzVH$MN05iz6txPjVV()YT zUs3K0IhfzX_nm8P;cq*;WzhzvRXGS)0!+`~&~bt|!Td1?M)L3T6f~mq4tOvNk_l>p zG)qxw#xEfg)V?mnVa~6#fJ(m9uj?c$#*EU+e{#zM7~H9q|GKpeY=1SABJ>pS3HjAv zAfr`hz$?F|Ts!yfZt0udsGa>eOZ}BlB~>u+o8_Ao7tY1vY7T`8>euk6XVIq5@cP>r z!DIeuk>2Q5ybY-)a&9eAw^$+}qOVUDc)my%0$TC{=+-Nhq?*n0zPL0{kcg4Pf5T#gPyf>c6W0Ch%1n=f= ztu(c&)7kQn?b2J%W?#PSKuRXxV0qTM_pvraLHPPPFpLZjG~Nve{T`QR6hQpdwejFc zUCzj?IA0W)M9MuJcUyy<|C_NVMo*C7|8%Y5s2Ee$x%*d3EW9y>yP4uc+((=@b}QH@ zu11PVQ`-!u?^2uKr>>7x9QCV2G!MEav!pI+1g1dKXYNig+m9D8m-bl^Bb8_iA7%)-5reF4e$ z$Er>1Si z#_%}ELkLtTokiBKI1@k;u$slyJE~a)(55;;v=FtnAR6AkqfKA-um0R}| z{e=H_o8zfqZYh`m60?JatuHSbS#LX!{p3(wiy+!eOvB;HF&0k58uQ1oQJK zn39}Z7Gc4Q%GX#9d~ydI)FU;bDZ>-~5zu2WggLBinz*K@j189s7mJoWDNGkrP3=vQ zFj_ZN6_fnY8|133GvTcqW7raVdp_EoBu}yZy@_{6s-Lw?34RZWFUYw(2=lG`XyZk5 zO8%WidI4wEjf=2ry-Bf{hqYn+Oy@_0=u%VJ-#swLW_ytHpV-@8hDGK^zhi$pL+C7Vs@<`o#0HeKS3; zc!IGRDTw~!y0B-SXDG~|wT^4XX4_$YO1 zaORm~eC!$=q)I**tMXvkW#jS-M`oui4p}|9C{OsTr!(KyoAd7l9Y*0Du&ECbq3*)> z9L&BeRk!#shLO5cfRU1Nwe%R*q|kDL8C3ykv<CI#sef1XkXwRD01j+~98rR;KTmZUOAvX83gCa05Ha04%@)5|YLw~X^ejHt_r(Kv7d zHDO!EXgo1sZ~3#@x*PO~y)ql6*}9+Q<* zX_VVSBK8fB%u(gLr{A;JV7;$D$UITpf3YBf+&%trFM8cs_XgV`}t;%g0ApH zw8zKDL!7MFhnRWjGT#k1=$!f(Dmt4-A;hcG zZ{`2WGnz-OCWR~w7UBibeqkBv5`AFK+SB%o47vG6RE_oCW8n7kG8Hy5YeWqrwq|P0 zEn*iK62RnWX}z;8B#_HBJ@qZaq36xNqR2>onY+|;HqCOqqF-_RJp*hLBlkk-f~i?F zsq@tS^HcnAL3)a4zla*fNCS){mho&udO>uH0>9|zJQ1L#>4pF3qeguPL4t0+IB8?{ zJbWt)vpK9OtW1H4xcg(mN;_lDq4k_&=(bs+yT5FT3toQ~{G^!ZiWj=x9nQk09A)K9 z)_kUqs&Bh$aNV`H!uO{TEin>)y}oEs{$dhx1dTxJ$^xeUa@u;B_Vhq?8}N7fNbuuZ z3|>%@bOH1(S17S!(7k$Ft$3ma6rh0zq#Qf2j3AYcUme)`MF1JyX3xs0!8FX{wd;>q z8kzp7_!S#QQ2h-K=>%r`uS09at{{q4!dCM^N@d4L+|;;W3=cl{=l%PAb6ABw z4stxIS?`t@sa78LQUm#4y#6+&%4+8`IdGT=Z8J-BFh*Ne@sI5kY3NSy*YH;b8^p#o z+YU=I!DWP9zUhTjnvck{fnUm)VjokDUY5+lvMkElCE<2HLT&hm=2FJD9Jp= z1}!&wt-W`jR!DqpN=>q*TsImR=x(-q^}dkdP+OEO|N0eW_Ug@T!X@RoFp zfW=Kxykv)xG~-Ud`2f0&0w;#K(y7h=o`#6+*ytBf-k=Xiul}s-w&(93D2b^FzX@~D z`}t9eDoQO=lG%5oA?1OX+)+<`3RLFE0?Hc?&d(q~Gay%(P}$6h7XdOrGvli0g71rX zV;>tIh-TFBG_`w@f0A@iZYPl|?8n2PnNMXrYIx1YrLOQKDY=`bz)!*PYq5aI9mMex zp@1IH$tfjbcuA7W$-T~+%)7^GXpw1d-%G~Ok025RamDHv;4;W3hg8&~B6Q+xZ;f;V z<26;1!wDvjz|E6P0X4gy{fhYsUtGwN+*&n9-(}?bgQWAHs~N6-~I0)60?Yjg^i|?PJT>`Y%m!&8L z7lVCWs^#=kYSWJWmt)vN!j`RqvS`nFWtwd}ldxB#+0AjITSXacppy!L@(Z9T==W;AQMj zCna2g&Ed-X06A?Nivsn=o&u=&_bTUE6e%lwzrc+~1BB?PKw++?Kd^q|RACvDK>VE+ zCYdUh;rJmW`f$@EQy?tm&D6Gcl=$^sU^FFS!Y_TG2iT)t#K|ccVu~W^wxLv z+k=Xm9g6Rh>lYa!{^F_3X%p-2fQVXk|cUkY^fz$(-%!XUI+;H%b4wb zvQ~pS^x~J@@OqWU-z~E(FJTzYkv~!uxJ5W`+9G!GpE)sHh|T>Fd?vuA_8R*t0&+}L zNzF+^Lv~(y<*kABq}W?{YEoRU7p9*C^IkagZj|X^`bgr5FD?4HJ9g~U!C(6Kb!;_V zlX(Xp98ulu3obz0Kl}3N{|QF_6Y)`E%Ra;3F6b8)=SG38cvnnj1i}I)4P+K3fr%f| z%>5egDu@XKivrFW6rKhHI{-Rj#>P}>k?H!b>{v|3<{fvy5Uz|Fg;$^XQJh}s5dL;13(&5$NL}A3qiRhjk%=Dv@p6+&C}rDNptp{RSHEbc*So_oxmXaLtSq9Uvw3S0 z{r~y=p^cf9j^p2Z3IZVr+Q6r1fbD&O3sx#7^k-mpN8@>I2reG&}E8uZ$Er z<2=(7J5PD@XTgZDXXZqk& zJZpSh22Hdkd*l#oGg|CWLCjBLB=_7ZfxSso#3s zNT7?hJe?k~|^G}s;*?OVEWZV|`>-p-a(u29Dv-@rNeyZEEU(cN#|MWdDeR%0Ls>GS@+0}&2gybd8n-}W8zx`1qpAUKr)&6rr zFuecfCD~4RW_*>9>);ynp1uFI@5aRiAx^>%zkgWIT)B9mLDR z5qgy^F~aN{piPg;DLa2@s0_Nh_IVS+J3F(zL*0976EtkYcp(NjsEh~wS)JG6_t;==?i7(p-MZTB5JME&Mm&_fyIdthlDGjj(?iz}UoWSf z#K@8rzfkVa5Zs*ki4`0u6ZONg_0brV7ob1hS7&E2Lfe;o@nhoh4}7#!15lbkP9fRq zFoWvPc;tNcgDL>^#(@sUx*DJ7XIzmNvIn)r_d$Lu+U)A zu6|tL?Qut$_*1vBX!&C2YS0&OA=XCxL+bHJ$GSzII!2?w@UaHmuv=TEsm{@I+fAQ8 zI~*^Fv_~$-e}uf*=M!awmH7;NNvN#zjLf0J{y^KcwJ?Sf$@vM%4wkV{j8vkBa{feXF@Kq)e}Zbs(3;h zEwJHs;bJpY38Gmp#^(lutaFCDw%?gNR**4pdDkS_=Wl3C&9#R#Rwx@l&d_RBy=VWb(@?LPZDl=d40}B*3J1g-`2b)?{t z=!yybPP|DZr3Qcer{~SNJ!A4Urp1hXft(}IlBiWuN8%UOuOx)mXCCcyC#0lM4QJH* zPMMXzRgQK3(z45XV$8_GA?MN0B1M(?=D0Kx^K_*D6n@Z!bd{KUvEaorKs{GX?X{wt zw+{b!e0N;gTlV>FDcMAD)lUY&(-p{`d(aO5FpC@st6V37e-y$#*d`%^&J%Fi=zJNA zh{Yq;{w8?zdl;Iw^H9fJXUmO!2`sgO_0|d?1u1xY-HRTFlA1lg>aHYXmlWuo4_5Ki zJ%|^x1AO4`N}u>^qUz(ye&eW~7H@@DsrKe1zK@bhQ2!)QkDV%7S*{^C&N3+*C);LY#V|{7I_csOtOeScfR?%JPSdL9g+be){d7`}2&)^u(^t*QzmvDW%GcU$rtu zBje1pC3LqHJ|@B7vsUG69u#_)N+}<{jW}5jBF2Hvbl{R(^J`Sn!;tR@d?~|j(ZAS4 zjAUYE2D&OJ1XfcAQY6O3Os2fgWR0Fi1%;CBKgcjUO+&H1JA;Y4ny%jN($(vNW8TZ; z&*MIP^zXCpNi<5Wd44qWE;bgfh<$GOwYit~H9F#q$LcP`vp)1EL(Rwke8Z1JU|l$^8LO@=0Sq~5SnT-MOq4m4M`P+og<@H)P%zT-XB z!2p$AQRA%@?jKTRv0z6EEP{VH=JwGdh#dz}dtQBq_2IXHCv$Rhb6VfUTnM$hZ#rlL^(6h9P& zS-mU$CArMeB=B~$>HJ?c|M~QXqc<9!k!gw~YK9)edcU*HhJR4=u)DzJ%@<(3Hm`;? z1C;-a(OQIDccz4Itwwk*3<6(ZVe4?MD;1fe10Z#_`yY_A+N`;jlkU2j_h2zxSSkE% z4C$V}95E@K>%Hw94Sn|U$cq0#N+-8-dDuHPLR*j93i74WXc#wa&vR^iTxj%?dJ}he zhLG-VbV_>OCEAFbb#8*$vdQvUTb&ABLN~S-6k~oCk5)hqxtn45&9Dmr57u% z6E2l2>u7&ICf|48_d_}^VgshW|6r_{meH(Ok9W#?Kal!yJa1~)Kd6$g{m@28(^o8#;F@n!}2S*SZ2JCJ8x11 zceaR$cAX8d=%Em`m0rpeIfH`WIW4S@FfiV3nt12C(;4=u#?IhG5Odg$h%SET)aFX$ zN&JYVImaF%T2QBWx$buSoKdN!C!+Y5IeQq`+_5D}6t(C}ft=n~ zFSu$rEbmXVrT@+npYljN-S4H4z@`X=`=&(rxlm!Z8lkNKB4b>CRXdubR>T znXYIj2NaVZ_TiUb4r6gN><57R zRXh6DiEq%hU&a27XutDoqffc`>}OAWI}?i0qbx-D_SrEbXK^R3@Z6m;XNtjI@(KZ=pjEE<7$SQxTT_8&DDjkERaGb8DHMNZth+ z0k&}z>2}9C8kqMaLGm4CY0hp*WoYDVH_@t=Uhkf-)Nl%I@5&rN5SfJN1%Ym4^lx}I zm9&jgK*?f=57u+~19*si;gegUgHt3Rd z?Hs{<=TN-Y_g}?o3k7?;SuV;>ut2qdKFLE#Uc&gnCU$& zQ?ROJUS%gg{~tQ^&=EZW6`f&az(e0MdEMh#X=wHz#_!=1)bL!1woeXyJ-SGLb)vAd ztHRa*qXzx#U;Y`S0F*L9n0bfdu3!HK3sl6E!L6%Trl@h4yCZMt0}_(E74PJhavnx( zYOkKHP-M4niALlH+cMz(de7Umv2vp>b7a!}_j0AVJBqhcm(-0W?(Z~3TXx{JIA z`s;AZF{|@H5HAM~9&2ET2a`codhTQvdv`z`*V3yohsyU@an7p}A;=A{uyv)8M#A0U zvW}CsvtbDt6SFAl`U6hS1ua?xR}CPiQ9KT~pw(vY9bmMT`G0!M=t0~TadIncAjn^` zOaHz2yP@+#mbynS|DoNJg4ydVZ~Uy|3G^noe|!;UqyK2buTRb>J91{<$~ahJu`5dfV$yb;Z}RGrfK__PAp9#&W9gco$$=bp5e;HC9YK3jW11%5S)Z^=^v6+U_{xh>yzDaSJS6ZKRd4lQF zqPoF!HW#e*ihy;z^FJgM#0v+1m2TxI)^raOyoeU_m6QQO!#qA>S^Dn&zYS)9=oa|L{$F8!Flf! zVQib~La$QD1VBzp5LGW*=p3RW1^kvtH_0zj&UZ`?|KhO8Ka>AucH(e!uO*_TNS!GY z_qf!4xF+Y>;1-8U#NvSmpCQ#ae1L&NOZn!fK;m~8R~lY7IW12Xd)myG(@H-qlT&GW zjX{&Mh&_`#+U@w!bQiP=*DI@LwqC%$4rO^ox0Ij^wiU%gKb}O%{zvb=mkzH3bO>@8 zl#+x054@{Z=6&81%=P7gxkJyV^XSARqepQ}b+{^zF^EUMWL3DVafI50H~%o=!LJbj zE&1B$@8prflBHJI9goP>%yst(1b1u4Kx9r+wF{r3Y-`z|5yG1-Lw=R^GgkS&!?@PF ze*5X3Sw97lL6CgZ5a#C01;jw&UGD5dQLBB((^Vf15DGqzLx&ugQ6J z9mHKn3PN#zf6@&}!_|!sE7TvKN2Ogj2DYr}o$i5V^8Lk^ffDwSPOIZd9+L~~Sc@z> z8f%!EhNL&tuz`uAEJN=P`Ft{4bl`y{K841<4p~-yJ{^${Na0<0l>SC&CGl|o#$R-kN~hH<(UOJ9lDCK{GKrU0d#UgRxN1eXpiQrM zziobe1qVY8&&(H`6JH8aefkmm^#5jHg{^El8dBTbL^Iz;8-dExmFG@|Wji!xvx_DY zuN0RgZaQ&VYi|ijbS&Sfv|wh;s zxBah1cQK7dt){%J1LSRcX~Ughu1dQ@_xSh%|Bst)XiED`A{&EkHWM)^hPnN5d**?>492=(uKuS?Vfv; z=C&++Ut&YbjJ9gB68*>s*!_g&bU(dNL*F0ArLZ%KBpQ@%K)m~wKR=kZ*@EEdHDhN2 zg~o9(DKx49fmnX@?5@eHB=BVTvUH_qUN=-@{E>_6kH7EBp9#%Dg-3nuiG}2mak06Wk%(@TxQwGfvw`?HQ)( z<;^OU;SQSe)E|`r+7I7WJ!`QxZdud)WKF@cP&B#OZGF>iTXJDLKQWidPOh|=nMcMXxAE-e+t5kSoF_!7 zNG>a*UoT!H&NZHG&vOH(tYPaTPl|NSbq>)JthY%6G2RR0z|M=bM_MJtCT z1G$Pg?(+<>tJz{T2X}pk{$M=cuMOn--R7Nu?3S}!Rp1{!VxZ7ji$fU$|7t`p;$>JE zx=1zl@fW8a6`WtqHCP6-Xg9E`b4nL@C?Aga7}fBW$<;A^x03o+11*ZO=_!5@Tm`8? z)O)BZu5=zg*^viEgFsHKYbXc7ArbUD0-maM><$HXk8h3xHm`pIsGVPKYsN>22R7V; zn?A{~UPwYKui&kN$b~rYz!`0Rx2>JlqkG{oUqMGo7w_!3@N%(k(*i2(5KVky^%<0V zYQAysWa2{U`^!?r5X{VrNM~4CbObY6zFBZCC1f`+=n>~h><|hHh_yS*C5)n9@u^CF zG|Gr2xb;?gW0X-tANh9I=I`Q)$D+A@FYCdKG0xJfkK5JoJgj^ES+NA1SN?mj-sK0n z=0mmrtrosPP#Lhy0Mu7lz;R#K%Fc2H=(|ELLVfqDFOkdWq4!_O+)`@4H*1~pJk80s ziGL8Y-9>rN?K)*#ARl?B}2V}9&};*BuKto(pcG9jn|T3e$ez19`ehBsHb zoCer%e^8JJm$zi`y7*glSbb-F0Q0zdz5Uo<%#TgxXi2#D$&dy^3=-Qf{W7zSi87h9 zrg{)R<+lDUCB9-joR@?e(A{P&Me>;$6@2xq3tT}^lRO$L{=GKb_SI}*mP;0?d!xyd zx0nrpvE^Wr>t=}ne7OHGnuv4KTQ0IKUdYUx0xfUbiTz-OG!w7I_>Ik|m}PH9ej#WYpBvx_^5co=6brte-Li+JEE`V)<;&K(=hpBCh2q=e6GW& zUd4XqAi2`|{>_mo@eEXEft6KU!C4M11s2GC7EP5cpFBCVzz*8 zBPXKe=kvzyk&LM9YrE8`I&#h$DV!a~DG$5wiMGacp_F0qqby#_vzIONIfwJR%HvR& zue~o$7x%WU5OJugqcn$+`U7%i-_N@d4T82{rFL^T?Vlj4u{;lw0UXYX&sSxF)%R#G zVt^P?!oZ>1fI;bD5t~pn+anv4_Z0$xU6XLkgBd z0!os38v3}<(m_2hJ&tKm)S?^$noM$M2}jw zZG_0yxCiipgznGHbI_72m#(X!pXy-l$v;dVaKA5)E$_0k%<=S*?0uxkNqbPeUd|)1 zfYkL`m}W+^oO%FW-#0oFwnOC@Z#c{t*qbt7_WpOTk$nf%Oulvl&}C*c*yG|Xsn+zf zfX^dPe*&;#3zDAGg#+qO&e*8_De{sTQgD_=SOVIK4Om5k~r%3Nou3%NV+ZsCa{T8F^bZp%@3>!7@w<+BhCzTVVG(x8$SwA)YXbz8NblNDLfrvL(771jgT|E*r9EnU0u z2=Y!j(S*E)q9A{;8TlSk&Hfv7IHOHsxv=HSx7b~ND+@Fp7B0saJGFyN80knsNzq@t z+xbAQ2(e9));N;S&0s6IT*}t2CB~pHst6LcE%bYmc06O87a<1SjOjtoEb=ntx^kn< zx-m#3!`*-6Jah~zOhSY07e`-ZpOTy+)Ir4WkL>`dq|+>g%^)z^LSZ^;)Nj3TH?V92 zSAA%<=J>?F@YfR-OU3e1I&Q*z{ij_Jp9NF&$5Yl^B;Epe1QiStG?1+tchKY5DglI| zi{SpYTRA|YjK!Hg^L6%3{Pt=1&T(4%h3(kt$HwcW`*Hx`{{Sw32RQ>L=o;qhg+S6j zI#&g(fch0UfbH6}tN^vwk54{Q|7!z+NU8-yquF>(62B;OM^;(rQ0x&+PAx?X=TT$c z1NfL$d4TFp8-A1r+l97)6+v6hTEp3tQB;1~7}15TD{hrJR-^K#xA|CF`0SWnF~2qx zw{L-VgjD@?Q1*FdQql$&*-TQVqQu*&N~!u+f9BqfO88$D!2_*my5>yZUQz_K`gQfI z%qeKx8eH|qo%aqbqH_GdGWq_qR#36>qlyolUSdh5ye@`^GPxQp--HCcB+PUG!s6xPZ-*_4A<`Jf|eks@GPLB(cPEt zTwD^)p#+45t>C!qjR5Verb-oNvL-HI}gW=KvWee#;us_}3x5SI@zO})3B z^*{JQU_~r;|ALr&cl3(jhW1ES*ouEPfH%o>y&}qm_0=TIgexqxK4TB&@|wdWA=sb* z7Islh1?~S)wUM>S+OOiGvO!bTJRCF!ErItB+c$1>ON>nMuDrlDHJ3laB6i&%(tBqH zHkE45h-T1t?wiu^*oiT(gLd#o6p$NLmTF=QA1BSJn1vZh$seuM)7BIkQ^9U|{V{}= z0Al}{hS0M=x+kpq{#Lyx-jm_rq@Ps1Oa6UB1`iZ(M(J!0qX5i9S}a^bFG!wZ7S^*x z3Cwq^oIlC&Jr>MyO8`V|%snvRu}?*?DfnuVa&26yc(+P|OfO{oBM@h`KKif)2#trvWcVGPH}^H-lyh7-G| z&l`s#7uVC;RazDjdLTZd;p0U(vI*~6zSVi1N8i^v6!dlRW!{ENe?vy!-j&&2xeqc< zX8?vx1L!i=VF<(f{onNQElau@$akJ4`Vm@!2?CZu(*=z%6s#cSp2-f1^WFx2ujm@J zVM6bgVi;K^?qacsh9V3-_d})+j`^qG49D&Do6*Z2fx?Q2wyUYI$nsy#2-KpxufWeY zp~I=dQh;fN&9i?-FV_$WX~sS={G-t0wVdbFK8qc4*Uz0LZ9e7Ot{?k56Xd${0@@z_ z*NDD6&aYO6k9Yrd!Frn(E`P4aMbrTJ_YmOz8o$+g0eT{@NF{MkFDek>cbxwM)W0J0 z*_<`3q2HzbmqqD)mtIcGv(zF#h#92w^fT*8jLLN)ODsqQ(ec2B{}yCxaQ+kTJ}R4t zX@5Kx#_y_AV9X_=gD={Nv}!Y(vif*V4iBROK1h#v-M=#~r@4MgFzBZs!|b;r^YTYb z+?+rd6u&>KOesH%G}-4ERFpp-r+e-FD%FcE`PsC2`FBV>(6|7hJ>M+4-KiJt^;jl z)|TCktF3=49ye$=MHd`2cXy{mH!?xrxqgEBrMX+|0g2a?C6Cp_R%zq+m|mW;0#fd3 zYS%f-_WQ^`IICav;1!vKM!By0o69F28-Vs0!tW_-3o0RmX#TPGxu}hv8+GepA`QNz z;{MgPIb5deYMU}gM*phF`o-hd@LOQ#d#n5w@Ya^szvR|d_UIiQ)lu8AQpV@=QONSG zD=<~L8j>g6Z!H+(b8oz^-*V{o2kmsf-^TVnAPEJ!JW*Em{nqLKl-e<3Sv&ckCNValLon2XAcAP1&0j~2uPy=pr+;^UcrvjS@j;i!!R5CPGU%vZpT694HeY!$>w=4|YE(5+X$Sbv=KN_`~Oa=pp zcVm`@qwrQeDlP^&JMio+A$3P-UCC=||KelzjpvuRH z3~r2`xHJ;r&I!!e5rB5TUMrdOvL>|ozqoqqsHoaEY*a<06p)lw5h(=$k!DazKsqI* zBt(#I2I=mQmTnNFq(*W`5$P6&l5S?0nZ3_`e`lSuzV-e4teLfD_TJC4@B6y1h<$;h z_>;Frq_#3g6X25S=rEMm@Tl?ltJjZnU;=%;g3A%>zzmzdvUL0+@BHd6uK@~3liK|h zw|kx!L0j5GXIE_cnTS|*-wOO25W5!LgpvY(7lm(>;U|cC&^lO$S+|MwL$j|KzjyH@8o{YjeN<{yChxOcFG5f&e z-L=K{d`6xE#_TGt!}m6`;ESkv!TDj*TzXlN?p`B3e@`e%Z4Gx?k75;XGmMkC*osuS z6o3bKq$&yD5n3y_2>GnXXkn6{4Jwax_~q~NiC;YJwx@*#i0T*07!F;IgBCHKG0Eq9 z?|5rl@*2}I@!kh-k<7cVkG%KRU>jo9A<;m?&Aj4NFZ5c(7f{xvipG#$ks7{D>&bj+ z_(@i4IrX*YJVLw1e;WU^dC0b}!x4VDC~>i8<~J_CiOrljB2(0q#M8u?Xc~X&B0K=a zbC#)}M)HahL-Ewg^=pn@ZpSNz7%0~`jpcb+NZW&<)V>_N6Wa41;xg`o^m4}^?Z0&> z%SshE$CPr)+otWe&YuCpzP;i2i%&5Uc-#14rMftSAvRz0WfEN2JzE;~^qHO%%G+71m&1 z^V(O(4ik-G9&3)d#Ppr9w7F@_o)>x-v|HqTaNMuWi@ef*w|JUhKeXans5qah;gI`Q zz-1mCQW^Np>`BDzc?@b~P23Qj7Fdm@5Ly3`Hw#r*4H2mYooo7?wENQgvTZ-E2%RWd z&aD?$9)2!kA~^~>fNKbloGNyn1K|%!fTl!v4{R{^HELx5j+}%U<&J)X1%xZgN*i9q z7ltd%ho)-_nQ;F7%>x`90>9d&J-b4iP@)GMxzBiCx$^ygUI5HRaO%fzj&ONWSsi=T z7Ka^|y;U@qOP;m+W8PaioGz*ObLWH#9Gd>}-%d=RF!0+`#qHSt=Cucz^mfOHfL}NC zjc{E`o4zCJ`aE>`mOa2yz;~Vqa73v-n6x?zMIW{ybQYLjfcGBM=|YNE%)e0!zuU)c z=Y%^JKS-?0+(`A>Hy^_}FZLna?_Sf}xpbW#cid6xI5^_uoP1XUM=TsV%#L{^hbZ#l0X@i?+3=*g;6?r$s{ao(;doB;WLD4gG`Tu?x>0d#S*(9BCxW zjpyka>O_yaT!;v08SZd`t$31FXOO`T6xuDThSojmB?D%&`iLYncaLu+tUCf3V6z;j*VmXbh8*_ZQT}C zP9Tn4;c!{xmd@iOrV0@U=@Fzd{D>2oU&FOJ4vyV{!To!2^+X7RQKd%|vb2R-Olj6U95diD0)As`Tg6ubTc#hoLCmxy@bD-(x zC&=-A+OPi7``cNbfjvIoDAz)LD|3gC{=(}v4?BO)yG@iILmlLX;Cd(H?cNfmrIg zH(}R$`2gz2tb04Y?P?-^zeBD8r+#mBFyTo(dHaWk{(+GvoUvrzwaCy=eDP+xJ22x&`4T7&YZOj1E zsdTvW{CJdMUt}%sA!R;%UN*iAySdw?{`^ql(I&DMAUjpy&&c%;sv-DeDPSY%O`?l4 zT8Vr5Y$ng6A@HB*pyc#5(Qs2V(u^Bv5}9G+KY-(uAPO3YI7X2jJX;Su+*`%iP-*V% za&We5AIk{1zFAYZ49@_^Uw=AN^mXmVxV+H#?Fx;eyEva;@juYHK%OMx^mk|7yA>VF znLT@R`Ziyg_;hiRwbTTN={EW?7oCV6P)0s|@|8PeCWl9JNaohvz!z2=fuwiKSX31W z3*+o|*Vt}{Tw}Hf5Kbjk4wg;Y{pXTEB8^-k)SM5H^BoKARr$IZkE+4NzjfAc+5i4Q z6@}orvo(@e%|Ei_zXe%%4?6AMD#B6glbLx#jn*~V>&qNIQE3CtrGH(`qRg(%LopW+ zJeG{A@smnmsQ^bFoQ7ur14c7Sr3H{!QKsUP1d-_)aSO+Z6Poh@`|I9?0eJW%Y_n%` z8sYAl z)u$g?Y{ix5E|L?iDkX5ucT>sg?P?3}A?iM1k8`P41;F#@ zK55OCN{rZZH1$AS+n-bvl#p??g^i+ot$peV48!YirTEXxo~!VEC&cEJCy0$-geL?A zC%pVr}G zyEC<}hPN!!(SRO8lt~3N?>|6KM4pQk&xrBxHjD9Tp;k^B3D7Vbv8JPe3fnStF}+F?c~A(%bqz1y3I8rqR8fVND@ebw9z!{cxS>^9+|^?mt> zRJ@+^@|VO>FbT1(Q>5|fMgk275DVCGQBuGoN~tmh#ct<_g3G(Tkod21gOd#MrxbpvMdu+}%-Wf>i zS@*6oX6fwi1#CWr=*9dOBSzJGouCmf7zRU44ZxV&SoFc}xM!BzJtg}TU(81oY;ZHx z6H#s5HEs1jzu5uHF1D7f?zkEIVm2&F+j`rl79e=RY}&=Y)-GrE4_q9!tQ;w@Ob(WI zPTfB&F715BsOYL3gI4u6An&-E^Q?>u)>-B~SX%+3x9;S5#L>ODIab<3^G~Jn`{hPg zk?x|`ql<=qGq!i#fLhkwi%Z&>keBG8C6L5dFSp@4tbY2}Tw znFVt^--k~RDl1)%hl{I?A(t0kJDx|VTet0{|$_OEvm072)Hk};hY z$LpS=@J^Q981@9%{XWR@vE`EX`!9fCBFlotBw`oOJPD35zybug&i*>b9C;soy`!_N z1BR~s-Zl#d?Z*GTlB~jo2Id<4`n%~i06!PkTf{aX{gZ|_N89Rp2fy4X(g+rPJ243j zqIpS~Z`XE9!@tTAzlkv%=pir5eN11G_hpjQ-{>p#Rry_*)N6%@Y$!TEIoWrYiJan| z?fvc1oKHHvS>t~iW_WuvV&a=o%aHS(1r$=bzlLx>j<;lUcXV-Cyu_Y=>23B`5MiD= zWxWyyaiKcQo}qrZe!C%ODnEBIe-$h5IU#eJ$VfCrwGgdn{a{nsA}X&*CUcOQOm|ig zv+#E#>;;YqbNKZt9Mvgy5$>tDRss`0r9kE+KlE52^!+J$(K{3RuYG?L5g$wwk3<}W zJ;1W zMO1g7c^E8_IZyeI4=Bk+5lc-@({#+o2&=r{rx)JI&Wj|Gh~}Zmrdi{*c#LnT040%$ zgc0k-p^gOfkJH$8Un<|(5FIc*S+Pzxh!~8+n&GF+34Rjuq^6J#>JR_+R=j&~#>iDao zwuKz}=FV0x(^nORSieiOnJtiBh95yVm$IOMys~rUUMk*;N8;rva|)ov2<13szP8KK zi9QEe=1}(&BSh zo!qIyAvyEZs$C8@Yk!f?IYcFyOg&rczRh0v>!hgcKArKfU&I6ZK25_84E>?GdbwUV zrxGP8s*@Ub0DBtHjgQm&{iAp{l`l758JK~uxjXg+kXaTx{Aby+#i`$SXREib;TyEK zeF{8P;;3ka8IVi(OFC8vU3BLBWW2t4wvy`iuS)n2;A=3c#hChN@+kdzf_%v8IlpD- zrd}f>#`7QeA`>j+0I&GnbA-w-(WgQ59J#42>&6pSsC1_}cHv?6B1wIw&7a>55BlYV z1OU6}Mm4=fRL(8>92th@(gm*6q$ zDoRf_e0IV9Mnh-%3Ny8*l{&a`;~-VL)Ad815>3?Ma(opy>4Yv+;vR5TWR+NI)N)oa zvIcsOfi!LoF*oI>V+aTbNjye)68rYK=U!cpD@dyNw8y^q{tzpF+FtOR)#qge#Y2BJ zZ_zDhu|f3AZghoh|Jop;qN#I$zvzB(s+g{pAX|$L5|NXZZh3wJOx!{%n$0~9StNvx zqS0&*hkU5gkHwjhTp?+W{H%8D$UhDNz5ITE<9?xQjrbLHV`tr)4PHYPC<{-|6Rhj} z*+0kB1@7E2$UGSLS z-kN;P8XVlFz(#-kl>e5zbrK0OwP*93^&u+L_h|B90(*{&>m44fIQr`6gVRsvT^_y| zw%OZnS@At~{@LT4>wVt22{ZLwB(Xs+RETf+3mWM@{DLs;EC!Lg8#<>Q%DmV$*jtS& zsR)D_}3O;kye@;A9MEtoh5}>b{d%oq252+3OPU0^E5? z)@g!E%pu%|S1|K*K&(|65@*Rph*+4&pmoDV1K{}uK)1dL~(GpxpSD`)o} zR8V~S)$&j2A7$M>>AkPPvP%zN<(f~XZMYB9Ms@apEPhY)S z*5zj zXR4F^slX-3*KHHt1Wzt~L)UI%>~`GuzDaGX!xAnX(4X;(->B&cZW>Zk?jF|j`z3f%ON7Irjf3yCOtcTSm1Fi zTir`ta`V`tZ)qppAm+y_#0D8kEiRD;gi_&(_<(L_5lT1mR}h0@0L*JxQ){MxFRbzu z*HD&!OTF;?$@cCK>1Kuxw`k(%-lzioRs3uY1Wgh>)jj$0!{s4`khZY-sV&;qAUW{W z^3usnIsZVtd-Iw4XVm=+cvXvH%kS|$1Ryn&2O61anX+kRp1JRut)?5Lwm(>hmr94+ zT(e@C89=L}&e#c^tTh9o^oFWI{mwpFuRqAR7hv**jAkgL>a6&3xp?}L>lLCFQ_$4$ zDf9@E6vnqP`$`=6q>piJ&u)!CVlZY@ZgvF`6(!ca&heX~DaKB}ZbQ{~0d|p9QU2vz znb+|ELE>SeGrgU+9ukuv{aJMQ$>2SWbo}+PlUn_{CllzbH*E&hw4SeitOZO+QmDuX ztuQk+q6(-KG=0A|=)RYUs@L3V=_zQWuH^L_)2YjOts&H;Jjp$ClSFOc^7Z3vXsTgy*5y_)a&vWR50UZCjc)L60Yf&5PkeZ6c|jgO&qJWt)c#d_ zYw%_Ga-vTLt%u*c$e;AO*U{7m-M+@WC$k6w;IVYerK}ikcA?zZ=lD`pH)QdFS@y_Q z3)F?;R-m4;!KMs5wmFZup2HK22b*EBL?w>E*`0v91tvwVJjni?2XI@0Fk+L-ot^h* zY^HbMMKTHZ{iC9-cG9&sM25TMrSZm3q3Ztd&oImup9OaE8=5&u?p-CocrTLRyGDOM z>_)~}Tg8-AUGdzGvNKDDe!h_V9(&IVd2%5i=(QXd>OjvXjlVa6edZW7v@qWaSp;g^ zFEfXumYaHF3r*u7uBsgXKN9{ZObuoT$(hlXc86eQuCl2N{~?@XFnO73!>iY?T^+l8 za8%6qVE%}XENAJrKU1%lGo-7K(@IACTyO#AoYQeImtmvPJc?%~$1d?1ksjRi_(&)H^|6hl{c!$hcB(EOA8T>=NYXAd68G3oPg8IUd-<|jpnCiPUz zZuM8H&Apznqc1&u5&FtIz_-HwD<7gIkM@)Q;8|8A=rvziEjV$0l88Rsw`13!2PJBw z^1i4C$SIgShnk;J*RklQ&$Ta$$O#*oxpHaQv=Aq%CO2-jaP>#WcgL6Rh7m+gHg~Yy z^}oJGR`qIo&FNu+zUwYd!gdCozQjlU-pHg$1Gob!0JS&q!=0+R@To=XZZ5Y`n8ZP$ zC^%i6S_nC^M(ZtFI?A@|zRC3~ni~^kLi)-WS>+ZB^i}AZ!-4Y)xVyHQ7i7)5(0BJx zv>ScsyMoOI|CsG?dWEv#@<8g6{13qQzOW;7u_$E`)hj!R0Rp`TX1Xu5`Ze_~kYztp zzf_{`lSGT@Dqu2*vTRFuzK~wu;Lq7i*B*n~$F8@|oL&E(^e0DMIAjkW+o~Qlr@U1-cM9k((RxlxaeGaM}@M)W=azckk z1`LR^lNJ3=lM(Qv-XdW-$}~0~2j(rBkH=u*m|^NQfr zO#N-`YX}2x|93H`OQGT%V+fZ}Tu#3YN-hWS**M@Fo~4eJx}M>WITRC6!CO}7T&NrM z-)sTSE?Xt%oBv@DJ@K$t#nk++_-0g1Nx(WNF{0XG$I7m@ph%}7Y#A@5!Cz|sm8e0t z-z2@qQA!Sz5ZuqqPR|P0>6w$)L@TyhF!Kkbj(+VFoFuI7))@`C`Q+Zqr(D-1RFO}+ z!S7B}%B_hp1{SzAfPNIzZ*=c#+2b{)w+uT=6{jAXeYVsca3+^FCuJ9gIoI3quzH|g$)~>yqH^Buz&^MeN zM3D0cl&w4ksp`IiwLXBfyn@k`qv!zDt1vo&f|^LIs8gif@XNgQpgC7*u68}=8EmH& zn}k}hlI|mLgJN+NN*`ptYynS)wJOoA%$5VWRjGSX*J+CeNS`(qCW8-qPScnI;$2_+ z&c{P3aid^KJ(b*9>2bOt{Zp}nBdFFA7cxT7BwQ5%JGk==q8|La{4372X*pWU{^DD& zuMU;Vl{n-#nDEIsrl&IekEHL#a`tp%w4o9s1)%#HC&E#Wlu!DEI=M z59^GO@+RsduBL|v+}-{QlV%mgxm4^dUSxo^d zAH=N$^ezwx&mr#kX{ujr4OP}YUk;{_-uB|cHiz*y*^_$5w~2Di9*N+w+Z6Tiq4Bp|?7QsYjS@Lt)k9)BdHzWre2z`YBB(gQlAHMaEZw=m*jf0w76pXMr;48Ys;znrgqrV z({NU`-Wa;>d@~u^S|#Mmn%~X|O&o45{fIZ;b=bX{@prJYg!Ex=sCb3S7R(Z#b<|64 zOqs)oe}7H?0+!E6A4;Q{J%zVELamCdqyzYGdSFj|40Yd30S_;Ss30?v7UBZ>Cw|UV z(WM5Z;Hh#Jd=wq;fYYy?`9+rxXo@3qss+*C&MEC_W~g%Ot)F{jHw~4ULJogb#>iL= z5jiH#f2;v78e6wtdOa%(l8gF4`NmsdxmH3cvhD}~^7nrS!RK9} z#3sSspiglU4bsn(Uq;LQLR>ny!ZKdiD?ktsP%O{g z2k)D9TrKjLdU&Z-^#|I$QQH0ZCo0A=(_ZQ* zrzNp9P*PZ%^-H$~?k)E}D3*C&kAO`y_Ub8Qe*qnMY;o9k!0!^t+TE?r*c8}^I6C?Z z{+cF>64WC9cYzkJFi5f{a`tSv!|~4&N(EWqLkH4itL3nO;@M!tH-~Rhn_%XYxRm^b zXXs^1>92Rai@cl`tHw%K43x#G19+k~p-BPl$d{9kHOU_9oNf+RSX;E6fZMt*i&G;D zY`3xSqb_H0bw@FQ{AIYIxE2zcS8 z)xT`GK;q7f`1>HHkatRx-Q?n+UiHkhntR_?OQi%jP%aqdO5vLA%ZS-AOtV4y2gg~i zZ!tNgeohGBX?#mZPa#tE&82wr%G>XE5dJcy^`Z$( zo#0&6M>TL_C)RFZE$Vd>*d=0SW(Zt9B?IECrh{(}I;3wq)SsMV$KJ<-*S30^qgLS2 z7k^}ZHN5PwkZM$g?4xVSJv-1d<=E*zq$KVg_`)FuJBEP4BevFJ4V~F&BsB?!cKmQb zO!~BhwpC3-l(RgR8#6H_rv8;9f#xOm3yWPUcs}iGGk%f1CijNq?+bU$^~!h7R53f5 zAt%Qn3D--ZNCd(f8m zbekgJh~Q26p@OmHgW<1Kxy=Dq)FHl`92l1XHB5;84*U6pMb)|o@C zC8=zwJ;dVT*A+z?NHuBldT2Sw|^2R8II^ z&Xoc#JGLk3em-yN$LqnYG;lZ?RFiOy3S#!m0fZPY5iHfBBS}Y6-<;vP$!&WSNC^@UaW%8N{`7BiZ0<)&2GvFh8|LZin6mWELK~~F zE!aGCet`8mt$vbYo@fzJVwZVVax-q|whog_j0OZbAUL$yXAnP`AT6V?ObLv^^ z_U{5#CZ7==>q5ni@CFonz>O+!tY-SBy&veB5s;Od@4wGl%cP4pLP(RVdLPVrWd!tG z-RV>ec~Sg9>$&1o-&J~4)Y$}5r(2cl{mY|w8ii@3_STUaaRnm{%`xx_dtV_cpl}HcgEMZ- z-wOxMSV7f6*cn~9UKcs}ToHU){{8l;C+xeUHq{=yI zNFwJvZ&nnFMX5Asb&F)$5ldlV8B6{0tlUG)PIBdDjJEB4j`k47#G03Hj<}-5uOr7x zyEq(w{j?QA2eUq}kRwv1B)*Y`6RL%c(CX+uh=T z>3&2uD2zX?z0zYiE8=P=d=q9fMNNU_ZNB{F=U)gP#eENRpuoB=nfNjM(8V36#=ixZ z@imtra~7MA@td8qoGj#s>y0cwz&87H#&IWlGI$B5(B$cuB;Kun`if2a!H=!Y^enMJzDD~9jW9uvOtaWYXxKMhLy^@qnKuQkgbX5aS+YYbjV4B&Es30>W46TL!ieHLn5ARO_uGR{9OqRE}xJri_xNKIM4F zB+bkP4Z9eBbnzpoLbb!v#0$;ArCU=U#b<&r^H>u08fSE-s zi^#8=Y0_5_77RxY?Zflj`N-H$dlF=jI2P6{IrPOS;I)p#wj7(ANzsRb@8fZ8fs*|{ zzdLAh;sr%+g7xjWWfRID1>k>4j|Zs!sU9P)CJe{5I<(2-0RDFKd|tIyj;TZ1*oR;e zPGu6>>Pa%}VD2emGTx_P9Q+nJAXm?|f5+weBTFma^_V~-bFh7lyiSfO$vQCpOPvPQ z%Rnn9l-tdh+R}zPJ+6fFx5(Y><2qy<1zDWUObBY<$8%chj(MM5I3rA~(N1(B1St6#YpY zpVOF*M1Zs}z}hxm>2Gv#zLj4Dy_L)1bwjKt49Y;(AMlR22MZpIgeXFJf1m+>LgdUjO)m;YB4}^T&AQV(8&gS;^w#Yk4rxpn zAnE@2ejQioBWzJ(A@$_*XAv5Y=djktA6U&~5GJI`(TI;PHITsaZ- zuxKXbOz(a9bE?v|)x^Uvy{U>Mhz;R{7CCW(5}A0_ib=Fbvwod8dabwR>*iEgoo+%= z^2^rY67??}*OK;}43GvI0ui@Fi_!)(E$$-!-W<9Yyf(sxB*|xAI7-)fG@u`W!>U>K zedCJD6rZ{**=w;`lCchJ2aWPxN%&3mjm1}d_t+O#DmSSLPyiy%4m;JuP~^1_WD|yX zObV>OU9SO$65(@7R8S_DS}4ohBuMMY-^dt;$yy4X;tB8?Ws>D^UZgEqro7lX&C9XE zjLoN~a~btDd}njTs17=t1vK@`=jW-sPqBPQ$}-mrZq$IwJcViSy&c*EP*eMH8`!f9 zii`2z)ixf>C6+Inw97r$S=6FJ1ob;$F zRAeA90$r4)TlTOvfmaNZ8#>e!rPNF;Kuz{%!=3osaNBUFgd%yn@|6=c?7SKhjhIg- zbv?R%t4l(eeZrlkAnIGIiao}#KDg(;m!cj0mTIayb>+r~L2{npzbwUfKvt@IudKTF z_{#rVBcTZLOu6_g{Y52oQnf0rmP11HHngHw^r8Gg1#w|p(f_|R-J&-LE#?0oOL}kq z-%oun@*jQF)%|`Zx?7U8IUTRsG_mI*j%<7}%dWzj`mt@83Jif=o_q`ETq*4SRYLfe zcxm1mO#cuX_uILUC;_v1&wzaKsYn+h*e({Huy6rE87GHXzgmXJE&EJ@TZZ}CX5j;u z81s$8OeGiZMcP8k-S#y;B2(T2(SyqXWg}}Xh909KiJ3~?B^5D%V(>aOI6Zni++*qD za16U58iiGFSL}Z;t#uh*@pbom=Ab;6_lUV5T?X7T{nbV$e>_kZZU_i9PW(K9qq&=# z-J_f2NPhagZ|}dSd?z$r3n=V`)MaOz>X6P7pH)DleVJDms@Rcif>8tM-%M>Yf;g9* z?of28e4U`!!DHPvjkF@e;Iu`fK7-C|o+r$n32o|6%c#prg&HBA4hN^X&#ehJV>I*Y z@;5g~q$4eCQW9D6*pWGg>8i^;7`go3W73wuWP|Ja#7GmE^CFY_^YB4P$R)d${9RbU zKsh)n^ow~jClasP9Qu{49=*nEooaxF*mt#W~BaqfW(W6B`Z+L7ajEx0#Q z|F3nZ8^*-P;r~tdRk=Xi!ds$g00(x#4oE)Np^5YQGf`DD+4x=N#^1jQTq%T$+XCM> zSB!#E25uIEhxaV8OuTL%#SVCw7j4k9aSweH=f8GLMlQ+>i!E>xLDI!r8`7dWYw|RgN~f}JR=3! zDcES8N=dB;EN(hVghb-t>&H!;(1zw7xG0u6WDQLr`{_LW<}}i>|U@+XnF6#*kk)thYRovlNPRqy9%DvIl0)sJPxsBwxhGD`IGC0W-F%k zM6+#nY)8Uqa*C39_I3(M%D?J^hhL~+Ec;+iizZ7ND@}n~1$X9K$DDOnwYuc2F*p|l z6Y!FFIrGKZrFk(j$kRNBj#&y_uZP@$KMWIo_V5@fFtRjw+_VQ)rb0xjvQzE1i8}B4{9O;g zrK@oJ0xjsQb2dJoWd9Y8`t|x^8s?S0%E1C>?(`7A(x{PeLr(0=4j{^Ex%y7whovXE zGr7*Ag?4bxC+=6g4q}@1h-?R9i}lmmy|%fVs%Tk0q_yMCQ_u$=G|dT6!0$6(zV%p? z|CevGcrab<^GwqN6En|m`{OQuIqqKrV^iuWc<5en8xMnKXNohw?m%{jG;o84aQv_d zCu=0&bPq!C3ceqe8XD*so$6&osX2i{Sa?2*{cnS&AzQU4CRDz8C!GqJ%E1h{mtBp8 z4F@g3(WmQwqrx6t(@f=8Prd$z1(h7R_tu8B?0sW2{{o}}b$#FaBR!onWSZzg->$7p z;(*2kKc~^c4L%?;GT%-;W}Glg5>MRUgA}FDon!PCUyAN+J}8p4epL;-zTG+fWjg7d zd{Z)9@#BNZl@|wmuAQqZ57N3aGJk(iI%32WcE$pC1bV9P^QU9WzFoZ0k%DPnnLH5GoKJ$s0<=1-KwXzNyTm9b*P z_(Wp~{6~zJ0l;^gw4WsiUR=)-W%WYSXeJk@-?mdcVQKAyvz}k$9Z>Rx=vn**5l^B} zHIV>3^r_X3ElBqZMy*2MTw6G&3okU&4dB8<+OGpCzr9DpATDxJ6B=)ncN&SVwCh%( zzjs*Qn4jm-Ce&V02FBHFJtzf}Z98hDHelkYF+B#+JV?5QQ)j+p-og3Kf#%pepP$3! zA%tXW8;%kO&x%|~6ZieWQR~%~%I-py#?m*c{myKHWqP^0bX9`cJ&dp79Pj9+YpKOq z<+D8WSS+Ni(NYl~Q^`MjKc7qi2>@y|!b2xVVV>xnGrF^K$p;sW#Taw6kj?83mUH5aWpP zT=;$^>MWeRaH0oDz0aw|$Lr6McE>*VuFI!~8D}Q*EZal7y_Ak;>*>r{YWerNfhKp9 zB4`9Lcs=S7!(-E0MJITj%|o${o18xz7-miIa`0HSHjOSc#=LaQmX|+(bIi;Fi%s+` zkV58M@6i)*I#G+$Upz0fc>2xwI0$t`2*BEvFKLf$SYkoft($;_1Xs1i^c|CP>F2+^ z_9?b$$Q`9gjg1^w0(<4v8K?b!Ol<9bAd}-UsPTY|Z@?@@{|(hQ;|)TbJQ>&rfh>|s zV9hvb&QVE2pCb7(C&;e<`A3tn-__F^5#Gj?y+xVQAr%srhZ};R_!AN0lA`c?U``1* zf}2y8A@H1&C(qeUd6MI`f?eM7x}4do*+iKIPV=$)Kkq;9^gVR-mVD$|F~YcISs8QD z;>uixoU7=Z;3a{(yo*nys5v&v6u&a?t} zH&s?9L7`9H@)pa9$JcY`Cei~4;(o8Jh2VgAdw_qEKEbhWpR=P#`yK z?2I3Qz`frVz*904{yb&WoBb1SjO#WCnZlF>d?`D5yy+0cAk(MQl5tX6qNLG5CwR`q zlnHmQ7$KcXYv)u~RlWQ2JiP=dly)-YcQk7mN~`8^ztzwgB)H7NCUK}R_ap+fW=OyP zHJka->eVU6v?*>A*$g`mAEC?#$R$5zS3a52V*p1ebI+eyiNA%AP{$Uf0Wp1jx$Hqv znKzZ@<+qZj4c^R93(jZx|u_!QQ2|}Y4TT_TrUMp z5MeoTMt8_^oc0M6V7Anux%4+R3NDIJ!AEzn&q0B6Q7uu|@fv5$D3As>N2$ z2@tR?mvVw1-2CW>C-UE?4ZNnLNsfxs5*OSQK_@xea~!F&zI?1`M>LpJ@|Dl_e{F%2 zVji?9oaH{ecsXc#F_zr<9^R-wF7hyk`M!!k170(7l&qU zd0Gl0ano2gCwtmj@6iuS@L^^0uEKa*V_^U?X+Ukqx23XNrd_n~3v~E4Aae?M5-QIq zGQ4HJzeyRz*_m~M;qQ1r%Z4*V7PyF*4z9{k z#Hye6(Xq^)yLs3LA&YFx4xtirWVL^Z)UNW*ogTDQTU^|!v-W!bHnm4`z7J*`@D*R1 zO!}`8?OMf-bNUnf4B>@4vfmzl`Ef8m<;j*Q;5uQnN8~IvPrc+)+fpgxyC@9VPEjmZ z%;c@ZXP(yG5Z^H3snHo}4xF;zNg*ZUceI{HZv_S8qtsPhR0>3rYS`XwK3@J2j1lsX?IXOc{o znc*>5pEhu>4rxLNiGY4z4VQChWe}4lPNmXqC=`dyc$GbMQ@o`tQ^;LYy4zB;Yn}aA z78p)$yiwRITpD7b#(#WsuPg8A(~y9shSyQaj{EEI*xM{0GfIeVtoa)Zs$UP#FHZFx z8bko3CMhlW`cI3O^d^q(;hVIV&D(?8ez_UNoSJ+l=e&m-RPGdzU0WgL*Uo3%7 z;7$H`Q2w2B6-s(jNceo^yca&AjWvMIvo{pEBSN8eLep(5-@WcrLWb46UE97;Vg)y| z=c#31&Lf{{v;f{h0YsM7Y^`XVY^6V6eIpT0>yIzEA8_^!w{h+MwV(yHev)9n2U*TT zYs)9KyKGl2KdvCH{}ijI2BT!JD2>~Zq`tAtYbx&5vt^7OKbk&x?2 z{mvhn?*2RVOi^OGVd#JJ<$~vqK}P=xg(1?>)PkayASL&$uKaa9Pe0vT*$EHJm~_7; z1!O$i{5t&Aq9}IC`D+8$d)z<%A5UE$e?O_FJ=b=QFzP!~J=&U8VEhA)K?2Oy%NDG$ zN7vgy&R)9gC}@I*Na-2i^OBlFeqwt7APL8S5<7CP&4b4|8e7U(l z+EzvWs6BWywxq;A-URopCb}B4jwpvSxVvsc0rn05n`H_I=8{3^<&1_+@e2VkMqhV; zarrIpFxh38yKSbY{U_eTt5z}r5KQ-@m z?Z#(wc^Mfw8fX^TpTQ3{$etw1v;F2Ltp|ntYZ?zIY{JV~oW6>7IzV4y=&d@keI|8|o#-VFsZgZ+&HTqUmAAi9tE0a` z)3%8Um5ml^I;ao^Gr;-A2Q$KBPn^L+>?0#-9ZO<7ndxI)lO|bkiCZ*NzpvG$K^8<8 zhXGs1Naxa_pNfso%6pXzFDow*zCiWB6^uKyIlZ6*Nc z4k2T`Pb`XK1v63P*+f=ob;r|T^1~|0y^9kv#w(Ez7FX`5uCrk%5sxPY+4hHyqP5Fe zV5H-MK&%{v|N1)(Rg)U9!C7jdUlt4Z1kbnGX{Kh?Q1GRtlZnYgSm%`hQoDrN4jUZs z5PqwEFW1mxsJs-y2w2@yRv`&6(u6neRA}xIsA8Fkh z*_*P00pDFE+2+UOGE(MYWZu3*E3xG!O_%8ZhpMxTit2s8zKDo|0wOKaNC`+uGe}66 zbdG{Zw{#4RG$KfMH%R9Q2t#*EcSz?9%$)!EK5PA6Ja30t!+~?=zOQ><*Z%BTJ<<6S zhhF$NAja{zd441F&PuwL{!{K|n#tQYi^6r{IoMT0{`rzMKiJm3iOMWWMlt9qK`OA3 zz3EwLKtJ$KL7b`3RzTwy`lmMgRP>Gx^}<5*itsaK?!y{ld5{{zdFYh%a)$U8@pr+1 z?xw9@^e<+fK$6g09XM{&CnRFeYCrDOBBvpE-?G=r)}mGn)T;f!&V7U7h47N})DyOt zAXj-vjMPZKrI1jbGeiBuv3j>akP~&?&ddIOE15%>bvhj z18Vx~9zQGXGhG%w#C1#^;yy?W?#@dby}%Eqm5GBlkkJDho-C3NMrH>fUkA)^8c%PI z^9kQ{0<2fygWUR$n!tGf{r=AV?9`|0x(bNiNI4Pj6A^awI zMKf@l)m}a?p~VSzX2LO1s%8!@d0GjB99;gxKdimGNiR_=2<+U=W9}5Z@#84PNspk^13IP=)ne-Xrd;)_d}74OV3h_+TBZ4 z@F0gg>dgOOU(;M`5b=(E6qC-Lzn`I@t<0Y2dY@63dq1TT+j}D3YzQ}b>R@oQ36br^ zR3INY+;T}y{I#P0vVu1ba`CgWfqDS1*)KP_J`LY-@$qDH@%oV7t&|6L{o2zP0ShKT1jzs86tjjEY+giYS?V zPVwMCR(#U+qng3v96r2t(U&1=P$i>xp%gVXs@pP4ooW;Lh-FurybK3bjpNd=>Jm-O*}9K0{o7km%`(I6p4 zS4}z^WV740f+{%NXnY&Lx?;U;lR~W@<&N~a1`_Piy3k$17*RCBiCa_-5-aq3$4^A~M`CH4?vN&}?GK3~$h}l^^hy`i`4*Z8dI>ofqE~Q(qr*3?Ac%E#Eww zbe*y3$-ub8h~9wFB;WA^iMXU4AH)vGn4d}d`agcC1WJd$Q8d@YPo*lcUhz*6F?$5^ z$qr~L^l}JKJLalB6`WOY%1BlCxs~G61H=rPIqZyckW<#X)?`jiSN_G3!$&z7uD(*4 zsEKZlcEvP~dPasHaf=nJPAJiRBxs`*LEiN1I5p=~th<@0k{atQ?tz-%1q3eRy)QFM zrq)w0k>srLa>9LR#-B~%%cspeyYb$pF7Ys`KmDZucRlD_CK8PC% zzb*Op>S~CU?cvM>UdHMvFQ~yUn6i5KSkQj|1YWf(xng7*Sc9ocv@7pylnCx(vpUi8=ub*PH!4`+7)VjpX5z6} zh=t^q)b2EwhD#8&1N!FptAQz7Nlrxxr-NTD&Bv(*p~jXfy?RCN zJ-nPsSay{HRMi}OBD~9<@bhx6(`?W_`l|^{6D=fORIS5%9S>3>5JjgDEAt5e=bwO@ zp~)hwBfAtDsA^nZM!i?}Yve8)Fr!&7`21-#TM5wdDDckSwU9NwGjz-MvDIRxqGpI z`DUetWNBiRQ(xZuz6U|PBi3^&0yOKjdwr65BLCEJ{n?vPT|Hx`M1`7Rsg{%a6lDQlq+rk4rtnr}*Q(irAmCiP;=`j#n6#jt+g z^N(ibYchSjHxAGvn#%bZ3I*~zNtNWg;ctt;5iFZPwf+wa<{FQ!Hi3vl*lns1L0npu zX!GOSjcG<3d0f*zTw)Vr2A;3qQeQ;|BkD--IY5o z-txWhGbQ&~5MEHs7ID+k-X?YLDR-2fF*GOn5ku67arlhLNRrp4K%7k95Ly-(l73M` z1h8+ahin{?x_6?_*e(fFU5Q<*nm979@mBO#)%USsf=t1@fg;Spe@bYe2&W%t*s)q& zqdu!yWn6bfvKh6)Q2IA&VV!gO?hR&WXZt#rXMTnBOE6GeztXl+)9z4K6=C63_C&?0 z_sj93XE`B^s8vsf|HcT~VK$@tUEL#M{Z@0UJJ_DTU@M>o;lx$nDl>V4 zSduAzkcp`>CclQ7s4{~?WG zr+pE@DLO5dmJ1y#MsQm`^4Nr`Mq^e$73#%i6NiVnaj@#5(gqtQDV-Qj6vh1#HKGw* z^jBO8ofrA6WsBQVpEY+L!vxr9qQIh`if|g43@Xw1IwA;hLBh;Se&GusiLlqnfgA$N zk1AnY(TzZno825;Gd^rB5Xat9tWQb+XMrGyUP@m~hvUf6pyg|chFPpPyPK98ZvC%c z%)#@!JsjE1uMy*ApA5c`J^rg9ZoF}vB*C2O9vrmPlFS045?zSs2;O?1Ec6)GYrn!5 zX?o>_EEvC5s+kHB)v@kk{a3|ZY5L&R5`%3XFOOcoMUOa0PC8JpXbSS*AfN(;s@Nob z#s^t{IOUt^q=^kiS=WS0iw+VL+X4=6fS|8Y4570eN2dN8nPrmPyyZ7Nfdd8g;z#32Q8XM!N$IFM z!?ztB+V8b~<#pj&td8zemLQ(Ps+uA}4Ad16k0u~fmFUn=z(GOuFsGj~xh;F1d2Q6~ zyzIXzkeOZY2%+A3!}j`Y0K(lVVRN^E{#8ly?SlCAlS2Ooj4`8H;?!?E*5|M@OW}`< z&)oNRqhUV6+C_VPPGP_Z%GtUK6UMaFT9SY{N7UnG)PwF)WR<5^&CA?dA;il&>*73s z?CVQC?6jMPL-^mx@nTg>x#Z*q_dn6^m-FjCI5x1ZucTe6OIDFS*QD-i?%Len3HoxX z4xk*gx5&&(k5!27iM|tT`R*M1lV8%G zqJc+%*B(7%-OU`d;m$%uo;Q@Xdv!AYOh>SyY1WS|4}N+tJo5|EK@qSjz}4h=Jr-w; z8UOi_`k7E2V`)Aww#~;KKHy2LV%h{84v)mWlMp@{T#PRf5hzK6UD`gobKw~HGJWHI z0C<7asGm-yPd>$MWbW&TiQZ;;?)}eI-xG0<_B}hkY<{NONX6Srnj}?Qh$&*(pQedY zYx(Un`-eJH9;a%q3g%Fid$0I=t-pOVfsU8H;7V%5W$Ffnm>woh6| z&+1*~aRjv~(5q=I{-$WFfmIXT zJfL}rU%Zc$vdv>gpmpqn7o4k)AK#xWyaNobq|`3 zbOr^;tV6zRNgPdP_(l$UHBj>|@Hj-=G`&mp)lY~l-W_a@I#%dcfC`DpA$TyiOI%Az*}O`7<(tRCrn*6E zRv5vRue=v?TBK^RyM6q@Qu_T@b{2a?;tKwFn5{}##Z(e} zYSUfeiuB5#=H~6h>thfuA|^Qj+*Bu_xc!FUGmxI3+Qyb}6?mg4<{4V~(`nSg zU|#quy%lqCx&2E%@QDoY{c1!J;WlhRa2otbu7y+108JSR1YU%+O5;E1tN9TtnrRXd zV^IiJHr43*cr|Yp^pD>U+W+D0*YaJ*p&BD-54JR4ZStfxniBzKkRG)V)ZV{P^M|z0 z361Oxt1!CKx*yn{9}y%`|KWD6iE{bAp_S~^GDwBdU(lBlK8n*yabioNra~rp&1yP7 z7ShtsgBe!B3O2YHNn%11KA;1j z5hlIeA-y*0sUwCtgp4Oiwg;xa9Nsq{n2XO%L~ytTHAx5sZJ2;d6ga&nG+DJ&ANj)7 z;0cN$fjutC3~O1HTuyg`+Fj!H^E=Ny!rQ+va*ie;-YQogImFC8aSvr8p7a0)QEDZr zuX{?%JI7_DN;%56E;?=XVdQc~o>%{7wjjWa9Oq!q@k|K=UZlnAaC)8$$3-J`kq@zK z9Edbd{&m`-fp4)OHoAAPB^{HKCW!Wxxbfc7Lh8qppIP|6p;9gnwByJ479pP6?`t`c zq#0jsY26qu)Db>wp${DUXx|;NrzEHT)3j9Gsv>4I4***)w2E~bnFmvsRquNeMYkN@ z{;dXrF4V+}V_`mmlH3ASo18;#PUs-7q<1f0y1VUmCrtTll%UPNDzkx{7~V?=^~rux zejd$4SMIK(pUBz1#i+1=2U5#ZXX-mZ;osNIab`WvnW|P=onFBk0lI9pKrF}!4`IqE zYAZ}L_fM9)1f8be_gTW_vB{b&c0D)M1+O3sJFKmNtQ%lVCH#hFayNW@wa(W|UK77G zLq_H1@dirmY8<@FW7eiU8{lyp4Y-~Q91B>0Y$n%??PmIZkdZ(3XJktN#_}JWmT<*1xx?Qi6pp%{P+T43z zdS$hy)pkq-kye5;>6CGi7DRuy=nD#FDf+-;*h(#Vbk7{9?_!)11;^qWo?QY;LPuK> zZQvzbUJQv3AA`G(x`aWDr=$A&wbIc(CtWcbupb$#0JRlR{qHKg|MRE8tS;f-K{Cbn zIVkmYi}9bC;DSG?T5OK@b8Ut(l+stDhzw>X?w?NmFZfF2^*uG2D_*qk4oxfa$l3~E zRV*52Hko(WEv>SFc3&?(WN@psSBTzS(!rwD5d;lg+Y%Rk&5pptTF8DN1+T4v8M^!(6?A-dfiuJNA2;Ccb-Nh5n8fdV_YsiT=3@eu zn}Y!)!2BewQ^#mgd-0O<;$zI4`28#k}) zCP7RUfxQJ|jNhL=gH;trI{NH}<9`3cEdHn_G4z&}<0v6mn!-7UQ#jGA z@x$E`TM~Oa&c?9|h$bj5kxK!<1LlugT0X(_m!ECitd$Zh?g=l_35%`Af_js{!Maw8 ztJ+?G3L1W`sZjkjTNdS!ZM~V0(2sG2nlFa->(o!X}dD<_`=H1ec600?!P+Xpr}yA}ZWz(x6wL z1!1hOnwTR6-|fso-lHP?6~#s?&scYP4{M1G;l^QfyrCiBaFv^$N@5?5*3f>Gmc~%T zK+qBn3&j1>l}jUa*a@`IR`6V?RT`~f)Ydw+iYwO}dV}~%9}#g{V4ejsItkruwqC-p zV_Nq)jeZAJbpUxAbS|2UxiX)NZ((gD9NV^upQK*jjZk zeGl__mQ!Koz3I5YD>K4Eb?%>?N6)_Oig{8P7hVa8)y+LCnokCDPXF8uAyY*dFkXUs ztl_ZJNYc*{E;q!PU0bF6MnE)w?qI`r;G5oylC|SgZc=^@b{={~Mq}ez%u{WXPxkE7 zeZcf<;A&bZa94gpGzxEE+76~Du0>hA#_?D&Q)Em&Ctu@31v4+Ppr4-stj|@ggXMJe zuqxh*VdP*TnU$WsF)aR@1DHP#U56f_O}Ml&EF|QCMHN?tj1Mqm9Oc@kH+5pt zXqKmct2nGfQVJbG{Z$IC`x|Fsu;^=&rkUh7O_K*FWNEBbqY!F4t;-t-n7iz))^dZe zk~L`FxzXN2_=F^dk@}>UNz$qte74AH`Ln7oviyBj^Tz{-LD8!KqI1=IqqwrP5l9$X zdbgG$D-h0%3p|Y=*}+J+KH+-gubx}1oS^reLJ^Y!A9Sj4Nh6WAd33v@Y5oVC_1vi1 zlhy#Ox}21ukTY)d%CAE$b&xNCFqVa&Q#x?-Z}y5ZANChBHgB5jQoBF?kWLFu)083x zOTuM(KTxYtV@b}9kJ;-OGdKGQ8pQet?$3+BUk3OfXSbR(cjIaddTQO#Lw3a`4{>s| z(_OZ?n`zyuL+pi1&G0)4+7G(=yeCyulP1Pzk!`^Qh;~!m8)@}iBEkpk9+uyc*GLLQ z?YfQSB2KPPXK=00oDp2&*^B6xSRt!01?5>b8@; zXoX>UlKf-M!)(#L!8*dj9d9F{qtjo^Zm`7+6pp6gJYV~ICiG#npN`51o5`!_+c}Dn zPJ+6RA82aBHu4g?7BWpvgu-apU%oq80h&NDyK%#WSSx^<4+Xo6sy+~GHmv|oo~Mqs zlCAkU7!&QTvxw@E$n|yV%2j32A&hS#LFIsbWVVF&0uaiuQ5%X7RnpR2Qp8fk)HqWS zig?C)o6^_W31GnVQlPwvQCMg3G*m<^hzm2&a_Pj3E7_%i>yq-)JwW$BixTBKs=TKn zRqwA%UwvMzd%;Vp`4-i%4-pI78VyQJby=JTSzAI!HM8k0=p(0TaIA-)J9q`8ngYn! zL8l}P=wZpYT&n7OCueZ$ZKGG-q)A*fpk-+5QyR73XdhF-?}@p*4XA1`kLG@&^c%^a zdzMrp2E#ZS2{nV8)eD4yd3H!0dOr9rN80yUmpg-T2o>EPbQ`z^0nbyDpg!#-h?EyTiidFn zkz`t__?IdNke#MUAOs(#7;?6ym=ot18g$-u~)cW2r48XXQf5Z4Ki!#Jy;_ z>W~ez^l1&CboR6vVTKQ(sYsSfieAi<8?BVP4cmA_Tt8-|3%uJ*HwL+P;bjj5d6x1O z(bC*(JKWp`-`DK-$qCsWu6G%J&FX*!4Z|B_hPK?>ED`+} z(hc^xM+o@wMHUhR=>eGnOZP!^;6P4(3Kkm~vf=Hc>;6vsMx_&C!J8`M(TLWDAxG-` zb#F)kE~lf36RK$BSqlpC0eO6Le!MjgYZ%COmmv7yMD1ScRC+*5>3Qi2aF1l4eVgg! z-*RE{I>5cTrwgt5y#wM0cRaKr8Q7#s2sQfWsmhgOHnb>J^gv%{)AE75k(E}olzW;Y zZ-BA6s7=yI0_*wMfyaBnD%MJRtd~ah_qVkw6gl;0IG@*diEdXXDRJ9Pb$p}h5y-de z0}75{-9W)K{5@zJS7Lc6npZ6h!giOkd@Vd#(_Y&@5FVC_n(%oY{34pmkI3;QWAmGj z+m-kP)Pu@Sa^a7>gcB|V+{7MH&@M=2m%r9UnGZs!uN{mq)rW9+dg-=TET$|M@QiD) zy*qb`14pDTolCC_W_xK}WuidZ3j6chw2D+Ii=LOh2Iwd<;sSXIP*~F@3QN~504cA| zEDg#Sp4n7P?A1*zXh#r5?;{GV7o-wKoJJdl*)zjbC2a+DR}ga9z>By0Ns4Reshy@; z?QP0Q`P4(!zR#v5Oy+}@|C;7praWW3S)A>^Mq5jLD~=5D2YCTYNF!s%C!&G7q|Wu! zL7HksB0=xKm$m)qxn06navtve0+%&++wc8${nO53cy|Z+iz$bobrfd2#1#D=;~MaJ zI97;5Ddq)w#rjs0e9LkOm}8$5whekQ-#>jdLuc$GBc)BNsr)@?C)D}g0BModTU(is z7LDTpi&u-CCcGF_zro!OCN`_JWLo&B>L-Rz#*hoB$qE-A1F7-5PD+(O8BI6KPTj4O zPj?1OR;$-zG{LSvR@?f8!@*|NLU*v@a==s~?R!jf-=)d;IaK^#4&Yff1cUp!A3%Y$ zx=a1_NgMW06fH90=?{ZKXMq3GNPy;(q6I4EE;aEy&V@(qx_!YeuhV&j?f>b`MuKP- zB0z~ZKo7p1Tk1q9Wkg(weXz$BoPHSNlITBMrL7=#yy^2NMU|y)0KI8&NUueEiKiYM zMkabRsZ`Qe)#{hwVlf{x4;&F}OSmHF(_hE7kd(%Af-rsPne_OF-Jjkg?mq?38k4mf; zpG$?N7{o+}F5FY68-O3EVsU2)+C|ra42mUMw zFj(MAXU`M5euKC#EYs2Qb8FrSwyDwnfJrH>aX=C;aC=>bXus{}XOZ7Q_9gA(Mn$iG zh2k)N{0~SFjp2F96!HZ#&+w!pVJ0tcclt97leH16v(jzK@E|=)qJefQiM2wS64xBB zxyHBGaJq!$_JEVSgoJwKXRtM{k)xFMizmCA1+3(PcTnatm?z>D!R;&l$9+5BojQIpz7k;j$_m1Ohdn2&3L096GJ>nELHX-*lUCsKluoCMt zRg(kWcgD_!{kR;=Mr>Qo0UPOizrQ_pSeQD*(^AM;1I_B=@MP&svKIbx?kH*bf;tk# zHq^gST9w=3H{}iRe*J+!dR5%VjFeUOrY<;$PjW^=s8_431#C)=WYgk6!b$W8^OvZk zQW-`n%unffyC>nii@MC?y76~ebsI7JdiwHA870h5@orWz_*}C4Gw`3WC%>IwW5LTv zGT$-W1<-GLKI&C%cR1P-y=$N$))=E1|M|2UHgihgwb^W}#{-46!^TNPsbo$q(OE;I(XddSA;Wyq~1D12-dkW(cnS>w{&( z2X3?5+UsTS0Zi!S*U8g9VY;~y({csvjPLkNMrq)+IUFKZ#vaiVek-*36sVQO{f4;d zsF}tA@0K9i<_!qh_I5KQzii zLE`mIAsV_8Tm81Y$?WHUF)?kX z{SM@7O$Q!*AZ?)8cSC{ZtD-wAoR@hH@h)QQyTKF{EL_=C6|K1fqh@GQi|F{{4n5rTdmWf8!TXbTyY)3$N-7p0{P~+a)64 zdVvk3N2Crmz>Hx%Gnn*7%Dk3wqFBDhEI}+kf&qivcydGTv!)9Zfmn3w?4~yn;0RBFr zR8f7E&V4sk#}WqF-0A1*aLIKqp`fchMkMWH-vBC+zwno+>!qU09t|upOyAN&6kG|K%YTVYhBW9i(sVUDKFGp3%gcp*1u}Pm z7xuR~M2%(USu^A@1yGjuBiC2_%D`AVNjc2;99DHph=OzaI__1r9{r+%AUB`aOW@Mj zczjevsW41deFF89pHJM83y+9)JimF7_E`MeCS@aKkzt?lz0a8Xq_n_;JvP$MSNdZD z`v^?7K8^}Waj96{MVRR(YPW+E7eIg!mt3(cG!E}rVV8W~>9RL@JP5CXjUrEr^x21B zWQv<|ncnd(<^OuNll4Gr1hVlG$P|*z79d$({nSL51sG(?iO)Yy#zR$Ye%_&7FdBiU zae04N$LDZR6b*djHVm&m42?TBoj%X6l$pKTX&Hh`r)F6R31Dd^knl&#z=aXxs3J8O z>?d%+{GtGh(^ua)$Mw_uQ>;SuA8Tj`4SFSKgHGe*Wvty58o1iRy}GP|V8qJ)MI#Z2 zcZ$IBS&3W)EC`=WVYGD{QsUN#KA_|w$tsyP%k#dQj2=Bo$S6a)Z!A$kQU|jK;@42^N>kdYE{zflcQ~Mu?wc-vP#PzjxW~ z>OWm6T1kRI0n;{5)AMfRA4HaJodBzQ!SF>U?<;V6*Zt1BYvK-9-}0&usy(S^kDG0S zN&9z08;CH)v;)7$c?GPnWRT&oLe|Mc1xV@^bo=l4ro+&Ze1fVgYo&v=D$|?<8f}8X zjy!Jg;?@(gf?TJO3vOQiUK)8B?#Q)rsa4BRN-sI*`8j`xX*rU0qZUy$X-b^DPsQ zgn{8=%7?FfBj3BWBC}Z0_@e|Xo!2i}CZ!JV{@t3ApB?WjSh#OOG*GvxfP`;ZdFb|3 z6dYXu49lge{fc>Gof7J1fjRxm6N5yYol>^k@CM8EtX_Ht=Ll5|}Z9 z##g43l*tcwjImIG;ml+M37u_~15P4Qzrc}+pC*AD69T|AJ_mdMMcFM4VIA#6nR(Z| zOWp#TS2pWzRr?1ho|e$@ZgVEWEhASDhu`zpMdaI5Nu=gj?7#kV_|f*N+15~=Y_suF z)4d>43B@k94%}S}_WHYPULeKK=G1t*b~F%Y{vjj=n{6CRNXO7!L>DW#(5&>@foe zGaKwbo?hz+G<|%NO22x#0MFY4R4c&qvipEz(Jk#{gg0v~@em_pNIo#dGxtn{U;^9L zGKtSIu_h%NKl0IP-~F%%x6t5D@_}z80iQj@-xneZcz!6!CoX2o<36_MYpF@zKAHs1 zaG|!SutoY1Euo`_Gz3%ZRO>_+=rY>xE|DKUv+u_K0c7@|7q5`jrB27UDRD1CMVnwr zGZXebOM)^HZ?rFpS^$;-Se75_j#e}rEsOE2dNKfch9-o5eHgJhu&Z!B>Vbg0wp17G zU6H?V!ulrwsOVs>o);o%ZnW$5D|sE)agzQJ_XNiH?~eD_#Lcw|FK|p@t4op zy9C!g5gKLui#U@Kmmx1N9Q10(BLy5JykdCj)V2nLhw4xnPkgJlP)Nm0DY^JRBqv!< zueEV$?d}V5B`*{0)6IRBo{vtskLsO9|Jd8MVLz6SPnJSqlUJMSX-96dci#+#dfP7) zU(=T9)s4VW{Tqb3ly&Q2YGR+!w~g0*aZ2ndPK2!wOSuBvnFCU!Fro`@@X!ubu(|B8 zen$jG2)&N9?~O)mSf5aj!J?tPE5F11EJ@q_o~~SeU-MfPLO>RyyCB9pW1K)y=7)yO znhOoD0u&VDo;+^b%(PrR1O{+opDpENu{T>+a%-J#O}V*_Pa9UiA|H|$r}W*Il9d

61nuYOzUf>hccd%I?@~*1RKw^MB_JssYd6B{k5uv_{w*-CyufK4 za8wB#WQ-_!w5mj`Dk9j#t8DtlL*r??ro9a*PV(^ z4rbOof^}n=JM^7jm#$UM%^r3}5Ra^Mt0fcH_n$aI>3+T6=`yGZ0hRV*3Y=a7yQ{OzzD&FfXx6C0O^=S5r&9wzzEv17 zB;kaRy83;XnWg^Xg?w+=FZm7==DR~DP0;U{MeUmtF#mmfrKP<@T%9vlqdcnec65QG zJFavDvbefa{X6NviBp;obzuLqvlL?jy3qr57rie4`3vI``_>P_nN<(vA>zBU(G_bh z8`?$R-q-N9+z4*BRQ~s)@UOqwTpl0^U%w;J24i;npEM6dS==>$KsmYa85@@XPbzuw zM8QXiq7{ApxvzkC)#jB;d%P7Rzq+XsrREUq2nfk~D&p$xJV`;07i+ymfzC?Ytpa@7 zN~|v46Z!-X$#uN9zmo{Nh1*|$-hx#<(QQw+MLV=Ne{cr@VXR*m1AKo&DtX6XWk%*> z@OR?L@t>9oRhZ$%d#Ag=NXD71#$1zA9*><;Xe(c2mQ-ToVyahJYB$IgtB+*%3AhO@ zmS4=ameeh5^NA?t`BJd4e=o4_Vp2Mz;swnkCL*}kGudsNM;pazQ-U(G5@$MYKMsaD z2>oUI@{fM3son)w?F(8syAlOH+ik_gLsi;#h3j(Q%l9dJ#>o2ox^tfd`V66;|3KU= zD2}So5v<7<%Q+yI{CF~H;z%0p-7x^?S!8*OF~dBYjTaW25d+?YHNEJi0C*fqBpmTN zh*f-dm6^L-aqvlKjl214yLuXQN@w2Ul=u5neWMUq}Vpv8e z-NJYRzZ#HRjJh&?a{bfjzE<<+@@=>v+HjLyS|JSUE!Ka#R!Qy(#nGoZj~?;T+`N+o=>o3IUPXOZ2wLaZ<&g;QXLMLba&wVqqiFE`FFD8Ys5f%8?etL}pcVxI z+VGOK05y@T=6B5l$;gf60jW6{bs| zHT!@TSA%MGRBl;A>QPr`=Ts2ZTbf%3e)I~moUBjQx!ZV%u^fyKG9E7W8JqL(Hi>U4F8X}sh)C1=q0cz_%xC!|gG7WT7mpF5og0N^x3$SmwHGci zVtMbm=iz>AJ+Vr~kE}o0cDj(;c~z9n%1goW5VhW?Uq-S@&>Pvup`;f%@?uOs3 zwj*{IDs_es7SQ15rLNGpoXYCGq?7Q9Qs~l6^-hKUO3L2XqOu{GUHqAIk2qdlk_Vln z7im`ygJFnHU;*gF4n5)Y3#p_yD%J0s)RN1A4U)g5!r&R1ll)`fNcQV}2g}De+|1YB zsge4&4tz6L1rO}&65#Sgj26TEV`mh`tk&Ri#=luCss!Y6AtuP!Y2ZMD7IBAO_np6F zG}#k#JbzdsS7zWUPjMtjFrfXg@bU98NMkLwggWSKDu&HZAK@D~>3V2Y^7=$0iB6OA z^A_7@0a%S+*dFwxgtHJX8G5U=026Ib0^7!m%(|49Ft4uVjop! z!Zcr(NJ4$VG?8qPJq6!)Dr-XRsd%Mjh~y!4q1F;dB@7Em4gw7Zb7ou0(gOh&~uMoK>ok& z9DaSoC#f$)8PXwGWYFX(WlH9PA6~q~^G;0*<7civ1b@3I%MepPO%mV#t~8r`{B$gq zv?wu>HVUa0Dq62IG&+|+{QVNReKrbD!|#6C)J=o0oANeI(>=1IG$oASeL_kN4*Co3 zugKK180$J#bD@PwkYH5_cm>bJadW$A&)&R<#(2Fg!rLOnZU3-XBkbB@b#6v%Ha2=l zSpmr99V2)}nwJBNf2@>U6lK5~FX8-)a$76IwkR_u%zS#pBUm=6d&^eCb+z+Ldg}vs z+B1j_P_@&k`f07bysh!_{XnZ&nM%{Zx0<`cZI|VAc9W0R_fgkIdjQ)c++H_j<$L7! z&99bE?hmR%2)y$Er^I&v7f6G+q7C&XU`C(Sb;dZeKfiaSHu8->P4n@Kw|}U zEXx+s{&Xrrt62H(&xW@0hJvw7X`1F^uRd**jE$kj37m#q_h{rKw$%A0TlOay@AarS z^gZ+{#m1Y}rtkPDkok{&vQpKL!JY}>`~J81E^P1D%}KX=Jn}s_#~;92Nd0d3>L?6AOZR9v~GhV_=`&)8` z0ejMQ8{+CvI9xyC%v9hEkb4@=hDCP$vnx+m>JUNqSWez)ZYZ9EfO!qIB8xfg_X1lR zs&lDtcbrNe3T|G(QV!f2)rLKAm{145I`eQ+V;sp&?mLNE7I&7taP$lS@=TXKMlD>e z-TNGgb-81h|yIPSA{h)wFy>kP|E#{eP?l6 z?vcr%pZ*vw`3K8@r1DWj8+?nnUXHRh6VJ!uwKvJw{wtt&)bgxI<-O&<-;+XHuBU2` z<0gMDauQ{*n{^i!kY2B2u+{N)GTbvwCnCGQ7-IARhxSXT@_HE*SxSF?^S37G*267v z+&6xMZYhBa(|W@qY;jqer-Bw z9cy3CORAjHl14`_1UZb4RGv|3TLHM@>fbOwl|Boy`Kox;US%qJ<0U@ZkVIWMlLqP+ z!SA_;zWwfuh7JT~KJThMyM}Igacp;2EwlF3$5eO0w?;b)fl*xrno@+wTY%$^Vv+3-$(>Ou+7w`KWQG1_&yT(Si zv17$P4)^cn?$oC$n7bWF)mQD)9OnB>yMRSj=h0MzDCkE+CwJs4zIlvzk9-!lw%f-T zlguFx5|}G_AF(}g|Bl@M0Ww|*RM@kZu-<~`zp92`{D(3U6N4cd0KYbM%+8LzvI1serxO0=6Y@3slQ zYnn?NU2qG@r4?$`*~+)h$^wQiuGr5OrF2YWAYg5?YGqZB2sqAL`5Zn+hql=lteV6#<6?z2>4!e1&QU)f(jjab6&tL z8s2*kcx+>A%gaeRmiU9_1JsKC?h1sCC#LsAv~I(%taz&In=ipVrWP{d!{A@LqaX4Y zUg+7H9lJKd{x5eF@0EzOZU`5)*g)vSK=YGpWL=SV`%W$I8lDE@P_H`> z^6n0fbX&mB-ljGFYxiW?%@v&(mWJ`XX(PXIQA{E5bXhOGeRETbrL(&-I{1bdF#OrE zctJSs^N4hOa4(r2cKt z^^9RnZeW7$YBBVH%ktfqbJ*OcrdI+e_k)(p4#0Pd1NbbK;zx1BiEMIs+y8eH%mDNo zCVcSB^3C2q<*c^web}ni34Kev-x9E#9<^2(Qbm9g$&mH+?jc@smj!eyGpsNilNE$=;z(C1-nFw6%UeDGW(LDk8tN2XdaYUbsNv7rAx6t(^*$!!6ea=60(>5 zv@J|4yDpw1c|Kn%A|w1uuJXHBf?)C`u*{Oa(xqLv3ORo2Pt2MsS-O@bl5s{(wH70; z{`?qtvuJqc6pOp!m}pfjXG4Vo4&msAJvdRfadd(37#z8sHhtt)zh>`y{Chn&+gQ9z z`r|5WBjd$u!0vA#p!(_Yz0cxO#-_CHSRO8=&fV?_{l>6?QGO+{?^Rz)WcddM5G-NS z)>Mf>P?pch>7%PE_l(X9ONriI^z}Fr22plrgi>FpL`^Ha!$H4T?#J^k6ZxDGV>of? zI)sf!>xci`txROECCjRML)EM4Lcg^MzBiKA^_MTWK-L`NOWieVSyRL({kEIIb<1u$b!Bg zO;zNCO;y|I8GP*~PaIfc%3526o@aNJ_LP6FFZDD~C`uaOp>--qsx0%|9z6`RDMEe*4zooLML7@iG4+)sW~+H}iYHWX^|ePK?h z@Cp%&LAGB|(Im^Lf2AArJe9E*GeJvczf?4n%!TR7bB)2R;==lMT)PoR0&|6$=IU(i zcb3}OF;Bd@QlOK2+%3y`G_wj1u>w=>jZ^oHzA;MdbqvEW_+~$B;Ukd53R?kS`xbr! zXFx_l62)HvI|-bgV*qn}i)t_02#9=uhA(j(fk#yj)23Eqn#s&tf zX0U6z=o0s0i!$G$`M5oGZl*?eqX!JaRV!du1x2b807t+qSuE;;?BBy>qFp_C@LoD( zmMTMaK?ga?F>!z3zJ&r%Ho+kn!S=pU(SiJTi*94$jby5DDUPELGTQ6Y952_4Y!nwc2J%URzha4&9r8Ey z9zVJ#bDy88N(^1K=AYeoA(*ebJVtH~VEP?;p6*>5e7|>IhQ=ybyO__%J4&JGD9v~} zOb8`;$eL!@x$m-w<1wBlR9HUIyo=JnxEP!w*KFTvsO@I)3t8;nD+_pef+;QW#`nd_8cI}0ix<96| z(yP~MmvWUnW!EX^F$#8R@>Fl!p+E(0Q9ms~pQH+%8!bBwf3M{7z{IPRBU4SbOf^8&6t>0j;R@w ze1r<9nz4~JefNKqon=^5Z`kcYqy$6-1VmauKthm?A*DM-Qa~h>mS#W%lx`%4?ob42 zh7g977NrKHyM~xyX7<_t_r1<_KA*4iVPbE1o@cMM?%(>5Ys~GD2-nz!c6`@X_xxdF{6!PwF%39oKv1Di*wI##3p|| z7tCwep{1Uj$oGJaq(OIQMOpo}h>CI7F7_=+4HYWWnafbJ-n@p+BYiZPox=xAzKa12 zIz_Ar1~;^^$W!9lH1cji%C;YRYlQt`*lF1}6`dbCJU5L5S(5CORCQMi@r5(&AHaK2 zZgX!dQwY9k+t;i@im(3?kk*YN2-70DWYsirx01Kk&vA%=CY>m7wmxp#p{?!aYp@&> z=51Z~kU@Bmo_cHGXLjl!F=!bC>=3hYZO47$n<;o4N)Kq<5yItZ zX|wj_{X>Gvn*W2o&Lkj#`CE4*?(^6tfLtz4w{?jtgg(!J-oiL!L2=y>)!VBd=CM4~tJSZD6#lTR6X7n!e~^!oc{_-yw^tkmErvr+eA#q@ST+Cc zjOB{nEUgpt98ve|1J+$Y@oP8%JwNgC%mk3>!nL4C9h_GGs^f7l3+1#s4-S4$roIaA zdddYed1`Gjs~JzfpBUh}$$;-LEdxqU9a(EbBUeaz(`!lqy(f2Eu&bC1qK!&m=mTDT z4c;)4`S{NU1${md6(r~;nknZb;zePcn(naZ+%IyxiP6_Ei7Z}g6yV!@_;nHK)kNuG z!thWw^b5`|h0VmjufDSf3-jD$ioZ@)YcdoHqqYuh)$FSi*s*Uhf<{pKDP6VjBThM@ z4F#)IBe>$Pd|%TbJj(mtAI7B59W!qXq*i_5J5k_eadhC%AKrPkCr!Xi=(RGF4)B$e zFG=K^|22D8H*RtaEwaBCei`#)sy?GSPO$9d6hKDOHZVVAf#!C|d;m)n#PC2EX#(&B z(~(<0htC_tNdmg3tL`L<+`}~;r4&;3kCW+Md5Y~603$V)ja8(ijuX{bch*mI$r2s1 z-1)7ro0A@R0kZTj34#oV6R?2T`AUy}X6KwrzB$4Zk-(mXXEYuOw~;?oYFA`^4W{R< z>&TThHkb&HRb0Tb0LcPYxx(aXNSw$|>j`)vz(?^O55drv*|5TE0k&IdvY@>a*t) z5CTS4&dDvGI%^aUKXg0e4EZ{Ek*6D;la5~BO;R%xA?yDQ$Z<1UD@c$kQ*DBUq7YPYMuIeS`#Gz(LAeu_pw^AyP&=*Ab>cT?ozv&Gkg1b z>e!vtX#<=ZM7j4C2yWP1H+lmMRX=iL?8+plTp&^18ICQRgC^Wf(^2ihdEbmZZdt#e z!`fmL#pI$x$RhxEU>x~? zkB#YI{+re1OA{)yEbPY2Dysdwelz;wfiq7?rXC?+e+~_`Z~B^DZn`a?K0nd}*02Fp z%A4&0=S;Na^Pv$+Gt@U-F!2;$AgGmLqU@=YQtMO4Pq7I1J*xYskT_E7A$W-9Ad>oB zRqOj6{&Sf}{u`XP)~8aTsON&RfdyRtmSlJ{3HcIQ>X{QZ>$Xuv=o7SidhA2g0S8a; zUwn0FsJKIwK%fWPPnJ8LANaFAoDoAts7yb;PqfEBeMlC@GtsRCvT`5lk%`UuBGSIW zTJtDMY42`Cch3Y0l0`EK2R(i*{C1xT2Bs)Vhe60@oPVPSHDz@WhWekGRrqHq^SNS8 ziwwI(9{c9vJ4}m`Nbcg5Wg!EU;TA2h_VlkG9h=t_mx=f|8QVvFaCB0)g453J3`7XE_-)cx7vg?E! zi6^>rxMHmanEFEM`oE2^a@ZS*QcG*N(|%iid{EGMG6ijs=RM=LocS0op?kBvYa7$* zFyTH~=Kd#dEdQR#*VVeX0S{RHsp+{yZv^f0O`E{tf9Wm572sw$Q9pZ9=kUkFEFok+ zp4%gy3%XpQ2>p#Xf6ir4&W(gB;1dM}DE&$gG`TV0HHZwLj=nh;r?uPhZCkDL^Ccuo zW@Z`e%3}Yn$f8|X2{e*~aNLKRh*{+{IFFDzwh&D)9QyJ7-G+GX%2w0)pt8d073ng`{G6+QAmsK9vN!;h$yFA3oct(slVr!S-1yth3O5g`q7e znP_a?@#7<8{`%~(zVEsb<;^B~7{*fVOPr1G{;8cE32>FB46MBDB_61gPts=|f#xTX zAteNVdbkJl=QZCKko&_1q{2Qe?I1$#zfx^4sH|x^nu%%uHz0&*W{$8VL2+}i5VWBI zdvrI=<7oVNsHvnXLg$bj>Y=u+gY>1MIX&8haGUPFABHueqs#w`$EkgRev#lVf)Y|R zFhJX@p(}RScok$0w)S`7!bGeTOsx5WP9zP>rKa?U+lX60H>8R0ZtiKr5ZlA)l> z4eW`z4hunQz=}a@4sWJ-w`~*l6C%H#=HG9H3aR?!*qgZRD$0j#em8KO!rmLxzT(8M z16&h{7QxJD7c5>x%acemn7`nmG_7f*-bUpHRan2p_{ym})*qPW>i5w9&`7{E0jkm075Sc>6azt)NmzGnpI>xEzX&KuvD{!UNFtBSXjAE zr1KE+0}HDEy`1yI#Ou@pI2R>_Ld3|$i%Pf2Z1bg z7TxGS(~Hz{8;Npav^Ey^7jNaIC=c40=5LUC7&K^&Ds+-x>Tf8+PHu#-xRJ+EpHbIp zOV|WWm0zr1!@!Q(8gQvAv~<*FO=s-K2MlTXr-~bg99=h5zbSXgDST-500+HzasNH( zI#{ikCf`jPwqy3!SKVJ-CZ;4#DkMxp-S6O|b75{7>)i--#)kP+vjL6%3BAX$O4M2p zepN?3F_PLt6i{>*a6aVotH%0FyXlU}@BTF@%fVYPc1<{`X8mw5qX9QV%%g-K8oR&D8!i6vwO_^h1j+ z!~5kAIXu2vzNql~2PysGP~@g-GKkP>keU^fq1?})bhFU1vigK6n!YEz*bj_CW9V=T ziSbM!;*0HQ;P|D9;0rdt3Ggp%?#5fS+?3BKs07eB{il7M6+Pw-3tg%WL2C)5#4LE^ zf5LzBE6Rl`^`%KD;%My5`aON1{dbqekVMb72 zZ6gga;2Qo778(s6vb#dYQn^L~19>Duu|*EPf%qbzTeONVv)mVMOex;!+HXsDxu9vC@4Mo$ zoP2lMA9YH~_L+X~#(%dzSV@;ft(aBrdb!`GC44{7{@0hP=TU%uVuR((P*Tp@jUH|U zA*p)sU)~|bN3?0F?jNHbOvD5+tk)ydtO5`_Td(2wPDK8p}(HmYYm!$!ndp$%|dSzih-W3E^PJ7PyzJtwPMNZOq3{~<#UV5 z7vf>74W+Zj|MjE>2g9xFDL>*K|8C zSs$zFcZ)@DisgR9LO9JBuOMk-Wqh3n43RB( zmUv8Z1>b8?-yXlnG%@k2>e*$&b%=?4rF%szI|lu*Wg~=fg+$ri zrM4maID%ek-Mh>z(A#C9e3&59EdMi2(HQ46!b2I)zp-{3XD;PCTVTUvVK?|Ly_)hA z8fi+q3KLQ;f;QQu1pocMdT6Bn2qA@xGA^guAl)sgXSBh*S zFAx%F{H1&D+U;P&2yIBVX(XzayVyQj4*H=co>f$w0tI%Afx7|baN%?$E3;#l?w#2F2Rfrh%_n8(0 zXwCWmqvbYTv?-hk3tnVx#8Qu}H7$O$q8a{UpDOj2Gak5mo|x`$u&$WdT`4jFD>X1W ztsk|$Q^10fY0#)p;)NO}BjS`~qaS2}=93)t6_LoI=Rs=d-pnJKC)=54LXNE!G)5Cg zU4U#gHJEd+6#2LcE(;QNsM5GOu9}u{x@`6k294=hTicQ9m6+)gH;;A$1_R0Mq!mOK z31uAj;4_V_52@ zJA%PgYN~Hu4+S3wY<#h2AqTYu;4fS$PP_JaX##*A@D=kERrjvQIT^WQ49JmaH+2M2 z&mttEbrqZAj|s<99c}iJDu>z=;I6z}eA+f3LL|p?=ZZX6z&}!dy5ccvr@euKy=$l? z^{uvFxJSVhgbj}#p%>EChp@ID?ZJ!Wp{a#|OIY9}vSTVv=(iFCa!l4(jui#Cmm)&_ zfd4)N>QkGEW%LPB0x&2h@_p)4HK9r1WY-4G?J0s?P<`$bJ@AG-82y9beO1y_xXvoc5BuklX_))i=IqbF@Hq2gay>Qp8=J@rY{tkmcZ=Gka# z*s6f$+7T-Sk@ud}BPzgR&y1`+lc$qy8r25)O%b z9XcMAgq z_7}>2y2>=;M9R$8n-2x@QfBxMEru>>(!A}mqi!414+@v5vVKAEYlkFlCkAj93Vr6r z;NN}r>Ou)F6*%h^0qx*avgsiz;-h%eyL-A0(oWesP~4+_I!TbiEGTzU$V-s8)~8oQ zZMfaMS@^7W_cru%lNBxxRE&TlNlhQRuAY-rP4@}XiWOiiC#|GNx3kdpZ0OD$%S&d` zo#w}ZG>R2wi|toiX)LCgzI1NW_3{RwXZG%$#CfgMRmceJ;c1x#`0sKlgbrd?h!I&v z^9*F93xvKm0;2RSB9phNwPT;U4)M!JczW5#4u1#K`Z# zB#ZxTBWq)pm;Z0fYsZ=`X%C2|46e$Dw(P)7B?32LW^ekLX+5<$T9j^|C={f>h9;YA zIQNI_)pqb@61K8Ln0CH_y%px44zHf~cC3+wK|e1u@a>HNYu3|=XTwiNjTS13PXi+j z5qk!9t(J~0b)Bb*_P%ocl7ipJsemOEQJK{e2N4CP`u0hxQcdoZ%3W1m*d!4#)?1q^ zK!WA_(wyX6yVMW&B)(hX{x>1lYbTrM_gSyOP+-e16`AeCAS!r~^q*j0x@nA8^!TN- zDjmkX!&EE{e=`T5%}QTq6_ovu6t42dbTLmGVt+W|NX;NnE>>H3iy+L8qHOQZ0jcWTd`%6B`q@^>i z-}D6X1>HeRMvwTIVP}Nl4>~x%3tHX}J zK^q$SYw`Y?%^Jfu_nj&DD6kR|-D+J6#{TY(gnpfkc=rG};U=3{L8jA=W17n`fHd>H z55GPpwxbrJf*3|$AcoO%2Zl6iU4YLnh+O>`*pKsUy;CV~`Jr@G!YkJbOUBW?HEi-) zooXXkBe}w&Z56B!HncWTT5x%j{`er9fcJ)$-G>LGk2LMI@L1nITHo^LQAVNqVe+us z(el(L1^Dfk)i>PtVOpg)h8Q%pOl`1*dVFNVL?{$b@swRGf% zd$0$^x$LdOckXGv)g9ZI@2CnqFbdmjWL!E{1-|;83`0Mq+tLO2F2z26v~JY(d<#5# z{VQ$340&vUmqEC@Fq}{~^k&z`z|5`b>n098QK8uwnGNy9^lv+~jHoJSvs4x^sVi|8 z+}em4535>JsFld65eJH}J6DbcyrH-c#UZ#H`&ac7JEwL$P^qoA)yr(!Rh!KlV4n~` zOaDvLCSxWdk%Qtdh3P3&9%0i!&qjF(-Hec3F%X!Zi{U#TZ^?MySPe_4;YmXg9*=HdAk~qYsbic-N3?eSsno) zn@?-6Vt@sx-oY~>CChDC6)zH!Kw=e2o@_Ia{g9o1o9X=xESSCJMn=fz7}?p+j+$k6 z!CPD;o3v5x=wOU>cp~F$*{iNW3l#KWxdp?a``&N(#F2@}V)9PC`uH}mcJ6fIh+Fw% za017=>=dqm*p z@{8}hSI*tXluPL_k`NpYQcU-bqA1J=Rq6hw`!Q_#1*NbV_VF4M{mUd{WQq6%!9^De$l zv0&k%L&&X#>g{u6`VqWt342BocCju&cV1>YalQh>=cxlspFKA4YA3a{T!-1Dv3!FU zV1V3a_fykLOkt%X2ga!{i3c%eHHCtcW4(#ut-o7YGMg?SvTviS*`eBE_?#j*ftII=>+}ZVyw; zT2b@KY?&C`gOJ{xhp_3l6<-;jX`YtpFs&#h>kW~W2rzClQ8H}gIbf3SV2|J#>*0%aeMQ-*!5WJK2Ri8rk z=3dQUZs-qf*PDgJOdmoL(^=g5apqiQaNj&i@3q7yhR_hG-6WJ(m^y}QD3*89!BY(tkgDckY`P{yoT{iXyBB?XzD zhzlMTFJF*h)ZnX}yM&#=@`QO#vDV|~9E?g1fetA~qIS0xGL$zE^u63;sYSSTSpS7@ z2d|~2YAXwwXOH2VZEseyRydiZSkN=;ve6Itd9kS=-noEggH#1}PZXV8ref)O>pbUS znO9pr2S|4cqhQ=|D`<9&01Psb>&Q)~jia;Yu_yHTru`2D@!5UN#JLL zc^1rS8VO2^!|(aFa#4%V^H!#9$Hr+d;d<$J0eY*>*=P6Pc=O$R7>`#ugorQpk68J+ zH{#B(?BlDo`(_58&VP99lOU7v&2(&o&;IYAho5r#7Kx|*&)3H6e1D?! z;a4DGKEiUv^fu>v!+5S_ksB(+gytE+U%VI7L+(?*N%Cd8=X-?X=-N8i^|cuZAb5s) z8&@UVd@%*yG-e&6?Ar#29R6B)%yn6btgO!1%Ey1+Cw*(Z^0@|4lH`O>t{lz{=_gy!ulL|`M!x%H~QrtzIp^<+*#(i}mv7}71 z(>S7Rw6Ye3PgPtym)w`oAe?Ef+irx+sZpwSH6FLWqC>e)5LKVKi~7?NzKSpp z%(t}ul|B-y{PH4}Y=iWM=_2p99!eY!id$_?)K~NF+7UM(Ufsiw%t63RPfbE2bc1$P z0cyvV2=IZf;zv{EZ>qWIK@r>-?VE5mmQO&+`-)yEA>T7g5`2_dqmWm2hvjmZULyb~ zArwDsDCL3f5HVuJ1EzEx;l1d5G!TEn29qd%-z3X0nAIi{%?9L}tga>8e1EcG>?tK| zRcoBhg>Kos(HLVj0x28|kV4XYo+Rlc3DVq(J-+RHZl`ejAN%`46p3JJ0&8+~UBtp< zj=cNL_tBv*Z)?_GpLUrQl385F2U$Ruycc{6*aiizivv@a=0aOc&8!yAfT>_@L8SQX6NetqxGJ z!-|L#8F=@4)xc)`yv#U3$3f}OH4Y9RW;J6}!TfgZI@tR_jL@sZUGGnP?*iP8r4FS{ zp35H|D)G0H`NcEy#CAwagTDGRyQ`5(LqgM-f1(#H?+R#nOCEH6tgB$-joV$gs5?EPU zfrI!2pbIay25ndykNQ4v#ZI#saj3(pU!t~QsDRe=dj2jC=CDSG;>w( zq;B@LWnG7z!lJyY6YDS>YysL`7hVL%@rBAWFpw0y?*)WG`UqYFYOc6d8fprt%r8%R z`0w%w`4M*1o|-zqLPnH$cD)1q!B(D42HZJJgzO+@MjV0T)rOr0HrJl!6F{|2w_)2p+Vtg9>gZu;! zS*@{d4AgG-Hcg@XAB|(AP7VsM4$1`yy3haG?6GWIAC0dW8ks=xE|wfJeO)U+hh8-G zg(7MHj`$L$-1H?+@mn1VW+pWNg3ALFVE|gE^=75vTc}UNp>c#9{c~L*9IH@>@OcN| zbg$o6Zvtu&C5=L!P)m>7+_X@(aGpDFUarv@dbLkKb)Pi*8_#xxpUo+}ej7jrNjY^^ z)uA!rn*f(kphgN@gqJ~ZpXG)4TF@@=Odw7aSPmIqB5T21zWvrf4ewJbORv9CQS80- zQP29SrMcSKBITszUoxQrmn6%bx1Vh?v)^bH^Lkmik<8Xe3n}t3-}Ie4P!=21UlECC zs-&4Ada0ROE_^Q}f5tDmi&Rk&QorZ4JfOw;`WnTv41}Pgb&D4&>}&v~+wC&=Keh)2 z{B2^tv3>l@UiiOO=;)*BE~vqT(+A23)$cSkpidjzpZ;Fg6bR_Eb#um}b10^{f2dGa zt;!k?Hx(kMGQVlzomtuEvtB+7!26n}z3&Fcg7D+iM9e6Y%$I7Pn{uEY_oO}4OtJV+ zQ=pfEZMwR|fku8f)~UV>e%A%m;oL`njy*|Qy9&(b2$X`NdS321d~jHmu&gW-BQbT= z=fPunox@O5$b6DRc3_XcYy^`FHXzq3EF7 zx@Q9p1CX5kEa>whcfHhSss3fUU`l%nR*>_pu?mLOV5U&h`tbC%$r#j5ek;rEawk?z z$Fq1G=$Ea}`0ouNjJO(VpQExeDh7LP>+Fm(g~~7_L@dLGtLms$14h-dwV6LC zXLk*V1-JGnSMs z+>>J@r+9^!jy0nv7GcDUnz48*mIZF`L#I%|qmJUQJ~(VUN~?FVl+l#9rwNyQ{v%pf z#D#l`00-S2%#e5+UQt<40(oBVzP# ziKAo7W7!nAo29DN~&U{uRBgWbYfj zpiuB&B8)@G@uO;f+_8CT33AjZJYUu8Q!;LlAKwbXqm zN=(=J-Y=9@Rwi7*9k131`5(BDkqoduaYOw3-wP|ZuC&m?RHF*0>?cv}j+GMgX52`P z0m*!dmG5J(2Lz^zt(|fSt96S%5+YHqX6QG!TtD}D-kD?S2uusi^tVPENPT3hpkbSx z=it}ZEn-z}d1oLSS{4JmQB#JPc9-YNM^T;G3_#wR1tdtG`65(g$nlXbSE%}$$@6+W zKusBsTw=N0-!JMnr-;mY2>it}oMzgeGpEsis3-sLp28>h;X}V5>LW5rPi)5K zQDa!1m`4LfE#yx0YMr_Bnn+2(5LdtGQgH3}kcTA&tbyB#I6fwo%9+ef9;cjdEU4^2 za-F>7%8Qm)&qzg8?O>s1q)`ef=9ts^bABK05ib76_5!Hyg1l+fqVscb{8fLV*6-O*4PUReZ4*<`&AGRV5SUDHX#d)s&eRV5xDNR$ zDbMEJ`4#;{|S7WyZMLNmP9nl<1TcITulJEQ=mo3RTz`sSLrTrX7n6 zM$|&^7k{v4&dj8r@m5zuAkBxTF>f8-0BhgV${_+76Z8bguxa-)o!oB24<-E7qwwW-C7D999ag zkCU}+LohxsZ19B-HjaclH6lZBS`i)KhcBSZL&R(ZXBG!vvw3HQzG&EKDSoqgTts>H z=B{k5NcA00rMa}j7a1|Wl|7$PJ1^PTr5psZ_7SJ76Qp0rc=E$m1v6_|Q{CI@xPVo` zvVB>g0NRqW^J@0gg}WifVgn|KfjcaAg)y_i~)x zWnos;>}^wMo_{a7=`)|y;AgXtM@D4V_L4Yj3@|f|>1|AMTO7=c_Du-F5poaCntIvZ zPDyaWh-v5YO{c7O{iQl*7$zE{lX01g|3w{UTgz_vNYMA)(x-}P!nED{0SZS{7{qRB zyM;-hSHImo+iL0KO106!hElR0CRPE%J@{d}YxtcDyxb`CW7X#KN{)LBrjG= z?y{5uZQjptaHe~5twXw`&SK|&j4VIGlRc&F1rIbJEUNfq4y@FsYt5I{xBcKF&Fwu7 z37D@uv#QBL4A5ZenW*XKw0zM6{YjRIU-lmtS{fMsRpEqesmKD{5A)|}^?Zro!YwU& z0Gbcj0Rw%PwUHF`7WA)2CBqgnOxOhvSJDb4fm#_}8)~tR*>4L(ks84JegEggwJr$z zoDiThBp|mu9voy4`YA=X=DtKf164xBLRB-Hs?v|*bq+_ijvBCYb*%{M{4E?mweG>L z(A>j!XjnD%UtQvmwuchQTiJM<=6s>cA63o4nn;5Qkne1pd=(KN#Xa-2rf}gw_vcZfmPj#pAeeg)TPW(C`978SKR7Lv2)6c#rd8VBBTNeN6 zE=j9PD9K|GzkF8O_29*s(VBA$<*WM&M9peDtlkC0S3iSZzt9(gx>TcWe(du~*p5|3 ze*rFDU{(kZQdV`}gy=KN5aJ~)1!QmS-A4rE(SwNv<~+x{&jr8w>i-Vq2WlRQE%=ta zh9+KsyTtmF{_1{fHO%Swy(IPgy*2kav3f7poz8i$Vg61lt86EizNwQ%b1b3ssK?k= z*Cd%90fT!XTk?RkmhWH%$duB*o9pT96RVVY^UdZvUM7ijPUM$FB^kDziGm{7T)`}G<%Ch+=}z}G?}Db#uWZ$_1dcJN+|1=@3< zg|M!imH6XML?BiOR#HQT+x^MR;{55lKNI0UDc<0fy({}%G;BnAeal0WVM5t`iu7@qR*%WY z?V3KM4gP4FntcBq_!tYf*@KxaX5F9uGu+p2wsE}|?OP}^cz)_e6TV%6IWHzr@4ODWM@a?#CaEn z0;=z$^{sdroFfiyc@RO2Rzb;qJp&e4(?V2z8GJL!zGnk-JKX4btlGw~JB+K*f zy(++Am`Q$`kYK85fDysa$fTyKM3%;}ji%LnGM{O3mnx2q!P5Ai8ez7+yqAN9Yt>b= zAkMM%Y2jqgJK?Z|K@S_R%qtf&`m!gOQqDM4o9?+ z%3$im_$W<3itH45+-=>>>$4E47(#l5(po<0%R~F2#XMOVeVj#s zcb#ItjPg5mqB@78bc2%7@YP{|1<6aBcJjvpH_D2usr<+|s%fQD9+f2l+I@4{k8O`l6-zm=xSY}bqm+O)ZdS%>!jdn*F9m|dK;=r)#=U_8`ahk;Q{qfoV!o3&X*Coqlc zZ1N3PzJ2wC)GjN>M}K1LmR<1lRD$|Br95>u`eUyQO$|4SglE2G;*S>lZ+r+|lyJKf zTphUo&0kn^J2%?&_l1zT$(J3b1Q<9+zxE-TWk$jCUE_oS9~H$CmulOm=S^u(pTLWK z7>GsOuBw_2Bq|%SeVT%QDt`Y7kEfNWNgjzMknhoKCHVae>^XnY^?35G;Vz(hzvne9-EM9Wqp@zcpR%YY-fpXouW@B?GDGhqMdoDnzLfl=LCIKg8%tp z@AVlnkOuR21YU6(-&OI`NER$&rv3kZt30j)*8~&mY*Y+~m;cQS&QeQyS}nG+JCO-( zE_H||%0+<`)&5TQ7#fdw&eBRVm11+opilDr$&JoumH%u;1t2arF?#aO`0)-E3GK)Y z5ucS->q6~dH!D^fVOck(y5t*n{Z?2+jDv|BTOY}VOCR^_%b-%zCy^cpABx9-c*J*& z=|?x=TUYhhwY1VyC008PJUi5H>^`s1`Q6Q9H)Grz^xtlOZJ7B;ZC(fG?H_DSfJgo-9*9rw%d_FqM@zi(^S``{K=e7v*K&p@ah|+pZ>p-R<2nDiizh{&)wem9a59qpz~VUnJNjr+F$F{KR?Aay z(<@bX#l<&uI$bAPMS+}JrE0gy*-`zhsLs=R!sRyEtGG7uy0fWpaeI#Maef3;S`LGr zgRtM{JJfT)qvw-Rg4CE)kQssR z)C3*4_45TiIW;%97=GW_xf-I|bM4hHXJ-G-N!G(s1~-kOB8(sk{YM9Vr=kc{dW6V= z{7uT->b@phLblDPS4(YzwJlIJ{!>0z7>0xMJ7N0vN&GR=EJ^q-ZtHFP$_BosQ zAw{s+Ah;`>rL5w)vt9~{pQFCB4uL2wyF|1x<2R6_`89(rIJ0`YiEIVd`zU%6y!+qX zbZe`q{Onr3|EnWjG;UTfC>A{X#3Vt6-7vOdO{C8p)>By3jJAHx863|_NBINB`J_O`(h8Wb!6$&yUQ0-?s#B0T@8g4u_i(tHH6~>FQ zzPJ^F54wcr@}-uPoQ&rxHE$knSds?JVZwI$B6jGPtg* z%tp1>iCYFv&b1DCcnuhK_RRRAn`&BIxoTqpfgzJkVM|BjAA4!^*-%SzGHMq`7`Wq2 zYSLnzh+KY{?#coA9P~`#`$wna2t_d95l(mcMM4Q^8M9sQIDK=oY;vzzK1H()2tK;j z(@Ln_om69Ok~PqAcx}cw1dt}mZTm1Bf>KW@^j)sS?A^c}7-5Py$QxVYkx}-yfF;Ti zC0h4JXtig{kpSE5r?B&Kq!4e}W>eL)&~KXZZDfl_TV0Bii)-lddi*^*;yMvN*JkLO z`)2cqPAlf7*9qsqqKC()Uz&gRw0hCOzXA9}B?$4l_@MXpDL~=SQap+OYV#Cuocqd| zDBEC%^ok9@kmrpj;30>gy$$%?cJ8%JKDSpP(7+p^!7-f z{Nn%Sd%j2d$U3cq$Qzy;<(4uJBx}-!Zw9*0+%cv!RMAMqMvKjF)a(`7EZQ1Fd_}o< zD+(6h=6r8`*CI}P%rHI9S8_vbLw&h_^O4*+>?~JYxkMkBMcovn@{#c zJal1}RMOgzy?({XEGv+s2n@xn+?m- z$|ylJmFmST(9UX9Mv42rHe0XAX#OleB}gJslU0DBFgpH~3Z5ura3SqEhETW({^&JxeQr>7$dJ$=}!43yH**1Ze^QFMCFz{u<_;gY#NvT&DAuY=m#m>jS59= z-{BF2f)`UUGW;nkW7K5)oBSrnHV+P0-om))nbc18T#}f!V2=-rY=kyu*_h*I9>e%g zVej!v4Kjan=NS&)1*&~tn4MIEPrYSb(RbaWAUN3FDTlH>{ZXyPn!IYg&6;Breid%I zIMj6@C*&Ivs`Lyaux>-Yc`ArGoN4nCu>31EZh(Uep=FW5VH?NWT)Dd(ouk;~-5y9F z*`ginie)kCE5{~sS}1|%7Z{-+Qrtw=iQGe#*-T5O?7L)sk0I7<9j4_!WRpJH=-e?P z3CZ46;PA@!SpxV168`g+%v%(;TF$86QC>dOc#$vie^~&dtg@enh{~8(&|4LpiKG3@ zSjdm~P`44`xd?OSdAk1x7Q55fVd;S3{A)v4Wy5s%0V)|HMb{Vdlg;0O^$zpryVYsL zJ}#tzrQQ*-71eGnBoVDvZ>`Xu==j>R_XR^JJ-TqmldzT9nN&$GgfR9e(6##EQVo=uYw8me z>8?F*I@`)A=aYlf{!D_?Zy6?m$5$0BvIVf6R$ax$Pi+-j)aQ{w&+tLNwX$e-fP8-p z>iYC(&jxYjYBT1U6oB$Fu?;J$n0Cw1d+W#^CuICs5 z$fWxGs;RO6v|IY6 zY%~&6a0kf7qDT2b{w%0oU6MW(hD740lfC$Ezf16z-5iZ z{(X9KB1nj`crr+_>N^az*xJIAzOLq@$1l$rrYc8b*Y=u7CPxQ7C zBr@D-ay|4#msvoS2X+ZJ>|3H&rQDnLsfS==m4&@QQ9!qD>PJ@1pa8tHZu(yr3<%d2 zKb`YeBd+aj)cfoQ-?MtRhec;Iq)9w0G3*IGR%SJBi;>W5;}Bg3_C;l^+&MvL6*Ea! zaa7^2PlPFasDWAVtgU4XCU@-~mAsF8vh{zMdh4jD-uL^Pk`_=vnxRtxk**=6yG6PL z1*B78KvJYbkWL9nsUe5%1|^m5hM|UG&Trn|&wAE+{+%`J%sO-KbH~2+eqC2eYZW<) zzlOv%B15u0i9V}n?P8fTq>*`T506p?s=8x3LzO!J5t*D37Tg_@dd%5I!l({*E)aq3=JvT)Z&nz}7MmCw-tATvG?Qz3eyXa6g0eNQL zUbU#6rH@RNS)2EJK^+665KEQ@!`2cGv4!v@Z9FO8PurKEw!*fL*k9#=#zfPny z>Q|2!*H?0*s&%mRNO1Voq@|W(qQ912>NyA`GTr`ekx7wIkJha_e7(DM=j@JiQ~!%{ zH6J(h*M^y)8gPt_Sj1c4T`zFwAP zK&PVb*UI??B=TAd-dMONjF-C~;#xKo8M<7%2LuRA^}NG-crZX=Q=e?CX6g5D{+BvR z(;ouaBHLGynxlYm@HV)-b{eLQTFe^_LR)JC4q>#~W%?rj(T!G}1Dl5j&AGnHRwMzP zGcf5Az#1w_ny9eECM}L?{9K9l2J-EX8cY8-oGL_hl7S`R8}-}(jBh`Q5vx)dK$qa) zT9k~;N%%r`D=_jODr~}iK8q>BEzMo%!RuhPZ8fNT7gqFgg?$%Y*ZZ?_Q9v4`;^AaW z>Y6kfSIY4_1qE(XM~|V_^NGiQ(A=b4G7HR*Z`}$~Pg_YyY0$2F!;|sykr$$+e`LMc z$Q1Qp4P2r;EDWi36FkPEPqt|_<^}&@t{670)80Aro<4J#VEe_!TDG1lPWT|kZ$2nS z(g{s^gp;?_gZ6=AZl^8whmV)bn|#!YKyN)LtV^;&oQUprD)54qG}pq^napPTAuWrP z2%nCE&+=27p(Tb@G8`7?t625tqisj^dz5i>fG^o4te z9Ox}et$12zTSKsC+IhG`S9>5m8{ZAn++^+=j5>|%i;iF|8cY0gg${H>f?1(BoxKJa z)*w|60m;?7Hb%hm{=oS8xi$nLF$r#reg2B(TEYpTrbv=HjzIf}x@{C;1uG8f-dMoMyR5|wAJY4j-t6+{+boF@QvQoN%520Z--f~ zcl7YW7Iwhb2Kw{+;l!ZZ?(N9L8XlqjdaFD>$k$K>$sZ)?iffk-x;MWBR;@M;}Sb~q$?F08ml~R@Q=(*16=lMjYP9fkW*{5vqj$P-*E-W z$Ns|~Wa3Woo=dR4yJN#`eR~Si?wGb2B9BM?1u%Pts8^2UYa(VO5vL7Q8IZu0b;Qc@ zkl}dsoomUz+GOwjz!7~n1zN25eFvU9QT@bMRT_S$(;yWPz8Tc9;MUc6)*)P5q+KcN zGmzeKWdHGC1bnM-UL$(H4{znQgU%Q10SuBGm`?ZPSuX&{r%83Jbx#f8Iu+Uc4^eho zUGdd4Dig?hmLGJm<$lQ@X1exsV%7P)x-5b|DNS%i_q%$+3>}x^tvn9`2r-+OLaU6I zw?OEA&08eHKDzZ=)Ps9<&`LxXLly6khnX(kt|E})qXC}8dw`u7`9Ci!aBay9Mi+B% z6GQJ&U$Q0?0XB6 zph-`AhnAQ6-_HtGd0i4Xpc5j>*b;_6zPWe968sJB@G9P*!%zvA65Q^FXE6A&l+KU< zIG2DMZ>_63v2gx*e7yP7mblS)qlxo(g$%mNlw~6vrV)rY>MbMGG%_bV38J_Mw%o3LGQ6!Xu*G7R>})YWhs($xB?5f zb$_f{_*2Nt!zX1fcfhSx|q^8XGvF403r zaL$hP8)wR+gF@1RWwWfFd^P4FLWt7ye>F!t`;J+jGS8Miqa0r4-{KeP8*Lzh4=BXG zKtCtsWCmjvBl%5hmzPJm4m{2wyF8%kz?81@ePY{b&ukwMIR(S zy`<(xyQKwI%A z-N9~Ms8~A>X7f-DHLGb~Ey~fA;B&kTgJ13n3%=ARL&Dm0)s=Y`{;7(c!5!j;je+#V zGq<}!%!a4!Lj8SuCJyh4M+$S#1?!27q1g=;RX;mjXsJ*BuKk!vYgx~dzy?p`ybU3HVd4r3G}_T@rQP#bcgwaQe;(;&K&7}3bK!0$NNeDd+1 zQYr<(5^tza)LxY;XMc9`DcAPzR~GNCQ|+<#+U?-(#{;^l-xQ@c?RPFygF7}RiZQ_q%&TWv@`IUn zvb=w#0i251L_$JE`&iLQW0OceqS_r_ZFFWHUDeDZjz1euBO244_^2Yufsh!?G0Nr! z`DXf+o7wyMtkd5}aG?(ZXSTiOkB;?UzP5*2`X_9^&GVForO50yvwqFGJ=6O#J9L8s zxG}f49?{+5J$ysIb8VH-*>Bha=*X2rkPaiPp($YVyK4g)-C5;og7W>#+RNZKwa?C(&S#Y4HbA zZ%t&IQ1Dblv*n5lw0^L58nQ7LXoOZQ(MS-v4AIgGE^;@a;28{VK5saFPzXUW>AnGt zpgMZ7)u_f~lX4W`=^;0(GAL)`<6ce2pB!nucS-}gp zVYop7Rm#ZYrNIsz#9Tk zXlFv0^F96lo%!DN2g%BuTa%rgMcQJrZ8o=QulmF%`9ha8ZM1dQSKha2az~EUajM(t9y6<;W zN!ocOyZ5!9i%!Xa7UUJ#!)GB%q#KNTR9ju{HGPMqVVn zc&A`pVYH3v5A{Zq)X%?f$9VN>vK_*`OR}HLUwF~!q-DK*Y~9NslbrDBt-EV|xgqN} zTY>jVm$I{8U|MmqFh0;r!FHP*{WDj&xku88aYlcz+lOf_>L&JQYp!beA#u5HU(z0z z+ZLt$mhE8a<^3c6Ne5V(?{km7OIo@l4rl1&RU)kkXemwHrBr7bV-dDWfgk84kvbah zRSq*?AIyd3@_Bosu?O5}V{MJ-?|o`XtqBwNIed8D9Iw+f*t}X$_Bo6L{d`3lDvY0l z^jntbc~6G%-dstT*;}1=E-1_)@`*XENqWr(w|{5dq`LTP2m|IU&*D0Gfqbwg`hZI8 zy9Md;BEFeGrBk@9%s*)3%_&)ybE#?@bZ*l8wPZ)9(w?@$vehh1Qsz3>Rx776%6~v$ z&+z*phwuK~?rA21yNdDDN;gVVApaphjs^`E;?vxPNz$Lq7@9`5!2!f?k1x8NATMw8 zV1st?UkPnY4@zGGU4BIdZ&Ug*;x~|02#BIH_cA0iEyyFZ;q%03F=_)~K}T*&_;NNa zM%rVuAOwE~!`}XTO0aQh4@KADzT_+>|I`p!QRvj|O_LS3!D#%ti;jw_kxCbDG7ZC% z9eJ)xV(I#h30HK#F%{OLj-NYOWi9}d|FS~f8=CL;?DFE4iuEz;afKDSA57$BnEi}# z3>WKrEooyp&ElU6<{HRYi7%G?@hFZk6F;*cVudqvC3+_kC-z4_T_X_hxxpX7VS{S; ztW-cqre?2GgoSnWaC%?eF|oM&Gqfg#2ScGx+$J}M6)$8K8Wv;>&=murZ;*k1J}8YF*2aNSbcbWQ zm2?uvM^cvZ!o8BL=I&9wU#(1?dfXFbrKXK5AHJ5H8kCZY3O{zw!A0Hr;KP|6bO0gtJQXuLRR0iyg@}jl;@YswhcnoQ3Y!~ zydH{xKXkwDI_6`TB2~m0PyRM?@v<<`95!#5krBQXvCTRdO?Tp5!w=rnXwx1z<$0kAYu7I_N(W9i67Xcff z(lG&-o~WFk<|W=3&Gt$vZvTu<;7vwid8?WdPLTZXCsMXtWEDwqUe#gX z;{-4SH*b-n{^Fk#fD*nXr_Q*_#u5PxLQ|(~To)mHl!hbHkNj80R|jZW%N+_q6Y=oW?IdrC51POz$Kv ztCzbuV+R2OGq-CCGwz(3-#h!+0>snMs6$Y%C_0qg4&K6xm4(60Ws=HA_yR+8z!@*r z)yt*uWGWXV6?p2tq8m9|+9*nX^mh*@$yE)fR(O$6h4XMh;|8DR3p&Gx#=-OiQL@gz zZguQ$Qdn45-;9W;RLJxmVLf1i$I2KHhFXx|ZOj$Oe8$PP_=J%9^Q2^$!5d3s z4>|~UUE}6<4raf`W$mOlCGg`!3O7;LqMuF}y zyb+Dq3Buzbz8E5R67(E0KhGaeO{lg|J8-#DbT{vnHw;YMMyjHQecv*f;ggZ(KF{d0 z%;(Z+-|QB^jh9piI#}3D=dCS#;Se%U6^$vgFMz>3(CnmmGjNVvvyJP>CPc)6R%DPV zco!WV$CF1K!Kk-Ni`dm`EPQscEc!KhH0uF^THUi56G z>ZL-|`j^K#qiBH6OP4G3N?nI5YLyUO60KmU(NW(zM&*W|FfHM|c1P|&t>MwHOcOp& zg)}rffzdMQ!2Dl@NHp%^5-C~CrayUgFP$w;n+124t2RNGEu@Xh2gEXOLe5$tRg^$BG4XxJTqSf) z6XDF}LmcOpm^;!wp;qry=9N*|L+cdGzO+|WJi`r0^-;MZUDltl>NL264rwq2S1(=X7scncy` zrfsjxETfYXEQ@_aC6p}_{JmAm#Mo>q@m8iryC>aELIX@eMn~_3Bg2#^EiR&B9Ps@dkvcGkfGdq2cirExsxV zyK`67+vo>W(Lg)ST|L1oI#DZY!i#3<6IHhraYl4Ma1;%YwwZT5-pbu+11JOi>-VgPlv}0`{ky z9+_C)J|Y844d7nu@e1U9WuTri0nmh2GBFX>Q=!;w&OjenTLDC^2S2jTnwzdHMdip2 z0d6BOU7d1RMpJygZGI$qMN<^p=p(0iBP*h-ABXbn&tW!qxBQCkCX>rTB>&Zha)*!X zXDDf}(RUHARFIODCA1?vRNMFHhdsT-ctBhnx+9Nq9E}HKDW#g&`=7ssF@C&n@o+u+kfh+!No_vB#u_OVT<)(hFy z@6R+aG-e&AXn;P-&A3^u!BMGekFUCKr}(!(964TWTxyv=;#(dHW}qV(SjRdD<-xzZ zpnKO)_HUP|gEX%;p1GBUKFqp1U`7`*15Gb;X|NB6P`{GLsqx=27wvE-Jfa+joy<1V z<$-2Zq6YRQy}ha8B{$RSyd%!L7wSjf#7pjJS5pI%mRM0ZSID(EbXMn0U*>4K)wCOp zj85-;LHs;+c62hS)wZ_;z3)ce7%8}*_;^e@iO5Q~{TP`N!#cKC&o$@A{4G|)g{}v)e+nq{B+S}fV$1EjB z7%x3gS$!^V2grGUQWJyqInu?_(zf=AeDMANE#LqP#7#e##&~O(O?j{*du-5`V8~SZ z*$LN|8E+rw#!J&3?B_i-N?q>CD}nHrvSdbEm;j;0$PXkQKy68_6m-{ajWhT%b;@!G zwjW#s3|pqWP0oI3WEINwJ)~eS>fyy+Hm&veA-!FfFXq~VB<~|(0~WQrK?*Sb&PGFo z@g$zUzz@E9TvX|d%}|3>WnC%Kw*<)AhhlecCP#at|=SE<_*O8@QlJKvr24l-3NScG;9SY~N%Ek@?apkW2-_6CSoY0_(~NDi_fh#4Q0&V*Tlrb08RAn2 zV_B~m`lB~zu-*emu)r$h66n~mG_|*D5jP3!3AbS8&5P#9F?=6Qh$Aa&pd>Kz>y0UW zJ2NJ|fN90>NV`l|y>!?6Hro{%sp%&nA^z0%CT3I3y8>V4ww>HL1hxG;Lf9`mlfgGo zeQfB)ME7QlWFD?(F6JPq`Q`a!!0v;+KGslBI^mGJ@_9fuk3yqgz*Bl(5d$~kXAWdI#A0~X6}gsumWcmC2(6gPh3nw z^G@wD)$g3m0snZ(MyGR|YN!K$sgYy#!CX>)g%&tslhHT6-y>L@Qf+MVsgrYMd81~5 z3AJE!pg3&9C+9N`#U0m&(ijTgNMDEiNzdQIKx#ODP-^nS$EI|W3#o0B8;SI+-MH19 zuaJt+%kyA*;4@%@^u>8_MbqR^o6fbO<(gHsV4>sMQ)|v&hCgamroOBPKYC3VYcdJ8 zY;cJDM;xCq8hpaHx2$QV_sYM8SRsie^_b@ZbeqOLlhWEM;fRB}Dw@@M1S~L_g=r^c zE#vu#Bv+PcZ`*BhR6}h?i4($Jx1XsU5wL3%KsfLSi!vZV?;uda$bcJdSkE`dKG6Mw z^7vRkLfL++mjem*{nyf;{h^`@XQ_#ZYk96o6#-M(h4#7+GWv!+j^kP4p-U?nww5x) zC09ao%cP5|1RuRbFlX_Pd#KqjhOl}`zaaf0q-{PXUGy{5P+9i5%c>AB++dDP?T5?k zYlB67gpUMTLPGDB#20{f#O5TfLO$>PRf_L&(jg?OJlfjZw>-DnyB~SdZIC6DGJx6CaLaAVE>|zBcIJL%Fh?{y}>}*I(*ax|w!)%Dr;ytCF zW(ax_L^K35JbN0du?r<4{lzGipcH|kysQyDCT$)eTLm(DXZ=QomB9$z*;avO$`+LB zcmTjI0 zW4(wL-rlvM$(ItIOD){(e&q6xyPIC3Bm1j%!mM_acPG9PNRt87mfB9anG2e z$kdN1qO~i+y(j%fdQ+?3+u-}}e}xy?PU{@-IG8`t3u_Juz2-I+3=lvAs4v$D>USue z|3lpel$M&$5KaYT*qVcGkNpYh}$J+RX#MaQAKQ?sOv5X}d5YKMF_ z0G7xPzoAZB1{nkL(KH#d8t4A=zXo&hpJy+q1>Sos=;V@ThD)EQECLj9m;=T&BOIma z0$NW7BiviDy6V&FMC&eYGk>3{mL@w4Zt5Iw5MoRk4g8xJ*>p0}N3XM%dwG+1UxOI8 z)r-s?g*foqx>|3a3;*Qau@t{UZzOO{|8B)C#k2oR<-80%V+b(pRc+kbZ9VtK3K>Ws`7BT$OuV8?7|MAsK@jIIyYVt zC&W~LHosOzpmaU@ktq~ql=wQuoweZ6KbhJJgE`hA!KyLGmQy=~2)(xmJ^+J-{%7C6te}p1Ajy?gq2HFEvX())(xV&!E@;t9#NJ% ze$f*N&lV)>f$m(>xEMNc-_C1K6nqot32E|DTW%H+H`bc?jGADEFg8M2uxEoKC9R>^Fv}19$!6?3**-x0fk?AbR}P$(HyY7HqW3Rpi@zBo zXk~f;()_pf5gv<^i}|CLv}Ek-WlPeu|6WyB<67`1D<>LF`O6u0!8#}Swn13{y`!Lf zSv!zF5))~I#^u1?DB*qCty4P2`5kHh-K#K+2Np6QdrONl~3s57M^zRO-%`+AGtixnhkJ&gQjoD;z*!S{HwEw(`Y5YCo8s@5TuiiHN2L!&= zT(mrYGR;}lnXhfSnsuGm{>oq!A_o~v1VG<(64ZxfKJ`9H(z3$&BnODNEIv11I3ock zX0UNG{;7ci@B)CHc~fr;tX7y>Y3}-IB`+vqm0cy7^r*$S=3w1Ashc@VB=XL>ah8mD2v|V+pTr8sZsd?NXH?B z@{%76SU~9FC7t&n9fX4nKA&njdL-%P9yJ>R|Nh!pHi-^03@YFbn(vK=k3Jr7(SW}i zZ#H;axydx$`@$`MSRO{ZvMygm?^S&Dy6SB&<^7yjx4*VsrH|PY`B3re_AgI)oxY@Y zkMuaq3aB1y7$3JN2_5|ct5X?C?;QCEz!TB06em}@MY>>W9^Tj zB!ax(UQasvIYaE@-V-$z5~3WB@Vj7V&RdEVyn8U$Ez4K`(2>jyRZi8vxWrrP#XqRb z4(a}8y-(>~E4ebuc z5=vI~Dks4WEtZoP1R*IR$a+b4%C5wBV1;HJUHDvqhjnSMAWY8V*RM2J7y z8<=lM_lSfujb~~t${mgmRAPnyxO0#ZBL1894zH1?Rd<7UNI#V8z_X`InJBRVb&~KM z$4~dOrtlz?D|ZTCtvppl9YngM1~1$ycj)aadSAWg=WnEovS$(){AhS+O!VSEOKjkG z7&EV0Gc5he?C$=Kzgtq$5i-udr=XNDDvT_nqbsDA29; zDUbnTEarV0_x|xRtRBTcaC|(USz<}Vc^W4b`k6S12c94=tD^Y%^-F+_Y?jUJlOyCE ze^(eQ#ZjS2Rr0ASXD(O!oaVPtY_^Z@Xk=r&T@oR}2$*$I(AxWRn_z$HU1%xDN>Hl1 zm*T@T6WQlkQChABeS0;xmAZM{obvK+ZT-EBXD(g?6;;tc>#qLVu?#K;OsWo-KIOEt zg3joCdG)hCN{M%urmB74BO=db6nb7R&7TeLTYVIS3gO7Kskny^TeVj3_aMt<&3rV` z4v6aAU$gjTYCDrXc&t+?msv>;Pu?`)&-2}$z6@GR*ZNq5Btj$>0To40(70iuyHg#6 zL#dVhC1muS#FXkx4OphTlVKNRph}(>*~q^O_7=$ncA&jaFVbhs99 zm1CqQ4qK@5CrLduD$u>5XfKZ?$XyHk%p5A2OcD7 zpEnlSk)LQkw?ty?kUHN+CT z@H?@47rIe(o16VX|TKK`Km|eamOc{XSw-g1Hzk6m8xk`pEUBG)lh9& zP7N~M*!}NmHAmzDN>i!*$k}gTjVHOVpFIL41h%U6;EpO_hJC8kb2|MJ7AJzg2M43T7g5Py}I{*b;&@{S{p zNr8B4%+KIk;OS?iuOC3(%W!G=3iU|!M|FXP4)*yv8wk>=El=sfDM8LO*L%{;un$6O z;68MJ`1IS|E;=2rP$`f@&xDx68g?)x;MX2EigaoaH?&48h zmW1dDehb7yl-tI!2t9d_tQpXzQ?XRC!;h^fa0NTpVkVK(pjZ%n?9N<1h>l^1+$tlI z@Qw=6{Nge}-*|w13=qj}`YZ(Qp17De(srE$H^&C@m+~JcG>s(MpDEohOHukf-Omh` z!zfe7zQfbVc+X|TD%=#*%jI!TMWp-Qrr={Fz8k~hDs|)w4@?(h=|=ivHPz#BSAx_l z!Ny@ZtQ_DH`*$8fw#>WRBW?a4vS|bUbk7o!7UXtt(Hj~ST`2RTHdodgjhK6wwmIh+ zWC(gW7_@v>^DUUi@hT_q+$QcKVpCrQQ zea~QS7cv}?j0cw5+uDQQ!<|4~Mhse2Gw9}5mYUQN8p+u(&KQX~n0rN@-LZTikJJqzOc@ESh2f>?dMn`;d*Xfw3! zEc}ksth;@Dm&b#ceHU!utjQQx{*xK z4%iV{!$gR(Ms5d^*aIWO6`p)gKp;Z2XJ`HWwCnAwkoQnZLB#CD1N0Ua==KP}*nfk< ze8gICl>1O$C3pf=VDwJJZ{0?@9$Qrwvu1nEl)i?XtVq6A?s+XP&P1miD<;3K3>xJ( zO;27$T{o9KKh(jD-}H1_A^5q;WIwh@2FZ!Y2YR$Kn8ir+$ScR=sWy#hS{7G&u)aIwg76m~tI?`h8v;*x)&Aa1E-SS1n8_MvLku0A^u;02LAT%Lu6B)(zC z^jxq0xvIOm;(jwyH7&}$i2dk(K$T*4SN4h>cod}8mIy1>*|SX81#yCpbDeQmz!pBT z0LpwR?_VyY{HlMFG}$ATO`^83+jZx>%b z6FZ@PQ(E&cG2!Mdc*VaF#EWXYbIuW*INZlsUPDSG5KOSzoX26Vd2;QDnO& zpp~~aO2hycT{26^CskCrSitwrYbf@vigVif0(6t{4HZ?+0ql)k)Y3BKW196o!h1Bd zIa?|$UEiE7zRldZj0d-!MV*?ZLJu&dlIG|n@h2lu(O^Q5iJA-#`xTd33%3cnHp!Fu4{i z$6#ku@s1MnHVdMbc(4&@<&Lm(WOxW6(IA&F$H=?i?GDV9%CI;1j^#Lc7lR^L6U5{< zAO7mKMPqA65+r&xP$5Sffu1?`2-SkNgv|4SH@?vK0ocuu4v@r}bZe?K$# z+Y~O7;P=9<*ze8oZXSv4tonplH55iQY2NS~`5s#K5k6b0LP%(l%B^^;62|TPA}3AL zpu16EUK@3_*?vkrpi#^ko;I4LlknO7{#R;_Ty*juX$mhdpia$+e8$tkYLdIlw01B@ zF{Q=uo$0NyZ$&A8;Sq%1#|j}#B~_FAp`RfK6jCLanzy>!mI_%*I#SC^lchaxTj2?- zePU|w2Uz;CH;rI?cl$XInq)1=2-oSK;oCQ5@1_^{YTP|7TV_(L1aFbou)~9eQGQHK zXh|c@_N%>@pf{orDu%DSv4U?tRyMGX-JRVeR;lhVT#jC&w1v_33(G=F8UKnsNuX*{ zngh|upMf;~Z36i)Z8>A(x#|Q~%b9w&w7(<=H}Bcq8*&)w$;d#da3sCxhe61Q5G_{3RaC z2KK|t`r8SD;B}~DDq3-XIfhzygGiivAJ7#mSu`|5sn`BK{`{zu>AC8HzsSwMC$ncv>hdUO4v($_~Tq<@G=L>F@}JJ6cl&N$~q=^wWDThAOKMUTRy9JGb-I^83W84QDz;cdfU2H(h? zNd|UAic-U--WA*L>K{~lrM+{e7ib>i-;zA>lbr>}e(9mm%LG#)uJZU@%Rz*43*yF3 zq_XjaK2ggCV}wjPpyny0M)W7c9Xx(Ql%7tQlwwW$=x>wruVhu z=~jJBmI{i4qaJDHmA3v5tqgz8U)EanZql%Ko&p*PYWC zn9s?X0!`3)B_knJCqH~@P`d%s;Nx?t2l3S(c!jq%5YVCR<-p98->2xhj6&0X&? z$W?6gz6rGXHVw$vPeb-3R=B2DS=E|;4eHxd(`I2N_>gM#FJBD-cfLwM`|KCdO<)4= zT%X_;bWbB2ipnv5mB+TqW+Ho`Cbc>F2s~t74?4gUKtk$hFt95y#&F;7#Uo1=@@uTj z3Ao~9EEy+Mu28pB@USUyj0j{HbBRD}DI}BJIa2mvwSCdT7?iQhLoW0k!HC{R9)j-W z5NuZS?GLJW{&f4Jjw!Mkt>v2&z9}joser~oTxai`^V3@#BB_rbxQwrI9(M>RIR6fg z+XMTr+AIQeBz+dzOnJt5k~t~hBc6-d!P!oZ;bD)XUcz@&@ZIo^y%!GF>?F+1_8f&E zC8^qo6*|}Ge;E)9ZkZGJkiKWpG7zb20c=Z#rja>}Nf=|N#ohZ&)7QIdTWp`U{lrzc zKQV=358@Fu(0T5!vH|>S-Jfq@?g3}`eM5kr#G9$K`}?2ZpL`LvBL)65%@iFkqzlV7 z1s-^^Z9;ogDI6#-NGV>S6md#&_AD`QJi5G?A>E;!AiQDp{|?>wH~p|Xr?2&7;_uA@ zgX1d%uSKM7Jo43~lr1vlIa8w{E_~IbmvWTtriF1t+|LF+Of}P{8adS#({t&c7OupFhn~gV>j`@9 z5KpgG`l`BDj9sE9E7Yygcj9z(E_4^H){Xffkm4bjYHFXKf^;KLzmsEokocU@%rr6- zHcVt(ZM6CL`KOBOw{UFL7h-iPkE;|Ph5thBfAmrDoLMyzh7aG=ZD@7pTuWR_u(iPqHuYntnag81En^5ydTD_x5avl8MTjNpdZCzytUhvGC|{5>&Dh zC5$59b-Z}KnfZ9Rcm9N#BY_Oto&ir4s#F7;V8nQa;#6PH&yz{~GL`1xv3q({n(XPG z&9=YlPf71N1&b}xNY2-$i3hc{Z9y98ed(9)U}MbdXHS^6^Pmbk^Hs}A+R`^zSOoG@ zEeUT!IvbuBPCobriK89`(Lo-oG6RfNi<%uyz z;k+sQZq`)_txekg`{2YH?ezg7eDyO6_@&^3snk?wRpri}1b=K+^Y{;YM%Ir{E{{I7 z(%-Os_mzhua#rR<04=2)4g5wiYm*4i#?{D2Tyf{9Ub5v4LzX$y5esAsE!jxPX7E9Xxx4}kK36n8{61*^(OtK$TQI3K# z)u)x;E*703Fb_fBf6Wx4^FdfIn}@u7k%M2dBzMf8qtr`dm8eEkTN@P@4B3%b@pqQ~ zR6NYg56Rtlu{9r%zb74$^&J0PKP`%gyQH4QFB3_*hcwwhmZod;P%AtN4{c<-&{?2h z^CXn(W4m?h9vHQ-xsg}P__~KEL+-wp6jX5V{gngHsb#xG!=C>+|6q;_4!_QHO*UYJ zJ%iP67%wU4g4Q{MH|w;0u<7#jaN@rHBg1{Z_TI=2AMVJ6k+v~oZ3XkP`A*xrRTskL zXT4^@RuYH3%o8Ska(GnwH33QMhE{N%h~hT5iswL+wCJpGh1#gp< z9mYT!ZSUh1*n^%-4uyK;b{>4GPZ)sZlde-;_r{Za=Rcu(B-oE~n{ zk6nIhXe`cjDCX_%(GJdmvUy%TA|hB@jdw4VXHI;h!ULiz=fi-a`t3iA85IcT0u5RC zxbXoCMRSRRuXV?ykBAc(U3fRsH&G>gCbn~3GKE%%^jfSafxrP~=(n}Kry&K&GV7zm zk2mL|f!>d_EQq*!eC9Rj3C=HHtV!sDmsU&i6d@tXrq-{qt|>K3EvIZkj2TK6nnv;q z$x)W;>J44`_e-dds4FQ?-+s;8l2GO#tMXUU@PGTExL$?{e*bi9fikIGIv?P>m*lxS zQKUqAgGiEA@=9>Xx#a#?7x(?|2;^_GjH3;>rUtVE8$B~dM~I7jD>>@k{0vLBmW*TY zM>wT#8$jE56cA&yl45t{zpIKeJ^M<%{MV0_-YoG=t6h1>1FAj=R3=wjCAgqIw#oFH z(rhYTuH)1jRfG8si6wMtH%%>L-M}S$qS~rK`(Rva7;))(b}%@XcX1w;$jffacw4(+ zM-wb3M|#>VOjNQJ&~B%SCefvS4GW=)80+*T;_K_xNL~@#d1^N5)^!OtDg846ZvK;R z{=WM|Kl<#5al8FYZxAJW*Ouox5Jt9DhG*PU%>OsH@;c5dmeSx0Le?@~)FA%Tsjj8W z`|C~biT{rU@Sz!=VCpOe;C3L;Y9Kh`dWcT2kJgmGOZ}iT9q>P(xj9i_3@K<(T@CJ# z8(~o8RebyzOtFQ6db5#%+-D4UkLpykFqy z)vJb@T2*5syjG?g?p{T^dA1#9ju!%!yXTw|AH_qvWFdQ#YmDUmDwWW%;LG>fT5s-t z6ptMDIk=q*G7W# zOL?rm+~(bDI{(Fdz|PAr;NdJq!eUjvbS`G zc-*)K>e_?nNTie<+op7Kk@wSb=mT?*C$h;MHM=&HpZVa9AUYY0dD?n;_VP`)QX0KA zI@}4F!HuH4c0i>6!K}z8&KpkGwN~DS)|aerrnRtzhQ$d4Nf}ozukH0FJ<`~eVVG^k zD~knM#7c8uF+zFXv8|H(0#>*W#m+vN@om8oNt^Kuw`rB}24Xg?J8??LUn`eIz$dJ2;s3d70hVPRP`MV2=k#LRw#7!f! zZl@~=I&>)B>!u%RD*lG{w()|%)EFgO^x`L6CY{Z<0GNvvnDc!t#;{F315=gyqx0Ng z2*eLdP9JjzVpJGooitWGo&dZMR)nwz`mJY2bM=9@PcR?;w6Os*SkA{iw~%1*ErRfy z;v2|`BNwM9A1(XCd`uHpA*6x;-tzm=Hv4hMAPX;ptKa}8X#@V`4;fUY@4Z5cJL<8; zWkz?lpJqB@9U&$kw%{g&LYs z-%u=xkwye5v!4GIF01hDZx2qfZejNQ|T z`F}LMbzD>b`~OdOH`0xubk|5JDQOV~0wU7gj7E`e=@3x5Ly*y>gdmbicf+W$?fmw7 zf4;weciYZx+d0p3uIF_<9`{F)?!$4?d-kz}*rBi!Qw6f-%%7Wl5K4f845Tu0>O{`z zag41}x{eMM>_OV%L{MMQDU>;S{`^#8KUKe)M@g}S-|$xt2JX(nE3$gs8A3>g)*sG- zle}j=Tt(q2GhUiVRc2%D=xe>cRHbyH$AX2w*!0z24itrzUlp%nr##D{bS8+iU)eS= zQD^*CL4qdzwEWv2BFqjBQUT4ok-5)6-(44bKiP(!z%}tD+Cc|qj70*`UfQGl{K3_8 z-=9F9gxM;GZA6z7|AR*;om5`f_Ow0U5Ds1Z7I95(vUA*!n4Cy1UoNyG^c5xA&z{@* zd!lF6ZuU^Cy~N`|UL0PhfJe2{W^nrSp~IWgoHJ;Pbc3g0InrU$FMIE+c!9j%y`^0i zzlR%^Qq1yvgxab<@16h3GG-WNxk6Az$coo8E{lE4_~Nqax9dA`v(A!eu#8hLKU{ZO zfe3w_QwF_1(6q7~S{z;PjGUVIU@?wU^s*p)P~;6KWaBAMjy-OnnxT0!J~`^O^0&bz z{GtmPuvawm*a9^=f#a&xsIQL*OI+j)YfkmuS@{L}vVe14L_RuPi-wGov z63E)7Q#S4St)oJb%i%_IrwP%5?v5`QnoqP(5YP!jP#Y=f5ahQi!xuWUId0ejsHi@} z2Mqm4tU^BTy{?*sNh)`a*MT@8zyar_?$`N)HOa#(7+cbdhe6)N!&HF#6Q|sq*K;1~ z46jr9F>b+wMlL%mh@s&)=yDr6i^8CyeY>cKoMygtP3e|X{YGH^$}6^c4Xw<(T3bQ_ zb5-Fltpm?D;(vz|>t}HY6bTFly7^X<+><)sKkdFrG7f*^VbJwK!y>`jsKN-(feL0JEF$LvENK z$NB!FkQs8_fLRJ6_@Ctlld^1!F}n{wd>8f+W?{Y!vrA12wD)lD*G|W8%qfUMnMDW= zdcApDx)gl^7#G-&O}e9f~Vy9)|zx7V3Q7VOvgL-AXDLm>_HpQrCqTO z7;ZjR{BjM=Uf$_n^?YdgWaTIVz~?d?u_7%5PyXu~&^Kz3`e+kQEhv?EFgaowzt6Mt zcni^KH^<{4IM#}Xeb=ld_k8~rc#X8D#I0m1YjCG5)_+8t*sK`+)>7 z?%?UD;vYE*=72aVX0utyrc}|Neq*Oj&;DkGunlbFvSfSKXN2s7Mzc8lG0=OGXF z0m2K4&4g?#L%X-Y(c~hc5{a&&%A7jC-}hL3 zOK!pRr%ekr{ptcUqEtiry5Ru<#uiZU+nGB&v!gG30^ho+J_mJPCZ1;IJ%<3Hzl|ON zDGCIm^on6oRg>&SXIJD_rel!FhK-Kehiek;se3Nk8vLO3jyZat#BUr zO#&B&{1%(wVeM8l&M(L0`tf4nNij+9Nj4SyGZR~4vJJBKcZwpZ;V0Oh2uxXE_6i65 z6{45Y6sC7c(3?qg?vM_Oq-OLQR&k8PVD_$b&lT0#G8iqK&qCz<5CU3oA;TgHZ%Z~N zMCpG33Z3Gp4xP1c_;T?1 zB=?ZJ{&@A`WcltMf@JyV6E97|3&BRZe)+^dPnup{iDp%9>BlZ5)(MiJqnuJht6xy7 zKCaV>uDlgfQzu*9&Il%2Ao?%>`}VYpFLM9A%`Sk z-$ja>6;BJ+Rty09kTx8dPMi5+5|Sjs;b1ma;ugwKU}o~JV3yF>>(6wk8BKfj3=+$V~x4Nw<6>13Rj zI;lG}lNswVx9x8bfCn?uG)mqM*hB-SYa$88 z^8jPCYod=HD)LeJ6%~&;jN?aE&SnmACZ&xMj@bMdIG5Q{I2i&ZZn`E=d^E0jIs?T- zo`ffy#wwS6LXpeHKt(ds+Ym$Y1M(g#-PX@Xm)pFs!kE;FCaI7x0@0X3aF?Ti*#M=u?GA+cro|VtOBiJzr2q(_I`gR zTAOJM@Ud{#iS@h_#WkO0t6M!M)+GFQ^R1ktcV^*pG>i-O$#)Vu4WaRm=u*ki(n4WFL}2Q8p`5FxIC~VFR11lvvnx7NS;~mWZ1q{ zhE}jDs)tY9y48@d1PnBu^(@=ma0ij1M;7+tE;=$dUJ_iP;|!x0@!spxI= zKGAc*wX!h7fWtc`=GzEhklq%e&) z2xs8ejZCZZWI(cAM>Ru94xuGsQ8!SOU`vK!xop{i`6I2q1b-< z6M43#6<=}H;*=*Q%Wv?etPc>g+`jP(6k~oXrG2nPkG-pVyQLI`=RIU3qD78ncSL%a zv!D5>ha^AO-t^n_P0wCCS(9RNG&gdYEq^Pyl7N4P_0SVevW^HneYdk_z6Bn@&m9Aq zuP)_8`mS11;QobhFdwd^s>N&7qZh;ua1*?`K$s!{AW&#gum%Ey8nbze9lMsUH-b{x zGzrvbS_K%#q$JB9_&DamPCC`H+1X#V?NerMs$8~dS{ByI5uEb_@8BwBvRG}zkEO9{ z3sxhIt=~I3v$W^2dvz(|mpLSy>ksB=jgzC#vgEn}4owSAq!ADB(o0hmf@uqx{l4xR zfnFA#T7YOl`rvNPLM1;zgb2?J+kX!@LZ_->j8f*eh$tH7TQ+;#0))?Sugg8Q@cJ=v z9Rv31g{F20oL@aQ1v=~c)n}t=k8Q6rV{Zh#nCgwdMYx()73AETJ95E@=`5E89Q3+gSyf`z$A2ZvT9z+M2$`~)!`BA9={vUmZCH7dWdJ@hm`P`1BprG%2ujyylk~<7UW-zszaLG;ILt74qD# zld_RHknvIeQb>6#A~ZTPh)kmA z-mx2R?mOPghlwBm(LDR=*M}Bh`~5dBm;ZwL#8Nu)B4p(}{rhAN3MqP4F;hR!G7bGV z3wh)*n}dYOuHnOEJ)9w{C@F)sr(8F~M??=lgg#MFv_uOLlU456ql_406YkG?MDUQm zr;h4}#mv-q2F`Zg03>n5qLQBP&1)t_3V78Xate6|r7V_gA`JdvyPqGDm(_HF`kHcB zj)joYoo%>#HNff!u-kB!6iUkMy0>;yHeKj!<(Taq%WQ`@teXL2X)+@P{yN#qvP#68fm=1+k)TQ(F}5WXJs9>@Q)gYS8;x+e>f+KAV{yFhi-F z@|5QKGyQni$|c|0iV_MbG=zRYF3n(!;@M%ePi(`7^*=t{tNV7}!GW$71W%bEZds)Y zEc9DS+iOZRF>|SnJTWl71=T;4NL+MW_SIQjbT~U&=n1avUHVaNk^DPHztHK1R`B#~ zzt8V`&+jlCw2=kj_mg{s&B}wodcgT<;);?au6dlmUNNMR(8`gY{$W;dT60gv-b2oO zHLWOo{nkPJRB6|IY;+4ky1(o!_ZfuV(!AzwCARKt8B3X;?1@nY?_FoVo@P`S5gj4RP=k~l(NnUyF-AUWlB%U`B z?ye;=N|*LLwQRxy2fAzWr4t`SuZBMigmZ+=o33Req}?{7TuE;_?QO7?*=#x4ZF>U7 zVkols87+xIWN91B4sv-*hJJ7#^LvnZm2`gR*3T$u68ibGGD1w(AsHlzQxrObWRNb$ zX8uBtsrWZ@y>sQqSM-g>2yVv6ZBI2Z41+=_%}SInVKI1&f#k!a%&=nQr@FV&Qt`>5 z>39^Qn%*h$>%Oa8%acSfqc7(o?aisZ9$C(=?O^WC+rr3XdB_A~$L~9|>zUha_*>t zgeqE#rICwH%2=bl8i36q8_R9361cgF^%kA_P{3sM2~xQ;v+wpBGTA*tJ;}v>N(@Jg zOBF$USDn$K=$sc*!>=kXDdJYx#B?7jDeP4uodl1;7*iT#?_vv&px0IDz26_UlI6j( z4sTcS>GKMe!Gb4amyRZJm!IqmYdAJBtTt4g_5`AQ|puw^0ausJGF!adhM+|cS>stJqdw(|&)V0scejHH^4Kf^hiiQ(bVIATQ`%R>b~;Q^epoD_8~bWz1E`l)lO|G>WUppMV8(B zHxPEv84Y-VgR-`vLE?0on9#s9`O~`!ZZb^0S2R^~hou%?e1yPO z`|RZH_DzUsF~q2y*oI zk215x^gq}M2kMY`?3bj_y4CL(Fi!EY4DmY&zd(XxV?5*H<_-APp^@ayN{>t~4H#lKGARtwmh_gw zP$T3Rze_-&pW0)5wxWHl$71lp@>k6EO}7i2iN*5!T4~`90`GP%ooWhH10#AYKWXar4_^slwfujhBP+Ehws%u z1AcNTdHTcoHN5xrGNYsqI6u@q{p>kaC)L2jmuOaGJnv@!g=X_LWTec?om- z9dn}G1#mN|!>Ht%)%Dh70c}M;p_?6YW)2DB3B%k-_qhIui+Jr#YPJfdL&m}JqCdbq ztPsU|78b9k(SL&4gK$-|1cfnr89X}nVv{3zyX-l*HQi9#2h#nr^=a^f+`p%tD)Bv+ zoJB^Ji-fb!IS8`-u-cpVtFyRFmaO*PMoWyt8FSYb%s##Fj_WOWse?M5s+-v>@`HV^ z=(izjCg;W6=z2xiCwn@m)>S;JugNBnleB%_&a-g2V-hhvkWar|Y-RC9_0u4EWOS8f zr%H1Jx%CS8!lh$_km&xIYbgg-uj@oqELyRE-I(Jy0D2gzp0#_W;;f7E=9tRYTvGCI zS1xt?%Yj@m`oU20T>!{bdYjgpBoC*#<1?K-skso|kG~M!hU&pbgD`P&nV&CagXmyq z_#q`-0t9C5#CeeK+>j}{*}bUv0kdN^yI@slt-a>_%TQ^sOTaVa3jvN)C6pFh&ttuF zGF6_iNCqaYWrXw(>e`4vPIuL~T!~pJ{S?0}SQkb#lV9Lc2D-8~P~vO>)$ZXZyl+-w zOkh5Q*_FGMPUGX1*SJ@blk9U6>3E<>|9a?7_0yYbcbw`J$fw-tE(;jzkXbfLAG#dx z7@kY;uL7-9$v33BcxY70&3;4Oc6phr|ErK~6^OTYDm*RRnO1fdvZF0W;5Kf)ahY-Y z7a+Z*9a7hMc;IGrz=)&OL{FMfJ$NWim+OS3_d#tNv5bhe4A9E zeYeoBQiT{@hjFDB#dwcgpCL>xaxL$8aL)*Zv>S$nbXBwZWFQw~xu-c`^v-PlphKdEN`*2qRn7mf6Up++djH2b!6*6K z1hRgBDtu2<8C5CEce$8~zcngTw_H7vnaq;_`7Rm~;D8w3RS+dVayf6QNx`2Kz#V%{ zW&5)IV|X<_rTA^iFwJ{O0z#=uFo~+`bZUKPH2cBIMe3KiqDS?eE4oGY@t?;Qbx!;| zNML6O7PDDQu^ZnT8bO-C51B9~D|KA@^&#{GedtH^TMGdG%#3@Gt{;Q5wLm|5D-!lg z=Fz!)mpKc85H-QUEj2(MKDvBRVJgA6@bm9_#dexY0DVHNOl3ODm9eA1eLw;l9r#N$ zdo1+LU#pp}M?HzUFF!K}>L1)DBLojJ=)QI#mTvzy0<;DkG)ul5^X-8d{S%Elp}pI0 zA3bmTw~XN0Zr=y(ksjPepL`iXeR#z_eh+>cR-5X(w5{6qgIH;a&_J?L zv2;{tRjfo^67_4+Q4z7)0Uc>{%+o4m*uNh*=kWZ)Q3jcPlH2`+AEV^y$nQ!)q>Q#G zW@eF@Vu>i|%(8Cf@i=|sRv-2OtwL`Uf5Eq<{kl&L+{u5UPUbEC^G-WPXhAWHWTrob>onE4|OOk zf3V!9<#rf)W_hcF9##h0$Bv1)Gle_hqFGLl1 zTx2qm;IIU=GTktnNntE_%bClJ2?kOc@bhTfC<8*wM`PO^hMH}W5jbd(WA1v6@ltKm z(mn_W-6tv@F=L#4px=0H6|rStPR02mlPVhl0m>A8)s#;3R_1_T;POiH9k6zBbJ7kt z8bu59>llwqEML@xgU3J(fZ{xeOxqRGxs&2k&8FYQj#~^^<)iIFCY_!|o+pAWpHyj%0g(#-vz|v}S}+n4 z@nuRc!@F1Z@Jt)>5%69o_Vid>+AQedMUw?yVbKu~7jR|k%d+^Bxj_Z zi~%*%N_gIZ>!Ad!-&|4o6VqL9Tff=wrRMtv>3Q17-wXW>3QPvPn={+w)(TyJw@B^) zbY_Q`kSXjQASd0bQM!H~=gm6dhv zm)-$FOJnKg0{LveCgMIH1A~1vhGpuv+~Y5bk-za^0@^~oZM56V>F74m%N(QRM+Z@U zvEH8%TMsF4A+0~H9YFpy8D0Ctlg(%kOEz0?^&<8II_ zx77LA+ZeRvI90LyRvGX&yB}=dJtn7Tww-mmAE^zk$*SN@8%M1r28g#2tL}>tPlVX z>lXixNB1Z;xSLa_?2NN+qX1sl4ZA=b;e+&ErOwaEUu3$EUtfW%CX`YC;b2&g&b<%+ zY#ThdpaiKIehM9<{aXM!uVhx5}zJ-@v=ut)@Fx$ zmz{)pd>zFmW|*|mpM)>vAed;y5__W!cjAktJj}eR5E-{_o8a=aU$;$P%~1dAkVT>F zs0=>@sq~Hh@~nO8qhR_>3X5@BsM30rv`98a1n3cpAkqxjh06YxY_D4oxg`v%$NIH< zk3eH!?whvQ3qQ_aIt&+y?;yoapU~f>e6%R#bv1aQTam0JD48+~J4C zkyjfWMHLp~Rldg+7CH1p{x9x*Qsn(o1y6s|)pz=!Ov8XI2{Dwl&vs{dprU?O=|4q9 zbfF?h%RI69JfY|kP7wz8FX4G`)g)FuWA3*=0c!-Ua8x!vCuQ=H9x*SuQLrGXRp)P<|Dn& zuwsa8o2qxU?(helTd1+jsaI9D>qd@ozq%eo2-naVql|&F)X2@}se|DeXz$|L>-c8I z@0qq^m6YdM7a@jvjM5hGxUme>*jXkF=u@3+Fq^*p!VFWiEwMjU@XZOoS9j0qXT43^ zUePb*Kw6s4I*kSo0UMoN(EteimYnQsEh;LfLm9j`Z{80{Il#X+b|=cLOJ~OChUWoM zy(7?6$k{&IiIywGSB}o43j)ettK8loN_U3@TcNCer`Sr*$!3+;2esG19Qm9RqmfN$ z95KaJwgc_AGW4Ww@xv?3kIz_sLO6JO7g2NmKiuUxItJrjxDA}gQGMhGtg}(_udRgF zRG(xNLfrjSX1ubyDFA%r(W8SauTd8K-fjqR=8AG#9ij~gm-YL!8EfwCf{)YrV}DK3 z7Jp4NH>d#in#Q0C6Z&%DFXir9@B?lH+pE{maPKMeZGd#yaeJ)|`EZ{RIEobtzK!^f zqvSx)duR0(l7_5c4bTLn+uUZ6khCeU_^o8c)6Y&i$uapR&YEM-9G$%x46-88*|%RY zb|;d;M)HI`h{{U|p3*es62AKF)w=MHX;cTUWlVnkrKDB%+s}OVFNCcCQXS;qqg^cg z)?Wim21v~aA20{VoRV@Iw+mNs$`V87XU;@{csmf^_C*fyey7hEhuY->_|4sQ?4khL zl8t1CBsB%wK0GY(ALD(tJq>rT%192-9>_&pw&|23sYEh48! zim@_0{pIf2V0H6{4^5*i#AH8%I6{EHl^!ij4WZ`YC zN3LD+!@lnHpsygGUnK`qeDy@3Lo2=ff=x6Hamqn6#!it8 z;obYjL5zVsBx>fc>yHtU*YA5Jv3PnZUw=;Gt)HJE|4jR#s+0XNZT=!}4=tHZGi>^w zrI++7#hL+FMAb&&%TtgusArrpwmg$WO@Zwtb&SX}!`I1a; zAx;Qcs-0T=gh!j=sZ3HS-g~3dWKlR7f-xvWPPs^5x+kdHtt@hVJ)UF3alqb`^F4R| z#s@sn;OStN;!2|3!3^Rn4&P_Rf_^Ki#rxW8#V$#MhX)>l|IY;I_JG(TJ|%kZY&EgG zr9Z0pFu<)M17%!A@h9neOhUqeh|cSc1Lets;8i9VlEiaL2f zcFh#d7K@t0=>fr}Pl_M%UgX&{g7VvQQNO&L_J0DkpBrNL1YpogXra#Cam#e|j~`Yq zdycv+hP2rrBjwglQ&a<1rMG0Bq0~$2#9Yy6bjjDSS3XpZB;nM}G8*<-rA00`GU9l$ zf5fpQ&fXFINf)-f*jou-6db2g$)Jc*Sr(O-dte#9|AVtxmr(I1?t~$?CQgY%8|2!Q zVMMs+~V@QPtz2^^5D?C-LOpa18Ep zkWwCxnrE_nyiSOkS9DE(g1qL`DYl5-{&&TTWnJ4^VpJQRg>#aG@N3hP7RC|pw1JrR z_MZ3&>s!k)=A5a(XdW{uLISyR1H2g7fnO|e-$m_#;JCzd6N6&KC;MuyXn#`g3#RG? zG?^+GtyCX(zjJkM$vGCK36?dbHlf!$TSURy5tFD9q@d+@_5A^fcxOGiG?3M4L|>qc`Qo7CXp#V+l|unmA5VL>2GO)F02D_O7+l>UO#%%9g3+ygWxNC2= z*f1i9MMUL(c1f+nV(Df#8%jue{;*rmq~PA5Qh`z+N^u_zZ!GfqHUhc*8$eDJsd|4_ zplyA?w!R$u;u0@hrAz|s+|OzogO3`;Cqg5j*8E#Q0g8j?i0^sZO+U+8W`>^bbIa^K}%- zWk77>CAwF_HY^hQvb5JT`Kw}y;tY$iqERdHlb@6V`^L{Q zee|DX&P_c9)KEc$vbsuFpQib|W9Q%YHr^ z(P)o|mO~hrFR?`E4YWkk)5171ZqpDhBOvlPFO-ZDp+Wn@74~x#;ZCccXVBf;s+U+} zJt)UpaCB&n6@G*h@{mr}5aIo<6p~8C)@YqLj5rd1xY9*Kqv6sUPJ$H>Kho<;2!+yc zJ%{oDY~?bo%M|);7OgeT%0nT_hRX(ptNcfSbES2evC_lg%N@ZP(VkQa=y8^6TAbtJ z#YC!JZ)g&8Al=2D>6uN8@r;pDl$biLAC0lfnmRRjW&EiL-DSrI(|zz~j$Z}odFuBB z6B1v_>T@CTMaai%{t_cZ*uy!I4vvFay1QNSL{F;d9A&;3%`hDK$EZ3|#D}7D%JcY{ zdrHVHd!XB3pHkUV(rZ#rfeW!ajDqY)NF};N-`?*tHW)yHh0S~f>51&;MTOs^Cx>xK zo&^|$qdNS$7wXFsC*bK;f=M`4g3GT_Vo?RMC1pi-~| zra@(B#y{1vt=%^Row>{lE;vNGD@;~UI822i`LfuY6$nR9n;{g=* zY-L(l#MjIx=*<{KFrOq&)MjH$at-+3?_$ha{c|sT3ud^z-_m@7nj=vLuXn_am?_&V z=!l)L+U*!~6BP8-5-DWu1o|X{)ZFhZcjDXPQ%I=yt@}Q--rS^*&ssp6BA%Styh*f} z9D_?yH67N6XL7>kC|yV6q-y6CpXp*q?iPrcCckFXTqj71WyiDn=N;; z^M><0dLj?8-)4#)6JC{0P!(Ndk6oS8EH_HA=0}B7+&w6xB)7mb$oE!+40zr(&(B|V z78eUVa<{178*U{CX*J?dJXHqnc1+q=8vW6Gj*MG9E23Wy>cC6-+Ef`R+7g}K&6NC* zJOr8hKJ607rnG!K?a=#GK>!J*dAHwar`i~b%S%L1wMY5!m2baswCs(MrPDZ#Jchc$A=5{8 z-29=R7!lYE9V!=Y=0+Sk<9CC!r7pjca5X-jzN+ONU5$V4_}&WZNMYr<(>&;d18B)l)Ku`g}Cg;btg>E zjK*q&G*n|qVn~e`AhcVY8KkRvw-5q!hM_` zA-4fMMG0B96aJ1Vn7H;a&p+9Hwh9Fyg|p9F)Asg8;=4>W+=oG>4Ni~~t#OErH7HYt zdZ@3jH;z9G)RE3T-guk8Yqi`4~ z_4u~NycpMQqW8N? zlMTqlE|bN(gXVb0(X@ffi!}&h6oO$Oi&nt?k9_m^1Wh23Mrw{Y?!MoY87p?fk-|Y! zbsGiEo|s4S;=GWHqF}_j9JqW%!0s5;V9GuUaEOpRg7DR|z9l3Xhuu z_L3Pt?$ovwNSfSDEVMJcl%4f-Nbzh9f)7nIA-E6+jCLRyr%BEVexJV@THJd9b?IpKBDX%i227O(iLwMa4yF6%eKyt6!Z1OnWKmJ=)8`^G94SV=_^c-50DV!rzmJEU2^{1O^5b^<%xfg? ztgiB>@(-k+NzeK4WJ7E4WVhep8LO&hCjZ=*BQ@~gh`wJ<^W#f(^pL^6a}Ft zEF5pN&~>1?(bsE3?bojK0xo5tnXPY1ORR(H+gWhwR>`8LKFGfzo$6N4Q3@o!!F$Zm ztl7A!jG3s@QSbV`Yr4NO`jL)eLboI(TJ2ufxwXLHnkA|&(>m%Un5}Wo?>zIrL;Vq> zUC__NsBY$+&>Uxu_221QCYrFSsZpofDR&^#?Y?~FrUJz#^yL&&Hv6M~&;KdI^S{^d zf3FyiM+l^$5A>;gre483zcl$pp#-M7qh4l8x-8Mjgijmg{F5bZY7CSAeeD0B zgKj#&=9E18_0a-;wX08qGzL1JTblfTKW4p*3R9GMD=-`@7}E*>`B~cDS3_aykkop9 z0@xgifKlj)X0B9`;K|zuw*nt>6nQuOEoIEExF9PA7OR_{GID($pP)XJm)ZH>(;QC? z5|h&o+MUaa-b_M~lC#9#QpYttbgV%T9QAPkhJ7*~8}f`G-^W6*&I`HvNNgz)Ywp$#x(LPL3GDXE_Ar}su$1dtk%F4|O0 zl!SA&Pn@Hm=Q?9dB83OwWanf}NmwE8!-jLpj1G8_7Ih zCT6o4m-n&Bh}DukpTlP*mAszXi`%Nu5FQ^VRkmNH8{meLY5x-N zx9sl*>3r*k#=y}JkB=x)uvl;06+QO(TqoPTEksm!CiyCgb0(X9eq9yWkPFli@88*< zDZcWE3-T+Vk054?V!Fc5=L@h$4P8MnA+l<3wc-d@*-Y|Jt?gi-53$BDH7E_m%pM^9 zi z(L-pp9+q5~?3YFWq)D0J(e<18mb{5{W7C$qj0(K;%%J{J>CNC-baWK^D9d@ypurnZ zEK6GZXLfV6Y5Y&I_=bomj%EUq8K5e-tCz-8AGdo;kArT0C3|e9J zCWPg)UMbhUFlNF+foOzkeWzw5H$e`1bBwDD%LM4nKPn$6h3BybV|Gy^+2zs+oVFrA z!1($_-=wZ`!KJ1u9NfRV(KbHi#~SAOe`Fuwf4WI9jDtza=}%qH&@#T4DiA_8*v$1A zMQ6-Yml^w^>kZ5xc%aDba`7K5Oddhn#8t}$*6-3X=~41%xl!_u|g_E{Xy>zmP_2$)J&&A$=MZTGk;)) zf%*38oO!<9>6z-u3D$eoWZ;+=Q5La_PUjtaba;e~|Liti8kr9-ls%0u7-mKW{JElU zesMXq66mRVSY5N;S#FRo?M8_x+jFzCn|w4UjpaByVL0sg+{K;J0<5pmLt^EKqmILF zxB+z{6)QM-5iFw?5|?Y6t>&zQql{@rI!pWw58myzC4Ggr*xO&W;?`$X zrB*s)O9P2i=C7z4&c*u3;6x1R!tm+XstYXZR-V!Jer&d?ZD8f742?0iXQ=HdST(`N zRxN$vY}P#+;5xjO#;8ejTK*BJ4nMoKM=7U!)sl#S0vD~KV9F^* zu(P%mt5oysH@ILa(Og8vmiofb@nzk8E2gHmD3@aPWgS{d9V(uUd93!A8a#Zqbzf#u zN^)k1xNm#_icmWMk^zH{5h?}hP(@l%Jv?ru!>Y?V-{;{k2^$;4*FLA43DHHn6R>om zxO+k`6dr&F)JTC#-S=rFzP*A1?wQk11(IOBe#Yk}LvVnNP3w23i$ z&fpUrD2>)&j8}K(G%%+4bHeMFzdVY;WYxFwj8eTVWG6B`Vb*9x%I7vj&cT8*(y`6dcT-;aTX9jrW z-BmHzb;zqLg6k)xC{VSEQ}Q80oK>Q_H+(#Om$3cxkg zqxu5IGDZw0B1?##sfT#*lM#0os=~}GS>)X7Fl_rV3lEsW!oREPxdjYD^e%hFc^89no$C35|!@Nj^`{?OhW zQ{d6%w4OC)>jboiES*JL)_-;DJ0&t@;mHXQY1smErODtkAPROMxMx`dpWFrXUa{P# zX}Gxxlz&6M(=CW37%n7gpKXv#zD#GrN0}e~#JhybetI)Z=BrUGPW?OJ!sZv|r7-ss zTSkDm4FekaaoF}_Yg;ir#_45~5+ADj4hjCkl*X{kw!*mBtGgU#(sWn${aB zNS_z{X!vfPP`$ZiQmM+z$b+hp5W)GEnk*oJYs}a-9?kT6M{Vbe$TUVBy@6d0D`(Dt zOpJUju>jsz+z-^>kA317LGD*6B)M$o9k0-xi@3%9^OZ(4n z{*ZZ9j#zRaT3b!2=9-wU6g%$BNZCy8)*@=wUF)#%d^gfkjNMIhrsKs2NpYQ3`@H+- z2{xoUDfTk$Ro z%Dkjt)Xe-t&4~>+zIXNcxOs|jA$@79gW+ux()n&QsCw(_c5NPpH2%JS3)Q?TQGU2F zZx0m|5rBN82{bm z3iT&5yqS{c z<1h_x@euyhD7FM(9t<_tn|VUF@Z7b;z*3&G-blx@k}a+9AVVVVrr5KYPONO&FI6Ug zV$7ooVNU%=+l;6;*BrC6qn=`Gq@Yq;8i z4Lfd`lE?rf;~VmT=VT1_(}e1o-utB1gn;3@T$9xO?}2e`5&96G@^g_&{9BcVz-VBZ$P1 z(k&q%LyClSNRE^sf^^5w2uOE#r-Y!y&%Qb1d9v6cMDty4ef^=0NMA)NE|YI=xyx_<_4;oFbwENu#ZKU8ud<0tY# z$8Wi=PEM=fadGe1q#HvZAOOyDTd`;rARw~*m?P3(Lw`~dO$mKj;CoPURiDh)XNEMp zJubK{KXAM3CTRdf(+5yA#fFdjg%WgspZX@9Q{EHA+yAi1n;=}eLYp3NPo(XSD7err z;fJ^8hrhT73pG9}bv7JtT|m%GU+R5?$V~EU1dgy$Q2&n%0l#L}pQr`@>@Az`w1x>> zN`?a7E6>Q}Am*GnbcAL#q#-1RleWv7)O4wZPokTiNCYm6lp$=X?yECVj`zbICoe;w zH4OTm!u1gK=(rmJ#&XQOcKTY}{+nlcw~rhbHCU+V=f=-5wBGTa(wT}q`LAVRlMY;p zs{g!*j;Z*pw~Cxa`F+LY*p40QGnp{4w$U3Q(8nu!EvWQp5&eh?^WW!!=Kvw%`@Dd@T=h z<#=)dPOBt5g!nX#Q-6-%qPQ>&)Q$?&T8xTP^thR#csZ^MF90SGniQ?9H=r^Z)XPld zU&owp5{KL#0h$|u8Pq|;Ddn#tn`rEVv7C(MD$lAZumvEH6oM$mzju*6 zWXCKEfD2JVUxP9I`5)v2kmj?TN+>LRqbFJpqVPNE#Dot{uc7VmsY znCD!l=01AQAoING!U1UB2gy!j6vuy3*j%-PC2 znT~oS$bTPze`cd>ab*Y%iLcuEJ|UxvKgG+KQc0TIv@1|9*={u#$M&4nW#D04V45}b zjP5jt86o#(>dff2EvOSjEo(|png7U!Tfx3%JnoYZkMezyiJCzuE+ZSt*Bs`!77m1d_+*e#j+``aw zq7!0^?a6bedUei}F8|$57R0ni!ksT>e?gNtY%AZ=>=!)NuawXZLo)C(Gwt)p!0@+h z8qYQZWZ>$TARt->{@mUc2APb&taBRAGbL3Lx5>KKyZafBDlSVj|j4AsU;Q zbVn6@-VNacrIz>2*$(&FSpAfnVdT;6dxw3MYp_`}t;N)$JsV^*zzhfOwqWBq-$#Bs z3LR9aG3CERHw6OHw;KYn96xjo7BBHYTdYWsVy|J za|Glgp*Y`EQdP}`w_DY9=SO~GZ~Qv^dZf_0L$G>X0uWSZQUdT5A-K_!gI2j1!aJDH z-@b3xlFo;@e$0%8s6@KUtPcDDm4W5rScO689`Ih6L@n{nk2gf(A6nE$Hzd}Bv+ZQl zG*lW`OTdb)GC=s+azd;hZ-1ZOU4CDY?BOknISsWHq_xmbUYrz_P!6UK-Q5AU? zgnKf0%wLNguCyutB_yoa4fMuIZE7tNO?#!?&(AA@lV-~kZQby7Jb5}`6st1m@xCXZ zG}iK3EpPudn2N3n)8Me~!m~^PNyLeSJ{|7-n|K_F=Qm3nc!?kA_|wR>@s3F0lIxJ|h$p4K+@18r?pb0(UsgAyJyH_I z-WAc7@s@n$%UYzyK`Z$kI{D6CtKy`cTS!D!+OPgQcPPt>aLRq zZ|X)z6tqiP+-gnuf1Y<9_Wc$=qBw!0)Upyb#Yz@L{!xhYWc=U^>b3ISER+cyQlQ;j z)%P4vm1G(i@Ure(5WEmyDr~X}$!t@Sigms0izqwp7u>Wkhr$j(rJT+h^zw=>9Figz zX?h=mcTTu3{Mu5LFTiVAFPU=`Hyd@4SN1TF*ABRje7YM@^UPiG?N;#YfHi%Qk@1R4 zhM`zfb$7B6sP{i1_jwWquq4VW8q64Ga+u?dzYzDI62-KJ;^_S_J#E=eD4)#H9aIEG3797EV>8()eR`y zl;Gw$NMV~(q)nj##&D^5kWfvR;S&dCz@J?h$%4a~99@N;06z6_|AVg@mm#H-zDuRT zsF>t4p(V@8;dC9h1u_8`Iw|p_I)l0__m-S4U;~cRU>STAP%cAW*ue8H`KfTxAL1`5 zUBoFivRdDTGw*4*a}RVjx_Bv3{@N|iKiZ)wX`8(jcxtTvdif9yZvsx@uu-^L_GT-QsV$ zPR)U`s}O59G9$7U%C;j0orZyFCBK*U%hJE?Q4=rT@Hm_OfK8eYr)(W~%gK$>>_Nvh zyax?I%J%fDTHUJ$HDz@)I!f1VZ>5%^fuY6*c9ZZmeq__a&333(^FY!|A)7?Jy7xsp zTn#Se%eHJ(`RrxjF&uL>?O>bymp?Zp7S*1XNwlTm2d|xmzkO_1>{R&oMtu3*U+<7d zgcs1vjoIDwTb!jc-c?s_QjcAZ4@?X%NJQE6ht-(>xD4-)0B}#>qj?YR%O8rj?vcZ+ z!m)3ZXveMR^ygHkf0dsOp~@W_ei}l~Niw0=oC7!0C@Y6S@H_gX616j3>EYQoQymrE zEI`t1!kWzFTe|dmkpPg_%GR+!c=A1s3!1!NF*;@9k(P~21L#g6KtST1H*!#}WuL4g zPc!7+oaqoDz2deIRv-!X!97Hq$>HwBcy$d|h`{xS)8Imb2}K~w;pq05WUbw<|f+KF089bC8<9G z<%Dnr6kG^C#e%#{|F!W9oUw$PN~ad}Jr&X9FnF%D_@RM-@k_3yVS+2a@=+_@8qWQi4SX;HW`y^CHeW23x!vbctW`v>Y)8eYjp=hkimKuW5Rby#lmV_ z2~~2Ze=I23Fim^_^w*@OH*U^Xz56EPkvf~_n{yfiQl;8;W|%r>E*CX_!>cB|s~Cbj=FPNK@O-CaVfQ^W6zigclr+WG11T`)f-702wimy+GiQyB$KT zc3#N*v6KUyBX>cQnn~e=8Wplmye()b73(V|k1{R2tMZ{BFFNikU5vrx#N2AtuK2~i z4pxMf);TKj9@vrD*~87jHF7K_#ZFy%&W+gYAda{ep5odcc4Ug?l~kg8<$7lx77`yT zMQo|yvJBQ)^xz~%O1urciSy1^-$JUMLiyPqoYw1r*gE^}$o&&D8?q6`S?i$-u--~! zxXEYop+U0?Xk!euB_El;%C5e1E5iT#D(trUMrq(u<;3Ga6LQ(SPgf>MIAh>3 zf_D0NCf-PK3Z#6bf`cCGyn`0EdFJ_;#k@TNe&$}~A3(KAoQnlM15;U4W-`}66%f^i z@mu{@38WrsLO7$noGVOD4$%Tr1ZCqeM%Yxg?r;?n2R8}jI8w%BD`F==jpy0S^XVfR zOy|8Sc@(_^gB3G4UyujRG27VPvQFS!?i2jd>}%y42E{JqIA;dZ7IwLoP^pXE4c$q; zzJ#?93}Z^=1=kT6Ie@2H&k4Uz?^U!ER3jDhm}Io*=9jJYdfgSY?WAKIRUNn5EzU%D z?M0XW*o*m!AS0#8bIdrj5W85!LiS(WF#Wl_Sk+5C^GJxc%Gdp_*D+JwNL1SKxBv4@ zlVk)Id~I{sEBu>z`q^O@FLG^}Oe4`GZ7?qRu{Mrgv>($KGIGrn4Rld7HRq88$V*be z<3{gc1{Zf{$9CuQ(x}{EQp*7|=hQXEOLUrH#@-su=%Ct@c;1_h`al*VE#1Y(wi@9w zvfUIH=Ust5+yc6^e;79nXv4>UGrt|98BnVH5>k8g)@-5-HgTur&~y{?-6em=jPe4jda7h#*=}d z)hyWBwI-mN(MD^s^!_VK2EA7C+xO601aOY`-31{y!$03nM7Im~mWi6tq;s%867(T< zD$6hbTwxL=gs;^m82n*RE$y1t`Vrcidwu_j5(4~Jdv|wGmSAA!(}YT-bNv+Vz_}=s z9#<8<^O(xl_0jT?4MA3>`~Dea_y)w;Ya~MYkNB~7qxdfy%=~J}pi%36+f{30`DlcFj1_Tkg9<)tSw_|Ih$!&CTE$bBGaI-!0 zO2EBd^pN~zpKc*25?hKT-Q1(PH{+3jlO8U9b_M1F;NMU*y9!FbZEc?*Ps8binp${|bs4$4UzjG24adEOH4Z9HyMolFh6 zpmte$I2V3Fc?y2HfHRV2TuMNYd(uP5(q@LmJ_ zH7tEtE&sufdv#Lbx%8PMOu7nt+CPk=$#cb`hX8tq`|~d33qRPS!_^wFl7DH}VrC_iiq4La5iU`$7F7WsFV>jaNa7)OUn)uD?i&5+GzGa$2D<@kz07+1cuuMWh+ z_a!egnK&l6{_yT8>K;Bw7-bK~n?twtAcn?We%QTP z#{oC-&7Z*!UZ&05nt@l<~ksN%Ya{ z=`=TRMcZ9x8UGsJfpiU#i4DcJj+u&1pb{~KS!^O>BWZW8MGO2U#ATWsK7@3>82Dfj zGE<25pvGN}g`R;WBB1{EXA>7rDf0C>BOBa1kPb;|t#Z+l`U;@_x4;{|L+RK52{-df zmO}QBbH5>HSd6b?viws|&dFc1-_S9Fk!kmsKocG`#Uu?)Gfnt`tGD&xf0(!DBGww- zhTFJ3)zXig#EXNFTYmuO0EgaVCs-$naHH+?dJ8!*EjXyCe;$0mD2^p<|&V-BcYH_&)>OvjRuJ-tP;eU7f zUOh+mb%D*I@9s+5NC>15HSV68SlUW#7kPeFj^n?XlfpJbcU4_l25Kegm)j)_UPF4n zquV7Hw6nZHxn4r%O%hma$%)kA&tvX1`kE+{GjE5k2O&BJJ5!5obAfv}S{%3A9~rT@ z*p<=YtcE8iVO4g3W(VlX&sw1>EQ+AojVLV~?^9HM%aGQ^N2c7+P?9t*D?4EPd4w8Y zWvZ-=YI7$Ri56ZAjQ+DNPTw%);6V3y{Wc_Hq0rCWtxo7{Tt02P2=zo z^BiTcKarhX zrbsoQIqZfQBG<^!W?phGhGX`zeRmVtCf@<(Zk_LyI6vrP>vOMc} z>yB&w%z{mBV_zMTb>y~66Ry`-GRX}<>ByxH4JK?@?g!NMfP7za#(o^od9|>W-;pq4 zYxhk9TJeT+^7R>b7j>N~r3XvBP4HT@X-qkCnP@@xb7(DoWCO)yw=-4c7{BiXpw5`^ zPr!EG)L@-t@4Tpy%XWH8mYSVC7hjLCU$p09(MBOhaz*?IjdaN7@fe#Raq@A8m@)#rE+Zg1LP=G{3#&zE)t6 zQPK}czgRDLDr$7~B9NFTI-q_sjIWhtuFb8Q6grHpmL5FxK5iokc1lgeI#R@Tc!!i$ zE?7RJ`dtYV&kke>czr=PP(A85e_v8SU4!c{Nn1c6Q%21S9QyDfFxxdvD*bFAw<{pR zVUcSn&PNHVQW~T8DKQvepL#Atc=q+eqI}PHtWlOPL2$l0@;+PX6L4zPnka}%blWCh zG9yuPr@%Snt06hTyKrWC{f@W_(fW`|d5@jH|9k4S%Nnd2LQ%Em!S!uRUr@h-Z0V_n z;MLx0P?ex!MfB{~=Kt?04PyZ4`rtWVo1-hALTS|Gpo8M44r?OYS!3=IZ$GXcvMop< zB`z5}{7_uLU?eRPpI?Y$BTlbFr`)^Kbm3DMa{#$HC|Hi}Scrvfz*)eEjp{<%Ed9 zt_T5GP}D-lMjJ;LKTutIqX3M2fEVl3f{$=y5Pq=y{(3ZfV15f z)t5pwW6p!iDhva+FdXKUTl~Wz7p#$bJsKG%Se-Dadg(-T(YB@UI$fodl$mbiYcNHYa7&fqRM* z(+|~fY}bFq88CtMI9%o#Fz6> z*YHIJ$Q<#TW$ej5k83yHFGBpS73Q9mh$M@=&(a?@&`tOoYzs(X))-OXu-5=r}_k zJ=Kx6ZVZP1oE@`K3h5|-E)VezFtj%4IpDJh0vk2A^}!+P6ahVn_7H1bT96lxO-ucK z^v*i2cBc0|=w!M+7wr#a8SKrT+H))U^C|kKAW@ysV9*gO=Er5e(n1u!#d{#SW9UP$S1RzTksM2t8MrpI|7ewdOVQn0`KNYal?-#iNuF5rwK`GB+UN&9IKi=Do1b+h9+bydU*#A9C zax>u~OJp{c3b=vo&7Lx%THe@PU}RoW>!kH&%)>S=%*H%AfSKhaDOAm$Uc%(44;jy+ zFkj#ai>aG;n9b|7!}#7RsJ(xMD6CC|^gF;={v3w{f5tduWcv#KW|o(ws|)?*Rs8t6 z(=GHvxxr?d=9H%3S>JQMbP8O`TLlBc=FcWsZSNCvUM<|T@2UM;77tj^;XoRWhLK{j zIn?4Gjc3;5wmv!)l%MRjwP3{)L8-}z?an`<4p1MLlv)xit{H$P4Sz-cI=E0;mH1Le znIxXIlm7&&>B17J8(Bd+sm0%swA; zBG&)bvjFBlh%TeYD|lB235-$8q%C_{|7Sp0@e-#@w;7l8AVoFTNaZ7jEAYpL0f^9$ zJ^6`)aW9Sh7}N?R?oVg^K`$x zM-&%bLGrn#v6xL2X2_;&XT`M0C$pNz)!besgC=!W{1Fo#Y105GRzX40N#|{p>&N;i zBESQ~;-DL;+rp^#mlmci;!!zyta!ioBmeqItqh@MGRuted0p-R`&h*y#U;=6QX^<`}wyY8BnkH8iN%6*i?Bp?}sZ;@q$ z*OwRXU%vT;x6Kn8KEIW(Cx~NkUcYSPxhw=S?#dYvh?%{^*x9s9LfMjKIc7kSVb7(H z+p00*b_CiUWOQC!f3#2WBs021-l;izU;>=l|JW{-@>21?q#2G+O^;+j?Bj9Sf18`t zSP*@c)#DBkcShp!X!vEgn0UyRJf0*P6m?~sCum53F{l|d>!4MNEEnn2(Lv&E_(Q>b9sq%Wepg% zB&!G5c5%;u$;C#)(*n6FZ5|Jpua$Eem=C7A6$26rkpeCE?(SCd$zyROT(C-}WFAd# zD@=?N219r$6QY>3cizJ#EUGBk>aWk#+FkvnNL#TZKDSOCmm&0b>MtW(zpK=2kv=`l z3x0prfA0&Pfs+7Pllo$v=Ad}|gD&xb!TlO3m9dtg@@1rr9I+HSKiBW(ij8x6KzD>n@lZdc=TH<9V{FfQg8QwY^NT7%$G zkBVTWelB`k)!P|0r7uvvG2PwzrT5dV3QACYk|GU^=#1Aw^R-ZH!a?m zoGakR(j?V}qF~)CS(oov^}`nyn}k?-!}I<)tDG$fOxZiAqbyVL;*M6RVp zq{1=gT`TG;FI26~3wLUGuf_v{h6W!7G)X63lnue6}$QR1403if{Gn*k5(#i7Eg zezhxub6A!ly_I%;isEeAa%)B4w>B-n)nMCk@H!Nf{!H0rVm<$qjz1pr*N5rsvStht z@f)?iKd$o?i3+9Mj0){Q=|q0E`0g0a&@Om+54Kp9_{c`^mLz%2e5c%Z$4_~l9iJrN z&|N3bZ`dXKBFb$Gh%zbE+$@MF_Lm?lUf#c+Q|G~Z!2k}_!+oajnyMb_4Y(YO4Oe$j z(6K9ACA8hg*ae5-il8;

U(Ln0r@ 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�rxWNm}D#AJsjGNIG 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%0AONuw&*y!Qjq}=%n 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

hZ{m@?OK@&K6I}0$ukT-okE?iQwoX{ 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�dlw3%_h{S(4+C7$Lz)ks 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%0AAm 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 literal 0 HcmV?d00001 diff --git a/docs/source/e_volatility.rst b/docs/source/e_volatility.rst index 806a5b50..ae7e0a12 100644 --- a/docs/source/e_volatility.rst +++ b/docs/source/e_volatility.rst @@ -10,8 +10,15 @@ FX Volatility **************************** -Single currency derivatives are examples of the simplest two-leg -structures. +Interbank standard conventions for quoting FX volatility products are quite varied. +None-the-less, *rateslib* provides the most common definitions and products, all priced using +the **Black-76** model. + +Currently, in v1.2.x, there is no ability to build a volatility surface, but this is planned for +short term implementation. Volatility inputs to pricing formulae currently rely on an explicit +volatility value. + +The following *Instruments* are currently available. .. inheritance-diagram:: rateslib.instruments.FXCall rateslib.instruments.FXPut rateslib.instruments.FXRiskReversal :private-bases: @@ -22,14 +29,15 @@ structures. rateslib.instruments.FXPut rateslib.instruments.FXRiskReversal -FX options using the **Black 76 log-normal model** can be priced in *rateslib*. - FXForwards Market ================== -First, it is practical to have *Curves* and an :class:`~rateslib.fx.FXForwards` object determined +As multi-currency derivatives, *FX Options* rely on the existence of an +:class:`~rateslib.fx.FXForwards` object, which is usually determined from non-volatility markets. See :ref:`FX forwards `. This will be used to forecast -forward FX rates relevant to the pricing of an arbitrary FX option. +forward FX rates relevant to the pricing of an arbitrary *FX Option*. + +For the purpose of this user guide page, we create such a market below. .. ipython:: python @@ -51,34 +59,195 @@ forward FX rates relevant to the pricing of an arbitrary FX option. fxf._set_ad_order(1) fxf.swap("eurusd", [dt(2023, 3, 20), dt(2023, 6, 20)]) # should be 60.1 points -FXCall Option -============== - -Next define an :class:`~rateslib.fx.FXCall` option. Below we have used the *NoInput* argument -for some arguments which can otherwise be ignored. +Building and Pricing an Option +================================ + +Typing `EURUSD Curncy OVML` into Bloomberg will bring up the Bloomberg currency options pricer. +This can be replicated with *rateslib* native functionality. + +.. container:: twocol + + .. container:: leftside40 + + .. ipython:: python + + fxc = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + strike=1.101, + payment_lag=dt(2023, 3, 20), + delivery_lag=2, + calendar="tgt", + modifier="mf", + premium_ccy="usd", + eval_date=NoInput(0), + premium=NoInput(0), + option_fixing=NoInput(0), + delta_type="forward", + curves=NoInput(0), + spec=NoInput(0), + ) + fxc.rate( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd","usd")], + fx=fxf, + vol=0.089 + ) + fxc.delta_percent( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd", "usd")], + fx=fxf, + vol=0.089 + ) + + .. container:: rightside60 + + .. image:: _static/fx_opt_bbg_eurusd.png + :alt: Bloomberg EURUSD option pricer + :width: 400 + +.. raw:: html + +

+ +The *Call* option priced above is partly unpriced becuase the premium is not +directly specified. This means that *rateslib* will always assert the premium +to be mid-market, based on the prevailing *Curves*, *FXForwards* and *vol* parameters +supplied. + +Changing some of the pricing parameters provides different prices. *Rateslib* is +compared to Bloomberg's OVML. + +.. list-table:: + :widths: 20 10 10 10 10 10 10 10 10 + :header-rows: 3 + + * - Premium currency: + - usd + - usd + - usd + - usd + - eur + - eur + - eur + - eur + * - Premium date: + - 20/3/23 + - 20/3/23 + - 20/6/23 + - 20/6/23 + - 20/3/23 + - 20/3/23 + - 20/6/23 + - 20/6/23 + * - Delta type: + - Spot + - Forward + - Spot + - Forward + - Spot (pa) + - Forward (pa) + - Spot (pa) + - Forward (pa) + * - Option rate (*rateslib*): + - 69.3783 + - 69.3783 + - 70.2258 + - 70.2258 + - 0.65359 + - 0.65359 + - 0.65785 + - 0.65785 + * - Option rate (BBG): + - 69.378 + - 69.378 + - 70.226 + - 70.226 + - 0.6536 + - 0.6536 + - 0.6578 + - 0.6578 + * - Delta % (*rateslib*): + - 0.25012 + - 0.25175 + - 0.25012 + - 0.25175 + - 0.24359 + - 0.24518 + - 0.24359 + - 0.24518 + * - Delta % (BBG): + - 0.25012 + - 0.25175 + - 0.25013 + - 0.25176 + - 0.24359 + - 0.24518 + - 0.24355 + - 0.24518 + +Restrictions +------------- + +*Rateslib* currently allows the `currency` of the `premium` to **only be either** the domestic +(LHS) or the foreign (RHS) currency of the FX pair of the option (which is also the default +if none is specified). + +If the currency is specified as foreign, then the pricing metric will +be stated in **pips** and the percent delta calculations are unadjusted. + +If the currency is stated as domestic, then the pricing metric is stated as +**percentage of notional** and the percent delta calculations are **premium adjusted**. + +Strikes given in Delta terms +============================= + +Commonly interbank *Instruments* are quoted in terms of delta values and the strikes are not +explicitly stated. Suppose building a *FXCall* with a specified 25% delta. .. ipython:: python fxc = FXCall( pair="eurusd", - expiry=dt(2023, 6, 16), # a specified 3M expiry - notional=20e6, # 1mm EUR - strike=1.101, - payment_lag=2, # premium is paid 2 days after expiry - delivery_lag=2, # FX rate is considered as spot from expiry - calendar="tgt,nyc", # used to determine spot and delivery from expiry - modifier="f", # modify delivery and payment forward + expiry=dt(2023, 6, 16), + notional=20e6, + strike="25d", + payment_lag=2, + delivery_lag=2, + calendar="tgt", premium_ccy="usd", - eval_date=NoInput(0), # expiry is not a string tenor - premium=NoInput(0), # option is left unpriced - option_fixing=NoInput(0), # option not yet fixed - delta_type=NoInput(0), # strike is set explicitly (not as %delta) - curves=NoInput(0), # pricing will be dynamic - spec=NoInput(0), # parameters set explicitly + delta_type="spot", + ) + fxc.rate( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd","usd")], + fx=fxf, + vol=0.089 + ) + fxc.delta_percent( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd", "usd")], + fx=fxf, + vol=0.089 ) -Get the price of the *FXCall* option in premium terms +When the pricing functions are called the **strike is implied** and automatically set on the +attached *FXCallPeriod*. .. ipython:: python - fxc.rate(curves=[eurusd, usdusd], fx=fxf, vol=0.089) + fxc.periods[0].strike + +If the pricing parameters change the *Option* strike will adapt accordingly to maintain the +25% spot delta calculation. + +.. ipython:: python + + fxc.rate( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd","usd")], + fx=fxf, + vol=0.10 + ) + fxc.delta_percent( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd", "usd")], + fx=fxf, + vol=0.10 + ) + fxc.periods[0].strike diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 11871f19..7cfcaef3 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -8072,9 +8072,10 @@ def _set_pricing_mid( f=fx.rate(self.kwargs["pair"], self.kwargs["delivery"]), delta=float(self.kwargs["strike"][:-1])/100, vol=vol, - t=self.periods[0]._t_to_expiry(curves[3].node_dates[0]), - v1=curves[1][self.kwargs["delivery"]], - vspot=curves[1][fx.pairs_settlement[self.kwargs["pair"]]], + t_e=self.periods[0]._t_to_expiry(curves[3].node_dates[0]), + w_deli=curves[1][self.kwargs["delivery"]], + w_spot=curves[1][fx.pairs_settlement[self.kwargs["pair"]]], + v_deli=curves[3][self.kwargs["delivery"]], # TODO provide a mechanism for defining spot date with FX crosses # which are only directly available in FXForwards for majors. ) @@ -8091,6 +8092,7 @@ def _set_pricing_mid( "If not required, initialise the " "FXOption with a `premium` of 0.0, and this will be avoided." ) + # TODO: convert premium to correct premium currency premium = npv / curves[3][self.kwargs["payment"]] self.periods[1].notional = float(premium) @@ -8130,6 +8132,29 @@ def npv( else: return opt_npv + prem_npv + def delta_percent( + self, + curves: Union[Curve, str, list, NoInput] = NoInput(0), + solver: Union[Solver, NoInput] = NoInput(0), + fx: Union[FXForwards, NoInput] = NoInput(0), + base: Union[str, NoInput] = NoInput(0), + local: bool = False, + vol: float = NoInput(0), + ): + curves, fx, base = _get_curves_fx_and_base_maybe_from_solver( + self.curves, solver, curves, fx, base, self.kwargs["pair"][3:] + ) + self._set_pricing_mid(curves, NoInput(0), fx, vol) + return self.periods[0].delta_percent( + curves[1], + curves[3], + fx, + base, + local, + vol, + self.kwargs["premium"], + ) + def _plot_payoff( self, range: Union[list[float], NoInput] = NoInput(0), diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 0f1e3509..fed4577f 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3007,6 +3007,34 @@ def fxfo(): class TestFXOptions: + # Bloomberg tests replicate https://quant.stackexchange.com/a/77802/29443 + @pytest.mark.parametrize("pay, k, exp_pts, exp_prem, dlty, exp_dl", [ + (dt(2023, 3, 20), 1.101, 69.378, 138756.54, "spot", 0.250124), + (dt(2023, 3, 20), 1.101, 69.378, 138756.54, "forward", 0.251754), + (dt(2023, 6, 20), 1.101, 70.226, 140451.53, "spot", 0.250124), # BBG 0.250126 + (dt(2023, 6, 20), 1.101, 70.226, 140451.53, "forward", 0.251754), # BBG 0.251756 + (dt(2023, 6, 20), 1.10101922, 70.180, 140360.17, "spot", 0.250000), + ]) + def test_bbg_usd_pips(self, fxfo, pay, k, exp_pts, exp_prem, dlty, exp_dl): + fxc = FXCall( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + strike=k, + payment_lag=pay, + delivery_lag=2, + calendar="tgt", + modifier="mf", + premium_ccy="usd", + delta_type=dlty, + ) + result = fxc.rate( + curves=[None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")], + fx=fxfo, + vol=0.089, + ) + assert abs(result - exp_pts) <1e-3 + def test_fx_call_npv_unpriced(self, fxfo): fxo = FXCall( pair="eurusd", From c1c6346063ae000c1d7d688d4f8bc9dd7103c99b Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 5 Apr 2024 20:25:12 +0200 Subject: [PATCH 39/41] Docs and Tests --- docs/source/e_volatility.rst | 76 ++++++++++++++++++++++++++++++++++++ docs/source/i_whatsnew.rst | 21 ++++++++++ rateslib/periods.py | 48 +++++++++++++++++------ tests/test_instruments.py | 22 ++++++----- tests/test_periods.py | 13 +++--- 5 files changed, 152 insertions(+), 28 deletions(-) diff --git a/docs/source/e_volatility.rst b/docs/source/e_volatility.rst index ae7e0a12..5f40d8d9 100644 --- a/docs/source/e_volatility.rst +++ b/docs/source/e_volatility.rst @@ -251,3 +251,79 @@ If the pricing parameters change the *Option* strike will adapt accordingly to m vol=0.10 ) fxc.periods[0].strike + + +Risk Reversals +================ + +:class:`~rateslib.instruments.FXRiskReversal` are included as a direct product +because they are frequently traded products and *Instruments* often used +in calibrating a volatility surface. + +*RiskReversals* need to be specified by two different ``strike`` values; a +lower and a higher strike. These can be entered in delta terms. Pricing also allows +two different ``vol`` inputs in the absense of a volatility surface. + +.. ipython:: python + + fxrr = FXRiskReversal( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + strike=("-25d", "25d"), + payment_lag=2, + delivery_lag=2, + calendar="tgt", + premium_ccy="usd", + delta_type="spot", + ) + fxrr.rate( + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd", "usd")], + fx=fxf, + vol=[0.1015, 0.089] + ) + fxrr.plot_payoff( + range=[1.025, 1.11], + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd", "usd")], + fx=fxf, + vol=[0.1015, 0.089] + ) + +.. plot:: + + from rateslib.curves import Curve + from rateslib.instruments import FXRiskReversal + from rateslib import dt + from rateslib.fx import FXForwards, FXRates + + eureur = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.9851909811629752}, calendar="tgt", id="eureur" + ) + usdusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.976009366603271}, calendar="nyc", id="usdusd" + ) + eurusd = Curve( + {dt(2023, 3, 16): 1.0, dt(2023, 9, 16): 0.987092591908283}, id="eurusd" + ) + fxr = FXRates({"eurusd": 1.0615}, settlement=dt(2023, 3, 20)) + fxf = FXForwards( + fx_curves={"eureur": eureur, "eurusd": eurusd, "usdusd": usdusd}, + fx_rates=fxr + ) + fxrr = FXRiskReversal( + pair="eurusd", + expiry=dt(2023, 6, 16), + notional=20e6, + strike=("-25d", "25d"), + payment_lag=2, + delivery_lag=2, + calendar="tgt", + premium_ccy="usd", + delta_type="spot", + ) + fxrr.plot_payoff( + range=[1.025, 1.11], + curves=[None, fxf.curve("eur", "usd"), None, fxf.curve("usd", "usd")], + fx=fxf, + vol=[0.1015, 0.089], + ) diff --git a/docs/source/i_whatsnew.rst b/docs/source/i_whatsnew.rst index 6b0161cd..93ad52d2 100644 --- a/docs/source/i_whatsnew.rst +++ b/docs/source/i_whatsnew.rst @@ -46,6 +46,27 @@ email contact through **rateslib@gmail.com**. improvements must be sufficient to warrant such a large codebase change. - no ETA +1.2.0 (not released) +********************** + +This version uses **Rust** bindings. See :ref:`getting started ` +for notes about installation changes. + +.. list-table:: + :widths: 25 75 + :header-rows: 1 + + * - Feature + - Description + * - Performance + - The modules ``rateslib.dual`` and ``rateslib.splines`` have been ported to **Rust** + instead of Python to improve calculation times. + * - Instruments + - Basic *FX Volatility Instruments* have been added, including + :class:`~rateslib.instruments.FXCall`, :class:`~rateslib.instruments.FXPut` and + :class:`~rateslib.instruments.FXRiskReversal`. See :ref:`user guide section ` + for more information. + 1.1.0 (20th Mar 2024) ********************** diff --git a/rateslib/periods.py b/rateslib/periods.py index 3810bcec..a50ac75d 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -17,13 +17,13 @@ interpolation="log_linear", ) """ - +import math from abc import abstractmethod, ABCMeta from datetime import datetime, timedelta from typing import Optional, Union from statistics import NormalDist import warnings -from math import comb, log, exp, pi +from math import comb, log, exp, pi, sqrt import numpy as np @@ -2470,14 +2470,23 @@ def _get_interval_for_premium_adjusted_delta(self, unadj_k, half_vol_sq_t, vol_s if self.phi > 0: # call option requires more difficult k_min. k_min is set as the point which # attains the maximum premium adjusted delta. - def root(k): - d_minus = (dual_log(f / k) - half_vol_sq_t) / vol_sqrt_t - _ = vol_sqrt_t * dual_norm_cdf(d_minus) - _ -= dual_exp(d_minus ** 2 / -2.0) / (2 * pi) ** 0.5 - return _ - - root_solver = _brents(root, f / 2.0, f) - k_min = root_solver[0] + + # def root(k): + # d_minus = (dual_log(f / k) - half_vol_sq_t) / vol_sqrt_t + # _ = vol_sqrt_t * dual_norm_cdf(d_minus) + # _ -= dual_exp(d_minus ** 2 / -2.0) / (2 * pi) ** 0.5 + # return _ + # + # root_solver = _brents(root, f / 2.0, f) + # k_min = root_solver[0] + + def root(x): + return vol_sqrt_t * dual_norm_cdf(x) - dual_exp(-0.5 * x**2) / sqrt(2*pi) + def root_deriv(x): + return (vol_sqrt_t + x) * dual_exp(-0.5 * x**2) / sqrt(2*pi) + root_solver = _newton(root, root_deriv, (0.1-half_vol_sq_t)/vol_sqrt_t) + k_min = f * dual_exp(-root_solver[0]*vol_sqrt_t - half_vol_sq_t) + else: k_min = unadj_k / 2.0 return (k_min, k_max) @@ -2527,7 +2536,7 @@ def _strike_from_delta( if self.delta_type == "forward_pa": # make premium adjustment k_min, k_max = self._get_interval_for_premium_adjusted_delta( - _, half_vol_sq_t, vol_sqrt_t, f + float(_), float(half_vol_sq_t), float(vol_sqrt_t), float(f) ) def root(k): @@ -2546,7 +2555,7 @@ def root(k): if self.delta_type == "spot_pa": # make premium adjustment k_min, k_max = self._get_interval_for_premium_adjusted_delta( - _, half_vol_sq_t, vol_sqrt_t, f + float(_), float(half_vol_sq_t), float(vol_sqrt_t), float(f) ) def root(k): @@ -2980,4 +2989,17 @@ def _brents(f, x0, x1, max_iter=50, tolerance=1e-9): steps_taken += 1 - return x1, steps_taken \ No newline at end of file + return x1, steps_taken + + +def _newton(f, f1, x0, max_iter=50, tolerance=1e-9): + steps_taken = 0 + + while steps_taken < max_iter: + steps_taken += 1 + x1 = x0 - f(x0) / f1(x0) + if abs(x1 - x0) < tolerance: + return x1, steps_taken + x0 = x1 + + raise ValueError(f"`max_iter`: {max_iter} exceeded in Newton solver.") \ No newline at end of file diff --git a/tests/test_instruments.py b/tests/test_instruments.py index fed4577f..c0fb6c04 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -3065,11 +3065,11 @@ def test_fx_call_rate_specified_strike(self, fxfo): expected = 70.225764 assert abs(result - expected) < 1e-6 - @pytest.mark.parametrize("ccy, exp_rate", [ - ("usd", 70.180131), - ("eur", 1.00), + @pytest.mark.parametrize("ccy, exp_rate, exp_strike", [ + ("usd", 70.180131, 1.10101920113408469), + ("eur", 0.680949, 1.099976), ]) - def test_fx_call_rate(self, fxfo, ccy, exp_rate): + def test_fx_call_rate(self, fxfo, ccy, exp_rate, exp_strike): fxo = FXCall( pair="eurusd", expiry=dt(2023, 6, 16), @@ -3086,6 +3086,8 @@ def test_fx_call_rate(self, fxfo, ccy, exp_rate): expected = exp_rate assert abs(result - expected) < 1e-6 + assert abs(fxo.periods[0].strike - exp_strike) < 1e-4 + def test_fx_call_rate_expiry_tenor(self, fxfo): fxo = FXCall( pair="eurusd", @@ -3138,10 +3140,11 @@ def test_fx_put_rate(self, fxfo): payment_lag=2, calendar="tgt", strike="-25d", + delta_type="spot", ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] - result = fxo.rate(curves, fx=fxfo, vol=0.101) - expected = 83.595312 + result = fxo.rate(curves, fx=fxfo, vol=0.1015) + expected = 83.975596 assert abs(result - expected) < 1e-6 def test_risk_reversal_rate(self, fxfo): @@ -3153,10 +3156,11 @@ def test_risk_reversal_rate(self, fxfo): payment_lag=2, calendar="tgt", strike=["-25d", "25d"], + delta_type="spot", ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] - result = fxo.rate(curves, fx=fxfo, vol=[0.101, 0.089]) - expected = -13.370327 + result = fxo.rate(curves, fx=fxfo, vol=[0.1015, 0.089]) + expected = -13.791068 assert abs(result - expected) < 1e-6 def test_risk_reversal_npv(self, fxfo): @@ -3170,7 +3174,7 @@ def test_risk_reversal_npv(self, fxfo): strike=["-25d", "25d"], ) curves = [None, fxfo.curve("eur", "usd"), None, fxfo.curve("usd", "usd")] - result = fxo.npv(curves, fx=fxfo, vol=[0.101, 0.089]) + result = fxo.npv(curves, fx=fxfo, vol=[0.1015, 0.089]) expected = 0.0 assert abs(result - expected) < 1e-6 diff --git a/tests/test_periods.py b/tests/test_periods.py index 678ed4cc..9b6aa1b0 100644 --- a/tests/test_periods.py +++ b/tests/test_periods.py @@ -2265,8 +2265,8 @@ def test_strike_from_spot_delta(self, fxfo): 0.25, 0.089, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), - v1=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], - vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + w_deli=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], + w_spot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], ) expected = 1.1010192011340847 assert abs(result - expected) < 1e-9 @@ -2277,8 +2277,8 @@ def test_strike_from_spot_delta(self, fxfo): 0.250124, 0.089, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), - v1=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], - vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + w_deli=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], + w_spot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], ) expected = 1.101 assert abs(result - expected) < 1e-6 @@ -2298,8 +2298,9 @@ def test_strike_from_spot_delta_put(self, fxfo): -0.25, 0.1015, fxo._t_to_expiry(fxfo.curve("usd", "usd").node_dates[0]), - v1=fxfo.curve("eur","usd")[dt(2023, 6, 20)], - vspot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + w_deli=fxfo.curve("eur", "usd")[dt(2023, 6, 20)], + w_spot=fxfo.curve("eur", "usd")[dt(2023, 3, 20)], + v_deli=NoInput(0) ) expected = 1.0330517323059478 assert abs(result - expected) < 1e-9 From c9ee4f4c6d60e793742d2a0f65e6bfcdc10db2ec Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 5 Apr 2024 21:08:41 +0200 Subject: [PATCH 40/41] Imports --- rateslib/periods.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rateslib/periods.py b/rateslib/periods.py index a50ac75d..92d230a0 100644 --- a/rateslib/periods.py +++ b/rateslib/periods.py @@ -17,11 +17,9 @@ interpolation="log_linear", ) """ -import math from abc import abstractmethod, ABCMeta -from datetime import datetime, timedelta +from datetime import datetime from typing import Optional, Union -from statistics import NormalDist import warnings from math import comb, log, exp, pi, sqrt From 915ef83a4ff49a4219bc82e62618abdb1e411e09 Mon Sep 17 00:00:00 2001 From: "JHM Darbyshire (MBP)" Date: Fri, 5 Apr 2024 21:16:17 +0200 Subject: [PATCH 41/41] Imports --- rateslib/instruments.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rateslib/instruments.py b/rateslib/instruments.py index 7cfcaef3..d39aa5eb 100644 --- a/rateslib/instruments.py +++ b/rateslib/instruments.py @@ -62,11 +62,11 @@ IndexFixedLeg, ) from rateslib.dual import ( - Dual, + Dual, Dual2, -DualTypes, - dual_log, - dual_exp, + DualTypes, + dual_log, + dual_exp, dual_norm_cdf, gradient, )