From 9e8f47888a0f1bdc83595e596a6a4026eecd9dee Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Tue, 16 Jan 2024 18:17:12 +0800 Subject: [PATCH 1/9] 1.16 add chord and move arc into basic --- .../Foundation/Axiom/Basic/Plane_trash.lean | 21 ++ .../Foundation/Axiom/Circle/Basic.lean | 240 +++++++++++++++--- .../Foundation/Axiom/Circle/CirclePower.lean | 8 +- .../Axiom/Circle/IncribedAngle.lean | 235 ++++------------- .../Foundation/Axiom/Linear/Line_trash.lean | 10 + .../Foundation/Axiom/Linear/Ray_trash.lean | 12 + 6 files changed, 304 insertions(+), 222 deletions(-) create mode 100644 EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean diff --git a/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean b/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean new file mode 100644 index 00000000..c16ec89a --- /dev/null +++ b/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean @@ -0,0 +1,21 @@ +import EuclideanGeometry.Foundation.Axiom.Basic.Plane + +noncomputable section +namespace EuclidGeom + +variable {P : Type _} [EuclideanPlane P] + +/- point reflection -/ +def pt_flip (A O : P) : P := (VEC A O) +ᵥ O + +theorem pt_flip_symm {A B O : P} (h : B = pt_flip A O) : A = pt_flip B O := by + rw [h] + unfold pt_flip Vec.mkPtPt + rw [vsub_vadd_eq_vsub_sub] + simp + +theorem pt_flip_vec_eq {A B O : P} (h : B = pt_flip A O) : VEC A O = VEC O B := by + rw [h, pt_flip, Vec.mkPtPt, Vec.mkPtPt] + simp + +end EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean index e1844e51..f2fcd13f 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean @@ -2,7 +2,10 @@ import EuclideanGeometry.Foundation.Axiom.Position.Orientation import EuclideanGeometry.Foundation.Axiom.Triangle.Basic import EuclideanGeometry.Foundation.Axiom.Triangle.Trigonometric import EuclideanGeometry.Foundation.Axiom.Linear.Line_trash +import EuclideanGeometry.Foundation.Axiom.Linear.Ray_trash import EuclideanGeometry.Foundation.Axiom.Linear.Perpendicular +import EuclideanGeometry.Foundation.Axiom.Basic.Plane_trash +import EuclideanGeometry.Foundation.Axiom.Position.Orientation_trash noncomputable section namespace EuclidGeom @@ -123,11 +126,15 @@ instance pt_liesout_ne_pt_liesint {A B : P} {ω : Circle P} (h₁ : A LiesOut ω linarith ⟩ -theorem interior_of_circle_iff_inside_not_on_circle (p : P) (ω : Circle P) : p LiesInt ω ↔ (p LiesIn ω) ∧ (¬ p LiesOn ω) := by +theorem liesint_iff_liesin_and_not_lieson (p : P) (ω : Circle P) : p LiesInt ω ↔ (p LiesIn ω) ∧ (¬ p LiesOn ω) := by show dist ω.center p < ω.radius ↔ (dist ω.center p ≤ ω.radius) ∧ (¬ dist ω.center p = ω.radius) push_neg exact lt_iff_le_and_ne +theorem liesin_iff_liesint_or_lieson (A : P) (ω : Circle P) : A LiesIn ω ↔ (A LiesInt ω) ∨ (A LiesOn ω) := by + show dist ω.center A ≤ ω.radius ↔ (dist ω.center A < ω.radius) ∨ (dist ω.center A = ω.radius) + exact le_iff_lt_or_eq + theorem mk_pt_pt_lieson {O A : P} [PtNe O A] : A LiesOn (CIR O A) := rfl theorem mk_pt_pt_diam_fst_lieson {A B : P} [_h : PtNe A B] : A LiesOn (mk_pt_pt_diam A B) := by @@ -225,46 +232,211 @@ end Circle end colinear + section antipode namespace Circle -def antipode (A : P) (ω : Circle P) : P := VEC A ω.center +ᵥ ω.center - -theorem antipode_lieson_circle {A : P} {ω : Circle P} {ha : A LiesOn ω} : (antipode A ω) LiesOn ω := by - show dist ω.center (antipode A ω) = ω.radius - rw [NormedAddTorsor.dist_eq_norm', antipode, vsub_vadd_eq_vsub_sub] - simp only [vsub_self, zero_sub, norm_neg] - show ‖ω.center -ᵥ A‖ = ω.radius - rw [← NormedAddTorsor.dist_eq_norm', ha] - -theorem antipode_symm {A B : P} {ω : Circle P} {ha : A LiesOn ω} (h : antipode A ω = B) : antipode B ω = A := by - show VEC B ω.center +ᵥ ω.center = A - symm - apply (eq_vadd_iff_vsub_eq _ _ _).mpr - show VEC ω.center A = VEC B ω.center - have : VEC ω.center B = VEC A ω.center := by - show B -ᵥ ω.center = VEC A ω.center - apply (eq_vadd_iff_vsub_eq _ _ _).mp h.symm - rw [← neg_vec, ← this, neg_vec] - -theorem antipode_distinct {A : P} {ω : Circle P} {ha : A LiesOn ω} : antipode A ω ≠ A := by - intro eq - have : VEC ω.center A = VEC A ω.center := by - show A -ᵥ ω.center = VEC A ω.center - apply (eq_vadd_iff_vsub_eq _ _ _).mp eq.symm - have neq : A ≠ ω.center := (pt_lieson_ne_center ha).out - contrapose! neq - apply (eq_iff_vec_eq_zero _ _).mpr - have : 2 • (VEC ω.center A) = 0 := by - rw [two_smul] - nth_rw 1 [this] - rw [vec_add_vec] - simp - apply (two_nsmul_eq_zero ℝ _).mp this +def IsAntipode {A B : P} (ω : Circle P) (_ha : A LiesOn ω) (_hb : B LiesOn ω) : Prop := B = pt_flip A ω.center + +theorem antipode_symm {A B : P} {ω : Circle P} (ha : A LiesOn ω) (hb : B LiesOn ω) : IsAntipode ω ha hb ↔ IsAntipode ω hb ha := by + unfold IsAntipode + constructor + · apply pt_flip_symm + apply pt_flip_symm + +theorem antipode_center_is_midpoint {A B : P} {ω : Circle P} (ha : A LiesOn ω) (hb : B LiesOn ω) (h : IsAntipode ω ha hb) : ω.center = (SEG A B).midpoint := pt_flip_center_is_midpoint h + +theorem antipode_iff_colinear (A B : P) {ω : Circle P} [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : IsAntipode ω ha hb ↔ colinear A ω.center B := by + constructor + · intro hh + apply pt_flip_colinear hh + intro hcl + haveI : PtNe A ω.center := pt_lieson_ne_center ha + have hl : B LiesOn LIN ω.center A := Line.pt_pt_maximal (flip_colinear_fst_snd hcl) + have heq : VEC A ω.center = VEC ω.center B := by + apply distinct_pts_same_dist_vec_eq hl + rw [ha, hb] + unfold IsAntipode pt_flip + rw [heq, eq_vadd_iff_vsub_eq] + rfl + +theorem mk_pt_pt_diam_isantipode {A B : P} [h : PtNe A B] : IsAntipode (mk_pt_pt_diam A B) mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson := by + have hc : colinear A (SEG A B).midpoint B := by + apply flip_colinear_snd_trd + apply Line.pt_pt_linear + show (SEG A B).midpoint LiesOn (SEG_nd A B).toLine + apply SegND.lies_on_toLine_of_lie_on + apply Seg.midpt_lies_on + exact (antipode_iff_colinear _ _ mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson).mpr hc end Circle end antipode + +section arc + +@[ext] +structure Arc (P : Type _) [EuclideanPlane P] (ω : Circle P) where + source : P + target : P + ison : (source LiesOn ω) ∧ (target LiesOn ω) + endpts_ne : PtNe target source + +variable (ω : Circle P) + +namespace Arc + +attribute [instance] Arc.endpts_ne + +protected def mk_pt_pt_circle (A B : P) [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : Arc P ω where + source := A + target := B + ison := ⟨ha, hb⟩ + endpts_ne := h + +end Arc + +scoped notation "ARC" => Arc.mk_pt_pt_circle + +namespace Arc + +protected def IsOn (p : P) (β : Arc P ω) : Prop := (p LiesOn ω) ∧ (¬ p LiesOnLeft (DLIN β.source β.target)) + +def Isnot_arc_endpts (p : P) (β : Arc P ω) : Prop := (p ≠ β.source) ∧ (p ≠ β.target) + +instance (p : P) (β : Arc P ω) (h : Isnot_arc_endpts ω p β) : PtNe β.source p := ⟨h.1.symm⟩ + +instance (p : P) (β : Arc P ω) (h : Isnot_arc_endpts ω p β) : PtNe β.target p := ⟨h.2.symm⟩ + +protected def IsInt (p : P) (β : Arc P ω) : Prop := (Arc.IsOn ω p β) ∧ (Isnot_arc_endpts ω p β) + +protected def carrier (β : Arc P ω) : Set P := { p : P | Arc.IsOn ω p β } + +protected def interior (β : Arc P ω) : Set P := { p : P | Arc.IsInt ω p β } + +instance : Fig (Arc P ω) P where + carrier := Arc.carrier ω + +instance : Interior (Arc P ω) P where + interior := Arc.interior ω + +theorem center_isnot_arc_endpts (β : Arc P ω) : Isnot_arc_endpts ω ω.center β := by + constructor + · intro h + have : β.source LiesOn ω := β.ison.1 + rw [← h] at this + unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this + simp at this + have : ω.radius > 0 := ω.rad_pos + linarith + intro h + have : β.target LiesOn ω := β.ison.2 + rw [← h] at this + unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this + simp at this + have : ω.radius > 0 := ω.rad_pos + linarith + +instance (β : Arc P ω) : PtNe β.source ω.center := ⟨ (center_isnot_arc_endpts ω β).1.symm ⟩ +instance (β : Arc P ω) : PtNe β.target ω.center := ⟨ (center_isnot_arc_endpts ω β).2.symm ⟩ + +def complement (β : Arc P ω) : Arc P ω where + source := β.target + target := β.source + ison := and_comm.mp β.ison + endpts_ne := β.endpts_ne.symm + +lemma pt_liesint_not_lieson_dlin {β : Arc P ω} {p : P} (h : p LiesInt β) : ¬ (p LiesOn (DLIN β.source β.target)) := by + intro hl + have hl : p LiesOn (LIN β.source β.target) := hl + have hco : colinear β.source β.target p := Line.pt_pt_linear hl + have hco' : ¬ (colinear β.source β.target p) := Circle.three_pts_lieson_circle_not_colinear (hne₂ := ⟨h.2.2⟩) (hne₃ := ⟨h.2.1.symm⟩) β.ison.1 β.ison.2 h.1.1 + tauto + +theorem pt_liesint_liesonright_dlin {β : Arc P ω} {p : P} (h : p LiesInt β) : p LiesOnRight (DLIN β.source β.target) := by + have hnl : ¬ (p LiesOn (DLIN β.source β.target)) := pt_liesint_not_lieson_dlin ω h + have hnll : ¬ (p LiesOnLeft (DLIN β.source β.target)) := h.1.2 + rcases DirLine.lieson_or_liesonleft_or_liesonright p (DLIN β.source β.target) with hh | (hh | hh) + · exfalso; tauto + · exfalso; tauto + exact hh + +theorem pt_liesint_complementary_liesonleft_dlin {β : Arc P ω} {p : P} (h : p LiesInt β.complement) : p LiesOnLeft (DLIN β.source β.target) := by + have hh : p LiesOnRight (DLIN β.target β.source) := by apply pt_liesint_liesonright_dlin ω h + apply liesonleft_iff_liesonright_reverse.mpr + rw [← DirLine.pt_pt_rev_eq_rev] + exact hh + +end Arc + +end arc + + +section chord + +@[ext] +structure Chord (P : Type _) [EuclideanPlane P] (ω : Circle P) where + toSegND : SegND P + ison : (toSegND.source LiesOn ω) ∧ (toSegND.target LiesOn ω) + +variable (ω : Circle P) + +namespace Chord + +protected def mk_pt_pt_circle {A B : P} [h : PtNe A B] (ha : A LiesOn ω) (hb : B LiesOn ω) : Chord P ω where + toSegND := SEG_nd A B h.out.symm + ison := ⟨ha, hb⟩ + +protected def IsOn (A : P) (s : Chord P ω) : Prop := A LiesOn s.toSegND + +protected def IsInt (A : P) (s : Chord P ω) : Prop := A LiesInt s.toSegND + +protected def carrier (s : Chord P ω) : Set P := { p : P | Chord.IsOn ω p s } + +protected def interior (s : Chord P ω) : Set P := { p : P | Chord.IsInt ω p s } + +instance : Fig (Chord P ω) P where + carrier := Chord.carrier ω + +instance : Interior (Chord P ω) P where + interior := Chord.interior ω + +theorem pt_liesint_liesint_circle {A : P} {s : Chord P ω} (h : A LiesInt s) : A LiesInt ω := by + have : s.1 SegInCir ω := by + unfold Circle.seg_lies_inside_circle + constructor + · apply (Circle.liesin_iff_liesint_or_lieson _ _).mpr + right; exact s.2.1 + apply (Circle.liesin_iff_liesint_or_lieson _ _).mpr + right; exact s.2.2 + apply Circle.pt_lies_inside_circle_of_seg_inside_circle this h + +end Chord + +def Chord.mk_arc (β : Arc P ω) : Chord P ω where + toSegND := SEG_nd β.source β.target β.endpts_ne.out + ison := β.ison + +def Arc.mk_chord (s : Chord P ω) : Arc P ω where + source := s.1.source + target := s.1.target + ison := s.2 + endpts_ne := ⟨s.1.2⟩ + +namespace Chord + +protected def length (s : Chord P ω) : ℝ := s.1.length + +protected def IsDiameter (s : Chord P ω) : Prop := ω.center LiesOn s + +theorem diameter_length_eq_twice_radius {s : Chord P ω} (h : Chord.IsDiameter ω s) : s.length = 2 * ω.radius := sorry + +theorem diameter_iff_antipide {s : Chord P ω} : Chord.IsDiameter ω s ↔ Circle.IsAntipode ω s.2.1 s.2.2 := sorry + +end Chord + +end chord + end EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean index 5b56d46c..197c164f 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean @@ -15,20 +15,20 @@ namespace Circle -- Define the power of a point P relative to a circle ω with center O and radius r to be OP ^ 2 - r ^ 2 def power (ω : Circle P) (p : P) : ℝ := dist ω.center p ^ 2 - ω.radius ^ 2 -theorem inside_circle_iff_power_npos (p : P) (ω : Circle P) : p LiesIn ω ↔ ω.power p ≤ 0 := by +theorem liesin_circle_iff_power_npos (p : P) (ω : Circle P) : p LiesIn ω ↔ ω.power p ≤ 0 := by apply Iff.trans _ sub_nonpos.symm unfold Circle.IsInside apply Iff.trans _ sq_le_sq.symm rw [abs_of_nonneg dist_nonneg, abs_of_pos ω.rad_pos] -theorem interior_of_circle_iff_power_neg (p : P) (ω : Circle P) : p LiesInt ω ↔ ω.power p < 0 := by +theorem liesint_circle_iff_power_neg (p : P) (ω : Circle P) : p LiesInt ω ↔ ω.power p < 0 := by apply Iff.trans _ sub_neg.symm unfold lies_int Interior.interior instInteriorCircle Circle.interior Circle.IsInt simp apply Iff.trans _ sq_lt_sq.symm rw [abs_of_nonneg dist_nonneg, abs_of_pos ω.rad_pos] -theorem lies_on_circle_iff_power_zero (p : P) (ω : Circle P) : p LiesOn ω ↔ ω.power p = 0 := by +theorem lieson_circle_iff_power_zero (p : P) (ω : Circle P) : p LiesOn ω ↔ ω.power p = 0 := by apply Iff.trans _ sub_eq_zero.symm unfold lies_on Fig.carrier instFigCircle Circle.carrier Circle.IsOn simp @@ -37,7 +37,7 @@ theorem lies_on_circle_iff_power_zero (p : P) (ω : Circle P) : p LiesOn ω ↔ apply le_iff_lt_or_eq.mpr left; exact ω.rad_pos -theorem outside_circle_iff_power_pos (p : P) (ω : Circle P) : p LiesOut ω ↔ 0 < ω.power p := by +theorem liesout_circle_iff_power_pos (p : P) (ω : Circle P) : p LiesOut ω ↔ 0 < ω.power p := by apply Iff.trans _ sub_pos.symm unfold Circle.IsOutside apply Iff.trans _ sq_lt_sq.symm diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean index 86d44455..0a3e273b 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean @@ -1,6 +1,5 @@ import EuclideanGeometry.Foundation.Axiom.Circle.Basic import EuclideanGeometry.Foundation.Axiom.Position.Angle_ex2 -import EuclideanGeometry.Foundation.Axiom.Position.Orientation_trash import EuclideanGeometry.Foundation.Axiom.Triangle.IsocelesTriangle_trash import EuclideanGeometry.Foundation.Axiom.Basic.Angle_trash import EuclideanGeometry.Foundation.Axiom.Triangle.Basic @@ -9,224 +8,89 @@ import EuclideanGeometry.Foundation.Axiom.Triangle.Basic_ex noncomputable section namespace EuclidGeom -open AngValue Angle +variable {P : Type _} [EuclideanPlane P] (ω : Circle P) -@[ext] -structure Arc (P : Type _) [EuclideanPlane P] where - source : P - target : P - circle : Circle P - ison : (source LiesOn circle) ∧ (target LiesOn circle) - endpts_ne : PtNe target source +open AngValue Angle Circle -variable {P : Type _} [EuclideanPlane P] +section angle -- need a change -namespace Arc - -attribute [instance] Arc.endpts_ne - -protected def mk_pt_pt_circle (A B : P) {ω : Circle P} [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : Arc P where - source := A - target := B - circle := ω - ison := ⟨ha, hb⟩ - endpts_ne := h - -end Arc - -scoped notation "ARC" => Arc.mk_pt_pt_circle - - -section position +def Circle.angle_mk_pt_arc (p : P) (β : Arc P ω) (h : Arc.Isnot_arc_endpts ω p β) : Angle P := ANG β.source p β.target h.1.symm h.2.symm namespace Arc -protected def IsOn (p : P) (β : Arc P) : Prop := (p LiesOn β.circle) ∧ (¬ p LiesOnLeft (DLIN β.source β.target)) - -def Isnot_arc_endpts (p : P) (β : Arc P) : Prop := (p ≠ β.source) ∧ (p ≠ β.target) - -instance (p : P) (β : Arc P) (h : Isnot_arc_endpts p β) : PtNe β.source p := ⟨h.1.symm⟩ - -instance (p : P) (β : Arc P) (h : Isnot_arc_endpts p β) : PtNe β.target p := ⟨h.2.symm⟩ - -protected def IsInt (p : P) (β : Arc P) : Prop := (Arc.IsOn p β) ∧ (Isnot_arc_endpts p β) - -protected def carrier (β : Arc P) : Set P := { p : P | Arc.IsOn p β } - -protected def interior (β : Arc P) : Set P := { p : P | Arc.IsInt p β } - -instance : Fig (Arc P) P where - carrier := Arc.carrier - -instance : Interior (Arc P) P where - interior := Arc.interior - -theorem center_isnot_arc_endpts (β : Arc P) : Isnot_arc_endpts β.circle.center β := by - constructor - · intro h - have : β.source LiesOn β.circle := β.ison.1 - rw [← h] at this - unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this - simp at this - have : β.circle.radius > 0 := β.circle.rad_pos - linarith - intro h - have : β.target LiesOn β.circle := β.ison.2 - rw [← h] at this - unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this - simp at this - have : β.circle.radius > 0 := β.circle.rad_pos - linarith - -instance (β : Arc P) : PtNe β.source β.circle.center := ⟨ (center_isnot_arc_endpts β).1.symm ⟩ -instance (β : Arc P) : PtNe β.target β.circle.center := ⟨ (center_isnot_arc_endpts β).2.symm ⟩ - -def complement (β : Arc P) : Arc P where - source := β.target - target := β.source - circle := β.circle - ison := and_comm.mp β.ison - endpts_ne := β.endpts_ne.symm +protected def cangle (β : Arc P ω) : Angle P := angle_mk_pt_arc ω ω.center β (center_isnot_arc_endpts ω β) -lemma liesint_arc_not_lieson_dlin {β : Arc P} {p : P} (h : p LiesInt β) : ¬ (p LiesOn (DLIN β.source β.target)) := by - intro hl - have hl : p LiesOn (LIN β.source β.target) := hl - have hco : colinear β.source β.target p := Line.pt_pt_linear hl - have hco' : ¬ (colinear β.source β.target p) := Circle.three_pts_lieson_circle_not_colinear (hne₂ := ⟨h.2.2⟩) (hne₃ := ⟨h.2.1.symm⟩) β.ison.1 β.ison.2 h.1.1 - tauto +protected def IsMajor (β : Arc P ω) : Prop := (β.cangle ω).value.toReal < 0 -theorem liesint_arc_liesonright_dlin {β : Arc P} {p : P} (h : p LiesInt β) : p LiesOnRight (DLIN β.source β.target) := by - have hnl : ¬ (p LiesOn (DLIN β.source β.target)) := liesint_arc_not_lieson_dlin h - have hnll : ¬ (p LiesOnLeft (DLIN β.source β.target)) := h.1.2 - rcases DirLine.lieson_or_liesonleft_or_liesonright p (DLIN β.source β.target) with hh | (hh | hh) - · exfalso; tauto - · exfalso; tauto - exact hh - -theorem liesint_complementary_arc_liesonleft_dlin {β : Arc P} {p : P} (h : p LiesInt β.complement) : p LiesOnLeft (DLIN β.source β.target) := by - have hh : p LiesOnRight (DLIN β.target β.source) := by apply liesint_arc_liesonright_dlin h - apply liesonleft_iff_liesonright_reverse.mpr - rw [← DirLine.pt_pt_rev_eq_rev] - exact hh +protected def IsMinor (β : Arc P ω) : Prop := (β.cangle ω).value.toReal > 0 end Arc -end position - - -section angle - -namespace Arc - -protected def angle_mk_pt_arc (p : P) (β : Arc P) (h : Isnot_arc_endpts p β) : Angle P := ANG β.source p β.target h.1.symm h.2.symm - -protected def cangle (β : Arc P) : Angle P := Arc.angle_mk_pt_arc β.circle.center β (center_isnot_arc_endpts β) - -protected def IsMajor (β : Arc P) : Prop := β.cangle.value.toReal < 0 +end angle -protected def IsMinor (β : Arc P) : Prop := β.cangle.value.toReal > 0 +-- protected def IsAntipode (A B : P) {ω : Circle P} [_h : PtNe B A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) : Prop := (ARC A B h₁ h₂).cangle.value = π -protected def IsAntipode (A B : P) {ω : Circle P} [_h : PtNe B A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) : Prop := (ARC A B h₁ h₂).cangle.value = π +namespace Circle -theorem cangle_of_complementary_arc_are_opposite (β : Arc P) : β.cangle.value = - β.complement.cangle.value := by - show (∠ β.source β.circle.center β.target = -∠ β.target β.circle.center β.source) +theorem cangle_of_complementary_arc_are_opposite (β : Arc P ω) : (β.cangle ω).value = - (Arc.cangle ω β.complement).value := by + show (∠ β.source ω.center β.target = -∠ β.target ω.center β.source) apply neg_value_of_rev_ang -theorem antipode_iff_colinear (A B : P) {ω : Circle P} [h : PtNe B A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) : Arc.IsAntipode A B h₁ h₂ ↔ colinear ω.center A B := by - haveI : PtNe A ω.center := Circle.pt_lieson_ne_center h₁ - haveI : PtNe B ω.center := Circle.pt_lieson_ne_center h₂ - constructor - · exact colinear_of_angle_eq_pi - intro hh - show ∠ A ω.center B = π - have hl : B LiesOn LIN ω.center A := Line.pt_pt_maximal hh - have heq₁ : VEC A ω.center = VEC ω.center B := by - apply distinct_pts_same_dist_vec_eq hl - rw [h₁, h₂] - have heq₂ : VEC A B = (2 : ℝ) • (VEC A ω.center) := by - calc - _ = VEC A ω.center + VEC ω.center B := by rw [vec_add_vec] - _ = (2 : ℝ) • (VEC A ω.center) := by rw [← heq₁, two_smul] - have hli : ω.center LiesInt SEG_nd A B := by - apply SegND.lies_int_iff.mpr - use 2⁻¹ - constructor - · norm_num - constructor - · norm_num - show VEC A ω.center = 2⁻¹ • (VEC A B) - rw [heq₂] - simp - exact value_eq_pi_of_lies_int_seg_nd hli - -theorem mk_pt_pt_diam_isantipode {A B : P} [h : PtNe A B] : Arc.IsAntipode A B (Circle.mk_pt_pt_diam_fst_lieson) (Circle.mk_pt_pt_diam_snd_lieson) := by - have hc : colinear (SEG A B).midpoint A B := by - apply perm_colinear_trd_fst_snd - apply Line.pt_pt_linear - show (SEG A B).midpoint LiesOn (SEG_nd A B).toLine - apply SegND.lies_on_toLine_of_lie_on - apply Seg.midpt_lies_on - exact (antipode_iff_colinear _ _ (Circle.mk_pt_pt_diam_fst_lieson) (Circle.mk_pt_pt_diam_snd_lieson)).mpr hc - -end Arc - -end angle - - -theorem inscribed_angle_is_positive {p : P} {β : Arc P} (h : p LiesInt β.complement) : (Arc.angle_mk_pt_arc p β h.2.symm).value.IsPos := by - unfold Arc.angle_mk_pt_arc +theorem inscribed_angle_is_positive {p : P} {β : Arc P ω} (h : p LiesInt β.complement) : (angle_mk_pt_arc ω p β h.2.symm).value.IsPos := by + unfold angle_mk_pt_arc apply TriangleND.liesonleft_angle_ispos - exact (Arc.liesint_complementary_arc_liesonleft_dlin h) + exact (Arc.pt_liesint_complementary_liesonleft_dlin ω h) -theorem inscribed_angle_of_complementary_arc_is_negative {p : P} {β : Arc P} (h : p LiesInt β) : (Arc.angle_mk_pt_arc p β h.2).value.IsNeg := by - unfold Arc.angle_mk_pt_arc +theorem inscribed_angle_of_complementary_arc_is_negative {p : P} {β : Arc P ω} (h : p LiesInt β) : (angle_mk_pt_arc ω p β h.2).value.IsNeg := by + unfold angle_mk_pt_arc apply TriangleND.liesonright_angle_isneg - exact (Arc.liesint_arc_liesonright_dlin h) + exact (Arc.pt_liesint_liesonright_dlin ω h) -theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P} (h₁ : p LiesOn β.circle) (h₂ : Arc.Isnot_arc_endpts p β) : β.cangle.value = 2 • (Arc.angle_mk_pt_arc p β h₂).value := by +theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.Isnot_arc_endpts ω p β) : (β.cangle ω).value = 2 • (angle_mk_pt_arc ω p β h₂).value := by haveI : PtNe p β.source := ⟨h₂.1⟩ haveI : PtNe p β.target := ⟨h₂.2⟩ - haveI : PtNe p β.circle.center := Circle.pt_lieson_ne_center h₁ - have hit₁ : (▵ β.circle.center β.target p).IsIsoceles := by + haveI : PtNe p ω.center := Circle.pt_lieson_ne_center h₁ + have hit₁ : (▵ ω.center β.target p).IsIsoceles := by unfold Triangle.IsIsoceles - show (SEG p β.circle.center).length = (SEG β.circle.center β.target).length + show (SEG p ω.center).length = (SEG ω.center β.target).length rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h₁, β.ison.2] - have hit₂ : (▵ β.circle.center p β.source).IsIsoceles := by + have hit₂ : (▵ ω.center p β.source).IsIsoceles := by unfold Triangle.IsIsoceles - show (SEG β.source β.circle.center).length = (SEG β.circle.center p).length + show (SEG β.source ω.center).length = (SEG ω.center p).length rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h₁, β.ison.1] - have eq₁ : ∠ p β.target β.circle.center = ∠ β.circle.center p β.target := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₁ - have eq₂ : ∠ β.source p β.circle.center = ∠ β.circle.center β.source p := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₂ - have π₁ : ∠ β.target β.circle.center p + ∠ p β.target β.circle.center + ∠ β.circle.center p β.target = π := by apply angle_sum_eq_pi_of_tri (▵ β.circle.center β.target p) - have π₂ : ∠ p β.circle.center β.source + ∠ β.source p β.circle.center + ∠ β.circle.center β.source p = π := by apply angle_sum_eq_pi_of_tri (▵ β.circle.center p β.source) - have hsum₁ : ∠ β.target β.circle.center p + ∠ p β.circle.center β.source = ∠ β.target β.circle.center β.source := by - have : (ANG β.target β.circle.center p).end_ray = (ANG p β.circle.center β.source).start_ray := rfl - have hhs : (Angle.sum_adj this).value = ∠ β.target β.circle.center β.source := rfl + have eq₁ : ∠ p β.target ω.center = ∠ ω.center p β.target := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₁ + have eq₂ : ∠ β.source p ω.center = ∠ ω.center β.source p := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₂ + have π₁ : ∠ β.target ω.center p + ∠ p β.target ω.center + ∠ ω.center p β.target = π := by apply angle_sum_eq_pi_of_tri (▵ ω.center β.target p) + have π₂ : ∠ p ω.center β.source + ∠ β.source p ω.center + ∠ ω.center β.source p = π := by apply angle_sum_eq_pi_of_tri (▵ ω.center p β.source) + have hsum₁ : ∠ β.target ω.center p + ∠ p ω.center β.source = ∠ β.target ω.center β.source := by + have : (ANG β.target ω.center p).end_ray = (ANG p ω.center β.source).start_ray := rfl + have hhs : (Angle.sum_adj this).value = ∠ β.target ω.center β.source := rfl rw [← hhs, Angle.ang_eq_ang_add_ang_mod_pi_of_adj_ang] - have hsum₂ : ∠ β.source p β.circle.center + ∠ β.circle.center p β.target = ∠ β.source p β.target := by - have : (ANG β.source p β.circle.center).end_ray = (ANG β.circle.center p β.target).start_ray := rfl + have hsum₂ : ∠ β.source p ω.center + ∠ ω.center p β.target = ∠ β.source p β.target := by + have : (ANG β.source p ω.center).end_ray = (ANG ω.center p β.target).start_ray := rfl have hhs : (Angle.sum_adj this).value = ∠ β.source p β.target := rfl rw [← hhs, Angle.ang_eq_ang_add_ang_mod_pi_of_adj_ang] - have eq₃ : ∠ β.target β.circle.center β.source + 2 • (∠ β.source p β.target) = 0 := by + have eq₃ : ∠ β.target ω.center β.source + 2 • (∠ β.source p β.target) = 0 := by calc - _ = ∠ β.target β.circle.center p + ∠ p β.circle.center β.source + 2 • (∠ β.source p β.circle.center + ∠ β.circle.center p β.target) := by rw [hsum₁, hsum₂] - _ = ∠ β.target β.circle.center p + ∠ p β.circle.center β.source + (∠ p β.target β.circle.center + ∠ β.circle.center p β.target) + (∠ β.source p β.circle.center + ∠ β.circle.center β.source p) := by + _ = ∠ β.target ω.center p + ∠ p ω.center β.source + 2 • (∠ β.source p ω.center + ∠ ω.center p β.target) := by rw [hsum₁, hsum₂] + _ = ∠ β.target ω.center p + ∠ p ω.center β.source + (∠ p β.target ω.center + ∠ ω.center p β.target) + (∠ β.source p ω.center + ∠ ω.center β.source p) := by rw [← eq₂, eq₁, two_smul] abel - _ = (∠ β.target β.circle.center p + ∠ p β.target β.circle.center + ∠ β.circle.center p β.target) + (∠ p β.circle.center β.source + ∠ β.source p β.circle.center + ∠ β.circle.center β.source p) := by + _ = (∠ β.target ω.center p + ∠ p β.target ω.center + ∠ ω.center p β.target) + (∠ p ω.center β.source + ∠ β.source p ω.center + ∠ ω.center β.source p) := by rw [add_assoc, add_add_add_comm] abel _ = 0 := by rw [π₁, π₂, ← coe_two_pi, two_mul] simp calc - _ = - ∠ β.target β.circle.center β.source := by rw [← neg_value_of_rev_ang]; rfl + _ = - ∠ β.target ω.center β.source := by rw [← neg_value_of_rev_ang]; rfl _ = 2 • (∠ β.source p β.target) := by rw [← zero_sub, ← eq₃, add_sub_cancel'] - _ = 2 • (Arc.angle_mk_pt_arc p β h₂).value := rfl + _ = 2 • (angle_mk_pt_arc ω p β h₂).value := rfl -theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P} (h₁ : p LiesOn β.circle) (h₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2) (h₃ : Arc.Isnot_arc_endpts p β) : (Arc.angle_mk_pt_arc p β h₃).dvalue = ∡[π / 2] := by +/- +theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2) (h₃ : Arc.Isnot_arc_endpts p β) : (angle_mk_pt_Arc P ω β h₃).dvalue = ∡[π / 2] := by have : β.cangle.value = π := h₂ - have : 2 • (Arc.angle_mk_pt_arc p β h₃).value = π := by + have : 2 • (angle_mk_pt_Arc P ω β h₃).value = π := by rw [← this, ← cangle_eq_two_times_inscribed_angle] exact h₁ rcases two_nsmul_eq_pi_iff.mp this with h | h @@ -237,22 +101,25 @@ theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P} (h₁ : p Lie simp theorem inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt {A B C : P} {ω : Circle P} [hne₁ : PtNe A B] [hne₂ : PtNe B C] [hne₃ : PtNe C A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (h₃ : C LiesOn ω) (h : Arc.IsAntipode A B h₁ h₂) : ∠ A C B = ∡[π / 2] := by - let β : Arc P := ARC A B h₁ h₂ - have hh₁ : C LiesOn β.circle := h₃ + let β : Arc P ω := ARC A B h₁ h₂ + have hh₁ : C LiesOn ω := h₃ have hh₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2 := h have hh₃ : Arc.Isnot_arc_endpts C β := ⟨hne₃.out, hne₂.out.symm⟩ apply inscribed_angle_of_diameter_eq_mod_pi hh₁ hh₂ hh₃ +-/ -theorem inscribed_angle_on_same_arc_is_invariant_mod_pi {A B : P} {β : Arc P} (h₁ : A LiesOn β.circle) (h₂ : B LiesOn β.circle) (hne₁ : Arc.Isnot_arc_endpts A β) (hne₂ : Arc.Isnot_arc_endpts B β) : (Arc.angle_mk_pt_arc A β hne₁).dvalue = (Arc.angle_mk_pt_arc B β hne₂).dvalue := by - have eq : 2 • (Arc.angle_mk_pt_arc A β hne₁).value = 2 • (Arc.angle_mk_pt_arc B β hne₂).value := by rw [← cangle_eq_two_times_inscribed_angle h₁ hne₁, ← cangle_eq_two_times_inscribed_angle h₂ hne₂] +theorem inscribed_angle_on_same_arc_is_invariant_mod_pi {A B : P} {β : Arc P ω} (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (hne₁ : Arc.Isnot_arc_endpts ω A β) (hne₂ : Arc.Isnot_arc_endpts ω B β) : (angle_mk_pt_arc ω A β hne₁).dvalue = (angle_mk_pt_arc ω B β hne₂).dvalue := by + have eq : 2 • (angle_mk_pt_arc ω A β hne₁).value = 2 • (angle_mk_pt_arc ω B β hne₂).value := by rw [← cangle_eq_two_times_inscribed_angle ω h₁ hne₁, ← cangle_eq_two_times_inscribed_angle ω h₂ hne₂] exact coe_eq_coe_iff_two_nsmul_eq.mpr eq +end Circle + namespace Arc -protected def iangle (β : Arc P) : AngDValue := sorry +protected def iangle (β : Arc P ω) : AngDValue := sorry -theorem inscribed_angle_dvalue_eq_iangle {p : P} {β : Arc P} (h₁ : p LiesOn β.circle) (h₂ : Isnot_arc_endpts p β) : (Arc.angle_mk_pt_arc p β h₂).dvalue = β.iangle := by +theorem inscribed_angle_dvalue_eq_iangle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Isnot_arc_endpts ω p β) : (angle_mk_pt_arc ω p β h₂).dvalue = β.iangle := by sorry theorem angle_of_osculation : sorry := sorry diff --git a/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean b/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean index 3c413835..c638ff36 100644 --- a/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean +++ b/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean @@ -98,5 +98,15 @@ theorem eq_toDir_of_pt_lies_int_to_target {seg_nd : SegND P} {A : P} (h : A Lies theorem eq_toDirLine_of_pt_lies_int_to_target {seg_nd : SegND P} {A : P} (h : A LiesInt seg_nd) : (SEG_nd A seg_nd.target h.ne_target.symm).toDirLine = seg_nd.toDirLine := by sorry +theorem pt_flip_colinear {A B O : P} (h : B = pt_flip A O) : colinear A O B := by + apply flip_colinear_snd_trd + by_cases hne : A = B + · rw [hne] + unfold colinear + simp + haveI : PtNe A B := ⟨hne⟩ + apply Line.pt_pt_linear + sorry + end EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean b/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean index 0613a3f8..db8e66ef 100644 --- a/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean +++ b/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean @@ -1,4 +1,5 @@ import EuclideanGeometry.Foundation.Axiom.Linear.Ray +import EuclideanGeometry.Foundation.Axiom.Basic.Plane_trash noncomputable section @@ -16,4 +17,15 @@ variable {P : Type _} [EuclideanPlane P] (seg_nd : SegND P) by the way in_seg shoud be renamed by current naming system -/ +theorem pt_flip_center_is_midpoint {A B O : P} (h : B = pt_flip A O) : O = (SEG A B).midpoint := by + unfold Seg.midpoint + apply (eq_vadd_iff_vsub_eq _ _ _).mpr + show VEC A O = (1 / 2 : ℝ) • (VEC A B) + symm + calc + _ = (1 / 2 : ℝ) • (VEC A O + VEC O B) := by rw [vec_add_vec] + _ = VEC A O := by + rw [← pt_flip_vec_eq h, ← two_smul ℝ, smul_smul] + simp + end EuclidGeom From bec7b5f22da418ef353ee2e8a3b17f6148cdf507 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Wed, 17 Jan 2024 23:39:12 +0800 Subject: [PATCH 2/9] 1.17 reconstruct angles in circle respect to arc and chord --- .../Foundation/Axiom/Basic/Plane_trash.lean | 8 + .../Foundation/Axiom/Circle/Basic.lean | 143 +++++++++++++----- .../Axiom/Circle/IncribedAngle.lean | 66 ++++++-- .../Foundation/Axiom/Linear/Ray_trash.lean | 7 +- 4 files changed, 169 insertions(+), 55 deletions(-) diff --git a/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean b/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean index c16ec89a..b3e64077 100644 --- a/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean +++ b/EuclideanGeometry/Foundation/Axiom/Basic/Plane_trash.lean @@ -18,4 +18,12 @@ theorem pt_flip_vec_eq {A B O : P} (h : B = pt_flip A O) : VEC A O = VEC O B := rw [h, pt_flip, Vec.mkPtPt, Vec.mkPtPt] simp +theorem pt_flip_vec_eq_half_vec {A B O : P} (h : B = pt_flip A O) : VEC A O = (1 / 2 : ℝ) • (VEC A B) := by + symm + calc + _ = (1 / 2 : ℝ) • (VEC A O + VEC O B) := by rw [vec_add_vec] + _ = VEC A O := by + rw [← pt_flip_vec_eq h, ← two_smul ℝ, smul_smul] + simp + end EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean index f2fcd13f..4000ba5b 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean @@ -277,6 +277,8 @@ end antipode section arc +variable (ω : Circle P) + @[ext] structure Arc (P : Type _) [EuclideanPlane P] (ω : Circle P) where source : P @@ -284,13 +286,11 @@ structure Arc (P : Type _) [EuclideanPlane P] (ω : Circle P) where ison : (source LiesOn ω) ∧ (target LiesOn ω) endpts_ne : PtNe target source -variable (ω : Circle P) - namespace Arc attribute [instance] Arc.endpts_ne -protected def mk_pt_pt_circle (A B : P) [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : Arc P ω where +protected def mk_pt_pt_circle {ω : Circle P} {A B : P} [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : Arc P ω where source := A target := B ison := ⟨ha, hb⟩ @@ -302,27 +302,27 @@ scoped notation "ARC" => Arc.mk_pt_pt_circle namespace Arc -protected def IsOn (p : P) (β : Arc P ω) : Prop := (p LiesOn ω) ∧ (¬ p LiesOnLeft (DLIN β.source β.target)) +protected def IsOn {ω : Circle P} (p : P) (β : Arc P ω) : Prop := (p LiesOn ω) ∧ (¬ p LiesOnLeft (DLIN β.source β.target)) -def Isnot_arc_endpts (p : P) (β : Arc P ω) : Prop := (p ≠ β.source) ∧ (p ≠ β.target) +protected def ne_endpts {ω : Circle P} (p : P) (β : Arc P ω) : Prop := (p ≠ β.source) ∧ (p ≠ β.target) -instance (p : P) (β : Arc P ω) (h : Isnot_arc_endpts ω p β) : PtNe β.source p := ⟨h.1.symm⟩ +instance pt_ne_source {ω : Circle P} {p : P} {β : Arc P ω} (h : β.ne_endpts p) : PtNe β.source p := ⟨h.1.symm⟩ -instance (p : P) (β : Arc P ω) (h : Isnot_arc_endpts ω p β) : PtNe β.target p := ⟨h.2.symm⟩ +instance pt_ne_target {ω : Circle P} {p : P} {β : Arc P ω} (h : β.ne_endpts p) : PtNe β.target p := ⟨h.2.symm⟩ -protected def IsInt (p : P) (β : Arc P ω) : Prop := (Arc.IsOn ω p β) ∧ (Isnot_arc_endpts ω p β) +protected def IsInt {ω : Circle P} (p : P) (β : Arc P ω) : Prop := (Arc.IsOn p β) ∧ (β.ne_endpts p) -protected def carrier (β : Arc P ω) : Set P := { p : P | Arc.IsOn ω p β } +protected def carrier {ω : Circle P} (β : Arc P ω) : Set P := { p : P | Arc.IsOn p β } -protected def interior (β : Arc P ω) : Set P := { p : P | Arc.IsInt ω p β } +protected def interior {ω : Circle P} (β : Arc P ω) : Set P := { p : P | Arc.IsInt p β } instance : Fig (Arc P ω) P where - carrier := Arc.carrier ω + carrier := Arc.carrier instance : Interior (Arc P ω) P where - interior := Arc.interior ω + interior := Arc.interior -theorem center_isnot_arc_endpts (β : Arc P ω) : Isnot_arc_endpts ω ω.center β := by +theorem center_ne_endpts {ω : Circle P} (β : Arc P ω) : β.ne_endpts ω.center := by constructor · intro h have : β.source LiesOn ω := β.ison.1 @@ -339,32 +339,33 @@ theorem center_isnot_arc_endpts (β : Arc P ω) : Isnot_arc_endpts ω ω.center have : ω.radius > 0 := ω.rad_pos linarith -instance (β : Arc P ω) : PtNe β.source ω.center := ⟨ (center_isnot_arc_endpts ω β).1.symm ⟩ -instance (β : Arc P ω) : PtNe β.target ω.center := ⟨ (center_isnot_arc_endpts ω β).2.symm ⟩ +instance source_ne_center {ω : Circle P} (β : Arc P ω) : PtNe β.source ω.center := ⟨ (center_ne_endpts β).1.symm ⟩ -def complement (β : Arc P ω) : Arc P ω where +instance target_ne_center {ω : Circle P} (β : Arc P ω) : PtNe β.target ω.center := ⟨ (center_ne_endpts β).2.symm ⟩ + +protected def complement {ω : Circle P} (β : Arc P ω) : Arc P ω where source := β.target target := β.source ison := and_comm.mp β.ison endpts_ne := β.endpts_ne.symm -lemma pt_liesint_not_lieson_dlin {β : Arc P ω} {p : P} (h : p LiesInt β) : ¬ (p LiesOn (DLIN β.source β.target)) := by +lemma pt_liesint_not_lieson_dlin {ω : Circle P} {β : Arc P ω} {p : P} (h : p LiesInt β) : ¬ (p LiesOn (DLIN β.source β.target)) := by intro hl have hl : p LiesOn (LIN β.source β.target) := hl have hco : colinear β.source β.target p := Line.pt_pt_linear hl have hco' : ¬ (colinear β.source β.target p) := Circle.three_pts_lieson_circle_not_colinear (hne₂ := ⟨h.2.2⟩) (hne₃ := ⟨h.2.1.symm⟩) β.ison.1 β.ison.2 h.1.1 tauto -theorem pt_liesint_liesonright_dlin {β : Arc P ω} {p : P} (h : p LiesInt β) : p LiesOnRight (DLIN β.source β.target) := by - have hnl : ¬ (p LiesOn (DLIN β.source β.target)) := pt_liesint_not_lieson_dlin ω h +theorem pt_liesint_liesonright_dlin {ω : Circle P} {β : Arc P ω} {p : P} (h : p LiesInt β) : p LiesOnRight (DLIN β.source β.target) := by + have hnl : ¬ (p LiesOn (DLIN β.source β.target)) := pt_liesint_not_lieson_dlin h have hnll : ¬ (p LiesOnLeft (DLIN β.source β.target)) := h.1.2 rcases DirLine.lieson_or_liesonleft_or_liesonright p (DLIN β.source β.target) with hh | (hh | hh) · exfalso; tauto · exfalso; tauto exact hh -theorem pt_liesint_complementary_liesonleft_dlin {β : Arc P ω} {p : P} (h : p LiesInt β.complement) : p LiesOnLeft (DLIN β.source β.target) := by - have hh : p LiesOnRight (DLIN β.target β.source) := by apply pt_liesint_liesonright_dlin ω h +theorem pt_liesint_complementary_liesonleft_dlin {ω : Circle P} {β : Arc P ω} {p : P} (h : p LiesInt β.complement) : p LiesOnLeft (DLIN β.source β.target) := by + have hh : p LiesOnRight (DLIN β.target β.source) := by apply pt_liesint_liesonright_dlin h apply liesonleft_iff_liesonright_reverse.mpr rw [← DirLine.pt_pt_rev_eq_rev] exact hh @@ -385,25 +386,52 @@ variable (ω : Circle P) namespace Chord -protected def mk_pt_pt_circle {A B : P} [h : PtNe A B] (ha : A LiesOn ω) (hb : B LiesOn ω) : Chord P ω where +protected def mk_pt_pt_circle {ω : Circle P} {A B : P} [h : PtNe A B] (ha : A LiesOn ω) (hb : B LiesOn ω) : Chord P ω where toSegND := SEG_nd A B h.out.symm ison := ⟨ha, hb⟩ -protected def IsOn (A : P) (s : Chord P ω) : Prop := A LiesOn s.toSegND +protected def IsOn {ω : Circle P} (A : P) (s : Chord P ω) : Prop := A LiesOn s.toSegND -protected def IsInt (A : P) (s : Chord P ω) : Prop := A LiesInt s.toSegND +protected def IsInt {ω : Circle P} (A : P) (s : Chord P ω) : Prop := A LiesInt s.toSegND -protected def carrier (s : Chord P ω) : Set P := { p : P | Chord.IsOn ω p s } +protected def carrier {ω : Circle P} (s : Chord P ω) : Set P := { p : P | Chord.IsOn p s } -protected def interior (s : Chord P ω) : Set P := { p : P | Chord.IsInt ω p s } +protected def interior {ω : Circle P} (s : Chord P ω) : Set P := { p : P | Chord.IsInt p s } instance : Fig (Chord P ω) P where - carrier := Chord.carrier ω + carrier := Chord.carrier instance : Interior (Chord P ω) P where - interior := Chord.interior ω + interior := Chord.interior + +protected def ne_endpts {ω : Circle P} (A : P) (s : Chord P ω) : Prop := (A ≠ s.1.source) ∧ (A ≠ s.1.target) -theorem pt_liesint_liesint_circle {A : P} {s : Chord P ω} (h : A LiesInt s) : A LiesInt ω := by +theorem center_ne_endpts {ω : Circle P} (s : Chord P ω) : s.ne_endpts ω.center := by + constructor + · intro h + have : s.1.source LiesOn ω := s.2.1 + rw [← h] at this + unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this + simp at this + have : ω.radius > 0 := ω.rad_pos + linarith + intro h + have : s.1.target LiesOn ω := s.2.2 + rw [← h] at this + unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this + simp at this + have : ω.radius > 0 := ω.rad_pos + linarith + +instance source_ne_center {ω : Circle P} (s : Chord P ω) : PtNe s.1.source ω.center := ⟨ (center_ne_endpts s).1.symm ⟩ + +instance target_ne_center {ω : Circle P} (s : Chord P ω) : PtNe s.1.target ω.center := ⟨ (center_ne_endpts s).2.symm ⟩ + +protected def reverse {ω : Circle P} (s : Chord P ω) : Chord P ω where + toSegND := s.1.reverse + ison := ⟨s.2.2, s.2.1⟩ + +theorem pt_liesint_liesint_circle {ω : Circle P} {A : P} {s : Chord P ω} (h : A LiesInt s) : A LiesInt ω := by have : s.1 SegInCir ω := by unfold Circle.seg_lies_inside_circle constructor @@ -415,25 +443,68 @@ theorem pt_liesint_liesint_circle {A : P} {s : Chord P ω} (h : A LiesInt s) : A end Chord -def Chord.mk_arc (β : Arc P ω) : Chord P ω where +def Arc.toChord {ω : Circle P} (β : Arc P ω) : Chord P ω where toSegND := SEG_nd β.source β.target β.endpts_ne.out ison := β.ison -def Arc.mk_chord (s : Chord P ω) : Arc P ω where +def Chord.toArc {ω : Circle P} (s : Chord P ω) : Arc P ω where source := s.1.source target := s.1.target ison := s.2 endpts_ne := ⟨s.1.2⟩ -namespace Chord +theorem Circle.complementary_arc_toChord_eq_reverse {ω : Circle P} (β : Arc P ω) : β.complement.toChord = β.toChord.reverse := sorry -protected def length (s : Chord P ω) : ℝ := s.1.length +theorem Circle.reverse_chord_toArc_eq_complement {ω : Circle P} (s : Chord P ω) : s.reverse.toArc = s.toArc.complement := sorry -protected def IsDiameter (s : Chord P ω) : Prop := ω.center LiesOn s +namespace Chord + +protected def length {ω : Circle P} (s : Chord P ω) : ℝ := s.1.length -theorem diameter_length_eq_twice_radius {s : Chord P ω} (h : Chord.IsDiameter ω s) : s.length = 2 * ω.radius := sorry +protected def IsDiameter {ω : Circle P} (s : Chord P ω) : Prop := ω.center LiesOn s -theorem diameter_iff_antipide {s : Chord P ω} : Chord.IsDiameter ω s ↔ Circle.IsAntipode ω s.2.1 s.2.2 := sorry +theorem diameter_iff_antipide {ω : Circle P} {s : Chord P ω} : Chord.IsDiameter s ↔ Circle.IsAntipode ω s.2.1 s.2.2 := by + haveI : PtNe s.1.source s.1.target := ⟨s.1.2.symm⟩ + constructor + · unfold Chord.IsDiameter + intro hl + have : colinear s.1.source s.1.target ω.center := by + apply Line.pt_pt_linear + apply SegND.lies_on_toLine_of_lie_on hl + apply (Circle.antipode_iff_colinear s.1.source s.1.target s.2.1 s.2.2).mpr (flip_colinear_snd_trd this) + unfold Circle.IsAntipode + intro hf + have : VEC s.1.source ω.center = VEC ω.center s.1.target := pt_flip_vec_eq hf + unfold Chord.IsDiameter + show ω.center LiesOn s.1 + apply SegND.lies_on_iff.mpr + use (1 / 2 : ℝ) + constructor + · norm_num + constructor + · norm_num + apply pt_flip_vec_eq_half_vec hf + +theorem diameter_length_eq_twice_radius {ω : Circle P} {s : Chord P ω} (h : Chord.IsDiameter s) : s.length = 2 * ω.radius := by + have : VEC s.1.source ω.center = VEC ω.center s.1.target := by + apply pt_flip_vec_eq + show Circle.IsAntipode ω s.2.1 s.2.2 + apply diameter_iff_antipide.mp h + have : VEC s.1.source s.1.target = (2 : ℝ) • (VEC s.1.source ω.center) := by + calc + _ = VEC s.1.source ω.center + VEC ω.center s.1.target := by rw [vec_add_vec] + _ = (2 : ℝ) • (VEC s.1.source ω.center) := by rw [← this, two_smul] + calc + _ = s.1.length := rfl + _ = ‖VEC s.1.source s.1.target‖ := by + show dist s.1.source s.1.target = ‖VEC s.1.source s.1.target‖ + rw [dist_comm, NormedAddTorsor.dist_eq_norm'] + rfl + _ = 2 * (dist ω.center s.1.source) := by + rw [this, NormedAddTorsor.dist_eq_norm', norm_smul] + norm_num + rfl + _ = 2 * ω.radius := by rw [s.2.1] end Chord diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean index 0a3e273b..403d5695 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean @@ -8,23 +8,63 @@ import EuclideanGeometry.Foundation.Axiom.Triangle.Basic_ex noncomputable section namespace EuclidGeom -variable {P : Type _} [EuclideanPlane P] (ω : Circle P) +variable {P : Type _} [EuclideanPlane P] open AngValue Angle Circle -section angle -- need a change +section cangle -def Circle.angle_mk_pt_arc (p : P) (β : Arc P ω) (h : Arc.Isnot_arc_endpts ω p β) : Angle P := ANG β.source p β.target h.1.symm h.2.symm +attribute [instance] Arc.source_ne_center Arc.target_ne_center Chord.source_ne_center Chord.target_ne_center -namespace Arc +def Arc.cangle {ω : Circle P} (β : Arc P ω) : Angle P := ANG β.source ω.center β.target -protected def cangle (β : Arc P ω) : Angle P := angle_mk_pt_arc ω ω.center β (center_isnot_arc_endpts ω β) +def Arc.IsMajor {ω : Circle P} (β : Arc P ω) : Prop := β.cangle.value.toReal < 0 -protected def IsMajor (β : Arc P ω) : Prop := (β.cangle ω).value.toReal < 0 +def Arc.IsMinor {ω : Circle P} (β : Arc P ω) : Prop := β.cangle.value.toReal > 0 -protected def IsMinor (β : Arc P ω) : Prop := (β.cangle ω).value.toReal > 0 +def Chord.cangle {ω : Circle P} (s : Chord P ω) : Angle P := ANG s.1.source ω.center s.1.target -end Arc +theorem Circle.cangle_of_arc_eq_cangle_of_chord {ω : Circle P} (β : Arc P ω) : β.cangle = β.toChord.cangle := sorry + +theorem Circle.cangle_of_chord_eq_cangle_of_arc {ω : Circle P} (s : Chord P ω) : s.cangle = s.toArc.cangle := sorry + +theorem Chord.cangle_eq_pi_iff_is_diameter {ω : Circle P} (s : Chord P ω) : s.cangle.value = π ↔ Chord.IsDiameter s := sorry + +theorem Circle.cangle_of_complementary_arc_eq_neg {ω : Circle P} (β : Arc P ω) : β.complement.cangle.value = -β.cangle.value := sorry + +theorem Circle.cangle_of_reverse_chord_eq_neg {ω : Circle P} (s : Chord P ω) : s.reverse.cangle.value = -s.cangle.value := sorry + +theorem Chord.cangle_eq_iff_length_eq {ω : Circle P} (s₁ : Chord P ω) (s₂ : Chord P ω) : s₁.cangle.value = s₂.cangle.value ↔ s₁.length = s₂.length := sorry + +end cangle + + +section iangle + +attribute [instance] Arc.pt_ne_source Arc.pt_ne_target -- why can't work + +def Arc.IsIangle {ω : Circle P} (β : Arc P ω) (ang : Angle P) : Prop := (ang.source LiesOn ω) ∧ (β.ne_endpts ang.source) ∧ (β.source LiesOn ang.start_ray) ∧ (β.target LiesOn ang.end_ray) + +def Chord.IsIangle {ω : Circle P} (s : Chord P ω) (ang : Angle P) : Prop := (ang.source LiesOn ω) ∧ (s.ne_endpts ang.source) ∧ (s.1.source LiesOn ang.start_ray) ∧ (s.1.target LiesOn ang.end_ray) + +theorem Arc.angle_mk_pt_is_iangle {ω : Circle P} {A : P} {β : Arc P ω} (h₁ : A LiesOn ω) (h₂ : β.ne_endpts A) : β.IsIangle (ANG β.source A β.target h₂.1.symm h₂.2.symm) := sorry + +theorem Chord.angle_mk_pt_is_iangle {ω : Circle P} {A : P} {s : Chord P ω} (h₁ : A LiesOn ω) (h₂ : s.ne_endpts A) : s.IsIangle (ANG s.1.source A s.1.target h₂.1.symm h₂.2.symm) := sorry + +theorem Circle.iangle_of_arc_is_iangle_of_toChord {ω : Circle P} {A : P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : β.toChord.IsIangle ang := sorry + +theorem Circle.iangle_of_chord_is_iangle_of_toArc {ω : Circle P} {A : P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : s.toArc.IsIangle ang := sorry + +theorem Arc.cangle_eq_two_times_inscribed_angle {ω : Circle P} {A : P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : β.cangle.value = 2 • ang.value := sorry + +theorem Chord.cangle_eq_two_times_inscribed_angle {ω : Circle P} {A : P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : s.cangle.value = 2 • ang.value := sorry + +end iangle + + +section angle -- need a change + +def Circle.angle_mk_pt_arc (p : P) (β : Arc P ω) (h : Arc.ne_endpts ω p β) : Angle P := ANG β.source p β.target h.1.symm h.2.symm end angle @@ -46,7 +86,7 @@ theorem inscribed_angle_of_complementary_arc_is_negative {p : P} {β : Arc P ω} apply TriangleND.liesonright_angle_isneg exact (Arc.pt_liesint_liesonright_dlin ω h) -theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.Isnot_arc_endpts ω p β) : (β.cangle ω).value = 2 • (angle_mk_pt_arc ω p β h₂).value := by +theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.ne_endpts ω p β) : (β.cangle ω).value = 2 • (angle_mk_pt_arc ω p β h₂).value := by haveI : PtNe p β.source := ⟨h₂.1⟩ haveI : PtNe p β.target := ⟨h₂.2⟩ haveI : PtNe p ω.center := Circle.pt_lieson_ne_center h₁ @@ -88,7 +128,7 @@ theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P ω} (h₁ : p Li _ = 2 • (angle_mk_pt_arc ω p β h₂).value := rfl /- -theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2) (h₃ : Arc.Isnot_arc_endpts p β) : (angle_mk_pt_Arc P ω β h₃).dvalue = ∡[π / 2] := by +theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2) (h₃ : Arc.ne_endpts p β) : (angle_mk_pt_Arc P ω β h₃).dvalue = ∡[π / 2] := by have : β.cangle.value = π := h₂ have : 2 • (angle_mk_pt_Arc P ω β h₃).value = π := by rw [← this, ← cangle_eq_two_times_inscribed_angle] @@ -104,11 +144,11 @@ theorem inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt {A B C : P} {ω : Circle let β : Arc P ω := ARC A B h₁ h₂ have hh₁ : C LiesOn ω := h₃ have hh₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2 := h - have hh₃ : Arc.Isnot_arc_endpts C β := ⟨hne₃.out, hne₂.out.symm⟩ + have hh₃ : Arc.ne_endpts C β := ⟨hne₃.out, hne₂.out.symm⟩ apply inscribed_angle_of_diameter_eq_mod_pi hh₁ hh₂ hh₃ -/ -theorem inscribed_angle_on_same_arc_is_invariant_mod_pi {A B : P} {β : Arc P ω} (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (hne₁ : Arc.Isnot_arc_endpts ω A β) (hne₂ : Arc.Isnot_arc_endpts ω B β) : (angle_mk_pt_arc ω A β hne₁).dvalue = (angle_mk_pt_arc ω B β hne₂).dvalue := by +theorem inscribed_angle_on_same_arc_is_invariant_mod_pi {A B : P} {β : Arc P ω} (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (hne₁ : Arc.ne_endpts ω A β) (hne₂ : Arc.ne_endpts ω B β) : (angle_mk_pt_arc ω A β hne₁).dvalue = (angle_mk_pt_arc ω B β hne₂).dvalue := by have eq : 2 • (angle_mk_pt_arc ω A β hne₁).value = 2 • (angle_mk_pt_arc ω B β hne₂).value := by rw [← cangle_eq_two_times_inscribed_angle ω h₁ hne₁, ← cangle_eq_two_times_inscribed_angle ω h₂ hne₂] exact coe_eq_coe_iff_two_nsmul_eq.mpr eq @@ -119,7 +159,7 @@ namespace Arc protected def iangle (β : Arc P ω) : AngDValue := sorry -theorem inscribed_angle_dvalue_eq_iangle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Isnot_arc_endpts ω p β) : (angle_mk_pt_arc ω p β h₂).dvalue = β.iangle := by +theorem inscribed_angle_dvalue_eq_iangle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : ne_endpts ω p β) : (angle_mk_pt_arc ω p β h₂).dvalue = β.iangle := by sorry theorem angle_of_osculation : sorry := sorry diff --git a/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean b/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean index db8e66ef..0998cf36 100644 --- a/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean +++ b/EuclideanGeometry/Foundation/Axiom/Linear/Ray_trash.lean @@ -21,11 +21,6 @@ theorem pt_flip_center_is_midpoint {A B O : P} (h : B = pt_flip A O) : O = (SEG unfold Seg.midpoint apply (eq_vadd_iff_vsub_eq _ _ _).mpr show VEC A O = (1 / 2 : ℝ) • (VEC A B) - symm - calc - _ = (1 / 2 : ℝ) • (VEC A O + VEC O B) := by rw [vec_add_vec] - _ = VEC A O := by - rw [← pt_flip_vec_eq h, ← two_smul ℝ, smul_smul] - simp + exact pt_flip_vec_eq_half_vec h end EuclidGeom From 7401acfd8bca57efbfc6786fb47118043bc462a3 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Thu, 18 Jan 2024 23:12:08 +0800 Subject: [PATCH 3/9] 1.18 left IncribedAngle only sorrys --- .../Foundation/Axiom/Circle/Basic.lean | 8 +- .../Foundation/Axiom/Circle/CirclePower.lean | 16 +- .../Axiom/Circle/IncribedAngle.lean | 200 ++++++++++-------- 3 files changed, 127 insertions(+), 97 deletions(-) diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean index 4000ba5b..2c6aba7c 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean @@ -382,6 +382,10 @@ structure Chord (P : Type _) [EuclideanPlane P] (ω : Circle P) where toSegND : SegND P ison : (toSegND.source LiesOn ω) ∧ (toSegND.target LiesOn ω) +instance Chord.IsND {ω : Circle P} (s : Chord P ω) : PtNe s.1.source s.1.target := ⟨s.1.2.symm⟩ + +attribute [instance] Chord.IsND + variable (ω : Circle P) namespace Chord @@ -453,9 +457,9 @@ def Chord.toArc {ω : Circle P} (s : Chord P ω) : Arc P ω where ison := s.2 endpts_ne := ⟨s.1.2⟩ -theorem Circle.complementary_arc_toChord_eq_reverse {ω : Circle P} (β : Arc P ω) : β.complement.toChord = β.toChord.reverse := sorry +theorem Circle.complementary_arc_toChord_eq_reverse {ω : Circle P} (β : Arc P ω) : β.complement.toChord = β.toChord.reverse := rfl -theorem Circle.reverse_chord_toArc_eq_complement {ω : Circle P} (s : Chord P ω) : s.reverse.toArc = s.toArc.complement := sorry +theorem Circle.reverse_chord_toArc_eq_complement {ω : Circle P} (s : Chord P ω) : s.reverse.toArc = s.toArc.complement := rfl namespace Chord diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean index 197c164f..666ff47d 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean @@ -115,10 +115,10 @@ lemma tangents_perp₁ {ω : Circle P} {p : P} (h : p LiesOut ω) : (DLIN p (pt_ haveI : PtNe ω.center p := (Circle.pt_liesout_ne_center h).symm haveI : PtNe (pt_tangent_circle_pts h).left ω.center := ⟨(tangents_ne_center h).1⟩ haveI : PtNe (pt_tangent_circle_pts h).left p := ⟨(tangents_ne_pt h).1⟩ - have heq₁ : ∠ p (pt_tangent_circle_pts h).left ω.center = ∡[π / 2] := by - apply inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt - · exact (inx_pts_lieson_circles (tangent_circle_intersected h)).1 - exact Arc.mk_pt_pt_diam_isantipode + have heq₁ : ∠ p (pt_tangent_circle_pts h).left ω.center = ∡[π / 2] := by sorry + -- apply inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt + -- · exact (inx_pts_lieson_circles (tangent_circle_intersected h)).1 + -- exact Arc.mk_pt_pt_diam_isantipode show (DLIN p (pt_tangent_circle_pts h).left).toProj = (DLIN ω.center (pt_tangent_circle_pts h).left).toProj.perp calc _ = (RAY p (pt_tangent_circle_pts h).left).toProj := rfl @@ -131,10 +131,10 @@ lemma tangents_perp₂ {ω : Circle P} {p : P} (h : p LiesOut ω) : (DLIN p (pt_ haveI : PtNe ω.center p := (Circle.pt_liesout_ne_center h).symm haveI : PtNe (pt_tangent_circle_pts h).right p := ⟨(tangents_ne_pt h).2⟩ haveI : PtNe ω.center (pt_tangent_circle_pts h).right := ⟨(tangents_ne_center h).2.symm⟩ - have heq₂ : ∠ p (pt_tangent_circle_pts h).right ω.center = ∡[π / 2] := by - apply inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt - · exact (inx_pts_lieson_circles (tangent_circle_intersected h)).2.2.1 - apply Arc.mk_pt_pt_diam_isantipode + have heq₂ : ∠ p (pt_tangent_circle_pts h).right ω.center = ∡[π / 2] := by sorry + -- apply inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt + -- · exact (inx_pts_lieson_circles (tangent_circle_intersected h)).2.2.1 + -- apply Arc.mk_pt_pt_diam_isantipode show (DLIN p (pt_tangent_circle_pts h).right).toProj = (DLIN ω.center (pt_tangent_circle_pts h).right).toProj.perp calc _ = (RAY p (pt_tangent_circle_pts h).right).toProj := rfl diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean index 403d5695..f95ce746 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean @@ -1,20 +1,17 @@ import EuclideanGeometry.Foundation.Axiom.Circle.Basic -import EuclideanGeometry.Foundation.Axiom.Position.Angle_ex2 +import EuclideanGeometry.Foundation.Axiom.Position.Angle_ex import EuclideanGeometry.Foundation.Axiom.Triangle.IsocelesTriangle_trash -import EuclideanGeometry.Foundation.Axiom.Basic.Angle_trash -import EuclideanGeometry.Foundation.Axiom.Triangle.Basic -import EuclideanGeometry.Foundation.Axiom.Triangle.Basic_ex noncomputable section namespace EuclidGeom variable {P : Type _} [EuclideanPlane P] -open AngValue Angle Circle +open AngValue Angle section cangle -attribute [instance] Arc.source_ne_center Arc.target_ne_center Chord.source_ne_center Chord.target_ne_center +attribute [instance] Arc.endpts_ne Chord.IsND Arc.source_ne_center Arc.target_ne_center Chord.source_ne_center Chord.target_ne_center def Arc.cangle {ω : Circle P} (β : Arc P ω) : Angle P := ANG β.source ω.center β.target @@ -24,15 +21,33 @@ def Arc.IsMinor {ω : Circle P} (β : Arc P ω) : Prop := β.cangle.value.toReal def Chord.cangle {ω : Circle P} (s : Chord P ω) : Angle P := ANG s.1.source ω.center s.1.target -theorem Circle.cangle_of_arc_eq_cangle_of_chord {ω : Circle P} (β : Arc P ω) : β.cangle = β.toChord.cangle := sorry +theorem Circle.cangle_of_arc_eq_cangle_of_toChord {ω : Circle P} (β : Arc P ω) : β.cangle = β.toChord.cangle := rfl -theorem Circle.cangle_of_chord_eq_cangle_of_arc {ω : Circle P} (s : Chord P ω) : s.cangle = s.toArc.cangle := sorry +theorem Circle.cangle_of_chord_eq_cangle_of_toArc {ω : Circle P} (s : Chord P ω) : s.cangle = s.toArc.cangle := rfl -theorem Chord.cangle_eq_pi_iff_is_diameter {ω : Circle P} (s : Chord P ω) : s.cangle.value = π ↔ Chord.IsDiameter s := sorry +theorem Chord.cangle_eq_pi_iff_is_diameter {ω : Circle P} (s : Chord P ω) : s.cangle.value = π ↔ Chord.IsDiameter s := by + constructor + · intro heq + have : colinear ω.center s.1.source s.1.target := colinear_of_angle_eq_pi heq + apply diameter_iff_antipide.mpr + apply (Circle.antipode_iff_colinear s.1.source s.1.target _ _).mpr (flip_colinear_fst_snd this) + intro hd + have : ω.center LiesInt s.1 := by + constructor + · exact hd + exact (center_ne_endpts s).1 + exact (center_ne_endpts s).2 + apply value_eq_pi_of_lies_int_seg_nd this -theorem Circle.cangle_of_complementary_arc_eq_neg {ω : Circle P} (β : Arc P ω) : β.complement.cangle.value = -β.cangle.value := sorry +theorem Arc.complement_cangle_reverse {ω : Circle P} (β : Arc P ω) : β.complement.cangle = β.cangle.reverse := rfl -theorem Circle.cangle_of_reverse_chord_eq_neg {ω : Circle P} (s : Chord P ω) : s.reverse.cangle.value = -s.cangle.value := sorry +theorem Chord.reverse_cangle_reverse {ω : Circle P} (s : Chord P ω) : s.reverse.cangle = s.cangle.reverse := rfl + +theorem Circle.cangle_of_complementary_arc_eq_neg {ω : Circle P} (β : Arc P ω) : β.complement.cangle.value = -β.cangle.value := by + rw [Arc.complement_cangle_reverse, rev_value_eq_neg_value] + +theorem Circle.cangle_of_reverse_chord_eq_neg {ω : Circle P} (s : Chord P ω) : s.reverse.cangle.value = -s.cangle.value := by + rw [Chord.reverse_cangle_reverse, rev_value_eq_neg_value] theorem Chord.cangle_eq_iff_length_eq {ω : Circle P} (s₁ : Chord P ω) (s₂ : Chord P ω) : s₁.cangle.value = s₂.cangle.value ↔ s₁.length = s₂.length := sorry @@ -47,69 +62,65 @@ def Arc.IsIangle {ω : Circle P} (β : Arc P ω) (ang : Angle P) : Prop := (ang. def Chord.IsIangle {ω : Circle P} (s : Chord P ω) (ang : Angle P) : Prop := (ang.source LiesOn ω) ∧ (s.ne_endpts ang.source) ∧ (s.1.source LiesOn ang.start_ray) ∧ (s.1.target LiesOn ang.end_ray) -theorem Arc.angle_mk_pt_is_iangle {ω : Circle P} {A : P} {β : Arc P ω} (h₁ : A LiesOn ω) (h₂ : β.ne_endpts A) : β.IsIangle (ANG β.source A β.target h₂.1.symm h₂.2.symm) := sorry - -theorem Chord.angle_mk_pt_is_iangle {ω : Circle P} {A : P} {s : Chord P ω} (h₁ : A LiesOn ω) (h₂ : s.ne_endpts A) : s.IsIangle (ANG s.1.source A s.1.target h₂.1.symm h₂.2.symm) := sorry - -theorem Circle.iangle_of_arc_is_iangle_of_toChord {ω : Circle P} {A : P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : β.toChord.IsIangle ang := sorry - -theorem Circle.iangle_of_chord_is_iangle_of_toArc {ω : Circle P} {A : P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : s.toArc.IsIangle ang := sorry - -theorem Arc.cangle_eq_two_times_inscribed_angle {ω : Circle P} {A : P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : β.cangle.value = 2 • ang.value := sorry - -theorem Chord.cangle_eq_two_times_inscribed_angle {ω : Circle P} {A : P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : s.cangle.value = 2 • ang.value := sorry - -end iangle - - -section angle -- need a change - -def Circle.angle_mk_pt_arc (p : P) (β : Arc P ω) (h : Arc.ne_endpts ω p β) : Angle P := ANG β.source p β.target h.1.symm h.2.symm - -end angle - --- protected def IsAntipode (A B : P) {ω : Circle P} [_h : PtNe B A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) : Prop := (ARC A B h₁ h₂).cangle.value = π - -namespace Circle - -theorem cangle_of_complementary_arc_are_opposite (β : Arc P ω) : (β.cangle ω).value = - (Arc.cangle ω β.complement).value := by - show (∠ β.source ω.center β.target = -∠ β.target ω.center β.source) - apply neg_value_of_rev_ang - -theorem inscribed_angle_is_positive {p : P} {β : Arc P ω} (h : p LiesInt β.complement) : (angle_mk_pt_arc ω p β h.2.symm).value.IsPos := by - unfold angle_mk_pt_arc - apply TriangleND.liesonleft_angle_ispos - exact (Arc.pt_liesint_complementary_liesonleft_dlin ω h) - -theorem inscribed_angle_of_complementary_arc_is_negative {p : P} {β : Arc P ω} (h : p LiesInt β) : (angle_mk_pt_arc ω p β h.2).value.IsNeg := by - unfold angle_mk_pt_arc - apply TriangleND.liesonright_angle_isneg - exact (Arc.pt_liesint_liesonright_dlin ω h) - -theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.ne_endpts ω p β) : (β.cangle ω).value = 2 • (angle_mk_pt_arc ω p β h₂).value := by - haveI : PtNe p β.source := ⟨h₂.1⟩ - haveI : PtNe p β.target := ⟨h₂.2⟩ - haveI : PtNe p ω.center := Circle.pt_lieson_ne_center h₁ +theorem Arc.iangle_eq {ω : Circle P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : ANG β.source ang.source β.target h.2.1.1.symm h.2.1.2.symm = ang := eq_of_lies_int_ray ⟨h.2.2.1, h.2.1.1.symm⟩ ⟨h.2.2.2, h.2.1.2.symm⟩ + +theorem Chord.iangle_eq {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : ANG s.1.source ang.source s.1.target h.2.1.1.symm h.2.1.2.symm = ang := eq_of_lies_int_ray ⟨h.2.2.1, h.2.1.1.symm⟩ ⟨h.2.2.2, h.2.1.2.symm⟩ + +theorem Arc.angle_mk_pt_is_iangle {ω : Circle P} {C : P} {β : Arc P ω} (h₁ : C LiesOn ω) (h₂ : β.ne_endpts C) : β.IsIangle (ANG β.source C β.target h₂.1.symm h₂.2.symm) := by + haveI : PtNe C β.source := ⟨h₂.1⟩ + haveI : PtNe C β.target := ⟨h₂.2⟩ + constructor + · exact h₁ + constructor + · exact h₂ + constructor + · show β.source LiesOn (RAY C β.source) + apply Ray.snd_pt_lies_on_mk_pt_pt + show β.target LiesOn (RAY C β.target) + apply Ray.snd_pt_lies_on_mk_pt_pt + +theorem Chord.angle_mk_pt_is_iangle {ω : Circle P} {C : P} {s : Chord P ω} (h₁ : C LiesOn ω) (h₂ : s.ne_endpts C) : s.IsIangle (ANG s.1.source C s.1.target h₂.1.symm h₂.2.symm) := by + haveI : PtNe C s.1.source := ⟨h₂.1⟩ + haveI : PtNe C s.1.target := ⟨h₂.2⟩ + constructor + · exact h₁ + constructor + · exact h₂ + constructor + · show s.1.source LiesOn (RAY C s.1.source) + apply Ray.snd_pt_lies_on_mk_pt_pt + show s.1.target LiesOn (RAY C s.1.target) + apply Ray.snd_pt_lies_on_mk_pt_pt + +theorem Circle.iangle_of_arc_is_iangle_of_toChord {ω : Circle P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : β.toChord.IsIangle ang := h + +theorem Circle.iangle_of_chord_is_iangle_of_toArc {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : s.toArc.IsIangle ang := h + +theorem Arc.cangle_eq_two_times_inscribed_angle {ω : Circle P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : β.cangle.value = 2 • ang.value := by + let p : P := ang.source + haveI : PtNe p β.source := ⟨h.2.1.1⟩ + haveI : PtNe p β.target := ⟨h.2.1.2⟩ + haveI : PtNe p ω.center := Circle.pt_lieson_ne_center h.1 have hit₁ : (▵ ω.center β.target p).IsIsoceles := by unfold Triangle.IsIsoceles show (SEG p ω.center).length = (SEG ω.center β.target).length - rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h₁, β.ison.2] + rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h.1, β.ison.2] have hit₂ : (▵ ω.center p β.source).IsIsoceles := by unfold Triangle.IsIsoceles show (SEG β.source ω.center).length = (SEG ω.center p).length - rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h₁, β.ison.1] + rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h.1, β.ison.1] have eq₁ : ∠ p β.target ω.center = ∠ ω.center p β.target := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₁ have eq₂ : ∠ β.source p ω.center = ∠ ω.center β.source p := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₂ have π₁ : ∠ β.target ω.center p + ∠ p β.target ω.center + ∠ ω.center p β.target = π := by apply angle_sum_eq_pi_of_tri (▵ ω.center β.target p) have π₂ : ∠ p ω.center β.source + ∠ β.source p ω.center + ∠ ω.center β.source p = π := by apply angle_sum_eq_pi_of_tri (▵ ω.center p β.source) have hsum₁ : ∠ β.target ω.center p + ∠ p ω.center β.source = ∠ β.target ω.center β.source := by have : (ANG β.target ω.center p).end_ray = (ANG p ω.center β.source).start_ray := rfl - have hhs : (Angle.sum_adj this).value = ∠ β.target ω.center β.source := rfl - rw [← hhs, Angle.ang_eq_ang_add_ang_mod_pi_of_adj_ang] + have hhs : (sum_adj this).value = ∠ β.target ω.center β.source := rfl + rw [← hhs, ang_eq_ang_add_ang_mod_pi_of_adj_ang] have hsum₂ : ∠ β.source p ω.center + ∠ ω.center p β.target = ∠ β.source p β.target := by have : (ANG β.source p ω.center).end_ray = (ANG ω.center p β.target).start_ray := rfl - have hhs : (Angle.sum_adj this).value = ∠ β.source p β.target := rfl - rw [← hhs, Angle.ang_eq_ang_add_ang_mod_pi_of_adj_ang] + have hhs : (sum_adj this).value = ∠ β.source p β.target := rfl + rw [← hhs, ang_eq_ang_add_ang_mod_pi_of_adj_ang] have eq₃ : ∠ β.target ω.center β.source + 2 • (∠ β.source p β.target) = 0 := by calc _ = ∠ β.target ω.center p + ∠ p ω.center β.source + 2 • (∠ β.source p ω.center + ∠ ω.center p β.target) := by rw [hsum₁, hsum₂] @@ -125,45 +136,60 @@ theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P ω} (h₁ : p Li calc _ = - ∠ β.target ω.center β.source := by rw [← neg_value_of_rev_ang]; rfl _ = 2 • (∠ β.source p β.target) := by rw [← zero_sub, ← eq₃, add_sub_cancel'] - _ = 2 • (angle_mk_pt_arc ω p β h₂).value := rfl + _ = 2 • ang.value := by rw [← Arc.iangle_eq h] -/- -theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2) (h₃ : Arc.ne_endpts p β) : (angle_mk_pt_Arc P ω β h₃).dvalue = ∡[π / 2] := by - have : β.cangle.value = π := h₂ - have : 2 • (angle_mk_pt_Arc P ω β h₃).value = π := by - rw [← this, ← cangle_eq_two_times_inscribed_angle] - exact h₁ +theorem Chord.cangle_eq_two_times_inscribed_angle {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : s.cangle.value = 2 • ang.value := by + have : s.toArc.IsIangle ang := h + rw [← Arc.cangle_eq_two_times_inscribed_angle this] + rfl + +theorem Circle.iangle_of_diameter_eq_mod_pi {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) (hd : s.IsDiameter) : ang.dvalue = ∡[π / 2] := by + have : s.cangle.value = π := (Chord.cangle_eq_pi_iff_is_diameter s).mpr hd + have : 2 • ang.value = π := by rw [← this, Chord.cangle_eq_two_times_inscribed_angle h] rcases two_nsmul_eq_pi_iff.mp this with h | h - · unfold Angle.dvalue - rw [h] - unfold Angle.dvalue + · rw [← h] + unfold dvalue rw [h, neg_div] simp -theorem inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt {A B C : P} {ω : Circle P} [hne₁ : PtNe A B] [hne₂ : PtNe B C] [hne₃ : PtNe C A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (h₃ : C LiesOn ω) (h : Arc.IsAntipode A B h₁ h₂) : ∠ A C B = ∡[π / 2] := by - let β : Arc P ω := ARC A B h₁ h₂ - have hh₁ : C LiesOn ω := h₃ - have hh₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2 := h - have hh₃ : Arc.ne_endpts C β := ⟨hne₃.out, hne₂.out.symm⟩ - apply inscribed_angle_of_diameter_eq_mod_pi hh₁ hh₂ hh₃ --/ +theorem Arc.iangle_invariant_mod_pi {ω : Circle P} {β : Arc P ω} {ang₁ ang₂ : Angle P} (h₁ : β.IsIangle ang₁) (h₂ : β.IsIangle ang₂) : ang₁.dvalue = ang₂.dvalue := by + have : 2 • ang₁.value = 2 • ang₂.value := by + rw [← cangle_eq_two_times_inscribed_angle h₁, ← cangle_eq_two_times_inscribed_angle h₂] + apply coe_eq_coe_iff_two_nsmul_eq.mpr this + +theorem Chord.iangle_invariant_mod_pi {ω : Circle P} {s : Chord P ω} {ang₁ ang₂ : Angle P} (h₁ : s.IsIangle ang₁) (h₂ : s.IsIangle ang₂) : ang₁.dvalue = ang₂.dvalue := by + have : 2 • ang₁.value = 2 • ang₂.value := by + rw [← cangle_eq_two_times_inscribed_angle h₁, ← cangle_eq_two_times_inscribed_angle h₂] + apply coe_eq_coe_iff_two_nsmul_eq.mpr this + +end iangle + + +section iangdvalue -theorem inscribed_angle_on_same_arc_is_invariant_mod_pi {A B : P} {β : Arc P ω} (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (hne₁ : Arc.ne_endpts ω A β) (hne₂ : Arc.ne_endpts ω B β) : (angle_mk_pt_arc ω A β hne₁).dvalue = (angle_mk_pt_arc ω B β hne₂).dvalue := by - have eq : 2 • (angle_mk_pt_arc ω A β hne₁).value = 2 • (angle_mk_pt_arc ω B β hne₂).value := by rw [← cangle_eq_two_times_inscribed_angle ω h₁ hne₁, ← cangle_eq_two_times_inscribed_angle ω h₂ hne₂] - exact coe_eq_coe_iff_two_nsmul_eq.mpr eq +def Arc.iangdv {ω : Circle P} (β : Arc P ω) : AngDValue := sorry -end Circle +def Chord.iangdv {ω : Circle P} (s : Chord P ω) : AngDValue := sorry +theorem Arc.iangle_dvalue_eq {ω : Circle P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : ang.dvalue = β.iangdv := sorry -namespace Arc +theorem Chord.iangle_dvalue_eq {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : ang.dvalue = s.iangdv := sorry -protected def iangle (β : Arc P ω) : AngDValue := sorry +theorem Circle.same_chord_same_iangle_dvalue {ω : Circle P} {s₁ s₂ : Chord P ω} {ang₁ ang₂ : Angle P} (h₁ : s₁.IsIangle ang₁) (h₂ : s₂.IsIangle ang₂) (h : s₁.length = s₂.length) : ang₁.dvalue = ang₂.dvalue := sorry -theorem inscribed_angle_dvalue_eq_iangle {p : P} {β : Arc P ω} (h₁ : p LiesOn ω) (h₂ : ne_endpts ω p β) : (angle_mk_pt_arc ω p β h₂).dvalue = β.iangle := by - sorry +end iangdvalue -theorem angle_of_osculation : sorry := sorry -end Arc +/- +theorem inscribed_angle_is_positive {p : P} {β : Arc P ω} (h : p LiesInt β.complement) : (angle_mk_pt_arc ω p β h.2.symm).value.IsPos := by + unfold angle_mk_pt_arc + apply TriangleND.liesonleft_angle_ispos + exact (Arc.pt_liesint_complementary_liesonleft_dlin ω h) + +theorem inscribed_angle_of_complementary_arc_is_negative {p : P} {β : Arc P ω} (h : p LiesInt β) : (angle_mk_pt_arc ω p β h.2).value.IsNeg := by + unfold angle_mk_pt_arc + apply TriangleND.liesonright_angle_isneg + exact (Arc.pt_liesint_liesonright_dlin ω h) +-/ end EuclidGeom From 9831dcbe902685c4754bf788d45ab3b6c6b27298 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Thu, 18 Jan 2024 23:15:46 +0800 Subject: [PATCH 4/9] 1.18-2 fix a name problem --- EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean | 2 +- .../Axiom/Circle/{IncribedAngle.lean => InscribedAngle.lean} | 0 EuclideanGeometry/Foundation/Index.lean | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename EuclideanGeometry/Foundation/Axiom/Circle/{IncribedAngle.lean => InscribedAngle.lean} (100%) diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean index 666ff47d..42d14acc 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean @@ -1,7 +1,7 @@ import EuclideanGeometry.Foundation.Axiom.Circle.Basic import EuclideanGeometry.Foundation.Axiom.Circle.CCPosition import EuclideanGeometry.Foundation.Axiom.Circle.LCPosition -import EuclideanGeometry.Foundation.Axiom.Circle.IncribedAngle +import EuclideanGeometry.Foundation.Axiom.Circle.InscribedAngle noncomputable section namespace EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean similarity index 100% rename from EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean rename to EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean diff --git a/EuclideanGeometry/Foundation/Index.lean b/EuclideanGeometry/Foundation/Index.lean index b20b594c..586373ab 100644 --- a/EuclideanGeometry/Foundation/Index.lean +++ b/EuclideanGeometry/Foundation/Index.lean @@ -32,7 +32,7 @@ import EuclideanGeometry.Foundation.Axiom.Triangle.IsocelesTriangle import EuclideanGeometry.Foundation.Axiom.Circle.Basic import EuclideanGeometry.Foundation.Axiom.Circle.CCPosition import EuclideanGeometry.Foundation.Axiom.Circle.LCPosition -import EuclideanGeometry.Foundation.Axiom.Circle.IncribedAngle +import EuclideanGeometry.Foundation.Axiom.Circle.InscribedAngle import EuclideanGeometry.Foundation.Axiom.Circle.CirclePower /- Tactic -/ From 6d4589d8a5f5ed229b06fed95dd4e4b13cd395db Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Fri, 19 Jan 2024 21:49:25 +0800 Subject: [PATCH 5/9] 1.19 --- .../Foundation/Axiom/Circle/CirclePower.lean | 166 ++++++++++-------- .../Foundation/Axiom/Circle/LCPosition.lean | 21 +++ 2 files changed, 110 insertions(+), 77 deletions(-) diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean index 42d14acc..0ba2f69d 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/CirclePower.lean @@ -15,20 +15,20 @@ namespace Circle -- Define the power of a point P relative to a circle ω with center O and radius r to be OP ^ 2 - r ^ 2 def power (ω : Circle P) (p : P) : ℝ := dist ω.center p ^ 2 - ω.radius ^ 2 -theorem liesin_circle_iff_power_npos (p : P) (ω : Circle P) : p LiesIn ω ↔ ω.power p ≤ 0 := by +theorem pt_liesin_circle_iff_power_npos (p : P) (ω : Circle P) : p LiesIn ω ↔ ω.power p ≤ 0 := by apply Iff.trans _ sub_nonpos.symm unfold Circle.IsInside apply Iff.trans _ sq_le_sq.symm rw [abs_of_nonneg dist_nonneg, abs_of_pos ω.rad_pos] -theorem liesint_circle_iff_power_neg (p : P) (ω : Circle P) : p LiesInt ω ↔ ω.power p < 0 := by +theorem pt_liesint_circle_iff_power_neg (p : P) (ω : Circle P) : p LiesInt ω ↔ ω.power p < 0 := by apply Iff.trans _ sub_neg.symm unfold lies_int Interior.interior instInteriorCircle Circle.interior Circle.IsInt simp apply Iff.trans _ sq_lt_sq.symm rw [abs_of_nonneg dist_nonneg, abs_of_pos ω.rad_pos] -theorem lieson_circle_iff_power_zero (p : P) (ω : Circle P) : p LiesOn ω ↔ ω.power p = 0 := by +theorem pt_lieson_circle_iff_power_zero (p : P) (ω : Circle P) : p LiesOn ω ↔ ω.power p = 0 := by apply Iff.trans _ sub_eq_zero.symm unfold lies_on Fig.carrier instFigCircle Circle.carrier Circle.IsOn simp @@ -37,7 +37,7 @@ theorem lieson_circle_iff_power_zero (p : P) (ω : Circle P) : p LiesOn ω ↔ apply le_iff_lt_or_eq.mpr left; exact ω.rad_pos -theorem liesout_circle_iff_power_pos (p : P) (ω : Circle P) : p LiesOut ω ↔ 0 < ω.power p := by +theorem pt_liesout_circle_iff_power_pos (p : P) (ω : Circle P) : p LiesOut ω ↔ 0 < ω.power p := by apply Iff.trans _ sub_pos.symm unfold Circle.IsOutside apply Iff.trans _ sq_lt_sq.symm @@ -73,35 +73,35 @@ lemma tangent_circle_intersected {ω : Circle P} {p : P} (h : p LiesOut ω) : Ci apply sub_lt_iff_lt_add.mpr simp; exact ω.rad_pos -def pt_tangent_circle_pts {ω : Circle P} {p : P} (h : p LiesOut ω) : Tangents P where +def pt_outside_tangent_pts {ω : Circle P} {p : P} (h : p LiesOut ω) : Tangents P where left := (Inxpts (tangent_circle_intersected h)).left right := (Inxpts (tangent_circle_intersected h)).right -theorem tangents_lieson_circle {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_tangent_circle_pts h).left LiesOn ω) ∧ ((pt_tangent_circle_pts h).right LiesOn ω) := by +theorem tangents_lieson_circle {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_outside_tangent_pts h).left LiesOn ω) ∧ ((pt_outside_tangent_pts h).right LiesOn ω) := by rcases inx_pts_lieson_circles (tangent_circle_intersected h) with ⟨_, ⟨h₂, ⟨_, h₄⟩⟩⟩ exact ⟨h₂, h₄⟩ -lemma tangents_ne_pt {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_tangent_circle_pts h).left ≠ p) ∧ ((pt_tangent_circle_pts h).right ≠ p) := by +lemma tangents_ne_pt {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_outside_tangent_pts h).left ≠ p) ∧ ((pt_outside_tangent_pts h).right ≠ p) := by constructor · intro hp have h₁ : ω.radius < dist ω.center p := h - have : (pt_tangent_circle_pts h).left LiesOn ω := (tangents_lieson_circle h).1 + have : (pt_outside_tangent_pts h).left LiesOn ω := (tangents_lieson_circle h).1 rw [hp] at this have h₂ : dist ω.center p = ω.radius := this linarith intro hp have h₁ : ω.radius < dist ω.center p := h - have : (pt_tangent_circle_pts h).right LiesOn ω := (tangents_lieson_circle h).2 + have : (pt_outside_tangent_pts h).right LiesOn ω := (tangents_lieson_circle h).2 rw [hp] at this have h₂ : dist ω.center p = ω.radius := this linarith -lemma tangents_ne_center {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_tangent_circle_pts h).left ≠ ω.center) ∧ ((pt_tangent_circle_pts h).right ≠ ω.center) := by - have hpos₁ : dist ω.center (pt_tangent_circle_pts h).left > 0 := by +lemma tangents_ne_center {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_outside_tangent_pts h).left ≠ ω.center) ∧ ((pt_outside_tangent_pts h).right ≠ ω.center) := by + have hpos₁ : dist ω.center (pt_outside_tangent_pts h).left > 0 := by calc _ = ω.radius := (tangents_lieson_circle h).1 _ > 0 := ω.rad_pos - have hpos₂ : dist ω.center (pt_tangent_circle_pts h).right > 0 := by + have hpos₂ : dist ω.center (pt_outside_tangent_pts h).right > 0 := by calc _ = ω.radius := (tangents_lieson_circle h).2 _ > 0 := ω.rad_pos @@ -111,44 +111,58 @@ lemma tangents_ne_center {ω : Circle P} {p : P} (h : p LiesOut ω) : ((pt_tange apply dist_pos.mp rw [dist_comm]; exact hpos₂ -lemma tangents_perp₁ {ω : Circle P} {p : P} (h : p LiesOut ω) : (DLIN p (pt_tangent_circle_pts h).left (tangents_ne_pt h).1) ⟂ (DLIN ω.center (pt_tangent_circle_pts h).left (tangents_ne_center h).1) := by - haveI : PtNe ω.center p := (Circle.pt_liesout_ne_center h).symm - haveI : PtNe (pt_tangent_circle_pts h).left ω.center := ⟨(tangents_ne_center h).1⟩ - haveI : PtNe (pt_tangent_circle_pts h).left p := ⟨(tangents_ne_pt h).1⟩ - have heq₁ : ∠ p (pt_tangent_circle_pts h).left ω.center = ∡[π / 2] := by sorry - -- apply inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt - -- · exact (inx_pts_lieson_circles (tangent_circle_intersected h)).1 - -- exact Arc.mk_pt_pt_diam_isantipode - show (DLIN p (pt_tangent_circle_pts h).left).toProj = (DLIN ω.center (pt_tangent_circle_pts h).left).toProj.perp +lemma tangents_perp₁ {ω : Circle P} {p : P} (h : p LiesOut ω) : (DLIN p (pt_outside_tangent_pts h).left (tangents_ne_pt h).1) ⟂ (DLIN ω.center (pt_outside_tangent_pts h).left (tangents_ne_center h).1) := by + haveI hi₁ : PtNe ω.center p := (Circle.pt_liesout_ne_center h).symm + haveI hi₂ : PtNe (pt_outside_tangent_pts h).left ω.center := ⟨(tangents_ne_center h).1⟩ + haveI hi₃ : PtNe (pt_outside_tangent_pts h).left p := ⟨(tangents_ne_pt h).1⟩ + have heq₁ : ∠ p (pt_outside_tangent_pts h).left ω.center = ∡[π / 2] := by + let ω' : Circle P := Circle.mk_pt_pt_diam p ω.center + let s : Chord P ω' := Chord.mk_pt_pt_circle (A := p) (B := ω.center) mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson + apply iangle_of_diameter_eq_mod_pi (ω := ω') (s := s) + apply Chord.angle_mk_pt_is_iangle (inx_pts_lieson_circles (tangent_circle_intersected h)).1 + constructor + · show (pt_outside_tangent_pts h).left ≠ p + exact hi₃.out + show (pt_outside_tangent_pts h).left ≠ ω.center + exact hi₂.out + apply Chord.diameter_iff_antipide.mpr mk_pt_pt_diam_isantipode + show (DLIN p (pt_outside_tangent_pts h).left).toProj = (DLIN ω.center (pt_outside_tangent_pts h).left).toProj.perp calc - _ = (RAY p (pt_tangent_circle_pts h).left).toProj := rfl - _ = (RAY (pt_tangent_circle_pts h).left p).toProj := by apply Ray.toProj_eq_toProj_of_mk_pt_pt - _ = (RAY (pt_tangent_circle_pts h).left ω.center).toProj.perp := dir_perp_iff_dvalue_eq_pi_div_two.mpr heq₁ - _ = (RAY ω.center (pt_tangent_circle_pts h).left).toProj.perp := by rw [Ray.toProj_eq_toProj_of_mk_pt_pt] - _ = (DLIN ω.center (pt_tangent_circle_pts h).left).toProj.perp := rfl - -lemma tangents_perp₂ {ω : Circle P} {p : P} (h : p LiesOut ω) : (DLIN p (pt_tangent_circle_pts h).right (tangents_ne_pt h).2) ⟂ (DLIN ω.center (pt_tangent_circle_pts h).right (tangents_ne_center h).2) := by - haveI : PtNe ω.center p := (Circle.pt_liesout_ne_center h).symm - haveI : PtNe (pt_tangent_circle_pts h).right p := ⟨(tangents_ne_pt h).2⟩ - haveI : PtNe ω.center (pt_tangent_circle_pts h).right := ⟨(tangents_ne_center h).2.symm⟩ - have heq₂ : ∠ p (pt_tangent_circle_pts h).right ω.center = ∡[π / 2] := by sorry - -- apply inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt - -- · exact (inx_pts_lieson_circles (tangent_circle_intersected h)).2.2.1 - -- apply Arc.mk_pt_pt_diam_isantipode - show (DLIN p (pt_tangent_circle_pts h).right).toProj = (DLIN ω.center (pt_tangent_circle_pts h).right).toProj.perp + _ = (RAY p (pt_outside_tangent_pts h).left).toProj := rfl + _ = (RAY (pt_outside_tangent_pts h).left p).toProj := by apply Ray.toProj_eq_toProj_of_mk_pt_pt + _ = (RAY (pt_outside_tangent_pts h).left ω.center).toProj.perp := dir_perp_iff_dvalue_eq_pi_div_two.mpr heq₁ + _ = (RAY ω.center (pt_outside_tangent_pts h).left).toProj.perp := by rw [Ray.toProj_eq_toProj_of_mk_pt_pt] + _ = (DLIN ω.center (pt_outside_tangent_pts h).left).toProj.perp := rfl + +lemma tangents_perp₂ {ω : Circle P} {p : P} (h : p LiesOut ω) : (DLIN p (pt_outside_tangent_pts h).right (tangents_ne_pt h).2) ⟂ (DLIN ω.center (pt_outside_tangent_pts h).right (tangents_ne_center h).2) := by + haveI hi₁ : PtNe ω.center p := (Circle.pt_liesout_ne_center h).symm + haveI hi₂ : PtNe (pt_outside_tangent_pts h).right p := ⟨(tangents_ne_pt h).2⟩ + haveI hi₃ : PtNe ω.center (pt_outside_tangent_pts h).right := ⟨(tangents_ne_center h).2.symm⟩ + have heq₂ : ∠ p (pt_outside_tangent_pts h).right ω.center = ∡[π / 2] := by + let ω' : Circle P := Circle.mk_pt_pt_diam p ω.center + let s : Chord P ω' := Chord.mk_pt_pt_circle (A := p) (B := ω.center) mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson + apply iangle_of_diameter_eq_mod_pi (ω := ω') (s := s) + apply Chord.angle_mk_pt_is_iangle (inx_pts_lieson_circles (tangent_circle_intersected h)).2.2.1 + constructor + · show (pt_outside_tangent_pts h).right ≠ p + exact hi₂.out + show (pt_outside_tangent_pts h).right ≠ ω.center + exact hi₃.out.symm + apply Chord.diameter_iff_antipide.mpr mk_pt_pt_diam_isantipode + show (DLIN p (pt_outside_tangent_pts h).right).toProj = (DLIN ω.center (pt_outside_tangent_pts h).right).toProj.perp calc - _ = (RAY p (pt_tangent_circle_pts h).right).toProj := rfl - _ = (RAY (pt_tangent_circle_pts h).right p).toProj := by apply Ray.toProj_eq_toProj_of_mk_pt_pt - _ = (RAY (pt_tangent_circle_pts h).right ω.center).toProj.perp := dir_perp_iff_dvalue_eq_pi_div_two.mpr heq₂ - _ = (RAY ω.center (pt_tangent_circle_pts h).right).toProj.perp := by rw [Ray.toProj_eq_toProj_of_mk_pt_pt] - _ = (DLIN ω.center (pt_tangent_circle_pts h).right).toProj.perp := rfl + _ = (RAY p (pt_outside_tangent_pts h).right).toProj := rfl + _ = (RAY (pt_outside_tangent_pts h).right p).toProj := by apply Ray.toProj_eq_toProj_of_mk_pt_pt + _ = (RAY (pt_outside_tangent_pts h).right ω.center).toProj.perp := dir_perp_iff_dvalue_eq_pi_div_two.mpr heq₂ + _ = (RAY ω.center (pt_outside_tangent_pts h).right).toProj.perp := by rw [Ray.toProj_eq_toProj_of_mk_pt_pt] + _ = (DLIN ω.center (pt_outside_tangent_pts h).right).toProj.perp := rfl -theorem line_tangent_circle {ω : Circle P} {p : P} (h : p LiesOut ω) : ((DLIN p (pt_tangent_circle_pts h).left (tangents_ne_pt h).1) Tangent ω) ∧ ((DLIN p (pt_tangent_circle_pts h).right (tangents_ne_pt h).2) Tangent ω) := by +theorem line_tangent_circle {ω : Circle P} {p : P} (h : p LiesOut ω) : ((DLIN p (pt_outside_tangent_pts h).left (tangents_ne_pt h).1) Tangent ω) ∧ ((DLIN p (pt_outside_tangent_pts h).right (tangents_ne_pt h).2) Tangent ω) := by constructor · apply pt_pt_perp_tangent h (tangents_lieson_circle h).1 (tangents_perp₁ h) apply pt_pt_perp_tangent h (tangents_lieson_circle h).2 (tangents_perp₂ h) -theorem tangent_pts_eq_tangents {ω : Circle P} {p : P} (h : p LiesOut ω) : (Tangentpt (line_tangent_circle h).1 = (pt_tangent_circle_pts h).left) ∧ (Tangentpt (line_tangent_circle h).2 = (pt_tangent_circle_pts h).right) := by +theorem tangent_pts_eq_tangents {ω : Circle P} {p : P} (h : p LiesOut ω) : (Tangentpt (line_tangent_circle h).1 = (pt_outside_tangent_pts h).left) ∧ (Tangentpt (line_tangent_circle h).2 = (pt_outside_tangent_pts h).right) := by constructor · symm apply pt_pt_perp_eq_tangent_pt h (tangents_lieson_circle h).1 (tangents_perp₁ h) @@ -167,34 +181,43 @@ lemma tangent_length_sq_eq_power {p : P} {l : DirLine P} {ω : Circle P} (h₁ : exact (inx_pts_lieson_circle (intersect_iff_tangent_or_secant.mpr (Or.inl h₁))).1 _ = power ω p := rfl -theorem length_of_tangent {ω : Circle P} {p : P} (h : p LiesOut ω) : dist p (pt_tangent_circle_pts h).left = dist p (pt_tangent_circle_pts h).right := by +lemma tangent_length_sq_eq_power' {ω : Circle P} {A B : P} (ha : A LiesOut ω) (hb : B LiesOn ω) (h : (DLIN A B (pt_liesout_ne_pt_lieson ha hb).out.symm) Tangent ω) : (dist A B) ^ 2 = power ω A := by + haveI : PtNe A B := pt_liesout_ne_pt_lieson ha hb + rw [pt_pt_tangent_eq_tangent_pt ha hb h, tangent_length_sq_eq_power h DirLine.fst_pt_lies_on_mk_pt_pt] + +theorem length_of_tangent_eq {ω : Circle P} {p : P} (h : p LiesOut ω) : dist p (pt_outside_tangent_pts h).left = dist p (pt_outside_tangent_pts h).right := by apply (sq_eq_sq (by exact dist_nonneg) (by exact dist_nonneg)).mp - haveI : PtNe (pt_tangent_circle_pts h).left p := ⟨(tangents_ne_pt h).1⟩ - haveI : PtNe (pt_tangent_circle_pts h).right p := ⟨(tangents_ne_pt h).2⟩ - have hl₁ : p LiesOn (DLIN p (pt_tangent_circle_pts h).left) := DirLine.fst_pt_lies_on_mk_pt_pt - have hl₂ : p LiesOn (DLIN p (pt_tangent_circle_pts h).right) := DirLine.fst_pt_lies_on_mk_pt_pt + haveI : PtNe (pt_outside_tangent_pts h).left p := ⟨(tangents_ne_pt h).1⟩ + haveI : PtNe (pt_outside_tangent_pts h).right p := ⟨(tangents_ne_pt h).2⟩ + have hl₁ : p LiesOn (DLIN p (pt_outside_tangent_pts h).left) := DirLine.fst_pt_lies_on_mk_pt_pt + have hl₂ : p LiesOn (DLIN p (pt_outside_tangent_pts h).right) := DirLine.fst_pt_lies_on_mk_pt_pt rw [← (tangent_pts_eq_tangents h).1, tangent_length_sq_eq_power _ hl₁, ← (tangent_pts_eq_tangents h).2, tangent_length_sq_eq_power _ hl₂] +theorem length_of_tangent_eq' {ω : Circle P} {A B C : P} (ha : A LiesOut ω) (hb : B LiesOn ω) (hc : C LiesOn ω) (ht₁ : (DLIN A B (pt_liesout_ne_pt_lieson ha hb).out.symm) Tangent ω) (ht₂ : (DLIN A C (pt_liesout_ne_pt_lieson ha hc).out.symm) Tangent ω) : dist A B = dist A C := by + apply (sq_eq_sq (by exact dist_nonneg) (by exact dist_nonneg)).mp + rw [tangent_length_sq_eq_power' ha hb ht₁, tangent_length_sq_eq_power' ha hc ht₂] + end Circle end tangent -section position + +section powerthm namespace Circle -lemma liesout_ne_inxpts {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (_h₂ : p LiesOn l) (h₃ : p LiesOut ω) : (p ≠ (Inxpts h₁).front) ∧ (p ≠ (Inxpts h₁).back) := by +lemma pt_liesout_ne_inxpts {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (_h₂ : p LiesOn l) (h₃ : p LiesOut ω) : (p ≠ (Inxpts h₁).front) ∧ (p ≠ (Inxpts h₁).back) := by constructor · apply (pt_liesout_ne_pt_lieson h₃ (inx_pts_lieson_circle h₁).1).out apply (pt_liesout_ne_pt_lieson h₃ (inx_pts_lieson_circle h₁).2).out -lemma liesint_ne_inxpts {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (_h₂ : p LiesOn l) (h₃ : p LiesInt ω) : (p ≠ (Inxpts h₁).front) ∧ (p ≠ (Inxpts h₁).back) := by +lemma pt_liesint_ne_inxpts {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (_h₂ : p LiesOn l) (h₃ : p LiesInt ω) : (p ≠ (Inxpts h₁).front) ∧ (p ≠ (Inxpts h₁).back) := by constructor · apply (pt_liesint_ne_pt_lieson h₃ (inx_pts_lieson_circle h₁).1).out apply (pt_liesint_ne_pt_lieson h₃ (inx_pts_lieson_circle h₁).2).out -theorem liesout_back_lieson_ray_front {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) (h₃ : p LiesOut ω) : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front (liesout_ne_inxpts h₁ h₂ h₃).1.symm) := by - haveI : PtNe p (Inxpts h₁).front := ⟨(liesout_ne_inxpts h₁ h₂ h₃).1⟩ +theorem pt_liesout_back_lieson_ray_pt_front {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) (h₃ : p LiesOut ω) : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front (pt_liesout_ne_inxpts h₁ h₂ h₃).1.symm) := by + haveI : PtNe p (Inxpts h₁).front := ⟨(pt_liesout_ne_inxpts h₁ h₂ h₃).1⟩ by_cases heq : (Inxpts h₁).front = (Inxpts h₁).back · simp_rw [← heq] apply Ray.snd_pt_lies_on_mk_pt_pt @@ -225,8 +248,8 @@ theorem liesout_back_lieson_ray_front {ω : Circle P} {p : P} {l : DirLine P} (h apply (not_lies_on_segnd_iff_lieson_ray h₂').mp apply (midpoint_dist_gt_iff_liesout h₂').mp hgt -theorem liesint_back_lieson_ray_front_reverse {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) (h₃ : p LiesInt ω) : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front (liesint_ne_inxpts h₁ h₂ h₃).1.symm).reverse := by - haveI : PtNe p (Inxpts h₁).front := ⟨(liesint_ne_inxpts h₁ h₂ h₃).1⟩ +theorem pt_liesint_back_lieson_ray_pt_front_reverse {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) (h₃ : p LiesInt ω) : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front (pt_liesint_ne_inxpts h₁ h₂ h₃).1.symm).reverse := by + haveI : PtNe p (Inxpts h₁).front := ⟨(pt_liesint_ne_inxpts h₁ h₂ h₃).1⟩ have hs : dist_pt_line ω.center l.toLine < ω.radius := by calc _ ≤ dist ω.center p := dist_pt_line_shortest _ _ h₂ @@ -260,15 +283,7 @@ theorem liesint_back_lieson_ray_front_reverse {ω : Circle P} {p : P} {l : DirLi apply (liesint_segnd_iff_lieson_ray_reverse h₂').mp apply (midpoint_dist_lt_iff_liesint h₂').mp hgt -end Circle - -end position - -section power - -namespace Circle - -theorem circle_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) : ⟪VEC p (Inxpts h₁).front, VEC p (Inxpts h₁).back⟫_ℝ = power ω p := by +theorem power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) : ⟪VEC p (Inxpts h₁).front, VEC p (Inxpts h₁).back⟫_ℝ = power ω p := by rcases intersect_iff_tangent_or_secant.mp h₁ with h | h · have heq : (Inxpts h₁).back = (Inxpts h₁).front := (inx_pts_same_iff_tangent h₁).mpr h rw [heq, Vec.real_inner_apply _ _, ← Vec.norm_sq] @@ -315,8 +330,8 @@ theorem circle_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine _ = power ω p := rfl theorem chord_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) (h₃ : p LiesInt ω) : (dist p (Inxpts h₁).front) * (dist p (Inxpts h₁).back) = - power ω p := by - haveI hne : PtNe p (Inxpts h₁).front := ⟨(liesint_ne_inxpts h₁ h₂ h₃).1⟩ - have hl : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front).reverse := liesint_back_lieson_ray_front_reverse h₁ h₂ h₃ + haveI hne : PtNe p (Inxpts h₁).front := ⟨(pt_liesint_ne_inxpts h₁ h₂ h₃).1⟩ + have hl : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front).reverse := pt_liesint_back_lieson_ray_pt_front_reverse h₁ h₂ h₃ rcases pt_lies_on_ray_rev_iff_vec_opposite_dir.mp hl with ⟨t, tnonpos, ht⟩ have heq : dist p (Inxpts h₁).back = -t := by calc @@ -330,7 +345,7 @@ theorem chord_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine. _ = (t * (dist p (Inxpts h₁).front)⁻¹) • (VEC p (Inxpts h₁).front) := by rw [smul_smul] symm calc - _ = -⟪VEC p (Inxpts h₁).front, VEC p (Inxpts h₁).back⟫_ℝ := by rw [circle_power_thm h₁ h₂] + _ = -⟪VEC p (Inxpts h₁).front, VEC p (Inxpts h₁).back⟫_ℝ := by rw [power_thm h₁ h₂] _ = -⟪VEC p (Inxpts h₁).front, (t * (dist p (Inxpts h₁).front)⁻¹) • (VEC p (Inxpts h₁).front)⟫_ℝ := by rw [ht'] _ = -(t * (dist p (Inxpts h₁).front)⁻¹) * ‖VEC p (Inxpts h₁).front‖ ^ 2 := by rw [real_inner_smul_right, Vec.real_inner_apply _ _, ← Vec.norm_sq] @@ -342,8 +357,8 @@ theorem chord_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine. apply dist_ne_zero.mpr hne.out.symm theorem secant_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine.IsIntersected l ω) (h₂ : p LiesOn l) (h₃ : p LiesOut ω) : (dist p (Inxpts h₁).front) * (dist p (Inxpts h₁).back) = power ω p := by - haveI hne : PtNe p (Inxpts h₁).front := ⟨(liesout_ne_inxpts h₁ h₂ h₃).1⟩ - have hl : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front) := liesout_back_lieson_ray_front h₁ h₂ h₃ + haveI hne : PtNe p (Inxpts h₁).front := ⟨(pt_liesout_ne_inxpts h₁ h₂ h₃).1⟩ + have hl : (Inxpts h₁).back LiesOn (RAY p (Inxpts h₁).front) := pt_liesout_back_lieson_ray_pt_front h₁ h₂ h₃ rcases Ray.lies_on_iff.mp hl with ⟨t, tnonneg, ht⟩ have heq : dist p (Inxpts h₁).back = t := by calc @@ -357,7 +372,7 @@ theorem secant_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine _ = (t * (dist p (Inxpts h₁).front)⁻¹) • (VEC p (Inxpts h₁).front) := by rw [smul_smul] symm calc - _ = ⟪VEC p (Inxpts h₁).front, VEC p (Inxpts h₁).back⟫_ℝ := by rw [circle_power_thm h₁ h₂] + _ = ⟪VEC p (Inxpts h₁).front, VEC p (Inxpts h₁).back⟫_ℝ := by rw [power_thm h₁ h₂] _ = ⟪VEC p (Inxpts h₁).front, (t * (dist p (Inxpts h₁).front)⁻¹) • (VEC p (Inxpts h₁).front)⟫_ℝ := by rw [ht'] _ = (t * (dist p (Inxpts h₁).front)⁻¹) * ‖VEC p (Inxpts h₁).front‖ ^ 2 := by rw [real_inner_smul_right, Vec.real_inner_apply _ _, ← Vec.norm_sq] _ = (dist p (Inxpts h₁).front) * (dist p (Inxpts h₁).back) := by @@ -365,16 +380,13 @@ theorem secant_power_thm {ω : Circle P} {p : P} {l : DirLine P} (h₁ : DirLine rw [← NormedAddTorsor.dist_eq_norm', dist_comm, heq, mul_assoc, mul_comm, pow_two, inv_mul_cancel_left₀] apply dist_ne_zero.mpr hne.out.symm -end Circle +theorem intersecting_chords_thm {ω : Circle P} {S : P} {s₁ s₂ : Chord P ω} (h : S LiesInt ω) (h₁ : S LiesOn s₁) (h₂ : S LiesOn s₂) : (dist S s₁.1.source) * (dist S s₁.1.target) = (dist S s₂.1.source) * (dist S s₂.1.target) := sorry -end power - -section radical_axis - -namespace Circle +theorem intersecting_secants_thm {ω : Circle P} {S : P} {l₁ l₂ : DirLine P} (h : S LiesOut ω) (h₁ : S LiesOn l₁) (h₂ : S LiesOn l₂) (hx₁ : DirLine.IsIntersected l₁ ω) (hx₂ : DirLine.IsIntersected l₂ ω) : (dist S (Inxpts hx₁).front) * (dist S (Inxpts hx₁).back) = (dist S (Inxpts hx₂).front) * (dist S (Inxpts hx₂).back) := by + rw [secant_power_thm hx₁ h₁ h, secant_power_thm hx₂ h₂ h] end Circle -end radical_axis +end powerthm end EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean b/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean index 96e7c93b..db4fdc1e 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean @@ -53,6 +53,17 @@ theorem intersect_iff_tangent_or_secant {l : DirLine P} {ω : Circle P} : (DirLi have : dist_pt_line ω.center l.toLine < ω.radius := h linarith +theorem pt_liesint_secant {l : DirLine P} {ω : Circle P} {A : P} (h₁ : A LiesInt ω) (h₂ : A LiesOn l) : l Secant ω := by + have : dist ω.center A < ω.radius := h₁ + have : dist_pt_line ω.center l ≤ dist ω.center A := dist_pt_line_shortest ω.center A h₂ + show dist_pt_line ω.center l < ω.radius + linarith + +theorem pt_liesint_intersect {l : DirLine P} {ω : Circle P} {A : P} (h₁ : A LiesInt ω) (h₂ : A LiesOn l) : DirLine.IsIntersected l ω := by + apply intersect_iff_tangent_or_secant.mpr + right + apply pt_liesint_secant h₁ h₂ + end DirLC @[ext] @@ -181,6 +192,8 @@ lemma inx_pts_ne_center {l : DirLine P} {ω : Circle P} (h : DirLine.IsIntersect · apply (pt_lieson_ne_center (inx_pts_lieson_circle h).1).out apply (pt_lieson_ne_center (inx_pts_lieson_circle h).2).out +theorem inx_pts_antipode_iff_center_lieson {l : DirLine P} {ω : Circle P} (h : DirLine.IsIntersected l ω) : IsAntipode ω (inx_pts_lieson_circle h).1 (inx_pts_lieson_circle h).2 ↔ ω.center LiesOn l := sorry + theorem inxwith_iff_intersect {l : DirLine P} {ω : Circle P} : l InxWith ω ↔ DirLine.IsIntersected l ω := by unfold intersect constructor @@ -287,6 +300,14 @@ theorem pt_pt_tangent_eq_tangent_pt {A B : P} {ω : Circle P} (h₁ : A LiesOut rw [(inx_pts_same_iff_tangent _).mpr ht] at heq exact heq +theorem chord_toDirLine_intersected {ω : Circle P} (s : Chord P ω) : DirLine.IsIntersected s.1.toDirLine ω := by + show dist_pt_line ω.center s.1.toDirLine ≤ ω.radius + rw [← s.2.1] + apply dist_pt_line_shortest ω.center s.1.source DirLine.fst_pt_lies_on_mk_pt_pt + +theorem chord_toDirLine_inx_front_pt_eq_target {ω : Circle P} (s : Chord P ω) : (Inxpts (chord_toDirLine_intersected s)).front = s.1.target := sorry + +theorem chord_toDirLine_inx_back_pt_eq_source {ω : Circle P} (s : Chord P ω) : (Inxpts (chord_toDirLine_intersected s)).back = s.1.source := sorry /- Equivalent condition for tangency -/ theorem pt_pt_tangent_perp {A B : P} {ω : Circle P} (h₁ : A LiesOut ω) (h₂ : B LiesOn ω) (ht : (DLIN A B (pt_liesout_ne_pt_lieson h₁ h₂).out.symm) Tangent ω) : (DLIN ω.center B (pt_lieson_ne_center h₂).out) ⟂ (DLIN A B (pt_liesout_ne_pt_lieson h₁ h₂).out.symm) := by From cf03c792a598375e835734efea27fa23ffff7c82 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Fri, 19 Jan 2024 22:19:16 +0800 Subject: [PATCH 6/9] 1.19-2 fix --- .../Foundation/Axiom/Circle/Basic.lean | 22 +- .../Axiom/Circle/IncribedAngle.lean | 262 ------------------ .../Axiom/Circle/InscribedAngle.lean | 4 +- .../Foundation/Axiom/Linear/Line_trash.lean | 6 +- 4 files changed, 16 insertions(+), 278 deletions(-) delete mode 100644 EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean index b6b657da..4565cf19 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean @@ -247,28 +247,28 @@ theorem antipode_symm {A B : P} {ω : Circle P} (ha : A LiesOn ω) (hb : B LiesO theorem antipode_center_is_midpoint {A B : P} {ω : Circle P} (ha : A LiesOn ω) (hb : B LiesOn ω) (h : IsAntipode ω ha hb) : ω.center = (SEG A B).midpoint := pt_flip_center_is_midpoint h -theorem antipode_iff_colinear (A B : P) {ω : Circle P} [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : IsAntipode ω ha hb ↔ colinear A ω.center B := by +theorem antipode_iff_collinear (A B : P) {ω : Circle P} [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : IsAntipode ω ha hb ↔ Collinear A ω.center B := by constructor · intro hh - apply pt_flip_colinear hh + apply pt_flip_collinear hh intro hcl haveI : PtNe A ω.center := pt_lieson_ne_center ha - have hl : B LiesOn LIN ω.center A := Line.pt_pt_maximal (flip_colinear_fst_snd hcl) + have hl : B LiesOn LIN ω.center A := Line.pt_pt_maximal (Collinear.perm₂₁₃ hcl) have heq : VEC A ω.center = VEC ω.center B := by - apply distinct_pts_same_dist_vec_eq hl + apply vec_eq_dist_eq_of_lies_on_line_pt_pt_of_ptNe hl rw [ha, hb] unfold IsAntipode pt_flip rw [heq, eq_vadd_iff_vsub_eq] rfl theorem mk_pt_pt_diam_isantipode {A B : P} [h : PtNe A B] : IsAntipode (mk_pt_pt_diam A B) mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson := by - have hc : colinear A (SEG A B).midpoint B := by - apply flip_colinear_snd_trd + have hc : Collinear A (SEG A B).midpoint B := by + apply Collinear.perm₁₃₂ apply Line.pt_pt_linear show (SEG A B).midpoint LiesOn (SEG_nd A B).toLine apply SegND.lies_on_toLine_of_lie_on apply Seg.midpt_lies_on - exact (antipode_iff_colinear _ _ mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson).mpr hc + exact (antipode_iff_collinear _ _ mk_pt_pt_diam_fst_lieson mk_pt_pt_diam_snd_lieson).mpr hc end Circle @@ -352,8 +352,8 @@ protected def complement {ω : Circle P} (β : Arc P ω) : Arc P ω where lemma pt_liesint_not_lieson_dlin {ω : Circle P} {β : Arc P ω} {p : P} (h : p LiesInt β) : ¬ (p LiesOn (DLIN β.source β.target)) := by intro hl have hl : p LiesOn (LIN β.source β.target) := hl - have hco : colinear β.source β.target p := Line.pt_pt_linear hl - have hco' : ¬ (colinear β.source β.target p) := Circle.three_pts_lieson_circle_not_colinear (hne₂ := ⟨h.2.2⟩) (hne₃ := ⟨h.2.1.symm⟩) β.ison.1 β.ison.2 h.1.1 + have hco : Collinear β.source β.target p := Line.pt_pt_linear hl + have hco' : ¬ (Collinear β.source β.target p) := Circle.three_pts_lieson_circle_not_collinear (hne₂ := ⟨h.2.2⟩) (hne₃ := ⟨h.2.1.symm⟩) β.ison.1 β.ison.2 h.1.1 tauto theorem pt_liesint_liesonright_dlin {ω : Circle P} {β : Arc P ω} {p : P} (h : p LiesInt β) : p LiesOnRight (DLIN β.source β.target) := by @@ -472,10 +472,10 @@ theorem diameter_iff_antipide {ω : Circle P} {s : Chord P ω} : Chord.IsDiamete constructor · unfold Chord.IsDiameter intro hl - have : colinear s.1.source s.1.target ω.center := by + have : Collinear s.1.source s.1.target ω.center := by apply Line.pt_pt_linear apply SegND.lies_on_toLine_of_lie_on hl - apply (Circle.antipode_iff_colinear s.1.source s.1.target s.2.1 s.2.2).mpr (flip_colinear_snd_trd this) + apply (Circle.antipode_iff_collinear s.1.source s.1.target s.2.1 s.2.2).mpr (Collinear.perm₁₃₂ this) unfold Circle.IsAntipode intro hf have : VEC s.1.source ω.center = VEC ω.center s.1.target := pt_flip_vec_eq hf diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean deleted file mode 100644 index 11fe61ea..00000000 --- a/EuclideanGeometry/Foundation/Axiom/Circle/IncribedAngle.lean +++ /dev/null @@ -1,262 +0,0 @@ -import EuclideanGeometry.Foundation.Axiom.Circle.Basic -import EuclideanGeometry.Foundation.Axiom.Position.Angle_ex2 -import EuclideanGeometry.Foundation.Axiom.Position.Orientation_trash -import EuclideanGeometry.Foundation.Axiom.Triangle.IsocelesTriangle_trash -import EuclideanGeometry.Foundation.Axiom.Basic.Angle_trash -import EuclideanGeometry.Foundation.Axiom.Triangle.Basic -import EuclideanGeometry.Foundation.Axiom.Triangle.Basic_ex - -noncomputable section -namespace EuclidGeom - -open AngValue Angle - -@[ext] -structure Arc (P : Type _) [EuclideanPlane P] where - source : P - target : P - circle : Circle P - ison : (source LiesOn circle) ∧ (target LiesOn circle) - endpts_ne : PtNe target source - -variable {P : Type _} [EuclideanPlane P] - -namespace Arc - -attribute [instance] Arc.endpts_ne - -protected def mk_pt_pt_circle (A B : P) {ω : Circle P} [h : PtNe B A] (ha : A LiesOn ω) (hb : B LiesOn ω) : Arc P where - source := A - target := B - circle := ω - ison := ⟨ha, hb⟩ - endpts_ne := h - -end Arc - -scoped notation "ARC" => Arc.mk_pt_pt_circle - - -section position - -namespace Arc - -protected def IsOn (p : P) (β : Arc P) : Prop := (p LiesOn β.circle) ∧ (¬ p LiesOnLeft (DLIN β.source β.target)) - -def Isnot_arc_endpts (p : P) (β : Arc P) : Prop := (p ≠ β.source) ∧ (p ≠ β.target) - -instance (p : P) (β : Arc P) (h : Isnot_arc_endpts p β) : PtNe β.source p := ⟨h.1.symm⟩ - -instance (p : P) (β : Arc P) (h : Isnot_arc_endpts p β) : PtNe β.target p := ⟨h.2.symm⟩ - -protected def IsInt (p : P) (β : Arc P) : Prop := (Arc.IsOn p β) ∧ (Isnot_arc_endpts p β) - -protected def carrier (β : Arc P) : Set P := { p : P | Arc.IsOn p β } - -protected def interior (β : Arc P) : Set P := { p : P | Arc.IsInt p β } - -instance : Fig (Arc P) P where - carrier := Arc.carrier - -instance : Interior (Arc P) P where - interior := Arc.interior - -theorem center_isnot_arc_endpts (β : Arc P) : Isnot_arc_endpts β.circle.center β := by - constructor - · intro h - have : β.source LiesOn β.circle := β.ison.1 - rw [← h] at this - unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this - simp at this - have : β.circle.radius > 0 := β.circle.rad_pos - linarith - intro h - have : β.target LiesOn β.circle := β.ison.2 - rw [← h] at this - unfold lies_on Fig.carrier Circle.instFigCircle Circle.carrier Circle.IsOn at this - simp at this - have : β.circle.radius > 0 := β.circle.rad_pos - linarith - -instance (β : Arc P) : PtNe β.source β.circle.center := ⟨ (center_isnot_arc_endpts β).1.symm ⟩ -instance (β : Arc P) : PtNe β.target β.circle.center := ⟨ (center_isnot_arc_endpts β).2.symm ⟩ - -def complement (β : Arc P) : Arc P where - source := β.target - target := β.source - circle := β.circle - ison := and_comm.mp β.ison - endpts_ne := β.endpts_ne.symm - -lemma liesint_arc_not_lieson_dlin {β : Arc P} {p : P} (h : p LiesInt β) : ¬ (p LiesOn (DLIN β.source β.target)) := by - intro hl - have hl : p LiesOn (LIN β.source β.target) := hl - have hco : Collinear β.source β.target p := Line.pt_pt_linear hl - have hco' : ¬ (Collinear β.source β.target p) := Circle.three_pts_lieson_circle_not_collinear (hne₂ := ⟨h.2.2⟩) (hne₃ := ⟨h.2.1.symm⟩) β.ison.1 β.ison.2 h.1.1 - tauto - -theorem liesint_arc_liesonright_dlin {β : Arc P} {p : P} (h : p LiesInt β) : p LiesOnRight (DLIN β.source β.target) := by - have hnl : ¬ (p LiesOn (DLIN β.source β.target)) := liesint_arc_not_lieson_dlin h - have hnll : ¬ (p LiesOnLeft (DLIN β.source β.target)) := h.1.2 - rcases DirLine.lieson_or_liesonleft_or_liesonright p (DLIN β.source β.target) with hh | (hh | hh) - · exfalso; tauto - · exfalso; tauto - exact hh - -theorem liesint_complementary_arc_liesonleft_dlin {β : Arc P} {p : P} (h : p LiesInt β.complement) : p LiesOnLeft (DLIN β.source β.target) := by - have hh : p LiesOnRight (DLIN β.target β.source) := by apply liesint_arc_liesonright_dlin h - apply liesonleft_iff_liesonright_reverse.mpr - rw [← DirLine.pt_pt_rev_eq_rev] - exact hh - -end Arc - -end position - - -section angle - -namespace Arc - -protected def angle_mk_pt_arc (p : P) (β : Arc P) (h : Isnot_arc_endpts p β) : Angle P := ANG β.source p β.target h.1.symm h.2.symm - -protected def cangle (β : Arc P) : Angle P := Arc.angle_mk_pt_arc β.circle.center β (center_isnot_arc_endpts β) - -protected def IsMajor (β : Arc P) : Prop := β.cangle.value.toReal < 0 - -protected def IsMinor (β : Arc P) : Prop := β.cangle.value.toReal > 0 - -protected def IsAntipode (A B : P) {ω : Circle P} [_h : PtNe B A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) : Prop := (ARC A B h₁ h₂).cangle.value = π - -theorem cangle_of_complementary_arc_are_opposite (β : Arc P) : β.cangle.value = - β.complement.cangle.value := by - show (∠ β.source β.circle.center β.target = -∠ β.target β.circle.center β.source) - apply neg_value_of_rev_ang - -theorem antipode_iff_collinear (A B : P) {ω : Circle P} [h : PtNe B A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) : Arc.IsAntipode A B h₁ h₂ ↔ Collinear ω.center A B := by - haveI : PtNe A ω.center := Circle.pt_lieson_ne_center h₁ - haveI : PtNe B ω.center := Circle.pt_lieson_ne_center h₂ - constructor - · exact collinear_of_angle_eq_pi - intro hh - show ∠ A ω.center B = π - have hl : B LiesOn LIN ω.center A := Line.pt_pt_maximal hh - have heq₁ : VEC A ω.center = VEC ω.center B := by - apply vec_eq_dist_eq_of_lies_on_line_pt_pt_of_ptNe hl - rw [h₁, h₂] - have heq₂ : VEC A B = (2 : ℝ) • (VEC A ω.center) := by - calc - _ = VEC A ω.center + VEC ω.center B := by rw [vec_add_vec] - _ = (2 : ℝ) • (VEC A ω.center) := by rw [← heq₁, two_smul] - have hli : ω.center LiesInt SEG_nd A B := by - apply SegND.lies_int_iff.mpr - use 2⁻¹ - constructor - · norm_num - constructor - · norm_num - show VEC A ω.center = 2⁻¹ • (VEC A B) - rw [heq₂] - simp - exact value_eq_pi_of_lies_int_seg_nd hli - -theorem mk_pt_pt_diam_isantipode {A B : P} [h : PtNe A B] : Arc.IsAntipode A B (Circle.mk_pt_pt_diam_fst_lieson) (Circle.mk_pt_pt_diam_snd_lieson) := by - have hc : Collinear (SEG A B).midpoint A B := by - apply Collinear.perm₃₁₂ - apply Line.pt_pt_linear - show (SEG A B).midpoint LiesOn (SEG_nd A B).toLine - apply SegND.lies_on_toLine_of_lie_on - apply Seg.midpt_lies_on - exact (antipode_iff_collinear _ _ (Circle.mk_pt_pt_diam_fst_lieson) (Circle.mk_pt_pt_diam_snd_lieson)).mpr hc - -end Arc - -end angle - - -theorem inscribed_angle_is_positive {p : P} {β : Arc P} (h : p LiesInt β.complement) : (Arc.angle_mk_pt_arc p β h.2.symm).value.IsPos := by - unfold Arc.angle_mk_pt_arc - apply TriangleND.liesonleft_angle_ispos - exact (Arc.liesint_complementary_arc_liesonleft_dlin h) - -theorem inscribed_angle_of_complementary_arc_is_negative {p : P} {β : Arc P} (h : p LiesInt β) : (Arc.angle_mk_pt_arc p β h.2).value.IsNeg := by - unfold Arc.angle_mk_pt_arc - apply TriangleND.liesonright_angle_isneg - exact (Arc.liesint_arc_liesonright_dlin h) - -theorem cangle_eq_two_times_inscribed_angle {p : P} {β : Arc P} (h₁ : p LiesOn β.circle) (h₂ : Arc.Isnot_arc_endpts p β) : β.cangle.value = 2 • (Arc.angle_mk_pt_arc p β h₂).value := by - haveI : PtNe p β.source := ⟨h₂.1⟩ - haveI : PtNe p β.target := ⟨h₂.2⟩ - haveI : PtNe p β.circle.center := Circle.pt_lieson_ne_center h₁ - have hit₁ : (▵ β.circle.center β.target p).IsIsoceles := by - unfold Triangle.IsIsoceles - show (SEG p β.circle.center).length = (SEG β.circle.center β.target).length - rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h₁, β.ison.2] - have hit₂ : (▵ β.circle.center p β.source).IsIsoceles := by - unfold Triangle.IsIsoceles - show (SEG β.source β.circle.center).length = (SEG β.circle.center p).length - rw [Seg.length_eq_dist, Seg.length_eq_dist, dist_comm, h₁, β.ison.1] - have eq₁ : ∠ p β.target β.circle.center = ∠ β.circle.center p β.target := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₁ - have eq₂ : ∠ β.source p β.circle.center = ∠ β.circle.center β.source p := by apply is_isoceles_tri_ang_eq_ang_of_tri hit₂ - have π₁ : ∠ β.target β.circle.center p + ∠ p β.target β.circle.center + ∠ β.circle.center p β.target = π := by apply angle_sum_eq_pi_of_tri (▵ β.circle.center β.target p) - have π₂ : ∠ p β.circle.center β.source + ∠ β.source p β.circle.center + ∠ β.circle.center β.source p = π := by apply angle_sum_eq_pi_of_tri (▵ β.circle.center p β.source) - have hsum₁ : ∠ β.target β.circle.center p + ∠ p β.circle.center β.source = ∠ β.target β.circle.center β.source := by - have : (ANG β.target β.circle.center p).end_ray = (ANG p β.circle.center β.source).start_ray := rfl - have hhs : (Angle.sum_adj this).value = ∠ β.target β.circle.center β.source := rfl - rw [← hhs, Angle.ang_eq_ang_add_ang_mod_pi_of_adj_ang] - have hsum₂ : ∠ β.source p β.circle.center + ∠ β.circle.center p β.target = ∠ β.source p β.target := by - have : (ANG β.source p β.circle.center).end_ray = (ANG β.circle.center p β.target).start_ray := rfl - have hhs : (Angle.sum_adj this).value = ∠ β.source p β.target := rfl - rw [← hhs, Angle.ang_eq_ang_add_ang_mod_pi_of_adj_ang] - have eq₃ : ∠ β.target β.circle.center β.source + 2 • (∠ β.source p β.target) = 0 := by - calc - _ = ∠ β.target β.circle.center p + ∠ p β.circle.center β.source + 2 • (∠ β.source p β.circle.center + ∠ β.circle.center p β.target) := by rw [hsum₁, hsum₂] - _ = ∠ β.target β.circle.center p + ∠ p β.circle.center β.source + (∠ p β.target β.circle.center + ∠ β.circle.center p β.target) + (∠ β.source p β.circle.center + ∠ β.circle.center β.source p) := by - rw [← eq₂, eq₁, two_smul] - abel - _ = (∠ β.target β.circle.center p + ∠ p β.target β.circle.center + ∠ β.circle.center p β.target) + (∠ p β.circle.center β.source + ∠ β.source p β.circle.center + ∠ β.circle.center β.source p) := by - rw [add_assoc, add_add_add_comm] - abel - _ = 0 := by - rw [π₁, π₂, ← coe_two_pi, two_mul] - simp - calc - _ = - ∠ β.target β.circle.center β.source := by rw [← neg_value_of_rev_ang]; rfl - _ = 2 • (∠ β.source p β.target) := by rw [← zero_sub, ← eq₃, add_sub_cancel'] - _ = 2 • (Arc.angle_mk_pt_arc p β h₂).value := rfl - -theorem inscribed_angle_of_diameter_eq_mod_pi {p : P} {β : Arc P} (h₁ : p LiesOn β.circle) (h₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2) (h₃ : Arc.Isnot_arc_endpts p β) : (Arc.angle_mk_pt_arc p β h₃).dvalue = ∡[π / 2] := by - have : β.cangle.value = π := h₂ - have : 2 • (Arc.angle_mk_pt_arc p β h₃).value = π := by - rw [← this, ← cangle_eq_two_times_inscribed_angle] - exact h₁ - rcases two_nsmul_eq_pi_iff.mp this with h | h - · unfold Angle.dvalue - rw [h] - unfold Angle.dvalue - rw [h, neg_div] - simp - -theorem inscribed_angle_of_diameter_eq_mod_pi_pt_pt_pt {A B C : P} {ω : Circle P} [hne₁ : PtNe A B] [hne₂ : PtNe B C] [hne₃ : PtNe C A] (h₁ : A LiesOn ω) (h₂ : B LiesOn ω) (h₃ : C LiesOn ω) (h : Arc.IsAntipode A B h₁ h₂) : ∠ A C B = ∡[π / 2] := by - let β : Arc P := ARC A B h₁ h₂ - have hh₁ : C LiesOn β.circle := h₃ - have hh₂ : Arc.IsAntipode β.source β.target β.ison.1 β.ison.2 := h - have hh₃ : Arc.Isnot_arc_endpts C β := ⟨hne₃.out, hne₂.out.symm⟩ - apply inscribed_angle_of_diameter_eq_mod_pi hh₁ hh₂ hh₃ - -theorem inscribed_angle_on_same_arc_is_invariant_mod_pi {A B : P} {β : Arc P} (h₁ : A LiesOn β.circle) (h₂ : B LiesOn β.circle) (hne₁ : Arc.Isnot_arc_endpts A β) (hne₂ : Arc.Isnot_arc_endpts B β) : (Arc.angle_mk_pt_arc A β hne₁).dvalue = (Arc.angle_mk_pt_arc B β hne₂).dvalue := by - have eq : 2 • (Arc.angle_mk_pt_arc A β hne₁).value = 2 • (Arc.angle_mk_pt_arc B β hne₂).value := by rw [← cangle_eq_two_times_inscribed_angle h₁ hne₁, ← cangle_eq_two_times_inscribed_angle h₂ hne₂] - exact coe_eq_coe_iff_two_nsmul_eq.mpr eq - - -namespace Arc - -protected def iangle (β : Arc P) : AngDValue := sorry - -theorem inscribed_angle_dvalue_eq_iangle {p : P} {β : Arc P} (h₁ : p LiesOn β.circle) (h₂ : Isnot_arc_endpts p β) : (Arc.angle_mk_pt_arc p β h₂).dvalue = β.iangle := by - sorry - -theorem angle_of_osculation : sorry := sorry - -end Arc - -end EuclidGeom diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean index f95ce746..57738906 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean @@ -28,9 +28,9 @@ theorem Circle.cangle_of_chord_eq_cangle_of_toArc {ω : Circle P} (s : Chord P theorem Chord.cangle_eq_pi_iff_is_diameter {ω : Circle P} (s : Chord P ω) : s.cangle.value = π ↔ Chord.IsDiameter s := by constructor · intro heq - have : colinear ω.center s.1.source s.1.target := colinear_of_angle_eq_pi heq + have : Collinear ω.center s.1.source s.1.target := collinear_of_angle_eq_pi heq apply diameter_iff_antipide.mpr - apply (Circle.antipode_iff_colinear s.1.source s.1.target _ _).mpr (flip_colinear_fst_snd this) + apply (Circle.antipode_iff_collinear s.1.source s.1.target _ _).mpr (Collinear.perm₂₁₃ this) intro hd have : ω.center LiesInt s.1 := by constructor diff --git a/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean b/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean index 20cbc621..946d6c37 100644 --- a/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean +++ b/EuclideanGeometry/Foundation/Axiom/Linear/Line_trash.lean @@ -5,11 +5,11 @@ namespace EuclidGeom variable {P : Type _} [EuclideanPlane P] -theorem pt_flip_colinear {A B O : P} (h : B = pt_flip A O) : colinear A O B := by - apply flip_colinear_snd_trd +theorem pt_flip_collinear {A B O : P} (h : B = pt_flip A O) : Collinear A O B := by + apply Collinear.perm₁₃₂ by_cases hne : A = B · rw [hne] - unfold colinear + unfold Collinear simp haveI : PtNe A B := ⟨hne⟩ apply Line.pt_pt_linear From 415d932cb764c315fcdb0dd84a0d093f2d4000e8 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Fri, 19 Jan 2024 22:24:08 +0800 Subject: [PATCH 7/9] 1.19-3 delete some import --- EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean | 3 --- EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean | 1 - 2 files changed, 4 deletions(-) diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean index 4565cf19..c265c216 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/Basic.lean @@ -1,9 +1,6 @@ -import EuclideanGeometry.Foundation.Axiom.Position.Orientation -import EuclideanGeometry.Foundation.Axiom.Triangle.Basic import EuclideanGeometry.Foundation.Axiom.Triangle.Trigonometric import EuclideanGeometry.Foundation.Axiom.Linear.Line_trash import EuclideanGeometry.Foundation.Axiom.Linear.Ray_trash -import EuclideanGeometry.Foundation.Axiom.Linear.Perpendicular import EuclideanGeometry.Foundation.Axiom.Basic.Plane_trash import EuclideanGeometry.Foundation.Axiom.Position.Orientation_trash diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean b/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean index 2b8de0ea..9309acaf 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/LCPosition.lean @@ -1,5 +1,4 @@ import EuclideanGeometry.Foundation.Axiom.Circle.Basic -import EuclideanGeometry.Foundation.Axiom.Linear.Perpendicular_trash noncomputable section namespace EuclidGeom From 6328b51403d7da02d9a2f3c81ca41408f50d8727 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Fri, 19 Jan 2024 22:55:20 +0800 Subject: [PATCH 8/9] Update InscribedAngle.lean add the definition --- .../Axiom/Circle/InscribedAngle.lean | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean b/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean index 57738906..3580d66e 100644 --- a/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean +++ b/EuclideanGeometry/Foundation/Axiom/Circle/InscribedAngle.lean @@ -49,7 +49,7 @@ theorem Circle.cangle_of_complementary_arc_eq_neg {ω : Circle P} (β : Arc P ω theorem Circle.cangle_of_reverse_chord_eq_neg {ω : Circle P} (s : Chord P ω) : s.reverse.cangle.value = -s.cangle.value := by rw [Chord.reverse_cangle_reverse, rev_value_eq_neg_value] -theorem Chord.cangle_eq_iff_length_eq {ω : Circle P} (s₁ : Chord P ω) (s₂ : Chord P ω) : s₁.cangle.value = s₂.cangle.value ↔ s₁.length = s₂.length := sorry +theorem Chord.cangle_eq_iff_length_eq {ω : Circle P} (s₁ s₂ : Chord P ω) : s₁.cangle.value = s₂.cangle.value ↔ s₁.length = s₂.length := sorry end cangle @@ -167,15 +167,27 @@ end iangle section iangdvalue -def Arc.iangdv {ω : Circle P} (β : Arc P ω) : AngDValue := sorry +def Arc.iangdv {ω : Circle P} (β : Arc P ω) : AngDValue := β.cangle.value.half -def Chord.iangdv {ω : Circle P} (s : Chord P ω) : AngDValue := sorry +def Chord.iangdv {ω : Circle P} (s : Chord P ω) : AngDValue := s.cangle.value.half -theorem Arc.iangle_dvalue_eq {ω : Circle P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : ang.dvalue = β.iangdv := sorry +theorem Arc.iangle_dvalue_eq {ω : Circle P} {β : Arc P ω} {ang : Angle P} (h : β.IsIangle ang) : ang.dvalue = β.iangdv := by + unfold iangdv + rw [cangle_eq_two_times_inscribed_angle h] + apply AngValue.coe_eq_coe_iff_two_nsmul_eq.mpr + simp -theorem Chord.iangle_dvalue_eq {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : ang.dvalue = s.iangdv := sorry +theorem Chord.iangle_dvalue_eq {ω : Circle P} {s : Chord P ω} {ang : Angle P} (h : s.IsIangle ang) : ang.dvalue = s.iangdv := by + unfold iangdv + rw [cangle_eq_two_times_inscribed_angle h] + apply AngValue.coe_eq_coe_iff_two_nsmul_eq.mpr + simp -theorem Circle.same_chord_same_iangle_dvalue {ω : Circle P} {s₁ s₂ : Chord P ω} {ang₁ ang₂ : Angle P} (h₁ : s₁.IsIangle ang₁) (h₂ : s₂.IsIangle ang₂) (h : s₁.length = s₂.length) : ang₁.dvalue = ang₂.dvalue := sorry +theorem Circle.same_chord_same_iangle_dvalue {ω : Circle P} {s₁ s₂ : Chord P ω} {ang₁ ang₂ : Angle P} (h₁ : s₁.IsIangle ang₁) (h₂ : s₂.IsIangle ang₂) (h : s₁.length = s₂.length) : ang₁.dvalue = ang₂.dvalue := by + have : s₁.cangle.value = s₂.cangle.value := (Chord.cangle_eq_iff_length_eq s₁ s₂).mpr h + rw [Chord.iangle_dvalue_eq h₁, Chord.iangle_dvalue_eq h₂] + unfold Chord.iangdv + rw [this] end iangdvalue From 97b72597806edcb7ff9fc65fb0dcbfe09ccee8b9 Mon Sep 17 00:00:00 2001 From: Noaillesss Date: Fri, 19 Jan 2024 23:07:00 +0800 Subject: [PATCH 9/9] plan file --- Plan_files/DetailedPlan/Axiom-Circle.pdf | Bin 82141 -> 190804 bytes Plan_files/DetailedPlan/Axiom-Circle.tex | 377 +++++++++++++++++++++-- 2 files changed, 344 insertions(+), 33 deletions(-) diff --git a/Plan_files/DetailedPlan/Axiom-Circle.pdf b/Plan_files/DetailedPlan/Axiom-Circle.pdf index 93e35402687e99eaf0ef2a8b8fe9273750f4a0f4..e49aeca768e0131144b3c8cab7e8435494dee8d2 100644 GIT binary patch literal 190804 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.#=WFLg=wv<`Wxx$&`(`ZwEZ&+v113uyfSSh#cl!f<2_G zg_c}z{oRio8=m7mV>^seXJgU_{BAeXSMzeI=TJ=uWgDt`<>WG*4RmttfQtiBV5`KM z0#S&ey>rq>FXmHmRdr`Mx%-2NH*c94{sLu>;7ljCujULPs5pV#0MtEM&nZP1k!RXO zkhOUZ?y#VcQ7}Ev_FWjE4XTtBk~h9Rl!MWqaofM;e|3>tN1;@=)b^^`Bvy5ZI_{${(3*|fx5H}MV*jmV zvLaDY7TGEki*g7ZxIa*_H2nw7C71;Zuuvo6?;)hXJevru*1Ipg>uH9>Z)q=mcyWAF zp)eKYWhNbW0LOZ{rQS$>P>*XD{O+fA6T^0@PskHeqUXT3hi}n-)-8r?3<380 zcI4PeWa)=(2dI+y6{2}-#^NtDNN%}hW9G(>XksQ<)VZT%4SXG5N@J8CE9lF}7luGQ zvwl|l=}QBNO3#qus5|vGg9)8Dd)j-6>lxJsj-PbUD)AeXfF5#TNFJ*VW0~N_Hu$H?FNi zix=E}S&u{-)@iL?9-0o{^Q~wX&ADwfbPL{gX6xlP9J+{m%e+h5o^?X2!I}!+K|{h$ zbX4P)4r4zs*gh$xq+!MfXoh@Vs5Y&LUh4SOp(&B!v;>-wc=~c>b}K0xB#*NjF^M>h zJC-ii=QOMbG}M;9*IZ)FKNZmN$>1!APW+orKG=7R10N5^YYiC@N)!_2=%0sUTjmG{D|LA&Rr_0jUiZMmG(YuD0qII-?-Cmz25CgS*QF? z*~*Z^;PUMcSg~X<9cCe628b>by30JX%|NW22u#>SLK?wy;g2??%gDgvs5hZ4>L^^~ zWCx%lXBH{lNTidrX2WSHi@|d|J=v^FYaLcMaZSjQ$6Cup#{=4-0!IRj|>I2JiJ@YxP#2^(opvnTe!v;aQjy(pLMgJ7rk_ zk^w*x69;!IYDXkd#aIGGec$hZ^UL9=x;?&vB`q`QoQuTe5S9xXT|5#TdL`vG} zZ~a#&!YH}MaS89*)KfQp(dnsvLw#?ojW$g}ya4O`dND~o@$~*)Yp1UVdA{%sF=~v zhasA()e0hwtNr6;o>^JLsApgbhCZ*HGlJQMhU?fr;8h0*U<}>niIQ1Gqtg**1Ugf> z*dT|zk`flOLR7X%cD;>|Znv^Pbn+#2_8{_kX(3%J?xnPLZ!3@WS)4~A60e=GGn88b z{zN#(ia-MK%iDZfZ$uF2z8rCU0!?Q)_399C(?&i#MEI4AC3hW*?ju4_fbJM#W^!bC3q(3nj znUM%Xq6ee>mQ1^& zr@)BsgduVo?IkcteNYHro)9$U)7tBafAOAsLvDYo;M+a|b0jOBxy;^Mhy!uDIPz2- z7%}w!;f(Rt4rp4D_BJ5RsvX>ry-B+jTcNi^r?&L`4kxoFM^Xy*981VCiAH?c#~CO9 z{v&TRNKTyfXQqt@zkV76)7t=?P1ML1eSrq^V678mOv;5LEFO~zbb}pTsiL%J(=_o{ zDn+XV(+n)|lHoDmVR$s4DQmil`$hp+5clRmZv*cX#{R3Xu$l1{% zBxa+x*@$!KP=GdJbUki4XC4(t;)?h?#+uiz6FkH5alj-YZFd4N=fzPjppLVgOL?|L z0CXX*!yXZ!o%n;0A>WX)dZsvYH{mdm?zevt2YOwqBF)b#1s|;Y?y*ceF&*T*1Ox~t z@e+fCnWK5T|0pE69sq(Vqqck{j&7lQ`%@l+<3M8M&~&^-F)q-pCijgD2cwSruK=X| zXr2lAv13PXADc=cKrp3=;f&ArpRa?4=?dAQV+=G;_!?b%6RzcWAebCV)IxDeaO4fV zXWOm8EOjL}ALu-!Pms$W@<%0bf8r;iy{oTdK$mQ47)t44JTt!yoG4ZmuHLZz8B~8# zA4I$T?H&8pJ~L-LNfun2EBkHK!XhK>tf*IKSgXJ>anlh0U1e=wb{LtSfF+RSYprR|byVBqa3`xzeh1H8x`*g53 zC3j1J>Vrc)_p9#MIDe?SH+xD>M`iBlfX;X=5GTVRjA`oK3Abbc#WYknB+J#oePmKFH z+Rwkp#x+<^!S43;?e(kudX)yBcxlt0d{4eRC&Q=fa4iOto*OFON!?MG>pgCcQOT9g zmL9Gb*1&*Av~SKX^i+)%%#2bSb4zZg5k`H_OP&1jBL<{v-6-+1$Dn7I8dVs7yuH#P zbqF$#h)O{U7Q%vNA!9P^DJ*&{q?tjWXO3G3qfiPYwnq(PK6@5Fp$_*#e{9BBCK9)k?eJhQav4hA}nAU$R=a!(fUyUrCCr;`j!_seR(og~Fp_w#xWMBn4O{I;IW!_ixAQoW? z1PCK1dnvR>!%Dx9WYh?E{cj3fyQTl^L10A?a>_t_G?kUZP{yJs2qS|c&?F=GAyFmu zfM#XU#s{e59+Wp>cCU>mg>;!)7fEC1g-jSxA6HCJXd#OwZR4Uko+Vt=x{onNQ3*|Q zXsr1t0Zc}AGT^olV9Yps0Ugm8*Hn(o_q2wHhc;OsGC;0Tx1BzN5 zJ)2Z+79E{zOj$-oe=~GZg$|gaTN4Q7pql&G0kMz*K0;{17j@nMwE=%eZj2ugew&6Q z2ups7hLOX4at+bAR(G9)4{IFFtZih7)DN}od+|dmo96jK*keYnbKwn-Z>_VVANrAw z(RMEl+h%RNx0#GT4T>uLYBA!z5X%t$*w?kGrheerJk~*rm?7VOY89LF^S3Z-Ra_6t|>4>TnxxlMHdt07=7M<4II zeZIKKPrhHI>D$@eLhog7&3nmg1OF})QxN$9((|I_cg&aoF70q#)>p%~$C_v9meG4C z1+1ZMFMaT+HBr4)R*yDF4?8xKc%n~Op>`N95zHzW8;x6NX3;;3^iq5-R}_c_RPTPimPBQO)jyVYb_h1o zE!EHs0E<4>_MGW8WuoP=FSM++1s9q|n)zOsp!X81yKOu?vHZ^Lxh2bA8C|FIp>xM# zNYr!`#y&^DyxXevwK7{i8gJ10HKUy{?JXZ4IKK&vB6Uo?Eiz|Mmcv6!L?%vnLTbl= z&Ubwg=yDb__}!fod95vx?1?)sG5O7efYI}U=^G+ilIHT!W5cZm7~$pv(>Yb7O?_s* zVw~}}vm8IQ5xEPBznaB9>fZwRyjl@17(QQ*JAosuP=zHe|&wHTle=AX1CxJX&!sy65kl{GnoJ zQp#yGfVHOzN16$lqwvKl?wgv?T2h#!-7;>J;pd5LTCZ zW#9y7SJDmO1PutnB@N0=J7r^NJ4v~&-(Eah5~>R;qmV|$hz02Oi5fK~KYCxbU!dyv zYHrVmxN+ikbo)Mz$ph6x2#7&+b$4nY*d!cVlt755md@YZo-W=EA8s!Cd>@c?#N??+ zB16nJk*^$`M<}%Mv$ov&3aqv^tb4Dyf2`gSB@tGKs{DVm*N(q}G|G1qJ4C97%TxQ` z$HU*K_31f|uJXHlYtv&_uEz53uus?ADDJ%dRp+1kb^R=be7x+<8~0shjhWf+!1Y{T z`{Wfze274bsw@Y46kGyt6?pP|FUua)f6rAqRl(j6(E4Vf zI39ZUn=<*t-Lkx2#O_&hXMMmD+ifRn@DBu5cdhIQPqg)eX)NFZW~^@v)DAt*FP+`*d|6fz~o$xzQ)h|eyiu7k?Gh;a9t92znRc>=MGejHIVI+pahLxS;hncLuS#7u;G@FRr9A) zPl@@C!b;bnU6AaZyY{!l!*AmZJ~8McYH{!T{WY!Z-(+v+7He8vtq28t5_!gK|4xd8fvdaHcDSPI*X#q@LfSX^PCguT>Xp5Wwao8uVj==x>uUG zV)zY=alJQ7OnxL3UTlSTds3Ty592PB(u4FOZ1F78u-0zFcn2utD?+b&Hfn%+wTpqF zzV(~|W>BaXtCJ%|g6Tbc&h?7dbfv(6!~;c7=zR7}h(07;V4+gj@4LZW$uEBc=kNADTlZP`4dK`Uh#`qHE>8xQnjN51 z2=oZ-d$oMvsJR6c#Z{l@h^~uH8yWFrF`UV@Cc`AJR>tQ_FxN@zSkf#`Hnx!H24mx= za=GPSM;vmyp6SN~VlD7DmyChwUBALHT(T0Q8Ndi-`qQmf2FX4KI+n?Lu(zo)>%Jap zo5ozx^?JEo;+s~9tGOOAB=r8k@Pd9a4X=Ub-ee2B@{rWjvh2cl>t(t`Iw#Vd=n>9) zZMWs+W%)Yuyjx=wafeM=Pf0Or{<*7JY{W_>{6s3E^}X2*!zs33Crk^g?hjh$oTHcj zV!RNJ6tH3XZBLt4iLs=@DGpxY3cG|MW5D?u(S%W1VUI4J(5g=Fv3DVc0fMJsrb9mP)5bYK9 zQlM-j7#hig2MZp#^&QZQA6#r?Q0d1CR8BW5XLIKe|7lZ^=CN*_P zWHu5{7h1MYcyH}VPYh}-8_3Y zHTT2VJ1YkVlCxHign_ZfdqgN)yfN6NL7>*&b4}VMY*pgHztirEQ7P zbly+9-MX(Ab2!3yd&!jT$`R`WPmU#3!N?La)VN*`PCM_M54v2>8^I3^w}g3FB)Gh8 zv*EfN^c@CBC#8S<0{WDAbOkNokxGmq2m;7Kaw*w2zCo131X=c6r z2@UsUpTs7^qbLRKKMTuzh|Jf@Mi)rD8WM(6nj+&%QgjU;x`9-iRB*p9@nh~$B(6Ee z`g;igep}ZLzy;u0;8l~vn8bN|>nNn`FqCX|d45$;-*OCEuwnJuR3*TVLmnpEP~WUb zRs9J9?>OlVNrjF8uZN#!#&0IFt=jm3f_qk(_N#0AB)q~TlvkCe+r+`G>Ku-s`h{Tn z<@V?R?}$O2S2Vq;!feG@30(4tOB4k@ZM?5c3w+`PsCB}KY>|Mv@Mq*YQ}zu9#+?kJ zSp-S{&rg`OM3)}l`Yh$sdQQ{TEBlT5GXT1q&S3t#x6$jDx{7G5VlqQ2YUwp1@f8Y! z5_Pg)Lb6&N=)K)^l_}nEffl-$O=V0CW~*lQeaz#51x!`ZNFV<>4hOIZX3@jRM*cCSpHZU z)=AyBJny^eh6Ip^)u*S~L|bx7pt&oLr|Zt(iI($E2)IoI_-GBI7`e1A4vo2|VhVSn z-HdWLj{zYFsC<44yAtcRg;h%-bt^Y)V!N5+5NWn+*d{~Gzb_0LoHb9H5P}-VMQ+rz~kz)2&(C z49O36>qH-b%NPg)keJIA9F|qm!QXQHH=}=BVeLVre-5wWM98)8%}DqsXW3yuG<$Wit}KqwCC->A#dvhYm`O0BW1Sq z)P240EH|x&Qd3_AM!`rPJhM~SFdIyJ9>w&j=;X zt82~uwK>xOrN5vNNOz5g>=Q|^sWUwNKpOAfDbn*74#i}2S_vbRuU{9~upq74yMxuO zi_5UI02>7!I4E;Ao}+!v*cM$E)%fs1wU){=R8Y!(Ty~{79u}^O`XGz|Whs$sp_3^G zfN88;y%MdWlPAc_{P9ekG`I2@QV^tPR4j54jCtOh(ZJc|K+&*3&@!{ubZ~?^gc7G8 z%b{%Ph5FBn(KT$=LO@Z*%+G_kgmquLwnUb3i3#_LHuRPspX1R#4qB7f{ae2gWTv*) zcF2A_?z2CjE7aCUe{K5WQmcda-t*q)Na&8luikt^2YEgt{LgTK@n4qU8UO7T{Qo%P zbNpv8@vqPL|85PQiG!2<|2pFzX-lSIw;}dks56i|>#-m_lR7#@*iiqT9H7t0$`Q6M z6<_qjQ6l6_e7I2#EnzQYw<=$|GsS{s3lJ)}^;HFh(e2TnU(P~re)*i7j#l5HY%q%9 zD0w|U_B*0sT&aaA3V~|s?9l$I|Nh0~{8X3Kw|u4N3(ntyH83W}`8whMEei>I*vh5W zMa$;>l%sZ4mqH|#@%VIM<=;g)u~TI$xsBIb0mpw;dBxa#5le)Es8k&0-`=?rRkx#p zU-x&kX`{-Ta;Xy{ei~Ig7EhO+PC81@TJ6lVe&=73pBZM8}HQo%pFtB&*cqiYdm0 z!Y;#4MeEJb$6W!(@u*Xx1u5Cdy{7VBk#b<+(UT6|BvDNOI%l$h9=xd*r(B4sMtr^yx@!Z7Q)+CY@eM?GuKcCeidG zp4~x;5z`)O%-k6DS&cJ59f082ozyvHmd(5vY8Q{!R~c^{s<3zW{NAGsVhxEd|8C~x ze5c_aLXC|OHI4;FO?t}DP=>&~!!mdki6c!*f|TY9wK&y^c;)?${0JFT54Lbc_btx2 zavXFYL{U0W(p=gI#U3VkwBiqqeKcVN((dseG!aN~U=d7sMV?n)oJ)V^U3tv)!G}vE z%fjZ1e&lELF5EEkqX<-JHNf4-DiHZKS6F#JEXc^9E$6w~GsZ^<9?5_*u;1X>V%t*- z*o6%jz?FPgmLB+Pi$DNAh+L9X^J!EE6t?0};+R2XuuZ$lO$;aULNWx%fz=#6q z1?PUt>A;|NeEPeSy~A+2A`~bcHv)#YTfimjfj};puK6GharTX$yOTlf8Ps!pA%^Lg*R*7_}SiePmHFGGDzYDgy16J5?IqUErH zPRb(ZoW)(gmaNrbNE`?{H|)Xn>o}oK^~Vy0{0Sl#!+BGXu3q0GC!t9ply4bfre>h< zq4`n=Az^1rFI3m6$9V)GGu*MF^{^A)BUc3E$%~bp8w7%uQHb9hl+$d(jwyZrAYZ^3 zTQ46N2OJsC^{Qx0DnTIZO-o%5nv^sP;NHM{2*#- zU^17)1QLxjCG2|IGJr9$Rxk$PH=wL|(-CK*u0GNZCYVe6zv~T}Ij`-CdGrLNT?So- zfO3C9^%aM_r&6Dareu7^e9(bmmrui%%?K4YsniD0EJT)-dz==?7#cFdU|`7LI7 z|MBo|m9h;tQH7!)l6NoXq0xrkg`!5D%8a|7PDzSvzBIdy_ zB+wt&FR1IIVTpKdhOm$5tFF+o6$J$R#Tc^bYn4A!745w9}3}vVed~r9P6Kb6R zMzx|*-IV;q)4X1TJ`GZ<462wLcfJ5c5CHlN@MRAGKA-a)&S8aGri!NzvlBkR+hSJ; zD@xZPJc@=tvop5(f&Houq}7`6`H`o}nOjkuk*|H`if`5dvZ>5Fmx@Y6?e4mEgBSl` zV}zD`W$2i?`<-}0e@6|-6~u;GmcR;v;sz4dN%$iy5K98W3tOWVbO?#H4`s#TMP(WW zj1EzI7=?}lBjh!zDRx&v`V5GX+H88i=sJS(^mleHMSCPrH-b1d7b#rW0%^Sy!h z%1fd!U0|}L9cwU{^2B{cd@*iGg0WF%k!t^T4wjGW;LTqdo#HrBSpAqN{~Yhmfs#Zh z9K|d+8x9P<_|y`H){E5?RBn$kvAEWA-@>2WA4)*OF~Q^dLSpSn`~fYNZ8YsJZP8rB zH$@&opCZuP&6TW5_eH>zZ94MMi$Z)tD}|_p$}lPBiPz$+cZre61h)_jYOR>cFa{a$ z0kzx`f?VAEY)^q)qQKyu9qxp(`Imp3YniOzt~&*ir}Q!iUmY$8zXj57P0IK>)4+lbHQ_=mFvAjC^Or8i*Z_V1!dNrCgsxE2;K&^MLgD#GBOI+}7hP?w zqjE(wV1P>!oXPKi39ddb%S?zZ`S&mh`zrtBR19)c_C$vY&6RmCSi{{qkabeK;^i@F z-rw8TUg6_5kV82-nEL8x$tca&kxa}A!fNu_dHsn+B791tw}FK^0vOmUZ}LiCLtw;5 zGURr5f#&nvEs~jQ#Jk6KXPPzBH=*YEL0`jWj>aE*(8Mcy4h46S6FZNAs;Or|Mcd}I zpyxRCe4~^r^g6HnkxyP9#u-6EUi{~`fm;EH%G8{p$mdaln}k&c3R#^f7H1~s$yC=6 z*rjLsVCSH*k=FX#;yD`@Wh|-EKfe&&!-6kr)|RBS7G%b8SiGjc3NF z?>gy^U6qPQ5-11_oaI=(;||WCl|H{d4fne-{&@bpJUFL-s%}mw#VOXQz>fLn@Qbgh zlCxLojw&M9taqm_wG~C`?A|J2I4zSKHsi5I1qLJ4* z=t2+IG2d0KP5z1CIzfp6liMD=NMPv2ZQ7gW@5H>>zM6GMUo5JZ~zKd$ej*0-yrk(5~2I&>41dTUw`-SJF~Etgx|uoiY6Pm zY|*kKKPV5A&&=djG5d=Lw)9!wN^B6pZHL2W4a{Px+epBQO6?-Q#S-Vp?M{c{;DD_I z>f=S5*lbPC3<8O>YDJsSOosd1UJ+F3@QBovw;8aMc_Z`!T+bt=s*Ac@7Ro(S-JlA_Qxe{UFVH< zWZ#(@#ht?ptiBhCk6FuwOj+)i{Dr#>+mV7%mr3l*d&S48sh*o4BI*P%DMga2W8y?v zC8F9@KJRCPP>!8{8SXdy>(1}5$6(y8y$$k_ zjVrrd-QnORu=ZsaUwmXAzKnzT{Y3TS3Pez?kSvcsPb#d<4xf*S`Sf&Es#~6{9UW>q zYV;otUtBcEmY%}Tr@myG34fijq2oDDajXEO29`FdnZs%=f9INMsIEbS=ZIn}-yTtA z!VH=?)1KSdY~WT?!^wtJV&tvdLB^GG%K84hI;HuH1*vdA!E)^(;8EE0Un?T`Vm?Cv z*dDe57uNBy*tK8IH~YS?Iz&9bh#d(v-CIdEkmGwL4Yt`WKIzDPBC`&VjMcArz$TLi zfWm$u3TjHfV2hx&A-CG_#SHK@671=}?P13VHB0FgMzUq0Yz%aH^HI!n;7z)5TzjBV zTXo5kl)Y-{xj!V}-5*k$;MyTAOu6)(KNZ@=3*_VoQ-G)*PP!uuH|H+wRJ|p`VTi9a z*ZTYP{Pps7zcF5|L>#X7-t zzw-6-fWbk>OP#K_bofGg1-VBJBCST2wGrgpv_MIig|h2@d45 zr2HrM4K+ANPc(T(U)*idDDmCBZ$7J{z@VUCKoab$RE`Q~ouGn|R^;BlwK)fXcR4oR zPv;?H{Gg2E>DHFGe&;w`zg*Xm=9NV9+mka6F?GoVr3WVJfUz78(||HmiiH<5U{(lv zLanIOdF39D>|^YYi(e>~q70^DmI;rl7g}9-B?M(khQg92N&^5m*tq4+;^taIF?4Z^B020fh;eQQN%yl(}P_ckx5-%hFf=$qPuDo%C6 z+?e7XNWjT1Y$zO+?~M^+=xcubWPX1IOZ3N~+Q5g(mps_FYf zxom2ttnlK_nEenSxK^&}Q=Eqqym2G2Fc3_bcdz=%B_+CmOQ!oq9D(zfTm2+L`= zM6-`t{^EcsqcdWlg?J(`(g5R7TZ&FIo_=N7CtRoWzet4D zXmwSm|9YPZixtBPl>lge^VWx&;tARcdmYy4ByWtv^ah{m7GvZ=1YD~Fy9VWfIJ<}J zihn?q3$^@ir5uvU!Qa}EM-AoJc9!IkNg?#sQC(R<5V9#2Bz}?t>ZU4lbYQ(<$Rre2 zDCCFM>n3Z6gs{K2$9*~8$=$K_>o|t9?@<+(r42S2qg>usSNsrWpL^PlWk7ps+bttK^G=J^gF-;|9)58amAecejx7X|=Ex^!~ z@kC-V#6bK`ZJntYT*1_VCy@mMfn7EMod8d6F1f}ZB#4O-$yyN(6^0?oD^R(WagACmLrJqjx5guEjwhHuZ}t5tm}aniM#ban zY|ioI_BuVy*a{Cnnu=b{u^BPYjVf9D*T|$#d%UkB06$JGO*C$9C4!p1jlqZ;Nb)OR z4Qo#2V4}8i%^@Aevz?liEC{La4ed(zLPu;$b6%<}vDFI9b`A4j;45#b>-Y(Z=Vu z6AV@PqLqyfQr;Y^pokY+wb~h}wGJSnCem?kkMOyl3WthpQ7f>KA1A<+IyM+IauTg@ z=r-;fHFFoV#H4)z0t==RAS)?pX{Dz!^O?M8SH_R_vc7V?+px^#pptu$|DI(8z06A+ zEbAgo9{?FW4~)<;JY==RMMhW_e!Kg5o`t&3t)hf4ndj9>7Kk!JSL8*%10R|iB@Bk3 zYJ|OqUBMs$MHKW471@lujY%{j0cU?yn3SP3r_}(FpIY&6Tsski2BuE#6D~X7FH#T?5eE^ayP+1X zS+jFnlTVF)cI&pxw3Gqo3;Y=q7t{5E$A;?9iX5FD5$lkluTGy}o!`4wj%v*Z&BtFd zumUKX9IU8y>S~PH>9URMjJKcvsKNx+M}@zmx#(tEN3XlSAQoCI^Q~FgY^1^2kQ(L* z9W ze_B)i>)Z2xJ5$U2f0VlX$Ju_+jNCm_lb|rCN=J7GaVcVT^;%a}s1tc&)}g8s$zmie z5+^m*@o}>NAAqQsP`W1JiP#n+i3HYx`{la@Z%{upK%)KWkSyod)7Ig6*L4Uh9hsU$ ze|?R)jAT10ybxoe!+6~st^d2nOm*km?Ir%Z3v*|nU`}RsO&T^{=Oq_$%F&sV9lZNt z-aSO-nGWt@4f^7Vg9Ka=yzo*BUn zfA$IO^Kvi5(!@k4stFE^(S7((PBVbsynz`b#%Z&LBbtj}EGTI#?`_-0UM@au*Q)2* zFGRZdFBK1;eAgPKP7HP-qvnvKM2ph|Qv5kDR4o|SX9|T53`78NgoMM0h>eWnlQ$8&Q=5r~o?c7%yMnj=$2B5`{66(*;agNlXT^`~(j&Aq=fX zbugu)aAWBaN=i$oB^Fq7o<*Y`Hz)y6KXeM~!OYSz=SuG?!akro%6eXosbZogiHixU zNLH4t$6C>%#zA6WB08x;6(7b;cda5tnIIM&R^G<1(ZF`Akh+XD?0ajzDgwoghEd3W zGG6LsDnX&>B27xGh%%s6F0h2lb0l_|fd+Soq=lX5yuyI-`*{XBzWZrcgP96U1&IxY9Er>-LR{# zjzgY!bkZfJz|QA}c^K2lX$%&Yh|;O0W~Dc4GEqjlrUObUb3aR{xRGI2M!Ge+lJIcn z*JS#~%>Esd0=PCXLjI*q?H1wkD%9R{`Xs%US#|?rqWZWEo@E=dW8qL3Y~pXT&AF{3 zMe9q~#866-37yI=G%dP4x+uCp0>P3^%5T_KCedHmCDNvZ>bkOhHi^FqjaZS{0#nNL zj%zl&{CUy3-{Q3;haSF|cwMAUXE!)u!rP#=@~uzHps#h(o$R0O;efjdnN2(3fJP@% z8;}~@ZJ27oON@t~SfTD>e;FAJj>_ul7$3Ak><5Vi{i*74WQF5fAMxpN_sSFQ=!D_D zP=zPO6WM9}1GkG60O8gVEbNd-+P{f|uQDp==8 zg<1}J69(gs^X|2m_NP0|r-Xv}gt6Cc#5_lQu=MWnU}=sYOa6`hD6jk|4tXD-M+ zolt~l5a2%%u!p=Kebm(@1q0bHh59a(ry%icw2 zD*1llSoa#0Zbg;u*T)L3v@E#4Gzwg6-E`~iza#>U?_)iXPiZHsOd6e7beH?XWN0~1 zJl-C3TIWO~EM#v?;mj61v8~)tLOYF_WWZABRYqVw4=}+l2BsU5CvY-wC^gJ=seauL zr8$lZ!?59Owa%#|0w2%RT7&+`(t(ufVMZ^qsI;C8{%ye8N7K0&h)Y?IH7l}?99ZqJ=jI?f_4iZA0)r97U|{IJABo{u^H|}p zYc0jfe#(jxrM_H%%LR>Jo<8-h!vGc#51S>AvNcDyu>ugYJMUTvZl8 zkMbobpUR{+MM|XBI1`s$?0(#OZ9uA0bGlZq(JJVPq`j;h9(SK{%lA8#AhA$}u;555bOSMigb}qYPNfa__kGh3-AiZ~bP02y|c~ z=XcaA16_4_rH-qGU3#u4%cfd*pr{dKCF*!S%9?3F zz$>Y`NsjC+FG*qkXbc3wNMwyce~4KTnV!PbAa0tH(k@3CCW{ic@{5^|luYF-$rA|) z;-!s8Zz=T$pE+YNErtR+vm&)xW{bs5_gLQCy5VJf6Q5_S8%2PLItA{Li-JBFd%%uB z&+E6)1jgPzKksU27+96uNyi2kSRhy~(sf1?zdYv;7VL7alxJvIu}&a-@06zpiR7y+ zFF6Q@BVHjU07i3#XQj^d%xuRU_G7*=St`44NXQz#D;~O_tyK?TT@OE^nD9JiSGC4s# z8+|)h*nTW{r(rXe@Wpd3WDMa%KV}+sx5hjIK5IodZcc-;8T@=dsZNP#{f@>b!U9}m ze#uF}mL%bzv0X%B$u8(Ri^$JTt9w8I76hJB8O}Om;EfS8=QTe#Cu+V6w%u3h7(V8q z&#YNs0;w+{9oy+>@6pWgeWWBJ@XPX}2jfjOen5vR&z%}1^Mfz!&k%#IGX|(XgPbYOpt|Ik_e6#>?=xwZ zJ|f+84ABv<&Bi_r-=(Y(-2EJzu0`Z)6BKA-JK<&R-TtP`$|01gvahPea@4BvgtS4R8H((is z!=F7^i`j5Krd4BMF%4K9M;1B`1&lac{-gB1mF3>Y&X?u}B|$+h2-@1Mj5GduWoxAK zI{G(C{Qz(8N0|N>``3RKsQ<2;EwqA-?mFBm%(s5nPZ2x|}#afFL>WQa6}WC`#* zF%j{d{LP1F&Wm67P1X$$k9o&8{>qJeHVaW^Vp(1kX+LmzWIzF!ScqUf5SuTm6c7{{ z1sF(V5>TKSAO-i4ksf*$BDM%RO6xeP|Biw5Tqyh#8A@=q~3Lf7H3v)zFOLuv3K?~;gf+9?mjqV8! z)D1|1?FBmr7kd}P2ksdG#|qfW_lH0w0S1}WG0^iblS7uL(g&cx^ipjaAW?0?qVB@G z|GQ(SuLG&r@&)8WqJ5_|Z0jR{1oUWtA|a!^xwrQe_)`Y;{eT4%BZYK8VqHT9^MGa< z*eM3&7v~_s#G(KN?8Wuq_u2hJq4Tan!a0NT7~p-gB0yM_V}bUjzkTOS!v=+T=5>a2 z8rbzvqJ3vWG?>7*7U1-6;loIHCVpNk;D?0>1GHaIzn!b99YPp+cWW9@;jT{~y}=~x z5e=RHb;IG7SADlYii_P7X0xDyCjbQsD$g?ml~Mvlg|$Nc$lD#C0Dl>yy;TiA5~A$} z-U4wNiU&aSW#y$4CIKte7Ef7qC`eO^&&$E0psOO131V0>x~x`OL|Nu zr$`Mg0@$EHd69umUru%?wc(oakR3RBep-LpboM^XxYaR^Km8%TTcp&`10lemqJn^e z{-O{CL`1}33Bou-y_;i@0xoYD1b-rz!gz>*nElzJ*XDb0p5H#6J-;a+7Rp--Z6Eb^5X#ZFF(yz1-)1ZrM=l(-(8~VX%ukquB<`%L=65yM~q!> z_CalZyNaYCn3pfXAV_Gyf!`BhhUkOn4;CJVx342$LkY*Z_B z@nFtFSW+NJL_zuaq-bA|eL#l9oFJjlzy`yxAe_VrWIZ=3IuJxLp1=KQe@4@}`>FH? z3Ev1qiMA!l!p!^w0?zjJ?+N8a@-3)BOzd!g6Qg}pG1uJG3!FAI9Bf4mQCiL3Vl)5- z2yfFLL0N$87H&!(@HZ9mt{=XmeGT{=)FaR3ih!%%5d9-nWyALV;Ck!inK3n8SZ_GGCmTsvYvdm<1Dizljtqr9U_qFH)r&6cB+!j#~(_tx;whf05rZXvraww zG8r!|cH(pc0((^TduYww1fHQ$`F~axnL!EPfZ|t|d*>u>`^PXf%8Xnx3re9%&R#1u z);phZ|FVAB#fs#}{?^8I$2;1p7v)WvRb{9_XG9EF_1SfS!e4luU~no19AS3Kt{&*g zHLJ_`7B`o30-JhTg!Wj-oAZifn6yG;mdL{sHDhh~<9MC3K%QzL;uG?C?7q9qz7bCAd($LdBz<$#)^O|0Ih>8nSIF^MuFIK#QVo|~IW8N#0 z>|neaEf_hCg-RY2OQH)X8m%f?WgF7)jm=o?Fji~yYd%c)g=KdO<6Lvzjy|cs@v}{O z>3sJ-eIypsi6q?~M39fXc0>Q%%K7=}4In+#D143CwG68WP?X}+MXtMtQJi~5!!s&X zb{A<7_EGK^q$^+0ry6*2WS?VzMXN{%Ked)c?%gunZlmOFC#~uWaNA^|@J(TT1DlP1GRZ5Q zX1RRMiCwF?2NlI#BMh}=;T&=*r69KoH;NotDnp?tVI)19FAqyWqyiTP?+=hlRA>Hu=JJs@S1ii>cPqkx!W%aNscc|cVY-jB-ZoKmTNvF~br|3p;z zLQIT{kqn>x7pc+`bfA)@qcj|M@U!dGX0;<9gL%pcnr((%R`=wdro2zQP6D%ExoKT? z^Dkh=zi6&_vq3F`U1&%H4hbpllG565|T zg&1@!dJ(F&3{&*A?srq`=o`K=50yI!d_kL;f>hs=t7l$(IZP3kFXRsYDy6P9#Bh~; zHcyYSX|t;5T6`2#k5wb-b(@yq4j&tKa>>m*s`>6x>Z=k2dHbTx@j(+p-h{TS^+6s7 z)%Dl!2cz;$teRSCQOKihlQeEs|Ih|WMabdLoNZ(wx>`0b!e8W1mqDXbtN$3q~ zkJBg#Abyb39lI~G3c*Ic%-|U?IE3j*N9G>dmH8sdFq&4i0~-d9!KgYx_z=o zB58MH8?wunFO%f|TDAlbmRG@TDa{)brN8L74ke0P7%ON_?wS<)LGEvn13xgPiw?-T z%9cs1xzqcs@F|l$4&qv>q(x&Vtns*Zp)S?txu?-*0KHSpr^N2Wt2t3NdOBfNLz^at zPfUrY7H1~s{L z!~hQD%R+ry}BSba9k)%NGLJT z4=!NNy8bt;<<#n_o&|2f2(f9zT>9H2elRAVJ~Twh5)pE2R+5DsENvAduQtdtCkR)3 zfgZnxA_q$kUU@*0;4L{XKhOE5BqTBUJhg?<{l;9gU%2f}x@+iN$gbu>BXanY%u(G? z>HRa_zBkmv!JHMmY)c+u!QG@8nFeqOnXa7T8lPdelp>}ar{jn(Ozor|O_UWAw1$_d zx8@mfGB$b6QF$|ik+P&RzJkp4X0eM)b#`=yCXQ(P`U zZ_3|F3(euNP}!^8yvv|ZO`#I zeND2tZN}N>n-Ao@&0n5wY?}4!QbxBmZf_Z>&ejyGy%r%zIuVmi*njIK4L4XEeHJIV zh2TK4jTAe?8_dr?FwtUX*mzC5Fps?m3&EiW~H|R4dAob+`xHtYoT#|y&QRj6G*?oOMEOo zb5pf~f82S3funX_@q8no>T6WZW^Vr(R~iZz&pDg3QuFq}@6IFNj@Dg6hXDrXUV_v{ zU%3W1t(bAkyOe}R^CTBjGqm`*7IT-v-_FJt3sl?TYHY^e1^ab_z9IVLX@QV!7}QT= zL&Y98+`QK@x&;JQmEqi&bzLkcYV@#*d7DiL<8QlA4SUOn6wb#2*6`E*mR@TwlH9Tm z0*AzVz}Q;Ln5Oq$N%zt>S59=8&=wDV@_cXWvYklIac~~k0ONK~Ls_j*a)N~vPN5d4 z*OrB5a42DYqRrf_HBW$ZTljaVK!(}e)aT@n4q}O-z`;15RPI64UKk9KBfBAJS_3Cv!Qu&N$RIOu|z9`g?-NcV#=!n8sy?MIUe2Zoia`Ez! z;cHgo??1xMd9({aRdzgClr#OeIk~Ta=oT1!NvT&$fJX;=ft}n^xxj^n${u#1qMgsvCB?+l))$Y}7Z18(D|HR#5Pg>2k;h|ISmY zpP{j%OgcepW^_Cf`5Isbj!D6(>wJ3FN*3$rbBhIbu%mgG)3 zM`PkXhjhq!%GJyQ7*brAP`tn=2 zsw3d1t0p&l5MeQ+`0TZ#uI!Q_S#B3=US0PTFKK{~gZT#_x~EaERx-~jO`=YqsGS4W ze0X}NX>b?`fL$W37%esAycLu%*N6NmrW&GQYO;9{f65`kRj<|G081WOoK22|xvY6h zWU5$Lit8{@{qENm!=yD5tB5~MihkwxygoO;<-0jPtY#=zeKT`gUUl)Vg`3)5^}W26 z<<;DL=6_SY@RI&G+cIZXV>Y|L;Xi`sUD@jQ#a>FI6tSd8w#t5gMYZ7{w6Ro7BQ2UdCU+7ioOk6dnx^lLu!R#Ma{cjmzIkKM~daz@Vuq0S+%^(DS# zks*n#V`3&L!NM>D6a^ga7!^#KsZeR|Q$|mP$s(1&ip{ggXy9>;$PED%J)*<-lsBwd6JOZ^goA6_#f7To(bYmFSMz@&UR07Jg1g2PBV(Ko+ z4`*#kh}NGbZ$jopbCOf+UN@Af?#$vf3y5dfdh`atG)dX3f41yq1MFXc=Pi zctzx^9dLlexf>|mhZ-Fo7~KQ(0?G011^W*vO`n>3aN_sp4_sKg{uCqP9I2W=ux(3y zz34n3A`P8om?1AMlqQ#2jkl!sx=uJ+)96BkmlAjkF|?ePKmzF4%q-+yoaLB|ZG`_w z5NY!MjbEF>n7S`!?N~cK4|R4p0tCM@r~6X}(`wb9Up0GD0Xx1v;y$zET`Vf2s~R zoUcRyqpEz`2}PP`Esb39cTy;S2k&6j67yuVZ#-{4K_|x4&l1UQ2S`&1(P zIn4v5wB|NjFVp#^LfC0`-EXMjKf20wE2Wm;T_SF%k!O@${ax5KK;H%~3-)d|9o9L6 zH7GF(aGPKmqr}zTRmXJR+8nlNU!3FP1frk42$8pNY$;cy)79ogKL#H{Myemnxis8b z~#QKnKT|AjW4DnvHi>fukPE=5b0uKK!RIE!wNh0 zds9cUURhsS89S_(ph`o^aI0|-lJ4w=^fBDzz+uqdsTwaKZN*P&%ZE~q4qw+~_=!07 zt@Q-_qB5g&u2U$$<{^j%i7iPks=|uH%VTZgXhKAjHd32^3!cc2{?Yo5&pPTHR+i|* z75l=PtNtAh5ik5a+EEE#oU-unR=NGz*}*Wfw_jgM`;;xBTK&tmtPb$0QAL$egY&d- zK4|hRwM=jUA@Jms%?})B7@qJ_r=G}!@sFm&x-`zRW$(nek1{g<3E?ZeU`p2H*|ZkP zwU#6x58cD>PrBt7B)P{#^T@JxZj~1W;PACnkSCt;lAplneI(PkSklC7j1}ND%9fz- z+}18S?xG}ENZ$y<9^Bv#ex&=FYwTBvwFw$1O6bL9kTh{0@e3MdyyDN|2@|SXMag|>9qnH`Oni4MV+*&l zI&hx(*T}~FalE-_0K-I z6OU+L!ReE=c&W2#M~?EK%FasTfj^wQkMVO@5maH0-rBw|SgI1TuRVRq+){~m^H^WS zc@fy#Ocu<6bFXVJUxb0j^pa5Zs2Pt}!N4BMx0Cq|e(}Ia_Qll)GgM$@Y?Qcs1w@Q| zMteCVv3`PS7S=FqLN<)d;Zn&s|B2xl#diA2?N9Bd>QKY07nu-2Z0tx38`%gorBjc& z%6TUgm9ZtqnhB@b=1D1TzS`~3lxw|`oI>8`>rI0{*VH;}h{0`&f3x2Y<#FgvE8;dB84Jn6PC2A7X5AJN#N7CLl&h3P3mg zns?^#Ea-L;A2!oeAsJ##IAOkIiIsX+H(lva_0dt;Q)n@+Zod$z^%qt8oeK%r&`ABJ ziThI+WzESLyZ~>loKIKk%5CgB)t-LFXc@E$7EE-SGW{;DHhizbrYrM{&S6)Zpu3&Cwfb-@{wKRXPSmH>^>ymXwutube5-Fn&P)5|IfzpvFTg<1^n3^eV4&? zhy<(vCd^B<_iYX>hG)87sNye&LO0I|nr`QMLUQvKl_{~_g;gK;brva!uaG4&y*Lv5 zl;gS_=`S25zp_C>Q(|O}A?9{p@83Y}Q6Ndf1aFLmWctl$A`AS|OImtk= zCA6?`eG^CccGp`A9^4%Coq)JPRq@=)6r$u3=^)m@hmS8c8jjy%^tmMA-N08RH&dRP zO*vjvkC2DN!u(LK5I!fn3_N8o%O&fQtQERncf?(|Gu)eRl03V?1vybd(h5+H382^b zr}B-p#V8rl4OPMJ*NqDP8k(MoC(2eyP3fPdt=;8X$k~vsmgttZ)9ol|O-`0r(xi3` ziXjb3_*GG-mIUvAslc1Kzi5dXJ%17QzpM#8 z+5a|Av^QS>jRf25W}(B$JuYg-Ho#Y7&=+}$6+A8K1Pz^AF7Uw5c-w|nAHG&{a=-it z;t*(r3f-OwJ4PRzFC2VSMY4yJ)aWIVYSnFiFXl$qv;Y&ta370-BAr94<7DXoO_^U2 ztEQP}9pXjind+Vpf-d)9QHsC5f94}tH;fucn-YXw^i$%5W-EPU^|SdcZcY2A$<`a) z#;t=YD8C_C9ZSI0!*1H{BwRkw2ATV^jil-e1Gn*8ePZ2Ze&Y-najgrUvHOo|lpVtG zf%WunImC=_#GCq~hJuxM#{z0>TXAjn!6a&teDQMkN&zjYv@y-ma-=64UDVSUDnt(E zcIq4Y^hJfxu_fi3HdTx!y5kT%pVlEFZM$D=U?rk=Hja)yZCzO@a=c|Szdh=m2r+xK z4P;@{4q5G$saj#Zro5ORE;;}MKS0Y1adrQ<+{gT%Wd46w?qm92sva{D8yDdJ5&!<* zavwV<>;ED5xk9QYZ#C1;4?@igMWJ{h3!kcaG0qD?i$RR2D@7rzYvru%|o8`pA75_OLgJIoxobYI^?VJ@Xctxiu>)i5=$`Fe_N#AWTA3 zOQ)!|GpLLM1rZ(CYoG+g(L#-K67vcR+B$`dMTZib^ra7`1_u%~U~Hv`ms1ii4(z&_ z9Y|s%h%BXrOsxgLqJn{#_>7Ji9tBy-Baq}&Bm`R&DnQZ%YN1(Q!VPY8@7-&8TOmzA z97aS-OiV=i%tlak6Ea8uP{EWU4sj9b-17A2O$(y3!bSFa{uF@ac7h_D(EL;V&d#8N z+6{y(V!A+jh-OhEoq=#jYoTHwK@dLK0JjK>;CJTCNCCJO=K+J?eR8vIoC;JBz=NRE zl2{<2L*}goyHIdQJzTS*+K3jrQG#E@7hl9sAU`?qieO~-H%|Ty{^-Jg{U}8Y0gchL zXh*T4YoJ#N(@=SVVFXYop{QWOO1Ju=r7Re+GvQu>iPN)?9{o4d`GWAKq(o=}yE}Ka z0JwSdaB#!K=^k;kZ#4-2@pGzHn)M;@zD+uU;x zEW;P`*d8Cac~~gmgCGauHD_pV@(|2H%!1y4cBYn zPo*nltOh;E=nG+@b})G_;4^LXr)AN<9SHiJG5r~NR4_E;sbZa^rc z>SY;SYxp?Vlyykm?@Jwhha38;vVBWHf{VL~Z9~3uzoyA&zO*skLfs1p8UMl8rHz7{ zhWVdW`5Zg%P!laMderQA1aEnLWe(J@0-J1ZI^g)I!NBwA6j6lY69!~nXVKZ|XUhoL zuMRc56zY%rfhh@Z99NvnL20^#<1!_D;?|$ws%eb|2#u^DOHrJa0w+T$%7#qt3ZJIJ zofM#{q&vT^{de%Y*p7#Nx8urqw01S>F)F8wBmUIfZ*m!j(WpT(y6!H3HYL5;+xt5&agt&z%;JJ$_|lCkdC?uxROj*y-hN6n?%lOjo- zLZ;2nRmsDhX$u}eE(u!c>y~+|@440L0e+0a(0cJkk#~Q8Ew*RW`&fat^UMJiEm zpjdO`4%${$Kp5E|u~MUoke-)FdabOB|Kpc-m3c?GuUfA6O`RHHb-k*D5A8Zo7so}H z7;gj(4(!QfztV^TA>%A1QhCi>XF#ice$L5Xx5;pP7bw%g2I|ilQYe-Pon((B);GV_ zK{_c@g=9ftomE?V$`R_yJ}V<2JmMCvYQN9jb#zt!rb^d`OC96_s783n7`ZmcG6O5C z{Ann)hcT-sAQQHX%FMd8#gM$xDR9rT$^5Ri-P!*^+B*h$(zM&&ZQGi*F>PBjZQHhO z+qUhVwr!jLwr%sw-mwp!IQP5XC*pk0sH^HjWoE4_SFN9QXi3! z5@Y9WXrrzch%Pv%qlSc(^9S0hukb$^DQrp8I6!MDPqP>PTM=mjqV zr;_mA$dCxn-`smiHVr`vi4Dakl`CZ#vrIR=E%~%5N-jMw?&3kV;Mk}Y+iJUH-g}2! zZP`%T?A2Kj@#+qHpGHk0A}nE0x;t-L3(%9Oh~orSGs0e7@HsJuaqogho5dXrMhk5J zkOiA$_pi?z1LoCk+gydoJILigrn56eK80OPzWWAe3O?6Wk%;Mp)&!-GGJx`?)FJid zBnbu6@fDAjx=_@nv+LGdjbSQxKyvjRkVo^gUJU+JUP@eMORp@Tu%ojQ!joMqJ?b%>ArK+LxIfJtG24vSW3hqDY&;m=WZDQgJ(-Ly(B$5y=NBt~->b#XZTgc?f5nRz$^X143W&z?=)fTs#4I z?LT$t%L25rY+jR2g+-v1E@A1^KGS9B!UBL~i);c4h@1IPXNu9*x*ZF%)`kZGCQhYLaHqmF|h-oy)O zQboS|ao9MLVt1+XXJ*r=P?D(G=%bC=*PbJE&ahBs4$XCLL5!KvJAxs59>r9=xC5{KH5IFE zEW4zELw*wXl4xV961&qRHt$m0E{deVQe_!j!R9}a|xx@~^aGba5JoZn(OY->jPNjyV5bdH-m2RB~j z=T(!4`8Uzr7{a=!Nn(N_cuvH5&XO5*U7f8q8nZ*w=8?4dycjU1Gltryqt9rTBA@~E zXyO?@eR^?FO_?am#F`L}yrzLH)d~4aY2}A;6@X`xJeM!K*oVvOkK0bjjTDTjc7Tc1 zaJgTJxy?_zxO?0d$MDVxb);{U&qkgPclQh{fcEqK+)!$= z*1NMnSGidtlKT5zd5*`WyPPpFf_k`iuTd`TP;F1GcEgTq)ds4Ss<3lJ#xF8X8sf@* zgxSYVmdrg%E2MwSBL#26zoVD1Zgvc?&kfb=o+mQCCj0L*BkboojAbm&~^i; z7B6aEi@tU#ukIJ557_GTXc9t!yjy;mykjTZ3hEQ$)3GjG>7IUzl+I8R=$Xc~3$In3R*OYCUecRFR zzf6`Shasy`BszlyXJjuQO5}@S-`Yp>8|8g%?<{5|`agMnO-5w_3sdixhC*-@U&iX5jirp#{lG z@>9nY$0Ld_QD>ly{oii~BAZZagBDGS?_z#KLRFSHyVutF=C<~rE;>}@VwiVnrP4?1 zz~nCJIRT-j0{eYr>ZPejDwy;EgP{w(wfc`1 zv}d}N(DDOS!r)BFRj_cISIxT?Tz=b~r+;1@kAjYzk$IAUC@OR$x9oS$8*Bsef-+68~QpPBc{(19Jsjmjj-+4=C zBj%3@4f!!Nitg2IS);e#w&b;zQfTF0$}2lXL2okNX0(?@gNLwxwj=7~jQ|JpGuXmI zlX}}F(!)NL_P4|ei^MH#&*g(8f1q%;sJ(o%_@Xui_KNkRY72baeSgyyN=s2{1DP|O zRUs*_L~~M|ZfY7uh+?pA^U5U-y0*_h1-HX{Z7rrX&+Ns+Y_Z(f-cWA6lp;ULrKuEu6vBwj; zvL{{~(k^ST*Z>_9wqm||3oQySgy+)ksArOk?8CS-`@f&*>%4L8kLH9NX7db zH}}on%?TANH?sy2_@__FT)P&FmdRpk)>ETTUbj%>q17HknaXL7#G$vk*H#1ZqqNi(DZ6=INx7>anAYTUd~jdM6$!EBl*$k3Qo$d+`e9)v`_a+ zRn*VdK<=fgIZAm+b1GZfU=jxLmdse8-`WC1-#JPb)odcoIb?*j|9w(k`x? zXSTUKF~TbQ^I-&c97uK?^t2--$MXi;yu>IcLtMEdSZi1us!WHjkOof{ACX7cOR$^- z=bvUxa?tIC>NSo%NE1mw#I`~)%8K(V^Ol>PqVG9vUYvc)=aeW4K^Cd2m{L^ob+JAw zZZLiBBh|*WHdXHxt9LB6Dn|(aW}5!}msgb2O+^nEYDPEP#JAR#FCvS?^Ddzs@QQ|K z4S76wpu{4a<_yIALH7%{5O5Ps)n=(F_2P6R&lqHyFD`|XBr{mJm8`LbrRR)ngaQWR zgY;3@ZJ`aFN6dLe_QR_qWuKOv%AC4vTlSa6#)tKL%+^Hc9C)}*lGX0jNU8Jtvq&`k z^xG8)uE~MleW_kC+dB#0AAu1&G{;>F$*uduv_JQtmQ}&6)@5s+Yh#wsLQdG@{(sWK zp2ioO=sCwHfs@(?#a+dukOCnp8QLj`kbsLHmSz>c+`n-UHMb|v2mL;#n^UqVoS*Ya zbS9Eupn{BFG+e-fZE0Hk+unACMD`-iy9qOZ$*`A7XT7W=$8&>T$ht0TG?|+!U(X$x zRk(nppOaty#)CfYc1xzY8sTnB&mM{#Afu#nWqW?4Du_GB78#%#H3qj^fM?BcwcbhT z4r&WjhGN;vWC1*tHabv#Qoq@?_njssf~6~nW7%fBR%Ff2)Zbnu84{5Oc3K1OK&e5i zug2rRj|M;3Z%Wun#y&8pBh6x2`V~2{t>61|(yq z^J^X5uim}CC$Nq8dx8d&>Pj&79aqS>pE>2P{fLtRwFys#3hfI^3HRB5)a0rsjKIzu z2vP%X^%(O~5|foqz-qE%y()W{vr@PqKV{cC|7&K5)k?7C!`HALu3#Bc zBOak}6|Fgg*BQ8zit4K5w$(|Be8Bf5FdZ0wm`?MpO-)_!Wu=WLfq+ z5gT~E$wm{aJpQ(Dz)~=iu7rU=ow>c$@Pd>`VKdRh=K2Z#d&xs3U7|38@f|BFfH4~y zqn@YwbUD@YB%Wa0ZOw!yuYJERMW6?cuxY3yQ;D_Rkyw`Ua$)Kgb2u<24sj(rARFXF zaxF2KQ%q$fG3IBuNLzi}$WZpRDF50S>v4CZ@F$8L&zjeaK$MfcFG>|z-c#6x<=mEM z9BDBk1=X^=o?A$Et?6P9?a#7!#md`75&(U*WNABS*AWl=$iZC zcVt1Nce>+ptNr*KSpg)CRV6M;Yu5RbV=AFO$bOs87oWF)#>8?9eT7*>fZuUm%<$Pp zAVH`omK+&vf+ZQ5hah)q$MMCONZo#$gQr%>nu-LdDqlxJUJv7M2IDr{3EHmOJVn)3 zoeneMsgh~`w(ej`=pnLf(L*rq9^Cri^&c$M51$|_rD80AI?^^Ni^7Hg5vyh3yllO6 z@g`IBI0TInrB%xs*DBH$uozc&azEglPY|PL0go${YwDlT7O~JrF%{0tNwcQkW>GMS zxu8KZCQHrn2M;8_uQ84g=tWf;p#gX^&#%%r`YY!zpmSqi*pY1zEqw0la!ZW!GP=&S zl-?>@Bw3Jgsxah@)R*bnsw&v)i&$l+BYUebDanwZV^|*D>=YAdqxe(uA3-z8N?AM7 z3obU@%x&cdR4|s1(cNq-topYF-P~p>%AUqpc`G*y4Tc$C4d0rSn;u7=524bV56=kK zSg~NTXCseNE2Cue0EDvc%guewUqP;>JUfHMNL||+-ua{F37C_Sy_|_V3+!Jx7|#@|29nlRN**XeN{^il%9Z8m=7b#>OjOvz}B+Y%JRA0$_Ei3 z9v>B0!G(#uWH}hY2tE? z8Xs}6GBwxe#~=M3@wQ+4g8AekoMU;#a$e7+n5m+)a=!8;d!t{L;l#@C2Z!2UX>W@h zGx;dOY+S%w{Sfu`gr;3Nbn4EGg3pu4m#~7qW2#&i6tVO`@MZMHv3F^j?&I-@Z zO5h1d!eQA_Oxw^%QFO(E2k(&jm?kICyl7S%QXdUTllni*E^<6`%(b>UytLJ&)yIG~ zbdamNEx7Ege|{5oJnsfSE8{=k+-I}LfYy0T(-|sp>2JVI>Q60Hk4kL6YOP$cq(j8G zDHfN9gz)+P_(GOu;|UaUP;c9}y=kR1PeOXL1Mf%>x3-0RbuBj7K za_Wn%m~N59%U_pTL&siX`n<-a%kKQGH+EjaqeabJ-%VkDuk$x1)qC|b^Ocz@R-0!{ z`%GAu9TnkBbCZDfFjL(`@}hZgBVfCPd&T;GaFFD914BhRx#>3+2jqevSY}N9le408 zAWCy!jewZSk}-eOhO2uch5t}ytfOtrxyd$!`FKgK%iV@6fy}lrgZCBn!qOCXM-RFQ z1zYOEsUBg#tzMf^@*2Qr`MLIT?$0UvRZUb&Y@+^rG`Kl6U_46}Fz*C7+61FImQ2AI zVq%bf+}0AJae0r=P@~S>r%{??5;Hcdi;~~L0DzDSO9!{n1qBZwqthbHtEpvCs{Y{+ zLzN=O#Ef~*gqLd$*eZDLQ zqSlOGHe@z@G3-Og~RFYs4tyj&jRmzrWjU!`AbzEp1&u|M#ZZ^Sh z&xP=QTPdeolmx97>)o)eA7aSZbAxnG(~zovQ3{KF3uh5LUqH~la2V;+p^XBXNw6JT z+Ukj=`!wW0b<{Jzcgxa+IxsWzF|s&fj-@;FNiaD-zW-|H7O6*MRHqTn*Ig7~{&Wq{ zM!S!N=q%>xA}E-Bs7_OEx!%A1bGg^}L)Wk_$$=~-bE+cD@Ovf0rStIhFhjFcYpsZ& z8gr>ajXK-F7^;lU4@E%Kj}BN32*K|e7YJWqhYknmtURT~4agD*7X%MT8eUGlG8k9@ zo)#1VXova-?O?<>=^HTo;nB)SSBlc8Rl7)xj^(zLkTcz zKbIwrTy4Di0)!*$TZuW>#d-PinaB91FW}Swsv7-FOf&%eCLv=l#emO2)L#50#DMP= zg0}duD^9SU6y`U{X_+yAn0$H($8a3JQY1$Yfy@DoAYAmv5Oo^FZGdB5N6G~_Wfl5J zSt0AlYGt~xI7G!7byCkx+8ysm()OK>-GXHdX4q>LS}XP$4g3?%QTj%vfl7vyff@}q zQet?e07f-O30F}vW6}(>gdH$74>~U(b?Aa`dmf(26YTS zmH&sy{2w-t|LGL@U*I>U{|6|6gL)I4{9*H(byhWl4i$sR1+v8jRe={LGd|TeEKe>&M&bF_=IlZ3W=suFX!J@Mr zZW3+3zVZQ=9TXpXkDAqYA@j)b8C|E(EwMk^Hm$A+Ix;syGpD|uO5X2H-0X*z*+(`r zLpQ&Ej#6_UMxgSEz3-lBz_kC(zv|vI*|e^$0be+W*I9g9c0~`O%z&+<6ec6`Eq?@U znTMDD+q$Flh>TWU>8I*{Jj;OIGsSYS7*gr5mPTO~f#T)1 z5{AP~Ik4s6w(<7r4UeDP`LT8KNZ08P&3(llyBnPQISZANx7>mzBIlZdL)&zQC}{M2 zT)H@C@46<}{~Pgkh>lIVq^|vl;Zvc!6^_lR{ThLwwq_2`Ciain#x5rX60M&RXxt7H zC}}oqIcRv`+#QOTPNS}%xS+R<1R;7Q&!qwo!_W>8Leo#WIg7NiZUi!!s)k6pdhDdu zIb;c~d%Xm$$a$Yz(MH`)YXNb){>Bc0U|}Ro{h$^o5?}a%9m#=FT-fXK4^?EEWkWK7 z2&MwPE*O#;&@f=XvUFu(0t zAl?xhU2u5kKMq``1Qm|6c9%#jZt1}A;JL)df}kGZ3EmEKjxV!#Qla!%smNCN1S=?J zk}}zA>Kw>YB3V$s0;hJTj%kXQGe=}^k*(`rx)}8IGK_lb?5Dm6E#y76fPU@6 zX${6-cgw(MKqblt>P3q(?Q=cJ=VMX#=C#D?29kR_zu;Jf&(JG5KV;h7mcY2Q2T=zi zCW;+)BqYcUNCB_J0X7##My|>M_=-|3*L<$;!m8OqhR_0(rbHtS0^-#2`r@VooKcY& z>S9##K;w~H5Npx1(#*s!oQ#OLpL)zrhB4ax?Ed&|L`n7G>t&EG`sTP(N963yJ8&g?96f`Jv z4oE)%f1tz2#_k-R%~m(V$xL1v3LI&q^Df3r-opnebtlOC%EB8^f1Sb>Ol?TanjWWe zlM#A9gYec$l2VZxFmJW1Pg*hcbq@d2zD&fb0e_;BJGzNu< zb*XiOU+Ax|;=WAYgKEy~B4jlk(L&;@a^^$h_^}fZGZ|nIi=?Cmf?Sp1kj}(o2hkzm zyPXbel&9(tvjQIs(i5>VOvi0BuWgi&chSeOzgtncfWSI^^$3q=j zdXc8-U!)aHTCjtfN7=LU>bS8Gzs@d+PfIExWbfle*aEl05cs=m45*QG#v zmWw6~=1W&iHLB`W{OzYkTgjQO*s0Odu_2zSq;7dSD%SmiPqYtRmVU>g(c;q)p@r@! z^E;~mmp4p{6L!d;hTQ|%amlH}Js@$(ltUm|#>2~*f?DCguBcaiM1}JJo7pv#acN&( ztL`4@Uh7o*+?OBkuJZFO;}z)z0qloe-al8=XCeVIgBE`X%fn3ST*W!U$4>%oN%K8= zhv@+Wm)+l>`%liH=hg;T+%w2oSa27dNZ@w+El7jg+);2XpLMeOA4Tgsw55P{Ww-X2XtzX2wr!@qnWg z&N?vwF?B^F(#i|Rvkc8XqTw5dSYf-wB*RtI;U$DmQ6ZU|_#VA{qqMRm9wwXW`b~6N z8u%o;Y2qoilsUy1MsUUvx>@>pX_X7tnZ4}bj`A|<66=lGQ3Wb$mKIsOIxV5P12z=A zm#nk>xRcf5BZoVu|EyE>iMS6a1Kv4K>`*S*UiU7HL5A(2RNU{elx5{aa0|f~Q|PW7kC$A(|(t#_#19$Nfkyx-VcfePX+%;8a+h4N^Gn& zG1fB*Twj6)2kbJ*ZUk}%wIQkGWF3bgFcx!6Igk}a8;WoR_FDZ$%~y;E17$1}{aO#m zqp>D_ULUYx_ihTVa>ToOzFEQp`89F?`({BEnvCc^Th-#C#yJsNBB>uK0#%b~mo6O? zmGvA#vBi}b={-d%1pA(ucRLTQIT<)9bQu5Y9n`P6kJR!?Zo-Q=Z!qT@<`u{+`hpd& z$uKKUOfboU49@$w;x#Gh#!au^Ho-;X0yn0GV&83vhihG{11pW9oSjB1K zeQ-betL^ZX&|?Cjss(7|fpa>Yj@$IT=P)by;W$(0>Hvri(GGIv;~_UQ_V-6>Shsqu zfy6<>qws3y=r?Zv>pk2&wnP$D4i=4aMM zh$bJWRt%SIKh(rQ`*JXUQ7kAG)QdC;P=OYv4lW3DVg&39zoRl83r0TXj0q*%7`%WE z!J)|zxLd>!xQSwx*;(=1(>JQnQ{~bg{+4)kP8%oRXuW^K$N+CHJ+0YVbh^Wn}MTQB~~P@pm5nE%kGyB9MTJCu8F&% z!y-J56#L6p*LTzJ@Hz%C>R7~YcmUGMOnU>+ryJ=3&z@UrnI9+nJqYbDqg6d{OnMTd9EaJ zn%wx%U%(4UcY$T2myw{E2Q;!#kf`xdnR%jWb_4KYGB3HFUg|lwLOb@oQEf6VwfV+` zUwoeP&5Z1vjuuZ0s0z}gJ_TSdYO-@Ds!H|sJD|VDgJ`)3<_autFQ@j_Z(b3LYrtt4 z&XJnJ71gZ)=qf=>=&GyD(@tvF?AKk;I1D*E9{7L2T1pHcD0)|h%FyxRyGFV<*x!k( zf(TQbYi^tCd)HT;WH>~6d^masuFQLE`cn`4G=7!gj;OM!J>&~9EgSx^FkkOI_L@JBs8M2keTQ4lPY#b#j!N@t%;Jtp9p*PDo^Q;7OT_-8;V#YGm~H` zV0Z)Bn70UYFezK^ZJ<>`CpTpLA&**IcSpH^Ko|^Ttohy?DX0eS^8WUZt#iKqv+U9Z zL{#rSfxz}BkU&Ha(ydS^0p{Y6t89_h7>b?tP(0(-Xc`qp#ZPvI22z(Dlevgltkl1{5kjVjJ7hLKgyabM&*X<`-p!n(QI2@8#(V3L~O zK)D9#39YAJra07X=8cg^gTgtJK zqsB8RVTMqjij9`!*pmz6UPu2BZiX_KG2`{YuXw$gM0I*m3TyyRY>V7Otr5*!f0+i2 z*g0~~_Zuh3+4~*KbkgqGZ6j3Cq{|Ct=TO+^25NT{-`Y93EIq8$YW%CDYIiOQ)NQRX zec%k~=Gza2_Z!C0LlTjJaY?2s1CNnzK0w%5G@V2$liA$gkmW0oxU05C$qiV_|B7`S z*0)_O)?J3c*&<#i99ncHtib(t=$M7?84LDtwkxd&lCYjnJM00d+SAsQ(YAL6;Gbpc zT|Z;NV5m@PeyLuEzfd6tSA{-1D<}a+3v=<{?vF(qFL0!j4`=v@_*Q6Vl_0wvANOQOn{lh^&}cR6GY!aza>m#x+5 z2eh_uqEfY3VHT#^bfR*b&NL#?VSrVxs%I;|M?DSm=BZ4g5;2WIM6Z}oG~*92820X1 z#|)GqB>D`%+QmNCY>yaCAYc9}SV5ZNYA)Qu#oxlo-&Y z_E$=(rrpz48-v8dq7){gp1qb{DV>kcL##nt5|u!Yag(f~9tt)ppC#{nR{HT!35&m$Oo)6Z8nlU_q=bZjzmc;oF>Uj!}v~g~R8aMP6|{ z?6nyHKCU>czFVm~tK7h}U8-fwgqBQmSfxj;O#RMsIuB5_ z#sv3_v`#;D`f2*%KlzAeE%Ps-R0AfF7QMJ@(6+N^{NIfIshct(<#EasI>eIKb0k!} zR_}^xY}Rl`Aue0H`RA&Jn@Gz6?I|wUQ;Y9~Np>FXkk6vD;lB((Q{cY(=4_3w2(q6R zk zWPVAQy@`cDA8~QqXk@ZSBFGEfiq;_We%8|XIhEijPMN8$LbyYOwqs0+#xPnr{QOmi zVr4DSlz-YBS?{2dmlu>FJxa?E6R-V@epp4g-6gf=7>e|ysf|?6$78*+wdK?Ke)Q6~ zjo%OXP`z_BEjX#q$ynsv0%lI5YyHma#X$#^b}E6Z7?;n@Yo6T+@%_UjIR=${Rn<7z zlu+oY&A2vgJgv8kl>@1;UMm5TY~Z(}I06_?8)!8oq;%fclEL4Ua;4~m)3F|nuw?xF0S|AZS-1$2NC~`Zc7-&T9dRX-kI2K4qj#4i?IJ6(0FAN?WH4)JJ^NDGu zNx41zJOT(%(&H-<_@qal7Fc+M&aIxq=;}fUYDwe7n?)j0H+ZP>n+x(%d3bHJyJ{Qy z#gA_iE)Q0u60P`)OK&j6sHQsV4o8G~7{8Y_@-+CG2O~(AC{*mxzpp*-GrbDRI_y>%cG=!~@CaQpM2&rT1uW)lFm+!H));xoLG|Hl)c(W}?zLu_ZJ@JxG7Yy@tEaEQPt6#d6v$4d z(LA4LTVM)nME@iHi}pvYe_u5#=pRAP-%%Oa@P}%QWAjOO-822~y>9qd#abH0$96r< zLDodscqxC3d7Nlr@9LTyTB{jg?=WzgCfs$n7`w-P+2A6gg;lE8O{{3>dOs&3nuqW~I!!Bf-Bwm`cCM$miRai%>L9t=JB;#qfL|m@F z;m6ouJ}+Js_SG}HI=?ga)2|8PG80wU7I>8dCzvk9JbtU~GJh28$UBeBJf*(7E>3y&7PDwUUAWm6mHbM`K6Nx-n#whS3 z?B&XD4izb@*SZnl)J_@@TJ{Ha$cdP(6Aaew_mny7*RF+LcZn9-1WDfIT8Z6!b@Yjw zSUF?*Y)}gkWPhqT)ea$yEHS#^|DMapr% zur5(mJ1lhmzNFuP(31PqA)61?!T^plU3{HufH5~k zk(X@R^K$!i<~xFhiTDqq=O4i?O#d#}h4a4<;tIx&w$2WQ#*Ty>|Al(_N3hF(*8R6c z55r%5#K#BY=;UCmZw=#?b*U-t2pC2GdwygmlV4Hgay@ZyK$}yclp^djQKW>2f)<}3 zmJU>y@%rfA1+)pz3N)WG?lMjhpr+%>-+Aq+2}*y3;dZ-#%k%O%FqP>_0H%o)5QXGq z-=O^;Bth8!APLghutoaP`3{R{f4(2le>z_C^%frxwXQ*drfyvNR_p+G*8<-Dw8VD3 z6N-AY?1&RQMG#4=yFSONu4vsJ%0BwmmT9QGS6U7qIvn~g z%OqhE+fj=IBK_nh;!hg(7p4>W`_b1kCc>|yJ>VAVVH;{KDJ%vNaUSZXivyxm`G&j| zpeLAeS!45o1X%F7R66?lQTgPw5h{5(U2S169UUaUx|hLV@sM`5e3@G(nFjZq7+z1cqw9=Vg1KvdE*YGA0=lP*t<@ zUHka;6Rtti8T6{3?y$H%z8Iw(X~fE>`Xh09yyP;RSVq}3(sPWk=FLrG6Oq*PrNcym zFkj4VXr2Encb*i>Ajt{zV?g@dTby(b>fVQ35KT;Flv0XI95x0Ec3>_6D;R5a%Gm)h zgSB6`R+j(joEgz z$MU0dIoTA_H0fsBK`fjS&P)@oF)@-|Or*hkO&nh}^KCH?I2+L_jwzT@PT3?7)5AYg z+nGZJkqokzRqZA28vuB3w>bN(HoXOSbaZtQOCDp|JjaHXG>VM-IV+$2NMkH_%@b0C zY2n}B62vA=&iKXrOX6;lo3sG+I&WeNSWnu&&3$^~*d6)|ueVzacxPpg`zI=%G^VNZ zh3N8o$rjoYksr!X6c`#CAZV=^Z_j8{ui*OEtO=|+;pFWyTOif2K9xupc}WpAsB&h(U#dhLcv;2Ou;5S+ zr`##5z+Zo986`0@Fp9YPh+%{fgDUr-p6%ss&@8B9JNn{b|9syv^qm5bPNqN#i(MUKCaA9rEv{UyqbA(rr zPZS33i%?2#kVzZg%9zk^iZpNV?sGW|$_2SEIEn9w%@k=S;5_=%w)Vw=alRKtHv}oT z0j^a{;Dz#w26E6oTSTeUm#P(zh4LSfU}V1%q$sd;aSI->3jU5o7HsCV>?m6UL8YV* z`Yl5vL*-l7Pa-3DQ6Y&Ep{ArC_S4A+va5y!zFqCmG20cYHsb+ZTU_g4{5{GHh4gK_ z<7a?vozu|j?C~tTifwr^&kGb)fHo%p1d9$9GTb#{Nv+ksq-GI82ZS;5es zgb%`J609TkmKQ#q0{PkIoY8P!o=&{ zcwX<2a zmN?h8M0N?yrho8XB1m&=EYi$A3Lnzg+8GoXmH2~uTz1p1Kw4KTA($}f*pZ5j$PBCX z$)C{XkEx;oEl+h`eD-Ej^88p!VL4d>s*SO0rM`RV5_XN9D{bG5UZgp7IvB0m&*TH#wv>CoQwT3Fpe#{_(O-i$fQzM`; zmZyZfSYN|$jL0O{7yi>JQ23ZKGM`TES*t6!9dog|5o;7=l<2rEiZl)E&T8Gm*R>*3 zyXltsbLi*JO5Z%&;~ZD7v&d%N1gUjwvhcEyUP&Fl2$9)aK8r4#5z;kpYRsC__sAO? z>+cbzh^UwW;=sf}q%`;}t@V}sh?qxZ)lWvxzcx`j2rKDj)^~;>3^JjimlrQ>4?2ffi(~>4H>#a%(lsVDocXYa z>%u)B0_2SgxdglEWWDRPcWIf^98 zb3yhsUUS3!P?4Co&xkyB$_q{!KxB$dJ#NtCzs7Sa=yP5cO)#xk1`@d$;UXi%W%IRE z4~$?0nT;E6T@+GZhY(jnq~I^|DvQt}F`E^=1kHF=uLlGSjO0$d>$G5(#X|u;9)a7c zNb$)_h6yfkt8H?9(@opohK&=H(HZrQ;cz+IwaCJVx_uz&f)Cg(KNEyjS5;7vc?W~i z0|^Q*K!`mp`{>`+^MauVF9HeQ@1=CIwPi^nNcdLxC!~CwFMfo;i*kuXAClmJ)Tv2l z)MiazIs<(VaJU!0fk;~lfoF!U7SLULk~CYGC=8^cm4YEkG%t^Z=P-Fe)tLkc?N$1g z?>-kyah8V#wK|qOOezpCSif#){i!srI9jUn*4dj6KLwy*ijbv0R`x~EH~K_C_upS# zNuA4@etY@Oi4|*!{mI09fL`ZddjsLyt>fZLxaQk^^a_|dU9OINXLV^i8>McH33_ia z@SB!zUYQ$*_2Yc=Dge2RH}2xwthK@~-XsTh-F9yvoW~gQRDS)8Ic!7vyNylZdlZC> zz%kWXDxpD9_2hfCcE+(FNaNJIOM3$FEJ1Jc4nsw{qj0yJLCp#(rPGTV41HE_i(d?hOPz|N7&1z{dLk#W zp^TfukwUz2L1bOB^M>|`j_BWH%JfS)U`19V&FBx6BLzBHp>iQCEZ_}$C{n|MMME=b z0XRa*wwa=y2{;G2{ub0Et}72n5|o0+rC3g|y$>;46Al262%6w9T>H(H^wvzDy~jjI z&HNrOQ*TIV#e6E7+h>eMYsTf;h=C@q7cprUafmsl+<408EM7?Lxy~5D&AHckQmPKO3V@&Bh(Wm zktAkH9RgF}RV43im8*d)0)t^L4Su zbFC-L_8i@==CWwfeFCe@1Jgl89l-q6;>9MKH!KeFT2e1>13U2;(T#Xz6p!GYNy#)( zFu?u`;g&1?g7>!vJ69p=Z@Q`q<^r+jc0{fHYWub0@4>bDbV&QTb+GPo)el6f8j9Il zWE|=hL2zj!mpP)FK)FyEF?<*^vZcuflRs{~>zW>>CKn|*g2);m9=Nv4rJ3@TV56gw zHhz;Y57?c9Zti~}_t%?#dEFoRzFHZ_|AP|wKM^PY%gM(4UjpO*mumihE0Mo6^8atD z`G3~^x0DD6>%UUXFSRyfaa)jmpLO&3lp#gndiWI{`owWSMN!eBx99ilIImxmvdA0lUkqWhq@!%-mgErl0TsEUB>%VzixY+ZMQad?*Cq@ z{FZhwXvWL)H1%ZnJ{!L-Z`tkwmw$-il2ziHDX$ZIXIjgAQodX%CP(o#_p*{lqkvq zaND+R+qP}nw(Y)c_ifv@ZQHhO%uObl%w*05g;WviV}qf{Fsb-@vKTltACFQNiG*;(!kSz0 zO$gcj{y`ZGqYcgy`Wm{v{jE@LZA@2O}5P-vk@-vNkhL$H_2Tb3UFZg(%|o43MP=iG~xcS!yA zi~QGBN;CJqKsS=RuHu>uvrr+Dit6MVs8pV&GHli)XvHe-)G?t9sL1)>5ziMgbaF?C zYlhPW9gZq0RP?FiIov^N0n-n4baiD(g>g^mahF6H2Nv+%n4@He;fLXF1V8Yjn};_)H(mk^|AH~kpbn|mGHc!os7nObd#2zHg8{i_1$B#*{F}Ar zYy;c*J^-YQOnqxX68uso;1KM65R2MLNAHAXsfnQFfjaQv(7yyX4!5u|XJDIHxhs35aW>Iq#e=ndS+l0dXtakK1GwdbBKX#a5+4o$Z zEh2hR6mtMPVi(_fmY~f=L=e7uK zy10vxxqlsYaig>-K;2Nur|>G%r_$R;00n$w*D#_*D!+&oC?z@)ApGvt*FbA%`1j2L5|p0dQe z2QMIhzRKzgWOU$QYrPk>D=ow1XdR>IDXRyE>xyaCW&3;aIApFpFx`~q!-K`*bX7cs zXVBl)V?eR15+-!clQ8Z@*l&`4!gsZ{N42K+A>i$u-+xdnloUdC0H0$@{738eTS}lT z#-C3I63>Xj;)Zvxt2UJN7~(!t;M3SVa)?F3)4M}#3w)?|$8~jcyLT6kuM)EeqTLTL zmfkEpWS%cQAY*2TGU_ZWmlqh#I@}NWiM1ogs!zj0XCs{HJ#TVeP61!GBo!@yVQ zNNlb1>BiwIybo93e=W$E!kpV^O4~Up%aoAMg@Q*u&~Mi(>xpGRt$@+Mqa;IgFX3R? z!xfNjflbM6-644F%L705li{cjzpnZ!Jn$u*L|2V%oMVf=j-LI*9BL_hgyt~l-2Stl z(9PbxwbbXEA&vsFvc&&E0tsuTiBK}9C~JF(iF^T3_;lDXLJj&$`v7?3Wr^SeW^rle zC~Kb?V9xE;AD{yxfPq~BlprE_-A8WK99t$#VC_)0jYfb#)Pwjr+%my2bJKFdENjlq z9|M^^6rB^yq=^@mH-UU+xKLT*DTF7kJRdp4pRrCeNX{6qB18^KLMFKTq=6Ie9h#(> zN&gK(6N1TaSa`-DN{%frX!F2td z!4ssKuMeZf23*E5a7_}4yg#L~4?{*+Y}LQM^pz)!FO8`zKxa`!h<+GVXGZq-F^k(U zj(wkr0KIBfhDlpUgBL$KFuhGz=%3l6?mfzk>6oklub}samnTCT0~lbp^hI<8pgJ4A zq7Z#q6s(1&+<3P3@h4%3a8NaXH?NOhjR}hG=ADn8O#AVPxuRa-`KsC^Wcd5f?IMYi z<6RJ=se$1Y_!dIAXWetU*0pjtJpLdup!xm@9JB8yqc;$(;H$w20LM zN!cA?n@bi2E95o#CLMDC4QTyM!rj|F1o70k=BJ876~$f@?I5Gl2uiHr>l)X<{d4{& z?6Lk5NE9m+S)gg(DopA>$G8oE2L7!are5p#Qa#YdA*UjNoOg3o$TbN15OOkEW=XR| zHdHy#6qnfq(6!Eg$n@$RChdNbi_Y2z+Z3p6_3tf%(Z82u3+;vxc=%UrK2$;zQc21u zxOL7(EJx`;-PBlUR)QrLz}QxfjV#KG@By&no^CHsWRmuvqA=v%b28gWdiZin2^qDO zaDt)Q2Z=J+5{F`-2`8fP=~GhhcwX*{9XKF-ed{=ev>4zogCyf1lg8-zvY{@5?GR`k z+~uJN)aCP)dx!sub|?6|3;7M4r!I)6&bcoBE;&Ij4Jde2AF8UnkjSAIw zND7k5J!Qcyzf1V#;`iT$J={9^1SJd7#sU^YA=u!I&F$c_-G%p%EzQUz=p~#E`9eQ# z^k?ej0b@MOu|6Q(*(BWzHUR_aDi%J{sq?yGT|mn|i}iH!EvRhtT}Z3~&^8(X%N;u4 zeM?LUe)+R5@;?shU{Y0on9xD@gE|}+C1J5ypg`ImCEc^;3~x)HF1~H~q4aTqR`Uc~ z$?s5#aY2CH0H)S~#$AF@6}(8RqS*Z@rh{tO#^b2sA@;+SPg7~hQmYBXGGYaQkY3om z<{_f$#zFI)G=B`M&=-BX)8CK07+p$?1iRPH6zM9^t+C%oJr#hdkAo?iU? zJzROCLuDu&iirS)14gRUXp*@EPMr-P`pY^U#IxG-cR^s*VKAVGh@Y!C*ilOtfT~ajWLRV+ROZ(|RVc8hA~Gzg zl9yXxtDg6Ltm&?Fs(ecVV=}_me!oydOTmmgL>PyztKB`AXEqj;`AjXVF9ig3 z#j@YW^FmH4H={~IrUHR%b43+H+d3oU&_x^h{bEWqzv)+ne}>(cEdZ*ssz(C|V!)n; z=K;u$*S-FNp`-)=z|3a+_5=tRWDh2Rf*?&ciqYQc5{})Oxm&#njYqgxuH%OcXV5S8 zqhE*_#N&8sofEKbz0 z#1vNSAoxvS0|Fs1{7or-hqE6r?e8HNqJ(bXIGmU^T``Qr4(EE9hvTGUEizw2aFtM# zp4AXfZYODkE3&3=9n||gT4Y)3OEoydPzfh^vC*zQxhoSH&@`&O~(3sCV;4^4Y7Lw39=;q=Vr5x~b2( zcg|b9=jbm$Nmp?s@67^gJaw)p>3i^v{k=w6Q?{{clPLCzYu$cU+Pcxx|CG4XaP?6u zi6rAGu@rTaQD%%=$zydLJ*CLM3G($^(wq$U+ayd7O69pYibFL%badW2eNe5t0mwuM z)+VJEWgt{gVl@U&GKo3gr=3=rd`&}F&V#A%uazK8S7Th=;Rh-NWniA;h66od%mQVs zsXa3hEhGnHVDYSIeN#%yvmUu687cM5P~a$8E-Hy7dj_Z;|v0z zB53=o4k%|qlYB+2th1!sHgfTaG!M{&W8F!QQaU6djPFUTUZ zMZISLk!QRhvo_ehn|vPJleoxcS&}zR;0Ho)3|`9NxSeT{>wexFP|3Okg3^D6(cDRr6*@vr&QOl)}?| z=P(qO0jStp4KbGf2fKczI~~d8c4R9#ky%-o}r^XVz3YlZoJH03)A9Zs3&3G^?R3fwg3b%#agdq+iS( zp%QXU&*;vFpkUF@FF7VJvYx-orXLg`-};6m?f!ELy`W)?K6m>>!3YWWu`R$xD9G|j z4&U@6kB3218rvxa59*8d!*AfjgiYmYxv$w00t4wmLoS?j23o@ATrik%(t9J}=86=1 zL>)?v6Ny-Yg+n>%4C`G+<4|<}r5QsEI2vmXL$4Jd_GAXPm3dW4j)FPMIn_uaZILQ|@1=4G;3gs3&wNe>=yN5nTo+GYf2kil;uNWIOhtI@Q74nT zY$%}ZDvw(w5N+wXUYgGF1z^@YHdLOztB~CxWM|XNZs4ML79D|=@=lcRa5Cv}5810m zv1w9W$D7q1{F1&oa3Tdu|8O>1z5k8kAc9tvO1pf^>?NfLo}+0)<0A=mImSaDxXv4-7PLrLkgwDqHaY5dZ*0Bw&bWz`=lD26bn> z0T$|v0X$QzyOG-s3$+!aPf{ookUfJ z6aic?*6{8F*%q+EKrZtu5F9I)_@ry3SM?g^jC_3X@bG%+$YJQ$R^;RTuy+Cm*MM9O zFk8#GcEE3}3AivC*^o$UB=5c*r_m>5>^>_^G8~~>RL{<9~Fm!{kroir?dvM@q zRF!}%+52Vu2F?5cc73~@fC3(bzjUwcpX!7l7w$|`8(7yzFv6aM3T^<}AV_d?Dk_J= zUPkSJ49U~<1Tc|;hYyA~3?N8mp}=1^IA99N^I&}rz(2U~#@A5}BSs#K5J$C$?|v!$ z+YLYyVsO_-AmWCML%knK;%x)fj;lArujY-h6iwh0r?rOB0_$r(SOX)|8S?m{4vxXp zlfR*RIzzwr>;3fr6dEEL0wMqa?tp!~)z|-?xccZ6_6sNE*Y1e?_Q6q@4cO8~xYq-r z&2baA1`g~T4qR7b=b)eai~Ck83KIxmgRr6zfVu@2Nc1D`nuTrmIXXhSi@Fc#0W#tU z4+QZ0@%=dsBToPCSLXZ~|Lyksp`4G^Pjh8e@oa% zf&S(>jG@{%XgX+^pIQt#gO%7ecnC1@DSko>uu`_GTh^b3eGcC5MtIO<){T?2ySIEH zfb>f0sc4K=uPji|HvtEz=0NYC61IRi^w5z5C4jaJU%(a%^#gtDpJm|OY5HCJBz&kn zXR)u%5CITCpPJrj|17KPlZzO3Dt$a!0m1FUht)ZS-CsyT{v^_-l zq=QV{B-O3A_s+L8?J&TaqAU)a%5h0 zJCtfDYLK>b7B)3BGb)|p^j3Giir}9!70ULYUINpp-DfD+T`0C6B&x*OnyLl&AsqdM zK|Vjq?x!%K*uv5(c~RbT6L8WPsX~HXNqTzmWdjCew=14*37@SlQux%xn@+DT%g(o# z3drsg$E4kxC2YLlNSK@^eD(4qKmWp2Li%s(Kwd6_XAyu6ESkhj-U%E#^mAik#>z6} zxi>qaF7NaUk0^&8Z%oMr9*x-?NFSTu29Md@T5&P<3Bu~FjgatF25>$y9ZxBfOoYBeY`d zUit8dsnkWPGXC3rd{I9)N^gRcq=!lOq*#nJo% z%*Hvb%8gh}@sZ&Izr+#IzFfi5kS7!Vr4pY+_f;+q%|f!BS?9Y^8fBL~zf8$gn)a)z zHJ6$Iwwp8flz4&;KsIJntvRugYNp4tv z&JACskqBwacq~wR};uad1)8T-iV+MaK}_2j%<%zNE;Jz z=)lr-kl2jLA&z==-h^~VgCsS8yq#$pVzQd4Dr&sT4)CzyFH3zfw*j{*&|@4-gU^5E zd_h=hRklzaVsZ!J(HJ|$kb|}}97s}EXYbho;+=u#7{l^HPJ$0UkTja&`3MsVwbdLK$mWHZCN`>C#X{w2%p@! zjao$oJiB~|78Uecj!)d!%OoyMiP03c*X!WvO!H`a0GyvVq| zQ}Q`l;1XS#&y0$5fgsi6*P_Q6+Nqr(b6=wEfd&a-8Hk_ z7yAR3*K=A=09hIs}{$i6r3^d+(+I8(=Gs!$}8V;-Ka$^jDBU#5%a=n*^Dg*K};hp5eQQ;kqG~dqK^*=3kp#Y*m<6 zTJw1SKQucE(ae0739cM1-mX|$8Hz{Nn)S#{$(ok4LMc5HiFlQ-b=l#GvIm9Pp#=%8 z>5C7JxA&UJ3@`J}SoK`|2jC^cP~wx}#HMPw5fI}MJ+diu9&=MGJkJ}m-2kwBowvr? z7wBU*f|a+GJBUOse%~!Li_8o^E;}c!FYQt*JT7rw#WWg#v%ql|#ixU%XiEfqaTK#W3P&$=WdOni9yX_@hNW9%G zoZ`oWsY?Z5iKa6*ShofKlR6j+aVlC2*&G*Ib=>P^lgE#iyZ5=wvfRNT=WS1nRl zqP+NX`nmkC=N`YCudd5T2HIpsf-m(r4P(ihW6}y^bKt{6L1_wlWce_?jp1fkA)^*? z0j5i2(s(6Y+fE=^nOIV1r?iPX@EzaOf_U#h`0RcaDNe?t* zK_Q|VH?)mHF3JquPUckQ@E=6Wf*14LzyCh{oZG*4xVu3m`1 zCi3YP;_uV^xpyGI?cO$iEi~uKAS1=fE^k=?VtN^5SG;Yv0E|dLGg%($zV6oCy>G^Z zN8qY+{vu@mkXz9j^sWAk0UpDESQD=Y?d&&eO2|dk|5Zipl@-i35Hj&F1oh_FLGJg9 zO{=EuJF-xcaU!NQqBAB|ucPutFeLP{4@g+P6a^{4rexm8rs~72kD$LkAES-=U2F98 z45KGEv9c)QHVqPX))69WN(mb{>ob@l_^8mZz*v~dS4Aj4l<<@~!8}7sOR?|p6O28| zgjgxE=15VJVX_+u$9%Enb%FBhNzgWpn!@TOq_NZ;@Fas*r!esG8GPwtI*m&Fq|M(f z2_f7MZq<7FC;RwYc=L^&fp9*BR|nEx@edlCUf3LSjket}w>}=^J??t*2}U~2UE;H1 zDf3W#P8H%XV-MN+D-!W0%`JoSJ&n1de~4^7MwVUp!U7=q@y3&QbrOn2nxOMRUqOG2 zz$%zoHJ`=&a$2bpE(u9&&v+Pe1j=VFTcB2a+}oWr7_XlT-T^Z3Ji(IQucKa#3*Ek4 zbeTRM4Kp5|+fFTR5NYp_n^udI-M*~Qd(%ZfDttoCVIcQw5J1nj*8*re8*W#!J^zFW z_11Nxzqu8Pugoqstwvd|;NQ~?Mcy+lcEOa_(%q4i#JR9o@_6v_Ljvt@wFy8xiz2H$!zwXQ}bB`Wn2IHiMFX6H` zgJ<7X>wH@JZK;J{s8{yHsmEIjZy(6gCy?|leYh-Wad?#8Q=g&LXWbN%cPg7wV7=S3 zzZA^8g_3K&>oa*@M)J9NRIez1F2Cojm(M(10$%8lHn*>KDG~+CkwtQ&q3<)f_VDa5 zdl%I&vTYt54)UAKtQDi7pS8v2Oz+s>E&aY&cZ+i=~0&i=+)!B*No@KCxXLb+oWy0 zvh{{*>f@g-H99<<{swKAWre8+;eB%Rz>J%}M1{)-wjbsThlv)AcJY3ae{|2v8#51* z8p+tBRzTG>yHnn7w;LH`=KTiE&DKs)BwjeFANfrt2*_yrJ>FNMD;7A}<*D(<1jJ=G zUu{@V?Yzp{qQ{~^?bbqIiD(w)Ld0;Sh8e(&Y54@G*5pS?O zT>?+TLiP+EzC>#Ovg6nxd9Aq9o42_nzx=)W!Ri93=Vin^RK#hT%T%ZJSST)miib0r zx9=`_k~{vfN#zoJbey`F{?Zmzc@zz|v$_4umYS`pTHD87oqMe5bnR9sbv0**r2En{ z*qp3zWLv~7Q28E&hS&G<6_fh0S?#+WcE&>J7$Ehh7LA8mD)q23sunC{*3&QX1+svX7~!($3m1Dffhw|}$QJ;(Q1uAK5{Wzg|r z1%93s0MX#o=d3_r9AQ`bOy-fVM@es=;_hXl`t=xmSX~q&l|cMwwY5a6#TS{`33K+s z4nFA~7M!b?T{Ck6*Ki;qbgO#~_31)!JgsE48fh?gA(Y@xLwRxWpN8M()hM2E_}+c` z?UL38pY}UgR0bC+pb{IJHBjFbKXl`pEXKL{6SNRU>53K9slCdQ!ptaF>qKI$+8y+x zs17t=@l}#O)6sROvaFL~IRg@<9v?o-H%yIq@loS2&@37^LC*GhFZVZchd%F8(!{@7 zlGXCpAFl8PkNaCLs*jE_{iSKeYMtXakFxdF8(^-&(aIiJyYPR!MVXHq%Y%~uzI`(w}|7PfJYzw%?G4ibfJk@AmfuD22ja* z)5Vd{CfmAikfaQ!E@x9dZ`UIHNJ1guMmDF?#I;X-wJl54(-L*mDJ8+(CWA1G{4Vx) zUHNq%^@bZ+#P8kCbIbc{3ExxMMsTT%OBZfn6|TsyI-={ZR;|fOqFe8inE?!Ci1(|3 z@mcJZ7!bwMTyLjc6mcE;&dLM=nUj#2HGY7Fxu*uH( zzgbD96)n9No#5w}|Q|=vO4_V}|_TS^70o_m|rd z{6WNB#vtAAl0_*qqWG@qLWf_<;o|;#91-4gSc2Zd!;FM1Ant(?l-{mc(zmLK{O)#K zr!xoGjFi6}V*ANZUhY8$iBd4Pkk&q6!_u5^-||Xh6ehp&RTP>{z{aKdfffad!6_rw z{9R{i=SIs9>El~oveRO^mE!HQ4i@J~XjbbU_U<~?YMTbn-?qSTszg%uWi$crH=j-Z z0EuF0HIM4e-i3Tr0#M6TID>|qBj$}dN%{1(rTU)8&UvQErjt+;#5vQZ-_+_h!#5Vs zlS$UjVH?iKeS>aThccVj#rAQL1Gp31+F1V*tC~NHZ2TOd;)jD-uIxk>{gf&1>E9T} zADv%?1*N)2u`JoM?!vEnX4NTvZD)6OK!>b5QYHX349>%$bdyH- zyu@nmrYo8IyL8dq*aLB>1@z6Q+C&H?Q(Rn6@?Kaz=sDF(bP;bfE5kAt*{?yy$)lN1 z6_)Tc3PPT}3wz2;xh$cF{OnMgX@r4K=@35NFO#WeLhw#a1_~ zlQly{U>L}c#~-};9g*-RmqLh>Xf0VHk=0H~Eg7}TedqK`B)EHqumT<*`Zmdb5#tWk z7H)EvxN?yrYT;Qb7- zRYhE;_6s2>6sbPK{Q6}H3QJaULyr92@d$V>ptRTecUT}imzD+ifh0UKzZ*sdnrp20 zwDs$%&}wg*mJUbbg@AVMS;e2fzzd&g;+Hz`i7}aK+hi6*k2y05W@I$Hvxj2^R}w*8 zN2#<(J4DJ*p4FUWzmYP4bqlv^YrDo;+m)CbnoZ_1$h6;scqyqgBkkHvTF8{uv?)0_ zUt-dMT6_ZTyG=wFO(wt$+!>8ox(b*|gzB=s9rzu!cD2>n>AY9veDNPLJH87xyd8Yz z2WL$_ZFM$+#mSG^J4Sd8VV?eLKg_ykLv#akKwh1nnoP8;GR^X}ZOLxAra&06=s&S( z4#v<3YY82~Mlt}zE+1HT_key|0oOVEM0M9Y*K4je;lP#bOe&r`5}9Cs5!Zf>uYGJ2 z`E3nIPtRXgzYdp=J~MJ?%U&K>%JI3Y zWk$~_w_%L)QaJrwoyM=Mgs<#qSB($I%e~#CnlGpnWq4(k_M|tqM()fOIxZN)&8M70$ z!rY(FD~oBDM!j{*Ju)hzY_@a-&d3eCd3$)Fvh#XNu1^V{)M}(vm_qDjPV6{eMIbb% zu$Y9*nAq2OTp)TwUee~6g|NP7TlrvixkVl^XFC*d+_ZOrJoC|rH{Okrc3+&zrV5F_ z?^#a|ez955VVInM@yBi_PqDgQiWn97TCh6LC@~jNS!>f=OEPGHeY@v~w`Fga^t$BQ z8byO}O&veKUV2L&iv;OO@ovwlEHWi8zT>2C79QDr)pEiA-5HdGGIyFLSys#5_pN5* ziIOj0wk@a+ym`;aFbBz^3sXjEL9o8^#?>NuXg$;k^mb~4QC2j1jKOnIR&wrbup*S@ z74EAErnIRio5h8p5S4K;FTpmlY-{NYD&ev#Rcm)}ex+kB1^wWgJmG1ebmd)IXTJ-a zj=pjsi%gG>^lt`*67gXb8bfyfkMA>St@jmfXoE+00Dik5%gISS(?YcL0m|vPR8C+E z-V^r8L`jWN@^m}f`FGm++%%QBd?2t;Y-=mZGi3CdiP?eW=ZzBUXl4=^wn)^UPtFKL zEU40 z>walMdUR6g{L#vq?#-P*f<7}XjI0>NZ&p)|ZILN~g`-1*{uq^ljwZs^D%F#tQ+fAc z&>@K78r@17ezu=Z+UtD@i?v2UcetP%z4*9A-5?Y75ZN`8_Da3oG@KqHLHY&Vyy8Tj z;m6W&(Mh|_Y1T~n!cbh!13XrL}7}ry=;|`}aG* zHN0%<+Y(AZ<&`ofPB){F^3YoJ$Tr5V_eg1fYW40nb;f}Ti`L9yUYbS(*y1&V-yU4? z3juhI3QL=;)XDsJ1ed2GSf?*4dW4z1;x{Aio!xsQWr-Eq*@Sh6Z1BEJ_I%TF0+jSl z8=1`}Vk?19)z-arZQ9v0ix87`>rzu|6=!X;Q7A9KZCZKZCOoSF9NFHsxbXaHbCqLe zhfoR5W{eA{ii-6n8{sw~ zAw)3H0t_zF0`6ddL?keC9|AK2GYgJDWIi?t329NMv|v2gxe^wMh+w?J``jVtDevvS zhN7=^ZS(8n)~oBQt34f@a9th}iY2hJI1xh-k&u990G@`VJO~5;&~QkAfT9u|oiWD< z=1W>u@+BWkXc#eK!*8I1U_U`Rbp{p4BXWcYK+|?MAdwNke{!<~2n0|d6JMYr1tx$M z2=E*zdE_8-VnhZON_412mF!S0^Iaaq7%hyTgVQi3=NLK7;!Ky?8D$a9PU8h{87D&R3t?3s@P z_(niqxmyYq=>Qmmb9~5yVpxXXhvXRqPzN$^p@j+PXS5OLF`(>GaRF2nLo+yp68?Z( z{y-uCeA&SXh)5jSyZ2W6a|IFmVG7&WCeYO&gs|fn!q)|J4+4N)bO>S4{{a993itsL z%9bA|L>vn??X^4Bi|;Px!a$M(NwRua)nGdwKxSd#K+c0DZZ$yX2MB zVS)(|=C}TPy<#*~`K2}m_EW$AIG&V=2?_duS{4BXorkCzBO@Y!1Zq9tuixtt1fbvS z5&v{6!mD_Ia{k6{t3`cG@2?Vo+1u|u(67xjzK5tb27p<9o>mYk0NYwUqF?itU#9op zgs;-H-;~qe?1YYg+AKZqY;M4>IJ{#ZxA$+Pg0p*A{tvbR)Tgulvw=ce=cK=NGedkO zs)EoO_wP0zhZgP)XfW0QV+)*r!%-TJo9K`KW(A>5!d$L45fve1K%N4Ez0w{kst73w zKo61nB}k~}w-KR$21MYHP6mL^HscQfH%Zjfsf39L;6S{7VC_)RuaoU%tdK74Snav) z@b~49HMSuGeLC&=7R$nmU7fM4!=_~lQgrFwNW>S&YS_85p5QL0O6MmhsUnlT>B-@1 z8FKN_kNQ%ywH43k>&bfW=MCE`VrVl-kQV({kLD9+}m_p_J$6p-OWOBn5Ro=4lkBobFDO5m{2LZz~7WaE|XoU9VoHCBAQ^R zvQEbvJb#TkL?aNpB&Wnb$D^$t-b{knyq^+vxpQ)t{OPr-`c{23Sx#&w%*&@VP_~Ds z#%*R?kbl$NEV4G$J-J2yI*zoq8PvP4R6<^_iSen!j^#=}QtbLAuH;@AB4Ywdv%N-h z=0#`?Z&u)Y2TA7#V6F6trrq>%E}vorQkl_Zo4XxnFKWpmCP`YIx~Hka33EcZnqdoj z$!{Q2OkgnxNVc{bBJb=PG*WH8H%D zsQ%LszYcqrR+2tv7i5Y*UB7e##sJcqaX<4*mmC%2Td!8_;}vN!G5%?a^yD8AGH5D? z{gt*rkt-DS>IZ4slVPgsU9+cOCZ~jokwVXJ=yl6~r^6R?&e!+o+a`qk?7aVhfqu z|1`J(kEbbVKpA$9PWr$VX6|V-|r7n=F894VcO3vyM-^;<4w#FbL_ph^2mX4eF6kcN^B2RF#ia|n= zDBn~|P0NFj9c5)*B`T9Ig(0r^l}X@|`A!rQzT)q!o_DKk&ysBihMlX*piID5B6_&T zF=3}5O2L;Ts-t?8xTPCgD(&cZJ{zZgO;_yK;_vw)Qz?H0aoR|qU_qG8_Vz>Za~hR$ zdEreePg9B#j^D@*iN>A-PvI zw}m0^bn6gm`qmDQKm96)l6?Pm(OR1Cam^5Z7KRmk*=9>ezrl2y+68xFud)7c1HNvQ zz+=*p8oe2*ib94c5|eQ8edU%`t=ES0y)*554F(qd82%84x9{WQzf-MK>{gu>qKi3t zCpBBG*G0XuZ@=Oj|F-onq8BA^cSpy1T{D~K*I`rFy`y${J~Dz1eNniN_X#LjgAJdw ziJYj(Ditv-M0i`K&4ny$?E3^!Yn|XeisO}8X_6b{k6UQo2~($V&t~jdx6HV%Cvhpg z$m+l|M8?zR72g|dcCsZn#$w<|q^AZCGAvx(D`k4l{Pq=G(3B^6y`)bxOeepgURF?{ zjq*&dj^cQ6fLV=XIM+}LhQ5Q|!GZFk%IDUE>f86XbT7qAz%Hi8OGEna#TOVW7TZ>8 z$r?!#B;G&MhIh=V14T1n`aB}?sUopbgaX%_s|sp#NXn!UHk74K?{4zoLNGL~F~60|od8xXFxX@qg%4rtzColCXTw zyLZGFy-BVg zfayT+Hr30io%xygy+TtgQ9N>sj<;Hf@r;%T7htVmv#2g)6C;{6d?qgtu+UxI7}=r95T!rp`i)7#fp z9-@pkyiC!fB44?CC23%%&qoGRS*6cvG44cfS$hUSoe4+h5l1r?o8rr@!XyQ+4NNmJ zcbf_N`IOl2A|TJ16#U)eGEwz7ziGLdP_~{fQL7Q4Z280Qq4HP8TpM)`d6JH{ordpqpi^1cWVq zW=7A|?rrqd`qY}o18?}GT=t@SA3b|rCV15#ZX_jkI2tCD|IoJ*C|KzY;l#vppy}_O~Ac8j>aXTA3xx zrOyNluibe4?ai-H0(?W1s20eh{Hd{1x0((=Y)2jdq-O9-^tyZ0L7pi(X#%4mY6UqkcBGZ;Q z_UlcsWBQ#-3ETyTA!%ke9h%xjf_Z~s!dlAN=6^`?_4`UHB|Zk~9DmH_;GQocN~X~&EAmS` z1BPF-9)oXTpMge}jE9$)WHtC>B|dU*k=&IR!#p3Y@c)tlDm5q0uE&f31tlRL$=6NEBOR0vy(w{y#!gZ6S%(hCP6aA9 znRIxG$Z2#weK&8ryhS-PZ?&!|nVNVA9#?f<{gaI0B>N|RiwSyH&WVz)p0{5cqm+tM z1z`VOyzx9qo3uU#k4nFb+DnDKXaI&*#eVLe%KB4E|9^`oeDb{2{oLJIrAKR|832}?nNcF~Jtdmmv zrvS3o&vV)I?#T;zo#Uf1Nrjc;rw$N{g4VI`GFWnr zKT-Zv4nrrp7f{`y<}00vpP--Bnd$V1&8dbe_|Z~&WMI$_DmJXzBg>^_GZ-lgeAprRb(NT9VW=!@^Tg=qwOin&mV zT)0qCkEgL>d*+vPpp${mDDM-Oc0t<2lC~%z{7ly}n0S^u-+b~+)8;kY88P)fWydD= zT~ihn=qqP}Jbe}9S-t4oJ$*$k23pwo2epoXoW3+h{s<+dW?o(Jr&&=F*#xt*Oky=&%i7`Mk}huVlUT3v96~QO85}gNsERw)LgTGq*HZ$_9Z>#*E(ke|Jx>zq2m! zA1^?Y%H=V4{+1iTW+v5?!Ta}Xv6sSH*+HBk#>y<4k?931`4*^DK{4sl9ZOaDAWxRs z5HXftT#NqpR1J6*9eX@1MW3u?#~Iegfum(cmE4%r_>DdOtFeB-_7r5axeZ76vL|g>-x`B$mJ*QOG#@!yki3%n54Z+ z?ts(?=Udj6U1|?>th5^MJBPrROoZ8qj(cY7%NL^l-APmKkCO&s^FS)(B54_bL0vFe zc7<9aNZzQ@GeOnBDP3Bp?PcK-y6DgM8|nKxV7!_VJT{m+3~EN~5QANwFLSLRYT3k2 z7}%HeP86*z4lh>@dALwJHoI=bZCORzqM$TV-|a)vJ~uKe%cXCP+?a2S=>cMu(JR^u zZY=i;INL+V26^PHs`n*VQ7dtfOJTmdoy;xKEuX02O=4xu3H!WUn|Dl&e!cw$pX3(~g)FZRKQ9#77 zIbZpzQje&GMp2!cu-ZdjcO>;ue{|sT$JinX>+J4N{{@Q!=0_ddK#;Ze zfij%lQtTY=c4?@vDxcpNHVD4l%xoYb7D6D7o$_FedgvZ-D*cY+TmBH@pHaI`L>!@$ ztzu0OQ4UR1Y_*B}XMf z8`K|J+0G!JuEQbP5D8+_ACc-Q_eU;J$al`^rj2POSWd<6zt~yW=yawlCipV?TGp9Q z-H1kb(-t-?zK)kc03cjV+w=XB}V~ea- zwWqw~K*$sMwC1P%YR)LykCAf2PyXOYuFc1|i1y-k4o99-`+BWlqT99|^y!!BuFl85 zIh__15;7tBCk`i=3>NS#Y#i94=r~j5;xTS zJMB^;e9C7%U#6_++{rV5Bj|Alb8}NnDW7qMG`=El$?9Pwb=YqCR!s#-OZPR*T(<;AS`HjFK%|-qO?`}H>yiDHcjKF54)RP~S zx{6p>O5MBm(A+7 zTx38G^HWG8+i71TDB_G2=8mNl!mBz&LqewphB7J~Y8?^7ZQ3`V1utpqXI!8ruHc8C z&y2ij=9s#gN97z=I#7G(u>0oC>5K18+lWC(NM#Z{B*lqo)RbJ4?P_ciwws4e#sP zzzkEI4&`j(cYw26gJ+M_=4$JICWuvkw@;ZRl!=D1S}mln*e+S+yAh`(7{psitiGX5 zW|t;Ir#wO@#r3Lya59BIW{Y)h`TC22tylO+E3i=B$fbSd8GA%DG+o5-Kpx!OQAj?i z39{d4n2jw2>-5$@ULu(-em?%B#FgGxL9?D$T6SB&Ront?wmhP6puEcgi>5R^bF{*v z5oIZ7w`s&rq!Uu6YD1J{x?9m9_osLQ0{LKh`KEVv1n%RGT~46o_srzyQ#s~z%%Ne2 zAgdh7Y^p?Vb@AjKXZgK^7TYao>Ub-Y)0A327=r#>L+LWqT#3&xEd{&34r2dDbJrcz z)E1{{f&`_hNRdaVQbP(Qgir+qlwPGtfPjGrF+rpV(j+{j2nr|xX$sN=Lhn6@NRcAF z3rJHC=^z{C?VH&*`*vsl+&kyqGxy%}EAyLkznMGd%=dlyrWW&teIRe$0V&5B|3cCX z!ziB;AMYWo_GYPsWk|^{D!FKAO9pu{M<*|?FP|rWk#$H(p82z9z-3q5t5@vR{dLzq zyalf{bVc88ey?nm=Nr~YlIAk!!gue<&2`655c*OX0xnDuPq^^Y{*H@r*RVOn67=Tl z4xA!uv){8aS8HNVy0mJAm#R%q&3VCS#lwuKmBPI;$)T74-*Ds&EpL=7*Y+!^=cANQ zpZ~~sUVAqQZAnb^V%HY#DV3o&D7DDkY`7j|`I8g^wnV&6DU*1F?c(Wr=H_V+H6mBr2`@F}<%nIqJ``qVQ!^-t#L2akZ%wRW~T?%qS)1uPF9? z5F=h3&x)D9@qIS=$1{(gR8k?~32QXDcJla-;Qa(Tmr!}l0ZoUMuGa6`!D9tF`VV0bpcWOzcw=;g?FU@<}>u z%ZF%owf4?-UM^ZL0Q@oKs(f5?n7A8}v-+8Co9M{DQ2a1W1f`PS^PCbz@4*zptpT3B zNe+Ma%;gCpdB1g}^NjZK*;?^x4gy}6$*>;a%h>I}H06AJ%;$RzQtY39Y^FbmFnA5F zT3Ta{d+@nj4g1NaYNBq_PlYq~L8=&kYgPDhF{Dxlk=3qKfh8Xd^8fN|*)qDSL0`#j z0=8ybv-{}r#Wk8mTfP)Kj)XXU-XLsUDX1NVB$#f{-A_ZtEOkrl^4=#BBlRSL-tPr> z9`Yp$_8cEGrkp=c5Jc<`V?naK_#Z+?35TJt$Gl>_a2AujOomXy}XuE!| zRxH|He-+Oj7f<;aZdc?ND+yCyS3+!?GwUyL8>5zP>bwu#Nn6ui)`n|Ie$^;$SH?ph ze)OzAGBYkzfT)w`vNwuyh7V%yDw$1*2DUBHUF?{4h*?=j=_o!PkYqPD>R;Y@DLI9? zg*0)zba}9%x3fx^ait4(i_|;U!Y9LjrnFq#i_gYU(|Dt^;%(w^s7j9-)>Tc<;fghk z(sHAwsan3mktt+R^ieNoC)9oLXNY~i$3cG{=QQi+nRBX5u7w_u^YF;nTW_vMqr&SwBn z5(;bv^*k=)+igyHwfg0Sgh2Y5L>lH-oAcLaXOaSOd_U`4aoM>X=WXK7~ZuiW6TQ?H$x^dG1K_?C; z(ovSZ^)n%7d|hzDNhbHKHkF(`k2fJhmTR2^wn`?+Gkn7qhX+6*}_c@7k6zao+QI9>VaE zl>Nj#E&Sca6W-d+t{|fQjnsJ!#FeI;Y@=t!ic>lZLNFCHwDenDpCguR1~B!+J#Rmu zX_8>j{g-90|Eiw%zv`@zFj~h7$7*x90$kRB)FAZ z>fBP~)HOOw{C&91ccH*Sge}zg->EP3 zO?$5%-VC_1;@#35P(;j{Kl1u?h0@>L*a534I{8)sf z^5DIpJMG0PZ?rYZc_88{pGp_SjxoM6ZK+v-w9}{EB}!_jZr$p89N$8`d(dxLQ8dox zeWLwJdDPw@C+i7-k~I`*zB2=;8BKc_jUGs2tTUccGfdR=yKHYhYQFPmETLk$TtLAZ z-{9DlX{B9J*pRCG-E@Z-M?!$o<}x_`b;N@MN^-VX1SkTU7q@54u)IOxah>@vZQHPo%4T%Y zb=ECdj+Ms*@3qiBPiSlCZvnpE_lX{{NzZ5&HNN%W{gyFkGV_^PDX^|-B4lsEXsy1R z)ACmb*xf}0-JUz;23Xw%T=;Ug#3#lSWa6t8JELRG`ZCAS((QvB=G z>vrIqxiN1JVBdcL0-RRfinzqG2+$iw2s3QF@MAu6USc~QFxEdoz*$NR%_?o|4;joP z`>RyB%7ompW^6121TNp+xY^Mxo66AW#e39`*n7J*lN8r1TY5GSJ-2u{;Px-k*|caG zuW_D*w?8Hk8RpvVbS#-3>-R{hH5bU=Zn)!YYkd4AGEWAlLU#XU{-5eZ{$E(IAYdr; zpC5n)RSOo*UcYL2myNbR)IENVXvWQ`)5(Y*skj@`ZqNUx?)f&d;5hN<@MrhPqDx$8 zbk65Tbv!Yzy>^FtJ6;Lw^xn4!xU^8@Gm(~~+B4Rucq#@vzWbLL?3FoOz5kKL@06Wm zCuG9z`n6rKhvA+0t=5soRHD!J!GuKH@cK(Tqnx_OktaRg9o+_zqg%d*-eWN^+NGTJ zWf`Razs6gXpIIeu(jU)xO?>b0e0wArrV~B{FFWKPgL7@MB;W%@cgg(3<(8aBjJ2A1 z_>rBQu1m+ewQ_6>Y7GL0_jkb!YfsxVQ%>|0V{?{M;eis1YT1GYDm3P_1nqHPC^9HBcM{+sL*B!(Bo# ztta0lngx4hEvG^Ik>&@c9~HYC1%nrO8F{pz;%98*nwhwH9Sj8%48j51lDc0gO+n8h zHO(sZ7|*lm|B+|V#>F@yzOw;t8o&F|I4e@)QmZ)~k2UwpTsp{8oPVxnI4`4Pj&+z- z*toi`4SVU?%E1(}_^SFRjuO2JFp%gzLbJk3kGHMR&{5ZU=Ibbf%lEi&)3h>6bqU!^-IR$b0|L&ld4@ii%#U{ZjJqSfunO1J9p{#i5{Q$t26 z!*4DwGs6rGf6E-E-x!53GPNUXSzr44wIm;EHb(Bf(V(%Rd?>o&$&JrTPGUK_G-S>Q zvqTD9^F_pH%SI+O1(U1^e~fv*U!A#g-wu%!x#GvDgiHnlT0mX@uetz2oL-IrQy zD*4omn7OpXkQUk7)BJup>K5?R;Xvl)?g=_K%pw=~S~o0X)NRqF`Oa_(5!d?i5pt=` z<6F%7Oo3%o^X(#@(9&5I#R&O#QejL?t+k&&(|6Z4$Ey7()-q^iE6|7y_kZyLBjNgX z#%Vv!{GEGsN6gxU@On=DuL%C)38$wiiLUvbJ*7jx-bgL#zI1tqshkv5TU>-UihSCa z!V!{=!Y~#wavwKe0aBjK*93bJ58c3N2Wp3FXYQw4$(CC9B$T&U-j=HCv7Xic0{B6; z*h9EK@g!ULq?NZkye)OKl6^@8{l=F3TiiJ?Ra@kpv{1%JAxMuv@ zr_uisqDc8DQ^qg1q8_VXJpN`ne{e4}Uto2PZIV^-+`r(+KcthWl-*t!PY*4W7aAz8 zg@A&ga$pEV2_h%20D)Lb0A;V8j_||-#m&%G)LVT|=l^-Ek(ss?==uXJ))D35fj+gl ziy;814d?7aHJ1ijpz#E1G$0H_B^8iYf-16ST|Un__?v2!v{c!Fo~M%3jA(YodjA@^nT6W&i4pQ22WU zAQDNfiYNBLJr4p<{xlJ^Gsfw(M37V11>pyoShA)(B_Sr$)X0mvsY_L%M}Sjamf&LJQu( y-TSNx!L-<9CaZ2wMw;D9&b0qNmw^8d4l3_F3h(8EN4o%^5Cwp!sJ7vCz<&VH0MZQJJl_HO-e)z8^UJ z`gy88XJHP0GXRpFLP<=5o|%Cij$&qEa0QN)go(u7$O?{+4~|jJ)Xv<+f`o;Ym7U~& zEx44MM^Fp^PCx+8*~Q7!&=$^P?NV3Pd7lHVYr1+SJGo2@<`ybTa zkQHMxmzYBs1~Um8m7@{+*HCxk62iPY>lv>|6Z6v+5K28zPF~-BW;P>fP{_&Y&iI9f zX{v529#iF-zP=>H8>QUG&0IN{h>IFVZI|&1OU_JDV3n4{VQT7Uxu7w7iScD|FCq?a ztA7ZzmF}Qf`(~-H604B?NO5M(>J3sEknXIwcQK9FTrzF6_S8p~3oojN7(dx=Le+Vk zaOts#!Zn(({17<06)`xxfj1V*MPducvnALpJa3qT=Nxe&QzkRE@v4N$|Ladej&62{ zQI&cUgCxq=o2XD)?#~qSJE1NA$WU1`tf~aC(TnZsQx6QZE0~l^o{>5nZS;@HSB2f^@rRTa{p&Wf?#0dgizB|xel#g z*L(oW0{CEDuE#n-thZTQbJj~JZ7)v{LXS!~=MWd2WMHq0%;U(Nczo_2HB=JMKQBoj zhbESc)y( zil)1ev`Au^h4N09hn1#j@(bD14Zxg%5+yKpiPa#^@O_i`xHa#lM`jz8z((gMy-tii zG}y*qC))g)>m^WmE}=vn`I6;wz4>76ED-~US$K?Q_FBiv`2N&6z08bs5 zlOAoQxLX*>%xDp*b~_UtS|~7N7Pyr4)*|qzy~kIkf*Iv;fll~>4TFcNmOdyTtUf3z zfh4oU7>7bQoJ>z5KpcEnnYbDy_c4_puR0D?Us}W;-@gY$d=|VT(2(qC{&`MwecE2c$=?8nn=q0XvfHsvVcEBa1e3to0Y=^` zuJ+mMMtr&t{~n#0gK%(V*mgp3aK$#yEp4S@tX1ADMR+ec*H&&AmDA5*Zwni?3vFl= zT=|KMDvr;YDlRjyVo|E8h|1`^65AuL0ykEe<&|Jm`@1^(R^Dn`eb5)!6f7d4KQZqo z_)_(nxV4?pY(eQc=|he~q&tvHkzs1}U77Lfnmv(=wbba<$O_n^vDd{j{ZYDY#`?YU~_ULdJySo;+6(;~s;Kq`C4YTRteQaBV-h+s@EjhUs{s|rfmngLpZ?1lj zq^7TRn50HDCd(b6b%uQ;<;6PqWaE`;!j!+R^cE>Ny!LE7Vkih@0eup3@11G=nl3G- z#zIN0O*L4MWjk3Tc6;@@Irt0Py7T8`C>g=oB+jmK>3g?X4;K^=e)h$j&(e@f)%efV z^m}pM@HC5%2L_Y$PcKvpvGcfBl&&W;=QRP+3?V|3aWMK3F`i-C12NtpliJy}mjxRO z!lQ|~#AJXRWaRNLpzL_aS2)*NZUqy|e^*^i(|hu0J6X4A(gtg_>M}E$Yw=&tTiL79 z32L0$ALX7_s`n;}n7 zeS9b%v9nG1=?`N?5!@=b?l2$W8Qwuo_vwCs8}Wf4&vGB2dLS@rdI6UTX|Y2N6tChv z;l+nDP@##Jx%u>cA)RQ|_LSm)=1oi#s_2h3g4r9!gF+d;isd53A=`sY+@#&J8u;TS zVNp3*lAFKWSn(i~blB_2ig|_BbPKcWzeR_XW7Wmq&`UopCs&KaAKaQWFjJBc3-#a_ z`a9@=2f`I_qAHp9Ex8xV3$DA>)R?B^duglXhdP(^y*I4c`e)4BtJR3mm_IQx!W$g< z#JTFj*AHEdIm;y>)~6p&*{H^A8q=ZvaPPPrvGSyiI=G-mo1bc1jj2qxfk>ib;$1nS zKGW0zRE~7qRbj4H$l_y{6g`zCw5yqv8JM>+*yaIj1}nksmL~8Gt>+7>AF5vN(F9Mn zd19^%G_XXH-3;?*IT8v9Vzin$k&UM~tb{sCa6(^TclA7PyrBz4E`#p8pmm#zCF^59 zk+~~n9_Opj3_{p!B~>Xo5a-1TvsTF8Y6zt;B}*qWt64Q^EAiss%QyuLK5fjw#%%BY z=o`9k`G*Q(xs8**+WwwQls2BXpE&6a@k{p)pT=uZpFOtx23`!Pv90_r}MfPm3Jdexh(L> z;bE0e5{>D-#w&cO3CXzxRPEZJx?Om^RO_5ZMq+~42}9|f)e1W(92Wz zE`45*xtN1NC#szCdxy27I~rB?WZut@#bWA<(hU`>gzLF^jJTMU0fG35{$t~rp{lQz z1bzMDuM>J5+-U?V`rW8NN)9Z-lnLLZN;ky*l5r(3F^923M|{tRX~md3@=WLywG{ti zflbWz_R;Ta>Yhpr1T=`z%Wo9W>n$JP_UK!g>xd$yw-*#WWeXP!4tEDm;#|HogE z{QnuO&E)Zzc_xgIXWt0AL~%Kv=1@X3l3Js9!kRF&6ukIC6m0#R#DP<;O7o&ihj>lZ z$_;0~oOSbewN}sDkZ=g<)PQR(S{ExLti2v3={7Flp7H(d*LJh|>&*-XrFLv=y(4tGwE}XS0_+J0mFs zsV~eB;YV!M8l&=KkZaTRMwOGDd5lrJRY@jxDU`;d@A}hbS98`ox2JY9`1}0l)fo42 z*6FAEC6l?Rx~Fp)>K~q0mn$ROV_jyk8U?2bl%Q|QdE?+MaY_KqlKNeB63mdHhe&$T z%o$syD9kwxLS5~7HDzAhghsL~E@d=AsVO$hk$gnEJjRkacu?lNaHjU+R4bK(h*FLG z@0Q3k9IU}{I?fPYHSOAP{~=yz`s|lKUjIWK%(B(g#3^zSQ89Z6+H%PbK=cm<4gR-W zV*l`{<0mQ%yEkBXq7tLRi>XQH3RP})R}pP+OV?D;&3(jk3hA9@uaXH(Ty!6-7R`_F z+4+Q<5R3W)hAp*{hh^Y>oC%)S=`Ki<2(_XmEDxBSgHwo+uXR5AUV3Zd zx*~cUUZOOiU_uZK()J89!YVENV!}j$xVeYFy}gIutEU?Q8Ne}zhTMd=|3a<7oUVPHTZ#3&#K$X{PU13x~{zL~{HC_rUMkV^=KB9U`r z{6#k$v@lT_wxmjeew;B(0|KA~zZLxbgM)FViLXFB&0)~spn5^IN&fyAcxCv30|Aah z(xU`3_TDYxAjO@p!~i4+2B=0p^)z|@b(DFqv!5}1$pJ%Ai{%2jNGSHx^2ah1R?MUBe(}+>QZMhpS8@V;x{9r(6D}Fu8h63vD1wuf< zh6Au%3?VMk+n_2t^4;1Eo;@hmt(1lL^uy&00#4nG5f$p8FnM!99gQ zs0(=qwx72nz9m|~z(9DZaUg5{a0%_Ue2aCXi(Y&WxF5#`dx1{8UY}5b?0kQIe42U= zGx0(Y9DT;V5=$beF0n2sDer%kA9g3f!ND;4GggP80R9?EVj%wsk{lETeHZ%W+nqoU z<)NDA<@;7GX#EEW8j$SGS^WL?;uag4>q{F&p$8bAlh|O!2HSZFJ;C}Q``BqG4)`{2 z``*3#9=_XF{;C%H-i}b+Fsu=LAOP?_fCmzD>WO#8NZzBif~zJWc*kb=n{RgZfRENT zIG9vm^ZRT;DYsoOE|j6P_cFPT0BU27ey}^|KWKNYzK4a z_?vih(=8zDstUQ8SK%u!aD#ptC{_&#LUrqImQxbL01+V*-fH=9S4G1>1$}|rs4O5H zI7h|;_xEvtIGciWSk4seAqp7y^v%yV0?7sT>}QFkRGlEiJ zAQ0ctei}#(@7Ne1Af(@cfgrh`f;XIjU$V4dAYb?q;Qlp0ZjYYHOZSeR$-uVKOI1Ys z`J=&E`wGK%$@Q9J>psq&!9Q3SaQ_jYxBbBGJJ6k|q90hKOu?ZpeAVK%1SbnuuZ+SF!%VnpSn z-U0s_!56Q1aZaYMsdmJboMGPbv}sq-8}na=UiLY4H~stt*mUB$yZy~KCwJHBYRmWn zC9KZd2-$8d&vC3lm-yk;&SPCv-VSi(*>Rkv9aE`QpIz-S2BFTMd*Nf|<9TQd?sqUo z8PNyAQ)<=Q%omrW)+lv6aOsl2>x(50Q=yaN{%A%xV{CQ&bk~PDd`L4%i}1>ALgROB{05Md&w?T;NI6sC9WnyO|)0EXV+t#mw|A?tTM65Nd$fp;b;-% zz8Ml$Xv#J4V4)%}=@_b=yo0iiSQL=y2R3O@-zylzVfWgt^VilJ zeEs-Q=8*Y(BpIUUZi*l|djhBHq%91-t0HKjF==fb}XGHU*z3=hGt_ZNP|SI6HM)1 zy;9Jqp@=7>TNFVS4ps|S!w3{=l~!K8U_*>Yl7uX7dr0VKHx}QYz6JbN)TmcF@9DIKw;dDWX|QN^tKHg1ecaAspRcdI*ATWO*#3B*)s(q&lO(;PYC z#OhpF+S|;SHo39G@B`!nnSWFG{k72BU9l|1PnL49_8SL1*YQ2D85En>{k*vzW+nQv zwkWEO#oYgK?glmSI;E?qtZmj(+x;}@(6IDiC@)oUXBjH%$tmj!0Ie@DMstsDc32q> zvpyOBkvBK#pSVcnnf*6U;M^oWldF`-*?DU9Dp^Y(jGbCV4fD}{o`oo}{FkQa@G3Zm#)-`EuiBuG!%3;Wtu zhv$TJ2=e+0)&dlo$Md!zQy+UXcDmYH(5O5^#t%#}eowE6Av?`kPf2+Y8a;e9qw7ll z4yKnE{_LIPePX}y6JUw`F_iBwTzwXtjBYO0uWh+V>@p)T%{SosTN1MfEftwY_=4T3 zBUN*-^%M}Sf@_>n{2-Xy>r{1UyZ_df8T?-`O+Kc}(_Z%x6?T|>2wT1ke zz6fcn01Lf4RBBHz&UVJ~;IA?+#*~ zT^=&{Le5}T+bw~61+#nY@5zIVJBQ5R>fD9LwYWF*%b011#LI+tEyyDpI#FD=gaRd| zSC_GR>p?)4zLz~i7}ccJ>?6+vX;ItN?s~Aft|`yoo^wYo0hc}l`p+6<+?rp_GJOPc$VvwYf+; zauw8@I1?KG`z{F61S=@UG*_JG5fkzyo!uhR{r;Rqf>}F8zy_)G?;FUTfcVf0 zR=e}S??^h4PQxo-8(30f10kLKE%=p(CM!?dO}GFYynW*k?~|>njd6U6ZkVA(Yc%k~ zX69NV8;?u@a5Bl_qwPQGv*&2ea6nDY(GuXu+~^kr2NFh}Hhi8@E5&X0lfjd+ndPGm zV=0NscmLF4o#^F27pClj80(j{!r$YLedqKNMZX~tLB~IaRhcvwvUp#kgObD+PG3QB z&%(|Qq$Aph&IM16_50^WVV|JhvZ6CZt=8JUphyO94P@QCS;|i|p9-`(w{O@)um6SF z><+n&zC}7&PnP}Y*3r3%LlkaAhD2}rF=fn>_a)zsvr2n`{na_-W3eNG^wq&@Y;Flk z3e~{@AmMgyi+)VsNh{jDe?-w4ceahcy1pVM^_Gb5g70-PXt%8w#dv3&<@s+r9ek46< z_gfAyF?aQsVDIT-zi;JC>E-6h`Q4r1hkjD+U&$--~LMeKS@BR(?=YdUF5ZdF76EAh|= zh?@i3L4~W3k;gM|c~7kpTLnIBMZP)CT=i2(h4p4gTF~0X9F9$?t#6W=6aJ`Aih_qz z)xUc&Y8TDLKS`EBs%v18k;R8klsgk09PKJfT5*kX(y%Qd+*O=df$c=om};{XrSR?9 za2t^X67eQyG)IPes8i>{O5apGOL_l(rz!)>?Eke3#gAw(#eGWJ-~gci!{SXdgFrN~ z-lCf{Wr&Bu8-gcInD_nXX^nra;njB$I7+@&bsMOZD7@^lQyxoi=og{|;qkHX&Eb)f znDon8yUtrjTvs^bml zCTGU#dk?wq_?+uRYX8l9$0gNA zp3W%!``*Gr*bVCMjb_~TWBf;nv4-g~;Y#0*ar0H|>x!q$2m5(by(>+w24l??>do(p z*f)^1;k1>wt?w7+nB_{8oKzHvW(sV}T2Bxj2mKsyH>_F~)B$o$JGsv~-Sx|JkBvi6 z<=^<_A}1Zj7eFsIRvT{ip=erEv{bt20CIHmy`18l|KgNMk)h z*`Iuxjt#Xz;2;lt$~=5L6UdVhG0y1{iG*(K&g!AW?E#-4s@YQ7h1tkE!P(23pxX7l!Wg}s2^>gv3uPBRB>LyL za{1xBn4};3hC-)>4?b$Yo^XbO{h8g{CXip>gBjj{*03@WAYNKrd~~zb>}o2RlX5j^ zyB{a-16b>1BVleEwOW{)1@1)2B+7Bm?$3VL8Pp+<%S6OZ;`Go`(ZH4VE{;`&jk$FSgc`vUtajWQ375mhqwZ^{|8+x&df+wfO?&$Dzmn1azBQ9C~9 zH=tn3*?A-5b&cWiNq@OVAA-4D=X=?o4IW{{b73`@LULn^uj=3pRH}wX!!63iu$Pn1 z*;kF-_>DhCH_1d1tKuPl9kGG*%eP9t(Q<=pt?O0l(@=IvWZi8m7q9KF{QfkT{%X!} za;ztEGfj=^C!!`%z{ibZ3hE21tHRZVH;`>Pu#9Qn88oZfl+d57E3gD3KxXapIcgAX zT^jOB*imdqheK_+4VkcB{Dpor=|INlU*(-yQLSmJ&}Pf+S1Y|DwMrqB$e-;g4p6cA z22o$$)LIk93M+QavxkU&_xt_0126^!najxp3P!O`zoleKM-T!&3R(R$NA{Byci?PD zo+XnI$9L9P?>zabYdAN8<&&2m8Aj~{QM~$tog=Kn(xj4G2{pgViDYVgL?^;}xRp~)UR#!hJcgT)ayy2DL`%XNX9ekPsDKTYz!>FzBkGR6+=08QLE@A`K{dx z>#RQ?ns|rw9b}P4bw%dy2sQ65F?sk37fyuCf{GiSM4BXb9w9as`aO*6x*mbL(Mf+% z*5#$md{3wnZ8r}lS-+4ye?zex;!Oklj{e6%)CqNUMj4KzUkfylqVruwRR52F|vi9&CB0_V?8wG z51xnq*)W*d)GmUVWj`IoTOb7p*8`vxt|z2>E`HX%K^sGcINZAqY4$lfS9IDT<@<4# z=vfD@M`Tf@-4vIw-$aI2?_Vfw>k~6s(YadRteQ0je7{Uqc@-jWrRs=1sBUUM+&!?4 zLI06m1QoDM@2a}PvUuB%q03}W5LkmcOOM=gnXcFZyzXByed)bK0OZXdQ;z+!{>q4~ z2%dNFdVUixD0HrR5g-9SHrfq!! zV#a=P-w3Rf=nH-g0!_!>C#B|7wpf*4Ki3;UQ`#N1knHUjai{Jd)39_`^%1vmtCb9r zy82H1v?f*h;BKoHST7yM`ZCvD5ce#kwZ|1(;i3jN|E|>upB>D4XI!w}`A{hkcKvGW z)U!8T*79#!EwA|fnZ6Td>H)v+TQ##7v_J>T!g6a70%=R;4p{d;RH_E>_&_z~=%&W$ z+R`?GxwCig-!omUTYlwhQ}RjkJwWivfM0ypB{0l7{g^f;q&!R;7kZoh46?OMdWrqT zkB}y2d?dH4|6yW*tWkaYD`wKiS5)7JPupk*zMyX#llWyq-~1`J$aw^B;Ow^~$_zp3 z@Afynev>+rb%1)FY7gX-oVUn;m!IrCSQ3#5?iJRz#uJ%R#l2Ch2|<4{{G{gqster%%z7ljU};fq6SEE-~FdBmTCaP_VCn+SnAlJ<9VUaE4x!=r|?+zpsy1bF^WA zH^~hQUxJ-=Bl}H)W|0YgKkLuW*T4w6Z2l_qfMeA4N5H%W8PSq@pQ^UKLw^`ro{vYX zM%_m$oPo(!Qp#fyfc&LSsf%J}HJ!q;eMb8@i~)~koMkJsir@qWSGLG4UYmmHVYDKH z_>(*#^TpTi!{v}d-;=jObkMyiHT2_PQz9FJfrd9$j@l-JVR&Lu?J5XS90N1WXd*O+ zFF1eU9`J*fSlBL~fE2`j&1OfavVS4c(wGk{lGTQ2O%f*kC;6WLhI@`^*00 zjq)V9)(==8l>J5xY=#wcgtO;SMY(7 z@DbqF4)N+@!`Usv`z9(uc)p9%2#&NS%orU{ld(VJJR7W))il{3X`e{hADE=l&j^UmkMHku4O zMi-5JStMP%_4jjLmL$YfVR;&qVi<6rt)07CmD!mV`Srxfj7fJD5O} zoOH~zXk;-Vxy{CLSf@E^LuCn~ynwuB0F=7G{YiSX^79OD!39;hx5RwH6IY_D<`eo* z%uzUAg96zKo*C42^}nw|uku5(*Z=+bv+h;;ut{gmXW=7BtJlktdE0k9LqT@ThGvMz zNpecKN3xsE`=07xu;vd;9%Jw4k--mNFPQcKkcz<0nc`*0Nol_A%ONs)q;+vrMj*kR zmeQQJi*t_JJ-nb)Aq_n?5p8W5!($vWJT2XP4}Cb-_`Bu@vmv&vdJ1EQD!)4P)ov{W z_1rM?QpJloS_RbR@?6PKVl`(X-)N!TIl0Fx+O8spW>tPlBRQ@yitKHh{_-qHhLMNy zR>3XLA~m#jG=shfd$-09D@)fmGr++1##r|BT**D(p-R=abgCMf)>Y0s!3Sp@w4cVD z%f>VX)wwYQc`Mg)&PrCb97@VLC`3nCt0yuo%q#|PLubP+>MLBQP^{LtU+Nm_QwFKS zH4{_uhme(F53T3mCVt`Mhb*!jjR2gWxim}j6!Pg$>$cmdFcy~Ug}U{PO<>7dwpFXH zI=qjl^6{^(t_cx|N&QFF;saN7x&Fi9?P5fd`f|(jzcRi3T1veDYGcgvAJG&k_Kcpt zGxkx-8MY(*sK=8n0COOvw-qYxji;N z&vdDMEs^=J6_BVDKGY0gM$D$K9XFxzXAyF{`fP6wX&R%HJju`3kmj%)h|KT?FQbNH zw0qPAR=<5Y%dR^iAM7ug#+MX~B~j+QK&%xJ^H^V7;b(>GNHqUp(FM3$Tu&fx;bM*Y zf0@N_HP6$HG8AmUBp8V$To<4_TCMd3sx($i7#<)Bi&pmu1};&rU9tW?^tpq!^I`rs zaCOfYS_zhhkw5mye9N`9fa{UVfri{x8FiQy*&Vc`HU3OTi|6S{-`MXxTJ(H|1|vtV zOCX@lV{KNam$Gz`e+WcF+O8gGnug)l7Sl?!ij_e@XJ+$4!NJ-f(kWilpT48A81h|p zY~J7-zo_j@-HayDA*@$KiR<&W{N4z~D;3MGne<|Fw>I;cb|R%@B##UjWJ_e1rX3RK z151^8EQ>1F7Gz+`oZ9T7Nfn76W9DI+_$Bi1pQzdBna6C*#^3&O)W?>~T zUwv#k0t$o;MDn&}V*%W>sxWq1FddysK5Qe(q_tlBL=K-)XYSgGVL3&;FC&rV{x(;I zb8jJuhSW|+-CU6QrDi}8YpG=4hp|lsyK5<2Eveh|aEYo&941RDYekvez7fl7DgHdE zE`dl{xmeNzo)#F;gI=P&6^>Rf7d|-=%(PKLT)iOO;cDZ@qEkfY2_p=_4k6zbzovrb z98u2d5Zkk^{2W-W_uM#OuY$g6h7F?HYE5UCmuBxBnfp=D97T@dRpJexLj zQ;#ZZjnsMl_hUAF)e`wZJ?_ov@!&rarOr6E=1@7@g#~c;c{<^n-RvT7h`Q|w$5Igt zuOov`P=NCPG37nf0!EyMMYAq-)EI6*mobeDU0d>w9=f+}XZUowX`jXIcj4aoXHj6v zC_;48TAWOw{NFjkjTYhw`Fqn^7!gQKudSegU;4#J(@nB*_)q1Q^VxA#+h{X+x5MZ1 z@Hg|$lSY6|sBC0yxkaHa_S1sbsmpH8bs9vh&25W=Rlv&ccaEHzw0lshqnMgaZIaS$ zS_xme<7Vq2Mn{iso`x?P(R2fq@FA7+U((RqgF>rb^WYI2SEVGhYuGC3Up%#=26z`C z1btDyQSDAqW};>$_>MAQLtWamc`GLBQ_p9te8GS*e(hbl8Cj$(qxZWVpYNXk16)etvXU28NPOo1_Lixef+^!(|5+`vt&eI-svkO}IQ5wzqEX&2c(}f#7 zoT<6dxd+row%g|VVp2T{SCH(zl6ZJcrB;-{lb`U4=;`X?rjn$fJ8@9m$XNIrasPn| z{|_L7L2i54`F<{NE$dpav)LIX#T7S6VoWQgr&XWlI?zGrbU zT=o7O`=O>J?Ky>HF=>q`AD#bG9&2h)T{H%v4+R#n^npMQZ*6J(; z-baf;<05Y~DAHE%E6fXSKvmg9_5jmes*#c8+-;8q8-itU6mmly#5%#Ke(hD^OSNSSxhGY2gebCy!Mt~N{{<9OEW(5Q!D%4s z4{6i;cpV$VKT)|A=&Qnwq?$)YZ+UaGbOP^uu<;ho6wIW_S4=Z!x-3bu3YM04*4UO7 zX^brksF;{do7SuB?gtl8dgIa+5tiC}{7CUrUPdv}Dgl#0G_Rp{WFD_&s@tUk?#ZxW z2rKx44Dp6MiH&Kt5Ca1Ew87GNZb!ftADAlgHg?afVv6jsQ3zG1RIg7ED6C7yIAL7` zOa2c==|x!?{yc3Wzk(7p=)gHVeel!2EMWE-OXN#Bgf2i15KpW`C7_%gD1gaPqV1ru zmHSR`n?tIpC2nku`I4<*&9ZG{LYN!a|Ldp$p?a-LPI9#zo`HC4`&OxPMv!l>sfd=cu zXSChe>kLJY#J9(GXS>}*u$*wW348wwMMvo|Lz-VF|M)fTk~>#n)UOsJ3bY7I?JmUukNiPw*jPtM0FXC4RB z;G<|ftHo?Iv$|!gkz9S>7wT7#s+y;%w@o9yp~Ctjl&=S|q4{@WQXD}D15E+H#4Fo; zxuxU{^sFSmC<~ry+p=k6YUbVpT=(W{r(0Fu-RCcY_3OVOt~x@r3!cE;kA_g|fP!r% zU4tldp)G{xa%HBT)ML>{4`-^?0@*1w6;?LvgT+PAOpaPco#&YT;+C?-SXzL5i&k2r zEtC9}ZD8C*`DSBQW>PJL&6Op$rtKo&DYL0hUc*eF`IEjeRJUeNU{}U-EL@|Vv`~L$ z2u{OYy?FEBmj5tt_a5l;l9O{Njny-ut9Tq&$bIc^OzYie(v^Dm; zR_TgAK^zu7ZbxYUwT@S1GsA8vqB{f|oRwrH+rK>N3o|%^=i1)UMJ^SeV4lNl>RDE< zfo5I(3&Y{II}^pdG$v6pzTR@G zCg!!-8^v9gG0>U~vG^)PMn9&2qVn9H??je#gltUGOe$qzXRL@Y)x6lgklrC4!!vzR z;;5i+?qI!le;;G*YtnDX*32Qsd?=H6f@Wo)zK+;_P@+U?Qzv~8T30^K4}hsJUq3Oo z*>CDvaBVzGh66(G6(7v8eH=$rMC%kAkUpGZwc(!uQ0g^=Id?m{EH0Hufp&~H{G>$*^imppxc=>R7>bn$H6&{kGqXZ-DkgSrD4 zwguA$C<1Zxf6vYv4;WqsCXNXsKa-sI@fP))je?3J+qn%Td1#t>)!IyHyrt1ps7nYgXg}&d4qoe zl@amYELvr0&#sGob30DHRO2E^E_ufrQos9CS3)U?*9MYn#C$c2N%c`l@)rlgsraLA zj*_=Ex?Xu<*T2R+@r2kFYCK$cNycuvn;Sp@PnNiKV;~vnF)Ba)4b#f4wR9_*6F|jw zO}%%$E8wctka3MnGHwV9Oc+RH!Dkho9sVng-*qkVzMW+!)rKf77Q7%sUOS}Mt@`(Q zA?<1)xeKfDBhdaX;`i~+S;|B?GTuv?_)MeZ^)P!?rEJLZbZe@IH75-q*R-y9^9=09 zYfT>BGd_KI&DZeVTof_~FoJ-}`rz?}Y@B$Pb$7Q+3tr66e(+ZvWQJY#PPo<2tOq7J zbIa(wvNdH%w>HXaDWV2UZ+2*KY?Cr##Cl;$&x#v#3mP$;?ZVLBlh;LjIG7dRbIVBBwTh0e;gZvoS-3x#zZOiIN>=BmnZm$kd;q#>aCp2* z$=b)jB@7AGLG%6@!5Mazw3#8TNuKf+l;5M~XPlBlGa|70$J$axttz#0U@kcA%q*%F za}nerJgqqn4v;KH<@Cq#rg`nY?hZRVw@)}=Hr@-2mefvO(d#Uhn=+@qm9B|Y$T#Yo z;I_tAYJnvvOJ#R0Q}7E`slc4*AG)nk9Fc#|)wT#>+g>K`)eG22C>?{-zzp4ZxGm}< zheuI*O<$~X!_Je=oz9%*6X{VF60}_BMwx;GiQ;4lRBiu*vRz%3w~}|Qbdj#wiCHK_ zk{IIg+FOXh;)sp@o>#jnBv$fH=No^X`t8oFQg9{d{gLWKXY=jj3DBfhpPkC}v@5KGk#JPmJ92Hg}?_pQj zFgiZydo14ZldN2`ejj>z2h~uEpsI_z0y^Sxzv&@30bxgOOyf3OW|}fUlTGJ1_>2Qx zlow+$f@@=aWu};n6W~jG{T&<0nL8nz@$RxWAPx#GA!Vlfo5zp9X5%mqGy2>AKx19< z4~1{QX26m*;Z9n8)iBL8@_q$oW~k8{4c{;75ikO=_Gk<22laASZ@r3Vr@|qbIFNr1 zcj0ZltSEybnbnkMH%l@-Y@-eY)z5|vgs5MX`Wj(Eb@JQAqinVLemx!0aen0|$4V6G zvDm_cU2w=aM3=CK-S09}XY;j5E6!JRrr1iJVBDVH07%$k^uhn)|0LM|KchnbL4e%M zEdRs$v5+vcva|i~_WwlzvT?F<{+}tpXGkU8^(9ESeXI@onHJgotE($=P4MXU_I7A@ z7!+MF&_HjJ7HgQRt2ZvEYwqXw@3QBz@)Q1|O6FxeXZDN;Iq@v%g^4W)a#Q=`J_r-D zL+~)#pJQOFAQcrC6BQLUQmU$Wzp?RWfD0*AZ4xT;8laPKyPIqvOK6C}o&(l6rCCVa zo7X?H91&y$3B>6ZwDna}3)H5fqT?I3!F>;03a33_5+q^*gxi}pjukDbr8B4)eWh>i z&^GIv56nXT6hug0-)=~79yGs+gsP^rmQZMRWf0Bey(z!67Ex$(3j@LF_9F+a0W6t; z0m+As4*2hd6GKf?6Hf|QA}&!N?lqAVLWl zL)$uABin1yVQ$Q7Kr;d_GPi%}UQP%p_%|ekW64-TLd6+xG&pI zfcdvFjLoxoU2SP;XJt@r7S+lW*l(mJP|&~s0E|>UK3yEpAvZGs0&ksbz55Wq9XH4} zN`4FMtI!T14owXbr`z?#{Xeg)@EaQ2+|0aYl9<2lL;1)ygW_^x;L_Gs*o|RI3b;uG z;SG@6e%eetyzXyos&{X`|3YSgUQbK=o()MW2ahZwT$#lrr@eKb$bda1&VU?&>=_*c z`X{IQAwjsogouig=>WRi-BXaadDxHskENjM=AcgSo{vhzIK~x%ho?UWmo^trU@cs& zfj*tzmoEmv5D;J!Jw*&4=y8xMNT)ex_GWRf1}~TY5rsq`zDu01pr93i&)2)jOA!;R zH!uD)(D%(}ge7fCqowQ`(yjAVts)0ZY=Q4g4j@4=)jHOJ`B&KJf?PF2Z+}-77$JOR zK%Wb?*0~)$+2aDYzUw954sP!{5DkDL4B-wCNweB5jSZ3eDR~N2ky%k>5BPuQJbsyv zeG8_2D<6KVoqngp|1FQ6%<)_62Kxd&hMIokPj~;=Dm*{C3;?2y!oXw| z*$Bdg)jQBx$1r5SPhw?$OKC|-0?kT0Y~WT?kFf%7QUvD4-1s5O0j#or<8a~sHzzQ- zh5Ip#d7nHu_6GRatC(4RxjjHqqZ8qO zUmTcRgg>~w*oUF-Ao}2|0IYGtIcHEcOzW%d9sfYKyq+La*Lg`l9cOeiL9k{8=StpvWEH_`?dy5Q}s)j00b-gn{2E3=g>C^5lG~y;7Mh~DS&!Rd}7=6 z9sXsks5$Wkxy|MO1-S}Bck~^20fH3?taNkJf3>7+$2{c3aatt<-+}g@f!~m=Aav^g zmAbZHrOy(BN3s1c!{0;8PsA@A%ye%5_rc{i{OWeg>UtpE*W&tmOC8t8{KvWxl6{cj zceUHLpQR?jH{|xncRBVB{wq)m+7<8qitV%RwhZ((-~C4*+AnN=2iVvz@c(zC67MhA zZ%MtPDg_05;O_li+aqxcxXHohhdBUc5!cSF=R8ENEkm|!FUO>CGG8M?_ve@Io;Nhc zqy6&VnPcRByme3TQg}-6XR2inhWn zVm9>-;961lgFZ1H>2`Jvp4DAYXAQb=v)=g$;=b^3GA>j{%rgVFLZ%ebrC}lzS#fuh zp|1+rezoH~{Y4=|e%Dw_%We0XldO!$Hc8*MYsvJ(rpuz$9>+&TL_!1Wt})yrzj?>py9@w1fg={X!faj@8J-({0)Vmz2 zEQQ6mf27ZJ&wJEIXR!1mMDHwcd<%8Q<*Q7^Th2!%IAZ4w(4=o2EKq^yfAPc~zngsn z0{`w3B!t0LQY=8n)??w;ualB4Z0K?=h+s2DBcnB>g>^~uUAs;`h2X$97vBE>1o4uBRhtyB?x>^5-#dUA&I&d`mFay_SBmK; z{5!{f`l2ba!2@E`hSo&NgyMI{8<900n-2ILe%DH=i{Z8r$x-RdF^n}5oKkgM5M zO|vEmSNMx}*K}RZ%h_y%QrE$mEfok*$Y|q5(}1C;S+R&K%fC$Dz0|xX;J$?eK6}`7 zlnoA!7Qe8v4B|)|&|7mgZ>XzC9G6O*A4;f|5uC&VC12KXnx|D}y-*Uuf@8G;O_I{= zrZ#g2K%~mVTWv&5uPdd(ty2z_bACtZZ;dWHU-d{0CoZh0`Mhi~79*hMIPPGzx);^8 zlM6r4v>0IBe;zl4vr0`aif3m4?x}?chJx2%_!82!?O$>> zn8P@Eo^_>GsiJ(WHQ-B>f2=#rq{U>YnY|!f1`?6f0~tXE%1Q?nWY!4hhD!0NA$aS& z9sZ&ZHq7z|9dH|_nl`#H1~Zz`0lbU zTb8yQ)H@;W5>D#XuKI5Tz+lHbXI<4t;q2E%%y;I@&+o6>%v03>gc%qIL=lClTHl7F za$4F)fevba9$8kepA55y$+7WzPpU3zUUMoQTIb4*d!xRg>eoXssJ_HMGhyp(kdwi2 ziOelIFB65PERDPp6%eH_gk1}1q^^rDoojTBO`Gz-^HO(iOeK-mRxUC4qyOGYyu{Tq_oghD>T(;uNZK`cpRA$SY}$?|=MD zHwQ02@ze!}h_a*pP&r01fiYy&`6RRm^Q*w}9lQ9$?C%@AqpmXNRZF2CMI0x*m%QZT zohyC}&`Z2Ad85p4ZFxN9?_Fvs4$y6GgwcMYBJ2FvHE(?a{)IySQS4ze>sA{ML>a*h zQ(ee(#hEr-tI*QTaJ4Mu60#TcXv{1~-gGW3WbD)EX`&5RJn5FW>hHt`i=1;bTCw-c z+aIV(&m|#$(w3ljqV6?~ug^FBLcVpZ z5UAkujAkGO&LO;ym!?tbD^K-{m`oI3ZLEbO_HzTv4)YV>L4F_8x6b|Gt{Tx!k|lXv zO1=G97BToYWZJ%z-1y3MPcBj2)~1}!ox~`v;w!;YwBQsQ{j3*V2{8-&l=>NGcRm<$ zfB)qf=+#T{v}wuDTQgh0TE3sweFte;`BwlQte8kpvA;dzWn+pbfV$m?9^a=#dQkD5 zy39zRX1U_{q|Skq`g(82v?@HsXMYNmJ9AILsb6I>Qq{IA^c`EDW!5##oX!{y`pOO2 z=*FL8_;dg*XAwJz{QqL>oSy^z;_w>VPByl!jcwa@Ha6eb+}O4@+}P&Ewr#85PN&m$ zra#_4;WPI+=OA}wds^(>7W>r4IyCFI~5>EU~Z8%@7@n zIm$A#b@xiIeps|M$cqna2<_@gSX~qYX9RT8!>Fw~f=#~_{L~XP%X>UJbe0}tKUYzd zC?2V$nR&{pc%wa6%Z5(C34K;Gk?c6%@N6^N)m22kA7BLBHl$4iI7w?#VlNlv zfDKr2htMMVIoPFTmye6aie63D^aYiadAWUkv_jMzQaV5~y7VG31kJdQBK;7E8io0* z`|t+|6}dg5`jUoa&3wsy)v1;x4EWqUEd&H~Fm z$un|8VSJ72Vs$j9to=deFQ;py)@4JvpxKPN*AK?ibc`wQY(jVRgmwm*GRFKP0VVLP zmS~DUe76{cWw?$-7mNb)1CB=k?uUpg4L3=WV)t++{MahPw5eS28MPodpq@)!8V&dx z)1#n5Hb+a9cQ_-T#-@$PAtmhMw2S@DZh4xnh+1eCXI{j`Srx*%y$rEe$xPnx73U$l z4OE-G);QE9<+HV1H4~o2qQI%%k70s8ovPX0SNi?-kFKI4fMcHz@`w_6`Gd(-r7dTI zqw9>uj4m3;)xWe-e#MP4(`va%D9Eh4cyD}uqXRZ^Al;qL<`C;l%fH+d!(kgQbh5@u zR7tk|vlTtGv!qv`H0Q$lxx@i=mp=??MbAX*75x{w7jc?I{f)ddZZcA5WrWV(*ecj! zK7>06u6CnyWY23FYRznbA(=uwHb zX(5r`fZxY4jt@Kj=X|y?d?F6Jl&u_*>Q9-_U*)qd)-~-E+0^0$-0in<9hE&0{?0a? zFDlTVq>Km^cV}Ove&Z zO-#vBgZYIQ(_2|RwnRUs$UGrcqLe|2C7ws-b@+|rp{eP&x@M1gbwW>h9u%2zhAY{n zuz8v$>!E45-M7ntY}qAf;AS0leOWzkF}eyWe7L>LPvWZ5j^fVn^YUxI@fUf~7M8!_ zaZ5COx;n~CoT8;kUC_p$lE89{g_(^X&7G^tp0QKMbkV52ukrO@Up@;A_vx>+xpiw; za#?4xaVCTHV|ojPYMK0P1x6k&9KNu}bSR5DoQHgG0<0uJW-I^htsy&CA|xL{oENe( zP*l~%SnnO_ZLoMTOxlT;>R50e7@Fs+r7jj;GSmfPii%93H91w64`158cUFLRgAwpT!ve3@ZXO2ZS=Pj?ymrPMIDqgb^=~OeZA7 z!u4%U#2`^&RYuglWVITl8t#{8wqu|JT>GWWe{bo&!`nI@r8RMq=g$7pbVjqrZrLtN z)ly7-q1Ouk#r@Qdk%J+gqmLc~kszp+*27g-OQbLurLU1hVt^X?57~;9{o|}aoCsgz z3B3e>K1%1KhokUJxz@|1OBZu<{T%AD)yT5LlUGEk06oYt&+O9B&^mi`ttws63bD2h zA%Hj)O>P=~y26qn>1_Rw>C?}E+3u?P$$ma9>_f{mSPn`@&lxfTOE9#Cy%ix{@i8uO zV$J@>rVMt$cx7S}bf{8@e{NaAa(L1HmG=)wP$MD<5`8yNK`Dm&T(YmhLi;P2T|l?1 z{|lT}YLaM!i{V&h#o37Fr<$Ci4UsuNXTz=|L!Qau$z_5Ove+V`pmtc3Vog0zU86O_ zcqu3qx9{3B@t)ZVSBNM%Z`bP|G zxfxg!L$a(&nc{(a-Dw2G_E2~{D&U+A&>V-OH_Rkd?PaPmM5GWI`-~<n!idYAwdZ#LQD#dp`PZnzvpuN?0s2t&+%+T}vHEBoE4 z!B-_KOn?N5M|YPr?M+46#*6Gb67s46F-0>~1$rBpoPm9d(v~-l&rNbhsoO*>li3NL z03wndtDOtMDy!_-_Z_U9+*e=;;ohvx>gcQfexy|sVgcfHD4CDU&R-ed0bT$fUlzF` zZLE?SS#a0V8PodLAwG;WkzyUhD{TG7h#JnK>39?OW2oEp@1kh`EoPgTyT?%#62{e| z58d`>uFD3bQiB9zhNBbhGN# z3QC$q2h6=C7Sj##r{!3biy?qv82@DCHA~2}o)(Nl>kAoRWg{epwPM4{5H}~HxYijp zxq}vVC=qhxPRDtIhKM1L=r022h0M=O{O))BM#`np6?VWZzMYq9IiJbXr5<#Pbw&8= zHvv8lf;%KU3C`ha8Shn{l7D1bVVe5|Liq8LdF_YRAG10IycG9pmw#}|}?dCVeJ zvj`!TR=UXk^s>-!2qX1VLOyuqwLP#D8)e;*VJ+-%l&Et0$sAn9gJdGkf2n52;Od=t z109#wG_9*K=g#G-Vvolkx!~8>?0j&Jt;;H`UV?*_&JPp8O)DnJ(@bs&TALTr1u~Ey zS5B?vQ|v_kQo`!GG(CW!inx+$pcWi*sT1#_(hs!zr>ih(b*GnD<~nLLo6YFE{8cAL z$0H3-7r4t;$2~OkG@k>GXUN=)%*YTDzYI7#iA;F8G@w%sRR>1c{=%q^Umdqwp&+4} zAWR6&6_?7VPle6#(!e?MHD`_5HInY!7-WWvG*fdiL&|7YNC&v1rPQ-DY&66^E4+lh zVL=tlt@C;OELYK2*IG2b{7|oi>s(t?uw^HMg-%V0CJoLWV=8^#s zu@)&5?O{2q%R*a&7*7>5@dv|7nNS2gdYJJK)vwDP(vcjuJ$uN3Hj7^(n~LdPI%*R$ zq*tMNph+2SK*|frDWX$HtFkWsYJbY84&^HM)5{VXd6I!Wf89?H|ice%p0B=4Hlq`BZ;DN&3pY zP$L!(IXU)YS^2xgv8$0`X5tpM!02H*@$rnd7Z8BU&7MUSy-Y8@&$MQVJl8cPibl!; zu~t_u4#wdaL$~%2a{k1t|8f7j`PMYM{8};RjQBq)H!35|?99Mrglxv@_xd^!CddnW zuo?hG=@jpM&0>aV8(NRwM&mH13KchcCfF61wY`ak)m$?T!Q#+BVJ-x7eawD>U-r|@ zU!iI`Ab3uF_q7&iein0SA+N$w!Pjmu?tqsMUCwBT7QUjny_@wt3hi_G{#-U$eh!j< zW%8*~S`H%M>BjsEmuR7U?y_~dr5`5(&H(IJV)7i@%Vcz+e!-9pnX+T^I39Rbl)?=v>*4?1gxLed%$tSpHR3yP__-f4(v=HyZYk zhvjMze}5OR66C#=w-awALhe0~p~maUJUfRxnqa+I3z5l@$N_ni<#bS$N`I;hi2wl7 zsJ@)d!c4mQM;haHggSoWF51u6l)h-pfrDOh#oz?y>YD(G=u|kYET%PBG?CW(Y5bbC zMg9%~hLVL5$2#x+n=gOe#Xoag=g2GW|7eo0mwG7_#R;l{gob8=NC&+8n~N-Gv#Bdp z?n>SF&ui?*T@EmZy$N&54zKo=I3TrOQMUqIAg4kWTf#|L=7$yqLS){kU~`+>{rhQ6 zvPu=Pg{DkG1v>PIId!8#K`i&>gcDQ=ZX#Wx;gX zbcs<5W6A@X!zNF+2C-xy;B0}?2zlD*E+|1X_fk|T^arEqP0eHpJ-3~z0!W`o=huvp z3{u4QoU}bU>^>c>hln*&{?iRYY;wd=MwID`)Z%)77+OM+fYhsAOYD#rbL16Jb>QC0 zMDHWj9O{n;U$=3*>+tcos_YOvb-{tLPlo~1S9bex7YHz?-k1qW>Yx@{Uf?L#>qK+) z(+C(YeLM#1qDh(R8ImLbfTL$fHkI-K-#o5wNjs$N+_VDqfvm5?e4c71^*4QK>ac3a z0mx+pCe}XuTAtg>2A(JO=4>Mg1=ZML=Dj~pYp_BLA})i~&$~7k33hPe1Tg*A^Z|*Q zl(_ZP`$C2U1+1C^Oc88+nYUnzf4u_#rp;Iy!)sX2P1oR2En1R@fGkA^ijq7$;nuXS z>v!TlCCxc_EeUEOy%?$&5l&}2s3AH}Z45S<>%6P#SDXVjlR)ySn}i4)-jb9ZEK+>b zh4FF(%sTOvNIP;4@SXH8tL7>q`Uy?atqj-N7lN}+rPMV)OjdTNVv?`$@ZWCYiPz96 z)uqk6HVHq?1!aQw0aK4P%oE*tr?Ja!X`|t25n81vZQ+}e($VgGY(ZaDyb$82?~naP zSV3RBZO$Web2#n#6vtV4Xl0vh{#+Rn4+T?0X;#{&pAc*;PW>)x#ceKPW03a)yo)dd zkylXdPjGv`Ws+~zLuFYee)|JH95*xGA~+p0-SFL&`yuP|{^jhPMaW+NQ(`*!6upPo z8~Zg(bzOpY?NuYds{*s8o-+H<>1U66WLDT8uB~JSKuMH$zvB!Y(fQs}A2X>6^})g- z>g1s)8NwurLH(O*ID}rf84dN`MFXL{bB?H0*X;if>CaBFua+#9r^O`yP!l>jlw)!^ z!TPlh^^hNgc76qqlYKl1gDV?$FpRaF;ano2#VO-`-K?RCsA!EvjoE-Sfbi5F;J2^L z4JvpKRJOD=!Yi}Jr5C{!x9(tKd3)SFm36z2)Mz5bPW+d|xz5Yia6{h6fcD8PK+)2W2<1`ks7tZK(Z%uqdLIh`7(R z^8Ft4x3bJiaqV4^e>*f*`a~LO>al?(UOP+yLRMy9a2PzunImhu-J^5)L+gq&8VA6}4Xg$#CL5LqR$450e8 zGNWEney|(m+)sYeT$fw!3T&uC5kBQBev`lR=YMP~%0!0F<)VpVS2^EV>LseA*bSxdb<4+eTjO-mvRedx5`IjOgS7AgbV@!`$om=xwRZ;|2!sQWQcA2A zJ5BuqW|j}01hOi62y=>taavnnK+{u2aV$<^FkNqOpHg5>1cP`)u8=VEcah5@>v2Qj zb+eSe)EcL(A#3cM+V_o^$J{xzm0qLE!M zr|RZpo%I$!zc&X2@4cHFLj8P9>6Zf8QS(5 zgrApHY|CV(G{J_CArHHaj#~@wVY-|aq`mr3gnAmSi)3}(PL#9CNQF;quEDQD8)Ifs zLX>m4<5_&Wy@~|QtClU2_li5FfsJ=HN8mc|HMG$>{DL@i8aI96Wd+ob@NTnOkv3!@yushtBzhsN<$i??G`5oIG5tGm@ZIg5d1thX`o+SU$s}g1R zs=Up6rwAy77Y@MIIpmSYkPy2Vs9A*1r+DgbFbI$#YYCVlI|l&~uad5MW@={d@dpqj z+*|@aL{UxD*~Ql=gHB7QYSR22X(;GpDk2E49MPjV7e;u@{U$ZGCoHp2#WKcRnG{E@h!<+v2p!tZMedlUdX1yQ8{J|1DP=?`_|Gp{?Y9lcGCP9R3>!;gp|r|Y0a-qpJHoqB3> zO5U6k2;Bm43AP0as|HR}s)It`eVNmApU}UWekRK#T+wayO_Xy7j_;zkN)h)>2IRml z28$*QNjzbGhrBc0FzjVIU!0!~Ke+y)fE?l`d(!~O^9rC~+H>v!CsEG5%nR8O8y-Bf zl*!qvMAOO-L%*?FzJF+pZe4DUrBF1H=|JXv*0|2-C87K-j|t{GpjQBSS@52#?7W7# zE8pS+LbEMD(C6y_13nylgl0bvRSB?NQW^j7SZJ3_b`qKcJPoUv5^^uBq>x`4S)*hcU>!5>s=ke@>KnUGSdbo{ zFyjap#-wX!!#CTd&Rj}W^doh~Q47UDxkn0NX8fx)nrHlhYSSgkH1*sx+!hEw$zB8z zvTc!Q7B}oGfo&!U2d%!$F z2BLQ;Rebzza8?!iAir*Ivg3wRDT`e$xb%d_4}xK_#t_J=zvAdA8q=sX!f}|?rU4G{ zk$Oz#W2`@)&?{U*OWZEZxw3PtHJu~-%(eZTCZlbjyy2o#oKT8QJUa!id-*EFVJUM- zHGq=Vc;$s6y?-!M4AX=l6jJhtPhWmO34$y2X@v8?unb%}38p7%xkL=}P&T5N^FNDP zvTBS~p850xR7k2?>@Up&PdF8^{G_^iPd_~{RZRIk(^ z*&}vtAZpHN>Z&Ti@6_`!aWi^D`h2+SSO6|&$ki7dAK{AVl%t`Q*i02s zKlnoE`j}uw7nmnengE#-Z=ws zY4ACjTP(@JuVl-@OGm5fyNH16@G5vnuC+PqkK{6vbmlJ-H2RB}vS{o+Bw0d^cYsN5 zg`hc`G6JznakQozN%XBV0LNqh>*z_$QxglJm3DQw&zLG%Ia?3%t!&LV=y#A<)zJd- zNoa%LGMe?@g_nngee%!*{$v3;5$hrZ=H|!VsF`4IcASkIEOT&Om2{P596_D4luHVUUG5%`tKNber^7VJ`)9rO}$l ziX0&<3vOSPvIbaFMfX^T-QBcuFkH*kYuBQ0kdT1{{7**n&)vGy?Lk^T@AS>~5+xj7 ztcPd!MXC>p9`*l5)ta?YofyrJ{QO54Db1s3(eFAz@Mu3ZW9rb(*Cv`|=m0k`v{*8V zQU+hXRr$FXV z7ftrIOm0NKgjX*P7Yl_k_`h#SljV)j-rF{21)+Ma;qL5*aOaO&wBD&yJ+RoJlb6wS*AbW}3Hk_=Gp+)2j?Q zmBVjWawuLK{13OI-8BF%`*ZRoIc*@KyA13tHKyFwYTE7AaG=Sji~Q~)$dy-vzU#h2 zOkBoo#bkZDkEUrgo(N_-R?HDW*Sc*}s0bPtzf5)zhC< zr<}D#eGp+~6XgL1xAR?t76@n^y$6eB;38on4a)`4UpA5kw;y4RT}(uN_tIK^WUaZxRtAsT3k z-UKWy>OucN{7>itCAGX5S*y!&?vIaQi5CMu=&7~8sw#jve8~wgJ-4O^`p<&bW670cOsNY zae~J(rX&DJj%0(6mb#l;A7MJmIhkCA)rghWcKh z;Twm5gY1Tn{~vo!f=#@fqYj@jms>V=<+D@WdEH*{8+0lLmWGC)8{k-hC)+ z=Uz3Yh}mr7J+l;ztGM8M@g(-%`Ml9)E+g2QlT)?X&^?zaL{uH*v`$XQf`atsxdH*n zcopy)4=LH}%O4}HP81bmfw&6^ZLHu9^$Y=Me#DwNZ|M3_6ubPp-9W$0iqYyTl-X`* zK9&O`?C%55On$f1oO6RKuozG>PNUSt+{0`$qePLPvDE!TRli`GC$P}SnXmwx5QI#( z?USOndiksOZoT}^x^@CLRmL^0n4$z1UnGF1ApHIJ4AJ|?5KHtA1^cLzYq{W!meeEG zA-HDg<8Ar@MSSF_BS?y=IThKFW&LDWHwKrK>oW23?pQQXh9_?h>87QD{WAu1(*D20 zv4wB4<*zjh>Wx2O(WoWJ*c3zW$1uVEzzQa+7HctUt++WeD%@zKY}{x0$oDFwMj!zy z2)R7(Wa5iF@Kc{$R$_v@wsslU^_JrSxkx81_opTCuFHf5q9S z^{c>M@#`GU;~+w2`%lbVxhbg^)l>Nyf8nL#T4^T>jwQNR@+vLYLWa`Vga~(v8>^8? z?okkHTJ1M5#3Q&-DzuoVvK~`d?q>o8Cq+G12i}~;dAIMs?9mvxXdTDw-|uKDrEb** zpo0J%hl5!nE}aREH1Cbq(x>HjYnS@rh9zcwNa4Whp%uvr|EW1oPjh>m=Au+v8-yBi z4Pccj`k?MXud0OX(UQfCdxkP{Q^O=myVuX8^y!LFy!+#GaJCLLLihor6CF?|7l;KH zwTd|5*2nLznoD=HZA+pLC$+jb`9ydSGZpJvTIKh-om5j3&-o}XutKQuyqRd9V&ja7# z|Nb`}>-BIJm>o>jb0d-9|_Sc6UX1xgFE3!L(`la^SY&o|MRIGLf zY1ve@i?TgQPfWyX;1eLVb=-Yu&dg)X{psLv8iSgwqRW939Au+=)HgsocEyNK!R@+l z@JDf}RkfX35Lmwve1)J8kb1eZqWd8xNr;Bc`eSAs1MU66h39QGyTWNW>So$&u<}g~ zS~q#Cyd0eda&+>TB0Sv+hTrqIR3RGs9~ zzZFfY`|o^8kPFaosgmp!TUs#R67^Rp4v2rBqWSgct+)Rrv>vfGNOKfwtWvwD6O^aH z!s<58Vo}b(c5L^CyP&;4(lIQt_)`Dl?j(u>fe3<)Fr5mbcnXGx2H~gPkqh$@)c&g} z2`XO}s@G$doX?)#=+v*_)5YM1fsOt5IRfu}z(E{m#0wUDt)b3c-GEv;h6X|KNQJW6$o+!##Q|&F_YAg%9uq*{}Y-vCnyWne{P-1HAW0R z71#aweGZ7^WiEnfZ|Y%GV7iz;qX^nl5+dt>MYkE?H)PSaNNA6jS_W5*{Iz}abe$CN zY_eHlG|OY-q82~8wX&NJddM)R5`|?=CY87N#jtYkgvnk=bT@nuWklgl!2na@it(Rj2zHMa9Vj9jKz7c>P@gLfX(%jxU9VgK!J$3@D*RQb_LG(nJY zMhnC-ZvAX7$~)PFs*=3?lao?Qa?VEXr^5c^_0{eJL9Up8^s(tlEfkK*_oS+GHG-F^ z@gXnMMSIFHRY9oNXYn1+Djuc3Cy)DF=ShH4#_eZ__0Qjx`JHIT@vvxughXF1{2O(ytGDVRSFH$%jRSH>i3KjgbXV0EYxuLKj}fB3A?9agHdO=)=`YO&&BZt4@MzgsNLZKwv1A*W8C$EZ?a(R`#j>{= zAf7QVJt(a)nQD5=?}02Jab4y_{o_l)S{$NZ@tTjQ2jqxWSGL$ckV!2_rx8G5c=WUI z#~_y7!|JVnxpI@-U;acqrXV7rPtX6o5Q8|?;vxx9)Z0>1gm^wbdP=&yXU#hh5O5M2 zkRjmuV2j-$M6&O$nNqNLhmV+2KbKxCtBugtVY5)S?%BjN1;i^$H`Dj`oC)2TWhHVk zBgLa&q=QQI;Dy9tS8X?1dH_Y1z2gf9#2Qj0;AQNYIF@K3J-3TOFF)ee^-BM+E;Wpu zX@J!aOP0Iw|7!1_tI%r2s|yv|DE^Ox*Z&lF*(G#xk@^ug^il)5U3b(x_>v(w@Kzf{ zpib(iKY`y&{#A}PBIYmNN8uK7A5Nq~nZb>45Ydx^0@HQDD{B`e)dKi&-TR_KU6@K{ z%B1y|&*{w#?|uwltAhdzN>2K$&Hc2wvA^T98g<^5NR@Yts6Qu%@rE*Y{tn5As2WSP zhA3BgAgBK7CtrW^TfVaT=k<>Twp*ZK4;(F5yd8-m4PI4(3Fi2Kk0_-hKlzUeUUWAJ zP?6b3Rh(hJU~&HT^9|5nP#yv;lMs~t6{sN);c6736`b1RDw)nNYV(9)V0~@$*MWrf z_qaBHjPwdmLZKPa{O*FD^3#XKGDj;PhwKZ`|ogR9)`>}&Od z3umtyh9Qf-CoAQ~GTK@x4?cIw5>?594loHzBC!)HYa7=3m)HOarw9aOBHiy8QCK9b zaM{Cve2^(smgItnSNGzZCo=Y(k#cU)PQj3%S`s1@;o^HyKDI9jYA9@tWQc z%SjV(L82h5v|8{)()8l>_jXEt5Z1S0l`O`Hbk;pz<(~i8Ywa=X(H8JQ`FyvO3ZwY9ShKY2KfZlvP-V-`c^o4J?P!7(_jR~1rtieNq?b8f zJh89!+lRxr5L~Nh%22H8a7x{EdsiGxUsNtez2%_SPS7g0FfZT%v4H`~y^lp}vc{pV zoLxhW{bkf^+rQUc7;jip;F^=kqQzZ=*O0N*hX)Qn7{Lpj&nqc!73OwOg{t6=?hk9osXsu;nQ= zZ*gBHn@O=C)=ujiR{yBa1>U53eu4(vl}m)W1P3s<4_n$2>?k-UTDePUga42&w^z9M zm0D{8!Q3@6&e0!A{7h|05J?>hE)~a3ngSmohp4MmRx-+q?{XJnGaRclkhPUl6z(b# zo13mV%hq4HK{MYo}W*d|O~$;!ASu{&w#{F+Bt0@1$7 zWD{V!9&(dps?Vmh6zEx^M7Wg}b_&ADAbi>z--nT*xc-p;R>efHL281LIYYiqj&7sw z#JuQX6BspD7=&SJgVn`ww$So$uw|^xKRfv_CW&A7&)v zj-#i`Gi5~kF?))fFUE6DZ%?N4h}1(+-VD$Qm9Dc#+gZh}n;61_wlg)v_gQ$j^XYAq z9a<1uUMs@*F?K)UyByzi^-sk=0Qh#3a!Y}i8UOm?aDSHy3qh$%cNSdTD;L8%D{MhU z{Zw)+PpH0l=0({2I;p!v2Zu6htCSFp=Jn-Ic^wfl>_)~ZZYk16$f=4hi~W_NYYZ5Z z6sPOmrpaZWPAtTv@W$iYaT_z7KJ!4Zys!*UXFBRsj`mMD)8ZWxZTIlHcI>ZiTH!@y zyu389;>kRm#Z?6$q4VAndeF*QQq6Mj2)nQCkuB6MsgB$<+Xojkebp0yXIFvLF8y~nN_cVOMeX-4y+1ysO&wVE8vvxVSeiD6@ZQ5U;z> z`#Knf-t5jPyFDXa?tSsy3CU(Kwh&G%sK;B&85s~;#-!A(*)%o65a?g~??-=i37b_3 z_lEdqaUF>52BpcV#0;D3ic?W*#fg3OK18i1hHppycHXFx$gzcGi+0A`SmJ^~}9L;%HXvzK_#PYx-h^|)dn z9|Y3_CLjyDmw~vSff@_~%rih}_Z!97o)qL~LU=HuP!4)NSa8s8Izj_8wgVS5ug~D8 z?bkhwQHuqrBRo8O!#5+e6mRe*ezmYt01u2YvU@jB!~p~LFI1a10CnrzrjOntUZ^z! zaCGwW_I3`+-pyv_;)TU>4=4lgC(H*A3*O}GvY?ydg5rPDcRY_kn)NYh|3o z+J$un2fqSGfwpDF@HgB=Y6k59y)s1lr>+5R)gDj)jM@M&7XdxfP`y)QpFNjfm0yda zpl=;GW_E}!?x4b51o`eDy3jB<`4#!VaO921A8;Y1EJHCA2&9fWXs-Z#V&W>F{_8Pe z5J+n~kQ0L)!@Hd&dn85}ZmJE?J6Y1@I?m@ZdgSKB(4V})1u)!4b*~5b8@)@ z#9HpTrVqaZ_RTfSf#MdTs^nH3Yuj&D&6H z;?Y@+{`pk?==q6@n~vR^790*B_x24SLpZv)fP)4-BY%C{7eP9|*dpv~H;*gn;_T#p z`)s_syv>Xf0zU&@>n@EzKRPm?F1A{XK<>90xghVrYp#LT@1Cx&j)QNDTSNUXL&opx zK#UENgl+4i?bmNIL}&K^&u{Toj~d=RfA9t4XCIJHhf0!{nWf5LJA7ax=bN`G24vGA zh<)K|YYKnEH(RJ%&VQ1Vgl6I?t6p{*n8`7N8AH}wC&qL>JeakRu|d<4zI8$ z*G|8{!Fsrk@-Sfhd+Z{%mtWw6ub)r1T}DM~j5&L-;=>I=K%D<$uS~ZLKl%5dU!1oc z$`M!2|2Bi_Wh>$AbpsHNb*n^1@Gb)%Zd3jJAdKgR1=}afVtSn40em2g>wu6yNZP>m z%@(8HKS0PH1p9*MCKurw8Uw_Uteq9(rs7Sg!!xiY`0$BjCudQ+?vk*ofU$NaXKb}941q^Sx^!N5 ztI<}21BRKL7yAWOF38%|8bcI{~vizJOTM1frxwHZ_8jo}Fxx$#C z?*I~O)8(p(fa8&eQXhe#q+6%ZpnMt6EQ$B<_9#6L6FB2w2V0&9tSZnh`7c$K(hrW~ zkbjTd^Ct+gz%L#3`X|{*vl*R_l&^w7@gTzS=@lc)_=KtJ2UHj^uUSyIp8`!f!9%1Q zS^w!*>Q+O#HKN2C2HVd<*?Ef7!5hRY7{ZH7xm>Lz;@W1PXwnU(Z?~|`9n#hYf>;^7 zUOPlWS?|iM$u3QN?FLgZT!Yqhk4VEQrKbf8suApjfIk8;e_4;`URQgnxsecXQkP=g zCadc?cX!z7L1xe}pHLdSb-?SVburr520QP(W#ib^2gDyPL61fD)|SC+a7VUM)p9W~ z%V9n753a@)bRp&lUvqA+Zrh!zijYu4!E`V&PN1IZF%*}`6suq=3N4q%#BdIe(=AFe zCdfju09s#L4wK(t-t}d({+)&1^m2$Jn405_1+I_HI!T2FRP0FOl6VC!;C02LMO1o9 z^NnvpmfQyJf2TW~c0^Cd$=Q$k4KKt7iqesSaFt_16m)13VWbot1jv@Ve(w8erf1Af zF3uXi>ZB4UYThh>i11=G{mJrlw+>a|5G@2<0t%B=?8MprOwYrj|8B%at9|qSEGq9E zvg{((y=0c$70+Ltl(5jvx@U9V&uZ+?naF@@yjpPS9n+2(s_zOs%w~P=9$y{4JSnSW z)u<;-^EE^sbNQtjr7;wT&=|eBsR#QL1Pa##L$)X8>bT$^wKTQQR6oay-)tNybbxuP zF7Ol=Z!hU-SE@`&Ttw?8$*8dk_j!!022T(Abi7v>UC;dF6iYOI))p6u#YG6kTr3|3 z3ijTA2Wl4%9gvFePgZ}}U741EVbp@>Wu=8Ye1qH9aX4@=VoPn3e~@a+keD52OIN{X zX30Zd3jg~tNqoINY(=waCzj}goqhzV7!W&ER2OsZx%ZyiXHqpt+3P2pZ)tgIal-wO z2~xPH+_IQbW7*g}u-cnn^1o-l@dZ~KdwcE2*fc3n=(bDgyzPDBu0~dj1~E;um-?~$ zRxqaDk2fkIXqLm&AUGh&)n7GWL3Gpm4$Aa>p1IB;K)Cp4eE44&+woKvg(#829YES4 zk2m6ZDyaznSvt&@3vU?!OW2l+$n@w%$LDhS7P7pY5{Tf0FtWkFPA@4lwpl1;7=v6>;iuI1 ztCnjsRb0*|=f|Q!QA|CjpaW&)Hvnzd=iZ8x@3s;jkG3$6<|D8EgMyJ=b1X;0$QNf0 z#E1tgbncfvqSzlHw3Iu%`Avt7c z4GnW#;}0@&VvE!y<^E?~Q?BgDPWUBnp?na?;g_Py$BqO;l{6$T0iTpgMfJakZ%Ksjtx1V}ALZ z@VLR_sXfG!X;dr|jCn|&?qG(~Urt^3 zv8Z6D!0%J7`AoWH;b!B#_$JkuFM4>ng_byd^}eFJ$J;Qy7m+6s0dT`Y@hY(Tw!L;H zFh%{P)ujMM9e)rhb~h(`+6GAjo@O@x%cGj(yGXdsG^HvWy=Z*j`)?s=MPUp?siyQK z&RMxYv_ku&GBRV9sah0O>(nCwSG9X@0T>@i@~>vn-&0iF&ETCe9zXE654V31xbWL{ zFg%@1-dg`w;kSuzECJSSyAZ{A_059m$fM$3!0FVQ?``F!d9kA9Zd}H!CCtFxUvQ>_ z1%S4JGA-rao(>IPj=(ynfyQSwK}v3IZn2+EIu^VUzYTZN?LXfRS#!o%1<4px2UkUE z1cg1zHYY6C*FjtRsvc`>WstQ$p54ksET5mt#=5kl-xfeja)9>WeQ*qa`c&aAlp*z^ z*NMJZF3S7)R88l0hVvblGa`Z!proo3b!n-6@sB0RHx0w5qu;-41zn?TK zI3Y}B_K&auBW8Yvsn-iNEbYtQIs;oSS=&n{GpKUwYN|L%Z!DpudSM#To7s5i2j~;~ zwy6=)F8>6*lYmk7R*dDyI%^p{r&Y!x`gbcb@;}ovYzkJ*27;DnqJ7elaSOII3K_oN zQIaK2VB!URBz&Sn-o}}jUH{#qqnUAzlP$jy+22aIa8mwrR=Tz-)*jdIVW$?;3gjbB z93;(7`z6V@z>HDU(`h-UAzpIHaW-h4#d=i?xAhF?TLPC@LZC#Rlvy>^Y$9tI^UQUrtl|%2E)W@9E8QcTsw$(oR4B}L z!INe){#d^*&FM_0g!E!C>6wEwXM$_ybti({cLVN#2>{~0Q3<0`)o$*@RMdt|ZQG+|i0U!Ocu z6MIg0Q+r|l$|Sr-#fOWL7vN&%OWCFv#%(a)}f8I*V}9XJM3WU}$W zhn05jtT@obS>?#v?qFh$GWU3BS(1Nr-&+KULHkF#^Lm(Ke6s(}OB9LE3qVC4L%q?u zl0K!!JjvYs*7>WR=yR}0Gz}|XYftJwi6qIgO?+s3ufm(5W@Kz8!Ek(mdDk^YnSLKZGA3upDzE?P<`>C9d!N%-s(_(kuG8RD0jjwh36I-8A|gmg_x#>~T! z&Jy86jz$Q|;&QPUe8P=tuKSRzen7`7l+iw6LVkMOq+TOL1!v8)SOe_h zvnm*LsJGfYCv6~>omI{MQ*9r;`5ThHjEs_2MHa40m-=}B_gGC+?B+Q3uqAtTQQzvH z!_yK|_%&@*KGogFEu}B4>w^{7SEn4&c&5SQe+6zj_y}%BiIyyZM*qZ$F4fsT?=dbM z${|Uq7v@^Feihi1;xS3m@2BS}UQhrOIVn6Oc8W8@ZDlwEc!Evm=+I6|ogBQM8K*SF zFT>o$@U(4>(5Q%9;zuM|o9_GFZExSWx}VcvnxvNlON1UITVkKq{#)}9pXC~g!D>2I zqHCw3B&p-Fn~%O*I?N9~@0{R_rPWuBCq;^jN~~>lI3xATd_ngyd`#AU4?LX}`-Up_AY;5@h=lw=&?3%MRwzyWiL=V5>xa^tv zI_H^U=lS0s%{|{2mM+tp`B=G$Sv2^y9|nzqf#}G>G-t%66?!Y|OEo>Q0XBT}n=p~< zIj6O@V|CVzf`L=Bjnd3lvwLte)Za*&VT5|t?-RF?l zYyI=aiq(76>wU}kndDHJ808HhZKAmP2?x^IWQ z{rBIxMHpirdtg!EDp`+dtlw}@7e@wi?(w3N0mJp5oWnH^EA4mF?* zjxapeb^#kCTpFzc7B~u7PpEYwKeY=lQzwx8npB%XK~l;E$RL zQych7MM)Q+{b-=qpS~&U|FIS!wc4Rf6FyX9Igg8@g8U2~5~P}!>qWwcc3;VD8u9D# z{M6~sWS6&Zjz{7d16l5fp7Q)9M3(RWpzEBPbJ4;z8{1h)R&3k0ZQCoh@x``n+qP}n zww<%jMOXDj_xu%a%^J@bJ0|$N9m_pG<&PzM%WFc1g?w3Oc@$k(eXt=06%5cXs;?Ol%tRBVaI}ysy8ot zIFTANQWqxJvC;g)b_qlo)OOOW-AhlV_e9&N|K!+k+~oxuWmsGtbY zom7>DEGfw`LAcj48XHKznTsypeHa0R+Lvx`gNjwg3lV7Ex?8s4GqY~D_Ala2fMMEE z{!psO?7c>;E);V-bgGU#<4%LkC-kl4AgLJUF-gdNX*7LW^N5ENUd`|E-?^-12Lko; z%VJ+Rb}W>nid1UU-Wk;P9i>)A^7R_22%M(`Xg_UDQ}1@N_pzKwAW+5FXDmt}}rz@ziy_Z%=Stm-0R=cC;Yn4vw;+ zu!x?J>vdJm2B+Yj8$|p!{J}WR!u!F!MPcXwKNQCliZ>=LU29ve7WBs_gP6+Vefm0| z56@dtZaV^zT6i>9#JgZj{9shsjbMM$*(J&Jjts8<;Y-qgfI2UxM$kV8fFl_J%Qq(| zA^90FzPc6pD08kc25e^32kZ6^e9knzT;8kJtRW2_!7o&JU+{IE4EgZjJ5amKPYm&o zMH*N`QhJkPXXCJm@q~2LU=C=+MgmoGLI=`X>)%K5!0{PbV`P=OwHFP>RN*EAG~x1; z3}lj!ov7ks9&(a3W4G=wK=g3=8-ZgIz9B;7+JCJEPg&0wj^mXz?e#8CGW_cWXd;~ zdos3Hcgh#fOs9~V@7rnoL~6miL+!=*hBexo2ZHST{S5pghv|lM$5lKYclFt1YfeR?I7r#Th6nW!ab&BY+GDgJlwW(f0P)Sh&xRP*u$$-$ev zaU}Pp%XN2^zdf!Z0NEVo=}fu1oN!4$biTElE^MiCYf6MBvpVe84w&X|xrCuX>(TDm zUsO}+%=jZ{-2PeXREp`gk;G8E5hZXb6SqY*N&i)5#faJe>H*{pvdeFw5exW$F0Hm4 z!H9t-TG5k>0aSuH9_~ju*^DrRWo>-qnWxBJw#6*b^Hv!bfOqp}c@B0iEfv$|og_t~ zY`WOXN2%>eo8wrj-c1EodOtX)l2haI0UQ34af=*l57$jp7?IF5jgOG}6h}n`ek@v} zvWZ0b#*IC?GF(wQ45Bk2X}3)dxyX>)(^}6tq=ARLhWv=TjC&w^05{f#co5`sT7l!q zHBOjj8(OFxVAQIlXi$BFg8umIIYx8RL4k^+vacZjtL<7vff{Z0PJY;cC}%ZWA60+g zqR?mO(@`?p^Vp)>hfS#)FjDJzUXN(&F(B@eL?X!n989-w`tF=21Q>0H{j7O*{#947EW#zfz{H_PMu*`Y^*nDtc>sx+(V^T`Cp7{G{lzSgz zgtmR@DuXbo31Qa$Gg)81r|FnLKJk;}y6>4OHJ0SySL*nTl9_}w>sD{#XM4Eyt!!v> zF4cBZQ!Ti3n?2$V&hT~C3tz+R=&pgAzQCyLIVxsus?2pliDVap%>~B*~l1G;MO8Z@^)I%X} z4@It6VT+Wk-g7JL>a)FsyovU@xlIl)PJ79PqBMp!N zkHTs-0J(p-UAI{MrZT8eJx88OiPA4*pI6u=-Vqp;4hV!B?}p&tUuNpJO6#G^Z{-CI z0pDGTfqfNW!Z#{Eoxlq^%Hiau%H}UF&e~h3FvRyI9w`g8S#uvQq_~;MD+{NhYtHq@ z86s0_Nm9?A?~-_K!y9~(Oso<}jJOQ|uV+vWdky7w2np33@4&m!D_g&D7w&!B!CR8G z63Fm!&!ZE&VD#Fz-nUXgwZj)-=k;QQNEuG<*(jKlREQT5*HIDZ!Uk;d`jqc;25%-2 z88Mb)VBy}f+ad%M4s-DDONmIqGa})FEf{oe}8m3UbVFq zgU8ERNU$lY=&g5*C`Bjn-(VlXRXFEmsXtgXNT`=$UD|kBhGyqa9RNx)oT&0E{ZGWL z2w?ub&Lf0z?(u($u9C7zK-HW8=z~-4cZ5IoB5<4opKeZoOR zvmfKr=%rlL6Pq)z=!s1rfkvO6JEiLr4;=wn9ji;t{6@nKD!Jr-Os^NR8mj2^&s8^f z-|(aH(OoCqMHgG8+p0oRgC&ur^aZNhqtyj?MkWi}s>VZ(5HlRr2Q7*KyjO%QUrkf! z^ryF@x4@JRtjEam3l6QARc1b=hDNN_8eBIo8ndV)v#U_+#dls^^!Kr&7{_XH5icSq zJ9bdgUX=sUoNZ{1g`QcU9(xBm~`hTpvXqGkMH53O8e(5i|su|`` z-W1R$nh$*se{WtUHl@h{T@(ABuPOmo5z9-@Qn>@CrSeL8vz2IOGs~(f5uII5XQ#z) zkdPZ58z8QcvAazaDw-T>c(#~@I#i@TU$%`s*8h#biXfOCxdI@+GzvQLyYO`37;SCoLCLuj*jM1v~c0nPnXl@K1FHhkh2c@jkVw2|{)h;N*;zbWXFbwCo;VObTn9q3PabO&Oa( zOE$+{LmuSVTrayD|E`5omd9|h|9CXKY7guhjph7ZMkpCW!Dn^Qd{MFRkZ;w* z;gd(nV)`w}+(8e{FerQm|cn5!7wk%)mZRs>kR!+rOdor*xg9W zbP@z~?{bg`2>!kkV4jYgWpR>4tKwZaN}aL!RvW%@^iD&PRL{Jl;bk*%Zaw10i1mxA zLAxz`%x8tfIbb?UKTLBn^6OFTOM?G4WSxlZheeGX*DNp-@#q=M z#%jau&q$th4*5sqR^#U(enC8?*gKvR@{WO|`8rw!;JF%d5Ne@H-Z?E^_Yyg6)1v4h z7`g{lpxm#VCUU;O6<1Ad)ovotnGjwKiZf|6zdk!`5*K%{L^?5YJhs1DGLG_$g*N~_ zzuSSW(50%4IeVGukR84pr{!TR$w*m~Fe9AyvNJ_YZM!(6UNSTb_2Jaxc!gNJ{s28{0b zsV!SLq}imRz(JvIpRX@q?@^|CE)Oae!HZ0Hu=Vc9Z*xB?GUpkv%J;l$1gR5(${sP# z$bD#?ikhsvQwT?i>L0qw9l5?D1YWyeA=y{~h7q1U_dlKAI*)x)JsJ5{-*}U4L{>&G z935HS#tZ#Tqi!xm_3LSoQZJWdpRsCKW%0CNRDC>V{$0`HS%u!3qzEEu4Vd{lWO#zF zxRK^QRW%*vzLK-Xu~105InEZUwMy0nc`vgG9xUvyA)>@=-OxFavv-ohr?}Rv(!P@c z^2J&VCyCdFl9QvfO(xZnE7_a>K7^PFkVTRN2?xkZQ`1D zDXz*Nht;16a?r$55Em7b%g-{8G6nYm;0MM9O?}2=)Rwk97$D~dC%f>1D<=hLji%u- zqVEH8$_UJuDHA!DkP6)|4?Q!`@5(%$<3Chkd5C-6etA70^f>>PE3DY9K@4qtzn1g z)?XWdLkP7cBk1yHYL1HbY)bBfgN+zweBvmWTGFqO;9(>1HzX>6E)9I$!A1;y|3&!| z=tLU|haI)Z&RnrBf;;wXRIXS6m*DdwCcFz zxi~mz)@uUI#}emE0R?05Wc`x&Ko1rQDYELtDp})0Wl4 zYw3Q9m13Hwrxc5j#G8PzK9KNZOjx=IAc81?|97A#59FxZlO3aF$y_QIgIt0Oaw)gr zIluxPrUnKDPTe{31L>j%GP?1e}N>7ObiVFPm+X@nTe6<|8FU8 z23NpYL#K`C>|7MEcl+;M3mmfCAZ=|!-+;M6p%ZZQvkKVD$L*mU#izG3JKg@O-m0q4 zcdw*0zVcb&mr*XUqz}{L>;{4ylfzX}|>HeoM-`0zLpOpv7=H&Iu&dp6dkG1z}105S4!GVIH z0Nt(+V88v95+padJ~<)jo47a!oR5Pz+nYK#*Q4Z{gScslEh{dM(;xBAfuF#0a{ zfn+^M{VGtQzDgSxauHeX9_^mb1%S!z1I<$-~Pd zKW>p#y^CFPnpoC^=VyCBAf4?*-!<|RBj6@KT&{L2{B|n{S7*>K->@1RezY_IcEkOf zp$hmG2Uo~(>F?tQDZ=kTP5&*REo*D*t}h(`P#iPRk*V$U2X}W$E9w~{@u%HKGblix zT%6qR*b0>ZfGs_DiIGrCJqP+9@8JOX{`s?cw+j`XjcZ_Nd;{SQ+t2_^{GIrn459fG zu1~)^JOXPl_EN#?3bc7UyW1P3e{8xB)$;l?`W^denyjL@q!4fR)p*!zgMt#H2c!=$ zlcNJ-hGggV%Z)|so1BKY`@N;H6v*tY_%Cd&f@ggWwfEb&wo3V3Y7pCdlY3LUod@~l zMu#@4J|6(&{QGY!EIM=g>lyL$w{hVY>irk>?Uv@3J^I&9km=^-1(0_BQ}+v)5`e_^ zy6wf$W4*k2sQ{RcuF?Yi)>hJ;&1M5sAvD+8xW8&uci`VTAP)?vKYK_29a0$|f;T8M zIxx5XDANEQHhNR1b|B!CoSd8Azbk;!*4Nj5MqfHKPh4y1LoX|dei{7rFiv}8lOQs= zwZ3*35Nz>)=7zz~qK96nNDypo{pde0skHpMe&!hblEJUeUa&yiZD#Qe&d&e=PoH8Q zZ$MQ_z2*E!^yGf3Klnq42CCoK_YS}s%|C)&Kx*5)$iLJeKY@BqJ>QVsW{khs4!s*w zxYzod--v_5&zTPPZ{$C(I2yG7>Bxbr@_Gqp?T)T~Dv|&=96(hmzkR!7C;BU^B~?G* z`m>Ec7)KCwKb!B(JpglG+8w|?{@9P!-#7ic=0BqVERSa&pOarxU)rH_{70**#Y<(_ z7D&yG@4<%O;h%PLz#>oW)1@oN4>Lr~DqGgow(c((hyJXStDE=o1t7Sgv6t=af&OhH z@3ME#>I9IbZ#sN&a{fmDcq!ZQ3)>Sjc&LB(EHMj!|7do<<=+EXEC9B)kDCcw`SqgJ z`+p#R@9BZS9zfEGY3aE#U_&<8LR`0(BT>DWZe?L+6>rbY7MMTjI-NWD^ZHBYSC7H$ z+P1<6DE7C~B$5Bt`FiHh>hDe&9?N&fQIjwdz2lEMqCYc!j)r!e%;Z1(JdqTg+a)sTw zw#0Ztpx~{xn#dgO`Q5-MO?*+|wM_1FmhX&lemdss-Z$2;_|UwsJ{%~x?<5j=^uMG<^=`^%SVypd}w zDfcG(X#|r3<->aI0wdNk>_-!`cTnQAMkCgg!lD2rumJjwrRsNY&inI+skXFq*|6dT zDP<5`(P2KcO#*pV#dGT#hMdf`px$=;Q_Vb``as~7TNMaOj;G;PewaEGWQ}%;=_bLn z*U5HR82zHnlxdQ|OL5P_k3HsUz2AAsK1B_cRCvOPGJ^cp{<4kcP4TpBA_|`P)R5ZU zEQGPOKmd!&1>rYp2>68ODz$$qy7daEbPq7F5Q04{P7e9u`#Iu%o1xm4@NHh;qWBC! z+>NkA*t=<9HK_5fY_`tKBCLbu3{qZ*=97vb<&!YY0d+hl^N`M~0&3_rl*d8?MjM1~ zMwx`ipVpBR!=t(}1Qx4+&MvqaIq8IZ?~?{VJ>bZ4q=-U4elfHbCc0%f$CIagS`$(U zx_(l*JmaRlCfOMwYHUlZef9M=Yp;8|N!Qdl5VqG#Qj+fL9hP-husUKV^2LzcKO}H; zb!yyk9*Y;|*YyG!ly3&&Wc(sarQLF(Oc}iA1LZoaN>GLTa*(EH)w%`mY$gL`D-(xnK?O&(PW_%aMRIOH;nk?}Bwpz4DU8F|B*~G_Wlz^cGvx4tTGfnB z6s^ErrvC!F^g$Qz^NGGp`gkl9>v_2zg|*HwY^jMsTnq1SI-km1M~n7evtYJ;0MH-k z!5t3UwNUhE##;%Xj)7YW#i>ABKAj6>{j-C>i&R=m9j2sLpS9O8ti-En*bB0NzbirF zY4VgS2Ahj)5l)pNvi?(a*)_b+y52H5Q`x45RK+GPs&p=E+9skKlSq0_OTDi1GAWmH zOCGsI=fRj;woSn$g8gm4k6)KO0ARMt9tO1v8>{b{XUfi%5VNg2&-Y1gw%IK{5tprH z{z9JKHy>3}rK3boVUWc@I?uzpl_KofWo2GUYI5&leCMrl^X_Ac&#e`+SHzhWaN5xb z5fKBat^T4#_D1p**^?j>hnQDJMIyhb&%!z;RgOx9)w}`+dF95?Ws<~*1TY*?8U$?7 z*sWx&lzX~{&Qnht3(fL(DYBU1D7(g^Do3ag5U&-n<`>)3@yGj@WM6KbS5CI5Zylnu zLuFJE^bcY2ZpvNhEIRY}#_BBW41w8h0g98?)Ag&2%|M?TVklPT-gO}K=T0!L%W_Y8QCdk*y4kT$6Ur%z5iEC_b+GFNe{K%hKN-b`pbK1M0OU!3uB#`lUiEUW zWyXj9S{4ZUR9k69SFRZnZEA*jkBYh~9ZS{qE;xY@56%7oUOq)%acI=8j|*)7YJcO^ zf!b26iM^jzg^~D|k3zwCNNiW}NdP}ko7!ZEZQQ53dlOTw<^0lAA73dSr~co_+HO^C%mp4y8NSV2}(HbA;pNiuo$iU z!SJ^cj}7}Ou|~$jp59^+8X)83%iL%@CuC7vShV{df}($XNwz)SQEQy~qm0Pv6mL8r+!l@rsl&e3%=`8b z`$%`H#eV!cC?hPBTK1F@^nUYEQ%((&I&)84cNd>%fBu!v0{UPo()J68<5s8c=-8tp4s z0Lb0nYYUi975ppg_`Gd;(wAvZk>r1;zQ9;vY|)^JNK31|9J+%ute3=wYiEq+**8F4 zP~Y4V2m}GDIFe;`dfzgbVlu+!gT65j`Ocq%tCh8H{p*qYL{CB4j1eCLGKY=xez|O% z82ew3ouI+D80tpXFdlc=th)4HuJW(iBVbZQ>US|kTbd5<+>$<+k~`1Jwr`+#zV&Gy zgw!LH(p2qgAno4DO3AJ1h^j;WllAW+#z~m$p+;wm_&rZbP`DZ4zvHm9uAQ)dWn}l8 zH_phN2_inrf6$W$Y>7=KXLlw~e;#9t^Evg?7*uN2*wZ6lEDy+>@*!J z)h$P}>-_Z>k>|i&OV+z@LY3*oTmjPwd(NJVGZsa~`4532+S80sbLhAB3MA^xA-j(c zY)qN(^u7M&m5MKGe!p@bxU;pCQ6nw{t|-MR;;}}35ir(_XohJA;qBO1U?s548Zoo> zS#Bh~wCwQQaxO;#o5)(1RU$zV)&!Vh*TSJhk#|aRNw-o}K*&wy5u zmR;988)lB-5&7g}fsEb9YBH73%RI0y`GXas6$xfhY4p%#`Lcvzahx2)zyFz=?DnU1 znZ`Hi)e@b<*XBWnDB1fwMGsG}XydYV4EKr%L>Kr}CCzxy?jvXoeZ8q|_fd6GYr`G5 zG-~rs{8N*8&Vd>}deGSUya8~43!G^N&YiE8lJ#j*TLG{7VBn`l3~6I; zsPW3-1!c&$qX0OQ5HB9DRJo(M-1D9G>`BtIUh`_uo_N$$j2-vycZZ`6T% zXWmyF3uR-Xy*@O)SZ`T3f=w>c73s+zltXEt_CpeO904&{28@tY23u>8$kuCoDr#NZo5Y23y0I}>Ofv4cV~2SzTwu~ zpf9@deEzTlYou6)sV&Gi3as{BB-Zpn@3z$y-`_GWvbPz)Gw6r-6gO=A+!-=a5M$H* zlb4EPWsLk?UEIq?Yz$tp{QP@Vnrza=65jx*9p67;fezT_eE`+nzcI6|C{_S=?47;F zuFXJcPtWb`lwHO!V-31m;uE6Jm)XR@iAvTC2>z4${9fbhK99n(1mh zCElvSA_+yt!hrRm-+qoQA<2Pn;%xJiF#>o4K{bEiZ|k2#Gn`EPnf#*FIAi(pXesNw zg0u(?vn#}`DecJ)|Lx{aq?qTAgju#oy5KJ6y8R^*(KWq!W>lTxE=F>1{S7%GP;4Tx zh_>q;S|}d3Qz;KFMK$P+oYlxdo+Sdg3=7M@%@>1ttbn>H&kE}Uen~cx^=l7f^=@sq z)IzR;L*Y!NeH#$>JiEGy!$d-DXuOg-N^O*PU)dkhLCJ_T6pVs%N=Vm-R7(SHf54l= zu}?Q_6Ad)4pJX?P?-D+TiJ+G_3@(FG@!bOQw29pN%|E2pFy=DyrO&%RU1 z8S(A<$uXJ8Sr1F+rR!|+$D65DH2dw@81?OvCX@A_&;oI8V; zD$_M(vEK|N4?y}1UX`*+h!HAbhxVT;0z*tS0YKVkph_Ve%+83LdQ3(7Bvv{dT!Y`5 z<()1D$}aiI@LTb%;WjFVk(=|+=sH-e;-|Y7r@hwL1SV&`B`bWtnYr9!e6Sf`ea~#u zI%m8dg`#;|l;*gE{#~$K@K#E~yJ|zq=Lq}N@v#K#ijLD~@T`vD+4JG%A;TLxFzFRc zA|M$J&O!Q_7fmYUb`#=22Xm^rX1J%vsjl(qjbOZ$jV%fnD<)#1_Sl3V#UKEai4RN{ zPs?ENa!GA?J_Eg~MrC5Gw!`QQ>4ZeeR~ioJRl|rdcB3ZEJ-`fCDwtrl z=OJ*{z_)j~GqO+H$Iq+SFz_2Z+j#W>cFQ{sZQjev;>mb6sU_AYGC#_{9#~Etom$rO zg#%j2^X7;{)T3eS+Qg1CDPMrK%u5k2uei7q9y?lSJT$KNgF zX$##`;l=#yHCH&yrWCLF4X_S9v!pbkd!dzD8`b;;VYaot^J#rSC2oZWwMt$hpdS!U zxEdy8cHMB>mvnW79LdzKf1RPZi=}&u!{#|wyL}TY)J!OhQDIzd zta~CP#X1G({W5hs&CoNUUC1y+Pf0?Is#K^f^)i>PR>S^rFi`=+1(b`bt@6oI{uBFi z;bS{wJ30H=fSuM{1e4M8&+63*D#Mn^VeF3mZ+*YR;}YWi*NK=VMN)%v(j`UUX7a22 zD($}ZXkB5q4~IqLUnD+529o-B%%~*FPX8f%2Q|JBl?&@h(O&r;Jwoen<5b=8-sH!K zofYw0t_91iv}&wiXMn89joU(0aOFj!wIz)`x&Tbb$>}Rd`XHv&)cc17n}E1;m}jNy zKe~o1W?M_eblwa_UvMx&gmu#6HHR?s$gBCdpfr{mTolWy%RNWuO^O;jnM=Ox6H6wnVzor3OkSgr647F^YwbLlrpkvD?y6_MBp4TK$$zUdM9@K{|3)ESSg%?hXsN z-}-A6@R>nwx@w%*jTr&j+m0cIxo$Jwg$HL=-(zEG1$W@Y9c~70P^yRX%_m0o!8_lN zW&7-m_cKl*sd8G@sc0ewhBPqjy1FPKjbMhReH8JV5rE}vdtOoulzF7P-Ohy_hB88B zMLIjh!T-C|dOQVM_XXN&Z-$fPzg$?78Tp&AB!>UvhqTgE_q(wR+~55J-LN9ztm}K7 zZFHl5Jbd~MB#@HVwKf4Z7q+uQ-0dOF^AOm{8fh)Un$x}?a~C>C#GeU5Z4i0owWV({ zonDAahJYJOk~%2h$c^O_m7n9#IKkSkUCbvx7?ytj`-hi+|?#D z74eiGr3CTKe~6~(v!FjOoSP~87uipr)73&!831rZT*L|Q{)jQ`?v#k9bIILe5!_^U zR+<5K$zX1B(O%&X)F*yK4C>J$h}GoD5EguzCKqe>*KqK+eH;Fjq!cZzl^4~L2?_1Fh`H4+ts0sEzv=hR)7o8jtT90}8FoW2h9BF;a$_N^W_MiQ~ik1(v67q zz!(MDl-PQy0&r5<Fq8vyWd zd@wpFO!FQo%Bu*s5XvVrX+0hXaBeR%+F=)3hBh<;3N`sD7wZCPBX*+1w^UQr+8NK# zy~8oR3WholY$qO)##M1NJNSnU|)yt7>-w#}*k`9MTH%jSY56yq&qFa5TtXz15b{?SVXb$Su z!edi4RbraFZZ^ag)BDh%O($!t4c@N#ZHSJ09q|6K5%iCIt11koTKN7%1f? z)3Z{~z7*;&6dS~w#bfeHg88JIpAE&@5q7@KjXG9+oh5|*WkR;mGKg;-8145+KI20i z4IAwmM{Lx$zQK95TtaHO_yR;q$!=wgohviu+={|9zgbde|CowG*F66?ub6;EzCfc@ zg%oKjR@1kN&W<4e2IetyAu871=W@h_|9&&Vj8i1^{~X4+v%H(@j<@08u~%%v-<}hW#FQhG zK+knCXe~nU3BXgh6M45IyDxEMJ^4xAV?pVzU{o9ZNakCh23nVrY$G)T4UuQ+AS~D{ zxSVToK|Ox}WwVXEzX8x-X-!yh>M@8zOwa!MZ`I;=OLU?Aor9B@e zYAlc0Aq1vV>6TwMT0@8*g2`pM$8_z&(phOf5O6B`0vYg==k1c8E!DTEr_N%@_Ip`M zd@F@cyYOMwZrjNaCw!H=e}U9yGy|^sELG>k?%%T{Od87>QUEL$4gwibkI;mpMv7+Y z`GQEO*UAYm7nwgT;c~|@frzs5$=F*aBV<+e#hZ)nF{f@M4f8PJDmeVUM}&TRW+reB zAFJwBs;74Lh9}^dM11G6b!dC(yAHNw9@DYUmL4{-3=X34b(>R#Z!a-Q1}sEI@w1_G z`SZ*sQN5<_g#f1(PriXyydEKDjV>>{`I3b+elv)7aW9G^FnD=>TtgviBOhF4|H=<7 z^cuDX}zw;_;< z%v`S9P0T-1i~D0A(KHn6x5Lq<8`6juuPt3@gL+GHj{q<7O!FAOwk=b7{yc3!zPDt% zyGKfb5;Ja2p2w#3XU}j^TV(_;Aj{daxH%+N1z*FdN*;ZRB*8LtgCfYLX`ZH0K?x`O z{t>k}3c(XA`_Td&vsp0cgPXI+%{VGv2w}8wu6309@vxZNizOSx)gh1CtaR$)tc>$l zaTRk<7ZBDwg%W#e*4;s`_=)0XooM9)geX$aj*}2SrS$WBI-LOg+vNP?knB5*Qk`+? zbs@a#Uk>a}-Y6GV87uh`Ju9YOFIkNun&yjMxsW;%%ic?+)kLhi*NmvWSE}uanGlVT zNkRQ*eM8%P{7KGF;<$QUDB{#fz|yFzr;2&?3!pWk*wDp!bmFfr_JO`}bnnLSve;u=_S6=Ae1({Z+ydx;ov z5ruZlei!~4T3`!YA4Idl4<>XijDppk_Ew^_w%F4dpeY>`Q2H*^hf`z0QWd2>T%ER~ z4=ARDjr6cCv+V6kocygLjPOdB(ynGpf$`_k{?kShM2?XS{&KK>O}GoS~T>ysU!J`Us zdq*Cbj^4KFigoai7)MbRE~6V<$iirik~G?z{slJrT6NK!3Jv~{su*#FxBvK-J`HtT ztHk&QF<9tr*~afwr=sQq9H^cGLuUzSnLv$MKbZo#Xh7d5KiSUjKKfp;c_rn=2!QZQ z4L;-3^BR0YGw8LiHxv0;Od?-QmMNzKf>5nb@%nG{R_5EqVm+T)>xta|^<$WtU1x}S z3tLe&XI~K#W%5NrbBl+)`~jg@aGF!j!{qD@*ZviRkL4(qiwZZO*O7Utjy0J|fg!Ei z9R9MrM$%PYA-n5o(OI;i2@d(m0x<5P1+&o*;`tFXYp5q6j<+?suqs1DvFxLk z<(iT!+wWLm&Dy~OOhK2WroXbNoM3q!6oZz$?Klx1?WGpgk^pt>oIWpU3eHYbGaNgX zA3BsvU6HZsyS>oeP2`9@)RO5((IBrXmN?jaCdEp@@&?BwGWm@O=Nei~1RxDg3NUWD z4(3(hrVBrY2sm?1)l?I&ffXKf-HSDuxuBGdOy?v9y)*We>tWn%`z5*}K_gjZtBhHi z+Q4`;<&qjxY1*YuqpJ&_tsrj8Lpra4v}#9odPuATGYZ`LJDxvRI(}{44Q`3?B!c&$ zS~;}j%6mpdlqqU@Nd+@O3dsImzb{5*l=2J+g-$eAT}_CNudC>qXqiYH^lGxEXWr~i+m?2)*@^k4I z(~+>>=Lm62z1p$`Z#c33)l1hfZhpP zXCPE^GAfr~Ejm211ULok!*5V00tsUpE?Eq?V6@UJ4L|P?+n{=8$a-5HhjGoD7B4IkB8`^hVlJW6~o{=?F0em@>=CK}FA9%;3u3FX-c zTYtHDv2yG!|cpa6yO4J-y_H-V_7xHx0ov9etvU2Y7d=$-PfX5uJj-?5n4) zT1+h2itFoQ@W=@f>fQL%;reqUdP<;f__y-G$DOx17+GMF)v(p+_vne(^h}(eC0{7+ z34__3sEwgE__=z+zaWf@g!x82$y#M~ zx#BsE#06$C=aPQVJOh$|FNdRtXfTFK`BB>A3vTvD+9qj42dkZ#b03^`g>t z1|ZI(+uKR&OOQA34+t_bR*^DC*=c`_K6rM`o1C2`#ckdAsy5R<2M|V&{XFK6$#ixg zIqoiPx;MOImAu+3Et6CX-W#&0&j!yiQ7^Tlb+s?794g@;`gltO!cZxI173;7In7yL z_u9#*Ki=!vPo!%Bs?0@^)zR6<;qa8=hKnuGkn>9)}fsnZ#9iob7xWet5WAX7S#te%B>PLw;j1!z^rLr^)C3qJm9jk zuB;qLYc(`sNAn!)y|9Ko&wCYGNA7?4-zSWUM|9CS=v`Bh5a>D3=P73|9=^-4QPxcn=fOZLwRlwDw`BfQV zDNu^rp+fL99b>LS!lAi*`ovba=_TsAj4PCs$6vL8608Q&Eu|zjk6ENFW@qi$^UxI^ zjuP#`tc{757jjWwoT0kI=1Pr`=)5Vdp-hJ0_}IqiJ{6l@>#aVGFNM7iU$(f`a&&!y z^tqx0sh}}~$8(GRAp>-}2Y__QXY(|I)~_a$sfg!Y=((mx=mfb3XWA+Gyi!^%$z%16 z73f)i*=4p3lx&)LY|>tnkPMr-w%BdjHR)m4;B=PEhzs`WXsUhSc!F}(E20OVQN8!I zVQY{~lw#+rNK*l|J)KeO2NAi%;lBXH1bsQsMPE^k38h{Y^bpwnB|sDy>So>=C^cT! zi&Eo93`tU2Ilg_F+ccf-*G6@eLn9WTpv5W5X`fEpwHk^ozWQ&IiBA%*{AX?0d4!G(}6w^ z_P%F;HJaRzc=R&4+sT6upZ5rPZU1=Mk&HqTm;Qa}z!jqak0#4ziLIjnk!dpnKSH{> z*znto*LT@C7h~RQ`B@m2uu9|YWsCgd!p}^Sjx5w`NN(dC4B#4R)}om^KQ1G7juzP# znMB4(;$&9btGj#gp(?+QUbva+RYn3IRJ87hZ{8=w-1Vsr1h%P6GI3=cmh^L2vukP{ zvi5t)qN&4P_ruhEWT?B~STLfvZ^Am1Q9*m7D$Z2O(I@NO0#bbfYg=T|(BNbu)U7h{ zoEJOn&4T>Q7|`x1;LOF)0h;G7Ea*{^HXf938)Y3wjEd_EsKC(BGNi9_G3faW8(88Q z1R5Vc$wj(4ZF(#q9;#n|W2>t#3K8U0GEPm1F=mb+I_FB;LPh^o0ME|%BoNxB{DN?8 zI4;zIIRLfvnyHIqL-I151G`j8^4cYO_&!zj+1$)10ep_Dwho=yl*!rdLaG5d+z+Kx zu!Dz}Wd+oRB$kC>F`|!au~*&EkOIrqk-Lg$9C54bS??W7;EMAPIq0_wivbIfA?;^C znP&dxtLnI0zHHw*tU3u{+Oyq zpl5jIDsF37qq-@tx(qYcvb*Orb9H-=-p`}!u{pfGKN?2NpD4}Jg?%#<|%yI!kBeh zmQrWQHS$msrsV9@@9(J3r@?vhu}PL3-{g-Wr$pYpr6L)Xv~ZDi$qmKuU_GnioF!n( zEQ1cyuyb(nxi@xW(TJSu;|8_)SvSBk0YyDB`j*gQwBwNIslembE0S)rvfZq4*w=Z( zNo#B&6*``0g*Izg*7?!yuslprs2wdjXmLq7%l-p(SF>jSkhUqtbZpZu>i2!7Na9Tv z;M68w-f)OR&ls5Jp%Pk=Vvo!SywK?Ic|^X)p`!O9h;wc?>XJIC6i_(7@N+CI0Mk8_ zQ5>St6mtWj6Q+0*CJ2ew()Y9l#qMhRM@_z7^%^{!XdmzUycsr~PSv^(fp4{-Q> zWS*K4*miT$y71tlX{s1;|0WkLfJ-TvTol#9v`D%i;_*NOHxf?LKE%bacl1d>EDxJcF21^~n<2$(t zay6|IyaX7J(!0H~@ja@}GDIk&vPkXB5$Qw&i;M`Dv1CYz+vpBdtwzFM0pDs*^LVpo z*1}Z!=Fu6fxMMjZI%^PaPlF1$i~a=G?IT^@mLQ~f*X<-y^GO<2I=te9AQXZFvd@-3 zdR*&VYmt8x#~K(i^F{l>ghm$c@mmu8aO;X9t6%2)TVXGBZfOcS*JG2_JLxORNt)=q zC3F}VQGp64W&QkYtA1IFv4(K#v`2}&2I(sDpz0AFP{rEMvI1e?udSR~(>~xDK=y0$ zPjF&)+t%pOtl69dh)~7i&IeT|aKGCwzO53N^tpf+6;&;vd9$ox#P{JHE!q20hTYT_ z@^>HcHK&?z`sRvAdA9;0&XeaEI%~%$va3I9|ENw@h$yPb+NY7|ST*6DMQtcwuY~6x zgW&SvU6q;9ShLb{bdV~dJvjHsE^p>VVI)k{^UT>(WKj7_?D2*dhGB6XQ04TF)0$e0 zbIV&W7Nzw;x2fafK}#hKwWVLgr(3VG1s&u%#AE4w2-;TlVe{2IfE8$ zNUfv$P%N9V3ys4C710X;aGWyxQf8fWU5XlM{gicm51uhwmIZR^(;?GKVj?y4Titnw z#k>$D-QCHDL!4ZS9b;ex?)zsZ6O#;GUj%*8-vFrvU>>%fQL5?R;)>0Ub7*8 z;n1j}SY&)be_f4Vz}1vxN*Ug2Jh`N4vyneboPiIN*Kyrgu^xjb6#oygLZ{59sUagK zBs(xJy$1)()L&SuQsbLwPCXFqOsA{2AKkYub4|q$DCa}2 zQu6__%)jy3xk0EktDGh_U*=4L znapC4NVSh2tKcPni84YZ!Vn@(sf6F&|GXc~>Degz=vVyHH8*;~R{i@v0qlJeiTdTh z!oMcD z^RsL5vC_QKBg<;3C~5y%fy;%x|4CyxY~v=;tVnw}gG4-FW$hs;yJ~A49efC2d3k+fLv!LRQ`1mku@`2 z1IS=M5ZYNFyn>OCaU6uLWS>clEtKtSW@~%`9-f5_V1LSN!4cN_j$rWc^Pm1ck2beI zflh{IW>1VhMcq5x?XoFNNg>4eCLx52gXC*sHu*BF$@Q|UVv`V;6?9OGSjPvLxdi2mb){ z$_UurgQ&5$2M2xASqIT$^!1wpq?9?pKNBIZh%|UgFyOmCsaA#<->D3nzq&>r)hh-d zZ*KIa%VZWJATI#7EzBO27XMeFNQmvddF+#@2atH~a(DyK;#`A-eanx5(@!BwHZSJ> zTc!Z1$<|i>8-3UZZpi6Rjs?*7R85K)fMR*!188()G>dj3hH4Cc+mNiOXI}<4DTQ;b zt$7wp5^}867lQ&76DeahzpAbTGcbe(`;>a**2Hv;PVak;jqOs)8R~hyBrD9pWFFH; z8|;|?XLfRAy%h%+L=6i_$NM+%!5yAN9KD4PRZ}Z!$QaG&H+16-qRvd!pwBf5^dT6a zy;8gcxPw}weiHkFq|a}KCPQ}@Jt6IY*U)@MKKX%gE_}6(^0NoFLf>N>t#g2$A+(;) z-_c({T}Yx`(GUOV_+F@2tUa(Ap7(EpFRgFEp9^T;G^mP)DzDNTqY++_K01C26Mxm` zR@dRjMVXhIDF2?9$wu^NnmYXee#N<}QYHEiSWT90+(V&Jgypib*{>Xn(jPl ze%s6Ex2ejfBPy~K+)VU}j*zmkJ8s^dPL*%0lqH0`Ynz2l!mj+)=eI)xtn%MhSdh}1 zU}3WUkX$E2swlnvBeR}S3k~<|PRX9#fjvpe^o|k5wKP|aHTJ~~=L@q4y$>5ko^%Kq z()SFzBp*YY^h|93(`#!)uru71JjJ^DNBEUiQO2(Q_;X~;^+)bE3CBw#ikm`c>IR=* zr?XqoIQK`5>R=mh(vpKxkHkRI<{a4qO`gYc|AkNdBge0jbM!izT1u>m6sXniio! z<{INto|_4$VsvkIPf(lpvsrE;GYzE3>L6VLsl{iN4its#r;~wu`#Wa0WHl;@IFo~0 zr`p)g(xPiu0|ql^n?jg$$<&;zhDOxgK^UV|=+4>k}gLT5SY#03)q(T#$a@W(vXM ze6odN19w!>e8sG;e9K*JlhfW*+yKRTA91MAW7%JGv|G3?)J`}xq?N8g#S7n-Dz*-< zNsJn&o}*ebwwb1J40T1y!>ltumXs@6?Kryw>1fq-`yqx7;H|F%pXXF}nBZ*8=&yQY zY}{Qj)Ir<+#s_955OtJeY&NlK0e9>BV~%1`M4rwBH46{la|};~$HkX>MgzW(%?(m0 zH9&@sBX3LZWr=0~XL{shIgwI_kBbS@ZuY=GDc%;XKlgd+XR|RoeKE zs%kCXNcpL4Xv9GFxso64*Vc&WtuM*6Mf=s8&P!uhhS$YE4LV?Etr7$13g=tZpsD3e zoIRJ!byPDp?;u~|=iXJ$pS(yg4yzOYOB?Yf8-Vr$xLWYA-Ep5eB=Xb%g^`nGw9hJz(&F>t>l$C6J#$E94t zn!1ZF#vw)pT0rzr>*KTk)|RXf+8(>3jXV z(#xO$XmAjR_(T@?MkFUAjFs)MR*(y@&cX*~+r=ki}?;Wpv`2BL;0gk7Jb(S=sKBf1CXJu=#X#_^qs zb^TUj6+0|Ai|(B|424GV%-~As0V16v|;37kiRxAo_$1DN9e^eYV8ERowR) z8b*j)aCI|WV`{Zdb9EG>VVbQRNGpZ(vtsB9D*g@LKfzhgR=(i6bDhpkUNsBM0MVkbH z|bIy94MVYaPb6G3p(t-2tWD;i>3P z%^MT_O62?~WMhe|M%huOiQ{yj@;*NGhWLlail-kk_DzdMwVm!S$l^;|b!)6Xw8Aj- zJNdPrtG*A17F_j6SF=LZ6==V@VXTyIc2G{i&&QM~1&G4|~c)(ksQo8UNK|8!a~q@p>{ zJp>{K%+8gW7mfNjIH?(h?t^lF_d5G9f=qdw@*a3u|NU>-b0|S24a7oRa?sj9oR%Q` zH`&^p5&O@)#kVC5^f^pCub}&-R+IBH>*}gi0bI^nXCm@hr?dpbUceb+sgyTptC;bC zq(&wn1R7TI86@x*b9Fdsyg!cT9_Rx1H)zK13pNP;MYJ1e*WCCz} z97hM-{7#71(PsLR_rixfoVu&lv2Tj=;T&cUkEc-go%oi(v2N4&H?r2qqe!-@{G5dZH`=VBb%emAN z@O5vlu)#CL;iS>1&SP?gO!XcNwbw-R1AprNciaIj=6A8_Y6yU3XpV%5b!oX`R+`w{t+~DR`OTv3x;?xlyLwmFh7JtY2KBFP zfTA`3gUNFF5GCNf+WkbY)1TA#LUx|qyp>l%ssM7^IYmm6zeTG@w^JAex6X^D-9RKu zVpjxn@0sV(cPvzb%vR}*y=jmDvR|C8Wd5z~rGWH?>1wT_^H4)>V8VBOdrKLmJW~HC z@|u-9=a(x}`au`b^+ErPV;f$-ioO&1pRn`XhGav0vPFtD*M?qyzXP7K~~Ykmprr>)K`B(WT#owfjS(r0$zu(Bd806+Q1Xiu*MwJ= z9&mzW(E?20qK|0N;G~@@(RTDvxf*L`b5$jPW60OUFW9tz_1HbwbC7LeP-{Fq(m>S+X!YaaXq3JK=gWy z-k;JNlyVIi+{-%{OX)(T>U^Jau5ciSMcRTUnAp9UH#4=)NbcTsM}P(so7Aq4&|5^M zqOyd3O^Q}Q=d=YZ#lXgKXA}XKmEuQEzC6zy0J>xuj=kCX%z!|E8T`)?v z7zUKZg`)8B+?hJ;tLf|3K2s+}1IHn9dkj_)c2|3KRqgj0&qHn9!I#sNgZ*}hk34n} z*~=h#@YiQu6D&1y)u_t0u!a4XqrWNi+iw4oSq4;(r&pJcl)99%I8D<~6a_V|#b6wC z41F49@E_T8!NSL@=h<2keU(g}or^+-+<~bK1GI*GZMB^dKtA)?#Cu2(EVZCWM;6pX zMKyy?8SyEhPelglP>QOv<_-!vsgNlCOje-p)cY{+s?-nGka)i}TEsJ31SIT@lSkW` z5p^w}mOG5|-l@8617^h)Ve$5H>~GkBVHjp85iM@a6tdF5NuXDe>hyf}A#~v@B5>6_ z6fFCzf!0O6Im7N2ddm2Mm}F#Zr}!UIM3*N?e%^qomFA4P)ySh}ob#NL3w&%qYT zn7q{()|`x?bVt}JLtXV%?OeS+T?B{kzB8gTPJ}+#^sE9Le2s9Ikm)}u^k2hhr`rvP z9&V18=3|(u+K8B`3BHThwSA?8-+|QZsHas)zhp<6@E84#Z`nP@l;n7sFhi0CiD;>NEv1unwScW=jCBw=?nNT>nUR%zzql76M9xhsC0>z=SJr=s3B zIZW`K#MlKIn0Z7VJ6Xq&SQCOCW)BLNx-sRnf7g?}xMWzO2HQ^4Ze1BxRDoa5);R*4 zb}y6ipOp!4V2*PA=BEo(j^bOj6?t9RCs9rnJ_b&Eb~WYNr7PgE)7q^XY~dxEfk`r) z&*?LnRW1T^-7r)TSv2NJ5oB_q^IX-`uY%ull1cxRH7EGqmnqWtx*V>zA!KUIxlE7h z6qC=+8g)G7auL_Le`@a$1_PF8Ry+UZP51L6#BGs43%=wQm8m#jKV}iz#QrD|kW%&c z6lGU-DR%U@3FhdSc->f6vPsKdJ7bSHs@LJfFsRs;gg3JNCdSto&)fCkA~j=)Vrmg z3$1kA#Of(gO*SJExUK zq9$LLk2?Fsg-=y0{eY5$4b{B&{6`M533Fv3g}YwaXy1o(M+vW=H%O)MQsP+p(^ zsG2_^q~$IKNUxyc5L@yXm%w;@4leS;lz!JJ%B1Wdg(lI=Uv7r|B03Um0a8lDWN~N<6Db^vJ-c%%{Xyy7TTwy#l!NoGEk5llL3snSCY~Yp70q zdjXRnPtu@+@QLOY#0`TJXFyBN3i$>Pi?TCNHVeIv7-{ZZmCHpId(akMn zx;y!8TSK%fE+F)ijZ<%|N1z6lq8T@xr^A+-ec(G~*Wn1mZWvYOZ&~~YdNLJ;yVd*q_pg<{708JEq0kGf;!po-`y6}e)( zY-Okre@1P`G=q?_rl@wn#77m4B+iLxrguQa@FBCW;(_++;_p3#$%)BI4M|JEf-9%B z&$Li@E>yDtY;zO5@EbY^)#7i)VQ!dSrc&>siJ@o>n{3+5AY8qvj-C|Rj}r9RD2Iiw zg8HT3`8+T{2%p=JNi4JuOAc(+c4F2UbzdrvTNBds1SJy?dk*EAr~SEk3XeBf`g}z~ z7R3DE@PP4;OznP}BpY#EgdhLD9eKIV6uiHQNPxG)nqQfS`-w~LQx_eYCBR5zLvb9q z@2Ua_0{%x}`d87SnrkfQDS9{jFKO}V-l5LekgCm1ncW*O-|Re9jWnuq^wfp;)1QJ$ z4dmS=cN0tBEyL20!&1do2PJ@7bWeuAT1q%~q(BvgMuw!D5bdNJRv51Q2)-iO&$EB5 zvT31TNl}&;inbtWY8NOH)4kt+ksa?>raBvW$a-H_nEge_aRiU#GYgD&R+0Aj3c=cE zX&MDQoX%$MkOtFm;_s&fSF|#{K^cx`GO(KGYKf>-z$5h85MHSW5uJ8t!SbJ ztN|wegdWX-bp%W)v9zsWq&RSRM{Z8=^Uh#>3ADzE@IUi==xhXJD-bmM^nhYly03$+blQ_mnNb^Cwv3nHEa%MwZl-#v zdbGSShU&HH-t0vMN}}y_$36-|-!ty3ESiP6s_t-igDe*NEv~lNSe5hV+&^UcIhIz% zrz|fmZ+VBqwx+!xempjIq%rsJJp{{Vs>cOCO#-K*Y2b@0x{vv(vsdGhytB%rbpbN2 zp`YxCc+y9l3_ewmcBM$&SX!#>$FL&L%gBYLh0OUpE8J;j(%JbY3!bE&`b`jUg4D*1 zkwYow1;mnZM_O@tGa|V$%=_SE)OiZ!kVWc{OuD~WD}L7jPXm5fAA^H0BU&dL%8^jP z8h*-FJ0~zzG@rr&%Q!)K)G|06r@*f(!m<@xIo~2k)9d)?P!Fl@S6P#NNz5Y+KCphk;g|<~Y70v5#*HGK zOo3_pfuzSFg!t3hF|{PUpeBat9KmeFIAW$qs+a25rKo->9)`B^X!r%+STx{+AA8jD zBt7Fltaf*PsJ+x~RZ6qu)Z%bc&2~FQgDwi>5d>dEQzqnwG@-&nx?%lpVL_cl57F(E zuPH_LE}iQO@{-=#xuT!h5!HpbIyUEisQdQzp`9uo_EW-uu*MX&mzG^P-f=al2^8b} z?nmNS=Xzq&8*W%Ls4OxL+US-P%+hv=9cwVk~5&vh_=~(!65^a~)J{pzuV7HUJY-^bPT2n`vD4^%@~P3nylu?JZ;nIk-Yw zY>A4?U%$7hivRo#u^M<$)H|R~P#}QjwlI)%x^JHmCa~fq`iah3rM{2vPyru9iIWyR zpoZDn+C+A1%XL;*gSu?2UG6UZNa?P zMiK|9dE-{*!92ZcWCz2w8)VPj?~?3;E1t3SZG3B-Y!#~i*v9gry_Zf;-%ZfGa82z} zuoHI+7gRm#h$C7ic;r>mlK3L~Ly1XZ9akw}p!Dl3lhRXVO+FZ0}B53Wu( z@KH~_nYUX;cUU$pOX){VKH7{Cg$(D{}#_b zPMe}9jBQvaEK0U-Y&(WW9|US(qzWFL7AVBoam#fM=94tlcZfqf!x5_~%WlQFMPg_7v>sIF`sn~hx*juJlJq$6(X<9sqmC(B| z=pcVfviB?qEnD8@lT@Df7~80`2&8%kgcpYkW17M${kmDT>FV<3$`*Gap?FQJ7d5f8 zm8R}+MQWgKW%ue2f2T%Ps!pkzxJdg|i{$Zseknkt4y~Cp$6Y!E!{i)V?KZ`=d3NUX z2Y;!+m0PI1!h^aRrW`}HMQ&4TWn7MPp-8?W1}8D8albTBQI<%}CbUtQI6z9@(?fr+ znO5$oN1-+ z{sZ8K1lNS>dW!YvorcC_N!9z8xy6W|QUISG__XvyY^9_OHBI%c&!SDK_kIyLnU&8S|IA2?nSn z2;GMrf?zCp7SR&noc-!;{DGGQV8Z@0-XUPm8A$QAvfRdE8GH7nAS~;=hKlxFEIO<| zlL&=bsoF&B!Jkv8Rq!E=ni0Q+iv{qn;v@=7t&ffo6j-jM(!X!n!b9JC36?U=m$|3# zHf#$$sGR+gIj0a8<0VM747Sqa7a}lFd<+3*PAiS~Go^Ox8tuD%ql2-22Z4+7P}>oG z-sG#aXpWAr2U-VVJzQ7}`>j)djx@hhRsX0y#SLu_m44ifMZOMx?^tDIPn-U!F>aT&6kMm8UQ%#|)fRN= z)DArHa$F-QU&aNJ$WW2lG)R*H60n@in0JkQMbYj&x%iX6D+TrdpQd+$*JFjFa-`0- z(iSQQ^n1H-z2dc4J}5Ou1;AFoqc}OHp-o+eoBC37e&+fftwodGBCpZHo~~L?H);n0 zH^O@@eKIbBr|nfMq}wxC_iy_!H!yKVl~Uv0c79IbVqgTG{VXrw1&_dzCb$~c{u@Nt zA3T|NEG_7eL(Ohc6NB&3^~??Too)l`ux^0_bB<$Qc;c?VhVp7k4}g2b6mQJi*J%6m zvA8ASVo*KYuXed*JCV~;T5DDV20w-g(^~VrV(XWO3$+ta~ zJS(l@(=iJ4c|2uS22dly{>A$h-p4t8$Kj_V|{aOv{WaV`d9CpV#5<@WT#*Z zQXC1MztN$^hNVFX!t%M7Msnj$jzRsn4Pws?)1Mm69ShYrsdEp%X3IJB!08edbnu{ ztnIIi!oco{16l=|6Cph%EoT@&ooF3i+rS|ys@1YIeH2(>JdMy#K)qnT^P8bm<%v*w zD{M7Est+5CNeG$xHT3(Sx>@}ax=yr-nh;zp5Cc_>NzqBKDQ9+AzCo#GLuibnOV|$1 z;cYX!IdvFeQszrW-BxlDPWsAVxumNIMA1*?A>3p20-%?yntYMFSA`T@Br)mfj(Nlz zuGt*6sP!8O9=d2OF_HQS?N|5H94%b>8k>LMTGQ zzCW_G1bDFOzrP##eJu@wZ(cI-{3|p)U^P1bbpC+qJ98~;Tluik-Out+F#skizhduF zIVwe@fh7OSC+{w#V%Yd9@sK*8?|U zx!h)qHFhr@ZjTVE%>UAm5>C&Cmw9GM{}qZC0vgh$-PEvhcWLN7^I%j5E#8+?DNLi- zjY_%Al9;tfj&K{r(3|w?zeSzZ$e-`0B83((az)yn1!`=Pr{(3cna=aAeAN4fJ$6n7 zRpt!!TW@7F5F^EoaQJk>n>-0&e~&8j_;&=Om=d(|O=8(Z2%t?Y|0d1FWQEd+y`S>h z2C%=BADVaW=YPJAe3s#lhVV$&L^ooS95dm!zParL^F?;uu5D&2BBm#D&9U%8eos*G6*Oml5|7010mMp!*-vJ6{^< z|C8R~`EF`!?)>Wu7R<)Q_J89$oXkA`=k5QsPIED{eGx4Gd*G6FXJ0F zXf0$9h!$}I*)pW=3?>95cDD_QLBgYuioKw#c&-iwBm}@OAn+{0DDBJLyA6xQ)Q$Gr z5#lHy)*uji8S%dOcU8o`kT>&CZP4-wC$m4imP9V!-IR<`F zb(BJ*-++N{AU$WkJil|Kxp@iqKz|F1aQ+I}iVOf5b@T*5_U!B`7F#7HuA(LvLIr#0 z$nCCXKax}by+YHitJBSl9(SYxgd;;NWBQzKf^{vOzz2BsdVgk|lQ8qW>XR+Ew83Hb z5P!*{IR?4}rfKs&kMO&x{X%nca#A3WL0rN8Isj_|NMDMt8%@Yh&JXqc*T+Yfpf<3x z88W|jk_Ur3qF5%>Jy56|pHh-`grL`8 zDX@9|&=4>mFYm7={)0&b_)zyB(XW^La7SrJCA7!4Z-h@`zjV`=vDAKw(&ES< z06IDvL}>1pZhAcL+wZrHpnrhTg298mUw^jQ7qF{3Sm0w*@NldDAJ`jPGADlIPiDVc zArLMsbd&}O!0&U5`IF!V5PPhq|3vcpbQ2oAP&%@sJ7l{3G=yvs&e;UkX53w*a%-z0 zrPx3owyG3+fTJ?Vrhva~Z_R25kfKh2FyaBo`y+*D%qTKbO(r9R>FEzu7F5h2#_qrK2f^tGgj<&~o+qG+%f}9i%ganz`j`S{k zCJv?>E3_z=VEL5mHz?Q}GdCOom~iwVQcVb1sPDPzPcULX-y~leVC;w&j9L+RvU?^9 zvfe;}VW02?2i+Lx+S|&23h3x=62Gmt*Dh5mPMcn=x8#9R?3_?OrfHfe#?kTayba}i z{HF58UR9QHNEeFM($Mp`mn}%=Ksd(8tpDn3Rn`~%OJU|q;nr3sJDa_1P4dF6u*UW9 zlCERJghoP^oqLwF)tH{`P{RheqM3#8YIml$ahKYHE~J`Ahill_t?bx8ofU1WCzcFm zmeFaFWy5WV@7Rs}bZ zJ@rJdh7Cu;cT6;!KFeZAq>89m^EztRrPRfDsC{Dw$&w)`w#Hd^5C;bY+B&^hTb^c< zxcX|<)kn%W&d$LasFn}(SFx8_{SM>n-1c(<0|7#p(X@^~ zl~Hn8C1iKf-Xti$p+ooUl~g@!+h)v|npg;au)nGPvfb0070vA;@w+>aBa*RbJ|iJ% z!$ROdJC|iB{7VKXQ%|&4gO?}-I!LgU0E6*lAW~Yz$I|hWi`(Db-ZwO&$-~@6#a0Bd z*sb@b#wMvndwiE-d5^(VIbTWC?oiH&n7Vv9DCv9qd zeLS;(CXK-<=!DH*C1c4%jF=>T0nLTKsRk&YFg@xzi=6>df#t>NEh(&Tjd^u0f1sKP z0tc;fghT#ryX^1IWYW)GjzLzD9}i+9dMG4=ZA~ zF^Bj3>s1GjF7v?{+=4qT9@1r#7UDnfvo(gZNkjZ0ZHoGPtyQlC)alHx4OwdX`h#CAXSC5Ot9eIPa)AYjNq>o0R$E>xgoF;;p&eB%EaJP_Ye`1cg;<%JWYQh03^Wk{MRgXGhj$z78=9FVE&y}0%GSGl zVe4cOWyja#>S@e(r1LnfTZf|972zpJkDGTlP?FkidaywKJT}x;d3w+GmNd1zWlA5+ zM%kN;Lms237oUOT(%eABVTY;~#@F~dT`tdXL0wSaqg_-rx?AsTumdl2Pe9lnqhjsD z(jNnGDKIAVmrkOwIv;Tf%}C_L#jCUn)F<34oRLm zh&7MzpX+C1q5oWOss00^65e4a$YvEJ9}#J1D_JCaiQ}P<*Q)27cfg3ZoA3Kmw-6RK z*&8%WfmAMztaG~VpZuu_I3c{)fe{hoQd%`IO3+G5Na-0~kdzXS&>~89OP1Z^cTuf- zKK>B$kTa?KmtN_810gzFgr&DuUC%I~a!vh_XtR%v^VK&jInUBF)2&R|C5-uz-*+Jm z|7fzwPA$IhyOBpRj&`d(IGIH{uMMvou@1?4Cquy31Z#8i)jwrUJsSu)7pZY%AASKP zU55^;fna$T;kGVY#r9TY5)P#F0r4jgXZrVQaZ$n+@M4lQ)D`c`{z*U6c518)(?<@( zV>qnaS0|L9=S0z__)9WFwQRXxt@FU_>ZGj5_kYp}GQjIizRk+jw+K*LvUdAibxKJ8 zS?KTY#X|jV8RqcO!@5!${Hh7h@(u=Ev5j}~H-^BQL1t%Nmjz3yc3NDjX}gmqa43%7 zGklh{+?{Vkak+GW3bN?c<`GEvGtw9~JW*1O4$hQP!O8OKoor)?D~vKqyRsJ{o;C^jc7HlyD-8Pnj0 zVo}Ih2eekbR?Ba2FV}ZnQM9BmYU;PRh%{{|e@{nTxsfsRU)ejTq-@YP&z$5YI1g*D zot{K-lbo?EK1(9tY`nzPDMhej?&c=FjhO&iypP}jT@ z^6z^3u$kE6(TcmL9rbqutGhKRABO%tR+O52aM1ASSEX`jfO!nHLGS~;7;CT>l7Vi2 ztwx(`7s;7)R5qmr%#6eYfuUZhJ2M}pb#kx3p+w!Mewui*fX)x`p*oDGi^$w^sSKkO zQ%_PCMI=Ed>qXL$*rmRRt_SzCTq!)g5t+N{rvBElf~8}Bs60h%L}Yd>EqD|`knIHw zkw4mTcfBa_$2_j^^xXV_>Duu7DsjR5#4hCZn)vMbXJvrYaJC`bO1;V8uQ<^(8 z1M7QBB>K!@P22#AI$Qa-Ac7vx{%J-!mX#lHs*?Fxv#$PJj!hHmyFaiC9d!?SzpJdO zcDlHa_cnV~SJ{h4(Q)!}l(!xfYDP#rT{axPkTG*CGN%68`YW)-Jlub9Fx?e1Nrn(- zO(afZto00iihVnCJ_kJ!uWwF6CG+_++B|ND(`N-0t92bnB$BTJi-ycbr5Tu_xfvB$ zhm0UF`<@MKkcm|nwI%yzp82?8TEO^g#q?9j9K6x)*Oml(fmtuMGdAou#$*4k#Elt1x5*nllC~h3dcQzf)hTmDRucwYyD#XVsmkvKEaArMfL2ZmyCWdRle<4tfktC z)A#Tpv$8Cxu3Z>O_=$h| zRN`u$R$sQ|pR4fenH>T@B{msoUyvs-0i%D&om}p%tl=nShf=+Q+Oz!AJPXqmisrAw zsXk>cdICb(KbK7t_NLE_i#136^0!JLRS^@12S=G>13lk`b>`mvcT-nrNPA>wQ>T~+ zd~JbgH%$~4&)!8|Z#S*`JzRUk<$*$ZT0|PlGA1L2t3>I^av7xffBqeVEzJn&B9*;y z87L592iXYvLdJtqf)^zdb~-*Yl^f*svIX~!e(upGA^9%>Y6AL6Bz#eSez%02;?8NN zO8cl4Ezo!1!VWNWwPid^Z#=^G+EFRhX{-Tu>-BI=71@>F=MWpbW7>4T@djc%{H;`T zrfgTk`S{SXj%e;JggUKPxn7b~4x_SA)u1pc+kV`eH9uPIMw3eH%pTf07#hJ=M6kfR zX+6opE}|Ec(%-Cg8;)0Lv(P@4ji)h~&`HQn%T&1|tR`7pU+@$yXy{*~v({!`+iwQM zoTr4s*yGUMR9|-FI9%RCu_7Y}znooy>Q;A!`v;x-bE^1cJjS)ndY+&LY0$5-Cw&iK zq$w|=1N{msWA6nnbIh9brgg{k9Im*0T?g!hcL8R`ID*R+y1l7ZAV2MkxF=U%q~G16 z1bNv53rI_NzA0^UlK9DO3a7WfNt*$TxlD99;6!do;U^s6thKz&R6WGgTij9+RL^mD zJIu?*5yIYNMk5~Qs>eu4{)nx~L=SHrAhSkALhoYKuTCefH}ux}=sw1&E^yR;;;+q% zDVte5GG~rBp_RiuoUzhJ=|=WF*|*fLOA4^x{s2j#hsgPN`Sp67nYrF*tK}`AZ zZ9-Uy{YQV@Vy?luvJMXG*vp*gxBW35!|V7%B7Awj+BTN%zCRz^*OO%fr?lQtSr_i+ z(Pt~X&nWQfO+0C7C-*%q&|~$ny6#fDzKhwI!P@abl66sg(2RwaWjkU?ub!iGm%K^i zF%0*^+T&Bfl|V|%1_5+Y1Uw87%u)D7PJ)lVD!WFcQu7%R=ghg@aJ?|oNMk%aA1Ich z%at43pU`dIr6Hv{XlxU#p3oq7_DHB@sxcib1J1_eQzEH$@ME$4r8x|;Chw=!$)BYTN8ML>8BV>QpQ9+G37QfQM>!45c#m{_TqP40`yctxdoNl+VEC97B)?xB#Iumlclxe+*UY6r950N6I~G!Ys<@_<0KAIJzavtZ zL%>#St2pf>isC6k`=xP^jT+d>vP|_7B-JfwK|JH?tpeFZ%Y%LXtLLgzT>NYB>kvfP zEJeyhUJ}UectrXVlGPPpgfxyFe~!i_`Do^*uQQxRVxGwYrWlmDpp9q(xruv}5ZRMe znqJ=uzrMEqcn#TEHeebm_kIe+Wgd@*$EEWAMN<}BK?jb@%^-xAF8zvr%yUhg!gJsUQ^bg*C1xsPC}JP7Hf}DuP%GNmET{ zvuk**gXf#`6#4_igH;z=&mIq;1sypPH}@K-kA&lz+LD4cBAlS2YzLaAf6Q0DqhpX8 z7eN{No|!dssy&T6eFpNES6!eX)G!4~HCdDOuXg=H9o$`?6aULs7%R^@=@euwd1J3< zM5|VW0OHZxsPX_-w!+EtZy&brt<&dagnT{TIy~{NJ--n+m(=H?K6H6)CB+WUxKc@^ z2(d~=J-^&WPU8U{8xcKtojI1;WqOI>jEMfU$h8?qw_Y23EoK;>7gCwy0q1Br1nZr{ zWDG>ug%WZOCl){;@FKqFcuq;Go?ubPuVhOiCod38)|0G=sC7H7e9|@+AlotcN;>Z9 z`ulO6=o(01nW9~WN+w8Gh*jwS{tC*s=S5%8G<>pjBLh!%sllcA)I3BF+3YKDw=XE` ztvU6(+L(vBPK;D-o~Ct{Ya^dC0X_Y=cj=JAE0m-0i3F6#Vv!_p23G>Rd?F=>+3uD! zpcuIhV>wQ@n+@Aby%Qwg{!xFz2j}&H*mVnbRTjuhD|<@5%fWCZ^atj>=csHA?#NPI z!e&JRhxbI(MvcKQyT)xIpeAbENLtT*iZWaC1g{aGp5x2(e>an`(AiW&Mz?RiP~c|W zO)Cmu6a0+GTzc*PNns3WufgghBuTY}{% zCk9l5SB6HcpVfL)7O^QwaCG+H&)}Tx(Nj~oBE4kljB6Nh-c52FYrzT9AI4wou3Rww z64_UVFYkE>D^$t|HV+)SYspAhz1eGb_WAWFKwl#p_Ng;PYB>DH_)Fz>0GqGyyUH*! zQTR`*UEUC)YSw&^X~@P$vK8$qop>PSPY+<~pDq?wzoBfQuD#O4z;I*I_tuy0whf+g z1KAv*OefkKP_dOr)ULNUTsq&bwv)8wKx6v0=TU4hlH^vi8vD4v3;n>LXU)a`sKG7~ zcstk5l)0<%NdUrdBcjJMn8K6o9SF}l3^0<~zyblB8}Vw=viQ0^4Khia9j5f8XP z+Qs;C7jE?nscpyuc-HT*(Y@VF=PBUgeWYfttX89h{Y;m+Bq*e3c+4sTxe1Hotq+@qr6WrpG%A^oPweSn>ow&g|3RF3NGV@~ z|Mu{+Ng;tIdP@$7E|ipemG`|Wszne=SD(3pu5Q9ym;`S0{C!!_%psJq$&%uXpE{M+^5d-Gst%N$G zZ7EyzeK9#`A+hfDATP?>6YWAc$lI5uaic~%W(`{-Ccubv8MY4~^9&Y#~px4N5$S`Tj~J5Qt+91ARy*jusGJrI(hYEihmpb1Yg@~IR@ z#=(V6bn(Ow5>|FP#njlte*%jO*Ad0v^X*vpxJk5H+ORMV=E$c1MwmU_8X-TWs7e&eMU4UcOjkc zR(k#IUji66*8Gmac5cqym~vH4S&HQv<+#MUK~Go7>^N2`j@&U{1E40Z@{K5FdU?W! zNb>pRvIU%O>LDtAZvj^+zlehIqAf3+amz;d@s>w(-P|xuFT^T%6W9Y($Y3m#ZD$Yn z^cxDwZA}>0yI`QX!~HXU*vbj8nCl025z=OiRCG3>d>&CX%@O>4UkIm-tbFh#^ZKI^rX@t^C+80<_IZ9X&W2q;0hmAC%eC!R_n<%aDz2+B#x_O|joEY-M>jhI1 zBH`nS_FW8~SXU|r2<&<+Qyu?Tb6*)%SCegv27*IycXvIwySux)yX-*F;O_2_;2PZB zLIT0v-5nl%`|Ez)@Ai22&-?Mtud2OE_Bf;Fo@>{txmM|;hH4ldX8OziJUYnDu8Lvk z7jn5CQ3{7%wX6i(fYNLP{)%e|@!D!ICl>hvp>j6D^gFC%F7ST)7@TP%5KlH{Zt>FU#QPd89=i=yx>Ypsa zVr<|Y@>P`ml^+ZQpKg)Mni#qQXndcMFw=I>1hG*XEd_Q=h2^pIw>w^ye+$+d`vGT^ zLxvnJuQonb-%~8v#X9xAV-iwe7E$)e@EeG^>C*IdcDHpt?A z%F-X&3yAvqbX0D^Zv=z`bC9qPKGr~pj!Pwa%NZl_Hi+D-;`9`PYuoqBjnu6a|1Jmr z(pT4g{pv}44-BHi%)Y!ST$Z~48cz6~4>MU(t4+^Ctb zq}l_OL^NIIB~MqjUQhVxI?MB6g1;-RVh1qb@y(NKZppxUC|`$3yEF#XW4oPnVOJ<` z!KuZj$de5ZjKfP4SO`75lgLvFr{2K&D(d%A^>-l%c>m$_`lr&VSba z)dk4O&H8^+@O#0q>zyn%?W1-`5Eabh6x^-)QjKDNF&+=c$=>JiiDVR`5>DDj;|M1d zfto20{}=>2!ZnilF67U7Gdy~l`_^bFc;~-z;$3As^=)Fr!iuzPJJ>C_f(+G4I1WV# zH?P3b1R4V3vyd_gu~Kk&;w(B48Y=qM^vO9xv_pxRT;x#@h1Nic8P`-5x{yVPpBy6Z z1QF)57&x)BbzCqz3M>jZMDgnf(vBkV3L~PlPeO{YdC_7*%3@ixQi=dmS|lB=>fV_y z7;-QcSVBSq$~^&+(&cBL9%3UXA>=5J5FaC2k#48YAJHJb6ui8}2T9HW7}2*$n3%UW zHy9AUdBJf8jF;^YV20R>7)A)!Cg=V+B89QL`_tEZ_-{{GLSW~Xu3*F@(_KGbB3_eWL+=R? zLWSZ8bBuxo5jG&4LVNPT07!Rzk_I9jFfa+w3q;TcH8~~WF=S{@PYibV*<25pI|UgS zHrqz-gAxi;8Wk=@a8M60LH$gJXp#9FMS)fd8JQX)n)LDad+a%QxSr#-uJhbJcS&M@ z)Igv*%NUkw&(IX)?F*MlVszJ$uTudqV}F|IvS(Cc7eb(>U}XFNKnR^d<^`Z=ZWuz# zz3{(>8R(iw!wG`qkIwXc_YHsk{=(DK&i}duREB&o{goH&)WfWU;-(4f zb;rbuP>gi-g$Jj18fCsq>ne5SICXWM8R{2GM9_;*uTjD0?zc;0u@BBeeBw&jHm@GS zEVz%B`W#SD?-6e7NKH1uYErTOe6HD{pCDyVS?vCC8EHpraq;}a7syz#SXsBn!~R?e)frV7t9p!>62zI=qFviA zA!BEnNFcjh&Ag;$Hq~3qm0=4cMGxfC;2cX4pxrol%xHdWGe2LKkMtx{u~Vq3@q9=d z2_T!g&SV}rnQH)P20lvSk7l_mXjzgigt-@-7YOL-V1fmh-fb#&;FyW;v?ep&KBYhf z!Jrm+NlMMNTXVI?iG*%Zj#;Nww2)240s3VV@CN!U$ zPG<-17YT$q?$p*c)LrZ5m2bfQL&sxh9qs3YC|>~?8Ml{m1L{;YVn*k0-r=+(n$j|8 z=Vq=g!}ubwW4~KNtRSoMu5y~prb4%jZTZBvibMBiw25ZX)Ze{gHMdG&+xVsQfS&$k zTWtP*SZr^~ht2Aj*iFKJrkuO7? z1Jh5BBWqm@6*jgwSg}1Wc}4#Av6a~ad7@u|!vjfvB9#^=my z=;)Z+$a0Tg)eW_w8)Gi$WrJm+_cYS9Napk9nc*9$O6j7J7f*!zkw))T`rcZz1He&o zZycLb8#i*`eMR9rtQ)_lz>#q#5B+HgQ25BO3m5u}IM;8w4N&?DK$Q^C(ijC* zJiE^>4_`dGT58K0ZFe@2N(ID~HN+}Orjg+hF+4V41t_TQ+m9P1j|@A;;k^(up>Vet zD9`%GcI@iPS}?98T?pj7rx4in!*S@0ub@NaKZq*m5ZXXFu@cZu<)yGMC}i`Kl|Jg7 zMr!-PGUQ2;TCpr`tHst0WW%^H;%?mWhfoB7j_XIl)AKb7UGpZreq(bIU!ev zDHC+^`o~MH6@Hdw#^d%Er&0!PNo0}FsUZ5ztB@z%(=&N-R$+gNai7Ns}u)#wt^7wjZW8&Gd)DJv&vaaX})#&0+i3Q4MTBj+q?9>|x^sXw_O#M!u1#GDckwx?@1` zokn0A=s9LQfbg{B3k)%0-1kQ#9yK~#)nL1Ae48r_W$-#{wQXMmO#P?}VDyr0eSdss zrW1#a?=k-y?*;pv^}%lhcY^~0K^R;9Id}D+JV>vy zwuS6~;>x2b!gvC$k6UKE=fttF+v7)5>YfMDoJ-a@5|~d|O3=krU3bRCeA_^ricbH} z-26ENX`d%Qa4LC6r?c$ySvHGB{%b$<$z)1)E}tHyV(THvH={^>QNFa6XSNY=VdZ># zwlb{<#vOB!55Tkr|CB`L!*Ob|SM;b(i&zT~!&V6G-d(2||I)eaiFhk?de~Mtlj8H) zB`0UeKOJ!<>>9k62v-*qqQw2_8`+n|O*O|FgjEdkrzSYHr8~O_%NovBJAP$co#=9k zD0{yS8Ns!RhWMG=3V6gb2kiNF#-<)t#4FM0qhw}DoWTnY{!o$1gt6?gwpzcHwV`Fe zqIDYTLIy>HvhU9)swbpA?$6^_g1s3wkK-6d{7Fg9;8eN^Um%6~%`X)MSDxivKlMFk zOz?*a@aq(J8D0#En+FTrkl#4Hn){w2mV>p&$j@pe@1Sf1Tz|R!6?kmb4oA+m_DWVB zELHx9YX{<q<`F`a~kt3YG;Be8FxgOtxTu_b=g`XH0!i>5*b@ zhcVT0HfIEcXMf6jX{+r=V~dpQpow(EeHJ>Em@)_SKI|Bquk^f8S`fDG@tI?G`K~e3 z-#^>%NS#`WFz&v|Ri_EZ856y7(rO;cLd&Y04_fdLp|W*Fma3Eqb#&9U5;xcgDYUJ&o`2tZ*^ziq8dBHNLHZ+?8}FO$ z4`zk!T?Bd{)JfNN8Z*!xm%hwY{d5br8puGMP>5xXd^muNA){$b@K{9W;w}hlg8Q6t z5+r2U&g09y>cd&; z>^w!NTUzX&=Q5+PlHG_XfBYVDVI{snY%Sk#Y0m9*u_$co8Rc43X9#9$--%o!vZP;_ zENrPcXXg40^>eWp_)|JnymL|JbP&-_v1A)7x1WkS;0$6YA5grtcEy-DiG&zwK6R@v z_o{ovdU#wVUq=X9sT-{V&%f*uwQC4a)duMGwz<74+Y(aj5ty=9p|zzVrAJD0HMHTw zEke)5{GPM6wX0+V+Q@hF)lTWcNii1|Pw1+!`h@G~wjhgv*vU5S671U}8sL;s?aER} zDmS!g7*p_k@Af__VS;7pW8$S*{n=m@^P%6H`F0});DL_ zO2B*EEF+*x*Ix#0{&naZnz#+4;A5Zl_M< zZx-a$Mn~)>BUm3?@-?0p6|$R?Z0~I?I|vCYzT+?Em9Dm7?=w^2@^7?kdofB*oU=UZ zclK5Ri3QZbsmmG-86=Tzo+;Ltk%@{-T8ZVcB$lP$lq3cYMr=4&Yf>$-{Q1KdPku;c z2L-lMVWNeYNLZfQI^|ZEFOS*WZ4da5`i8!dt>ti}76dmNr<9(sR)2d)$uZznb~Pm* zc@ZY6O8F7*nw%`J?Eei@-&U=#x;)?0h?b!OsP`{;?X5W{=`!k>tuUz%i^cubm7$Ma z=eZvxDS0*Trl9LCN>PUXnS(FgGMJf4Vo+~|5(mo@qFghHPeUh&=A%=Xr6IBzzJ+y@ z0F6AFjSLsRZ@W$L$T6&pqruTMKAhc6G&XBfea2`p6$Y`-c)q~{r>v^`#-A+Vo~yKO z060{}YusQh{h=r6bvB*ng7CV~t6dv9*`9B^1^GgmsiF5B^=ajg5=JkX>f+}e>%B}} zE_2H|RK2hj4sGi_zyZbK_?wPq>^KPcL9Gcn{-J94Wgj!bO{)8?rjgn+P*t!y}E zaNHRu!PB?X+pN%idL5|UqY3&*+ICq5;M-5$rWZMJ1 zY*oDpwA#Z?>ar5~;S&w)n8a>J&|h!aCezbT2J6GwTWQAbiJGfs`!fs%!+b&x^LJi$ z4htUU`ta4Aeh~eMcgu&tPHxBjy0OfF1-X;1NyT-Voil}n$aWBFd?t>LSK=z22h5oL zv0TLkXXRn^T+5ZCs2grS-!)&ePHKHNN=W~GG|S=RcB8%{TqqLjAr|J8!PC}~uEeht z08jLk^!6oYMvgo#$KR~PLdJpV7~aOxTd)_o+`jFxD&r*jEV-p8LFv4&SLu4yDja)2 zIpSf_N}UW~5MPK~EM=-rqu9io0F*Xbr*Rau-a!cz`L405n`|8`_;iH!MVF&Se^IwlT%tHF&QT{5JZZS z3t0{kbL#AF;>`7EhB_Zm+C^O+>E@y<)6lsXh=rhH3nnx!2IPe2<{uAD^RE%FAuX zZSxWejdln(y!7eCA=FI8c1UsI%AmD~ZU~D!3Yi|8kUV>odI^UDPpvpI;Alg&lVTBj zBYMAk!>hJ{L+Zy<{qQOn(PQ5R1F9|O&=^M8xsfmpF4@LwoqUIcl~sQ4b7lU<%E99< z9{qN%K9`f-))+yo58z;M=5{>y=j`jSf_{`a;^kHXAi;K{F~20Y&DHei z0by*xLTo35DMH`ZyryX?kan64OSGvgt3+!%QQ2a-n$C2bD<^dPElo$_Xsc+rE;2rM9_jNmM5XQgHY{ybMIbEi8b$Odc0a)6K0R(ZkVVsMP$>7)rtwT+ zRs8Gd1wTKwlq%}u6ScZG1}IcE$r9HfabTsF#LX6ps$8hRhgyqrk+yI%27_0`QHUUfgMK7;}ZY?>qn!siO!y^1{KdM>acs&(BcmmwWoH{2xaV zDwnwBEwQR&J)o2NQOI=Y4lmMsAK)|{H(fQP?Ru#5Dg8UY@0FZHf2Ju<$~9$xb19*p zMIc&e=GOqDZ)D^m^i?N%0x=vs9ZGwY&fi9^#%M1AIYWcXNvPBQ|~3Tj+5$_s!B3VwQQcSN)y<%y2e<5s_7WZ znGDGdlN49jO-DTRY|sCLUXSZv^m>1n>k)IYv;19#_aAk5_UiJEo6P9# zdzxOz$%~K!9#Rk(B6U|J&VTIHD}Ec0u&hYM<)IXvbQ#7P2Bq2~=UrUgdk+$huQaDl zh^e1U%JoW48ceiyxD}@ttu>dfpEBBxjm@yXAe+*vM%V9A-TrLc8N5Cg(6>A)IVGa^ zUP%JNWX&b!=E?0>j|Nq1klO&ZF3KI}JIUdZQx&4eAL&kUYlp8!(uR|4x@OJdyO=NR zE3FQhRFs6=drfg%>WhTNTljJ?H1Clom*(YvBl`S7I)ot6R!@Clc3In*$$`Oi6qxMb zuFCYsqffPaw4s{vzuRCJfSTQ_V%1-1uYUq`tvzg9xwDZzuwo-?&}pQ1oLIfQ{UJom z3^=$L^?m~3P_AgjRn>hTe`sKkZ?<2Rui5q+ND;4vlT&@+N}c|?5>P~$GP-vUr``aU z!rGuUNbMA951yD`(z}e=+q)SKhY2&LrIkgkSp(9dOp{Y#--O^t_bD52$EvhdiyH?d z#dpr^xvcg!AjUwrvLmKO((csjB*ut*WLc1s4UjM~AKL`_CLI{uWJvTCSy6}Xjj|pu zAhyP1Rimzed$Q7&?}1cVFsPgKP<($9>lbWKI71*Za9rxF?ca#T*QlHhVn)gJkZ>yNTq4LhHTx9odmef)1nW#<>LX84;= z^ZPz&a_v5n<}QBHXpQw99eP8G%86WO@^Ppz`48(F^xxMtCpYIm)-{uawVj)}3o%pb z!won*;=c(^Q;pUj!kP)cfeS+rv2p*WVg7Pa{{@eK@7?^~dkBJvo%z3a*|VddU{#KLnOz`ho_q9lf}Oq*wgwdR@{X%>JBoq`4C@9Rqs*c z3?CP-<)3;^9g`N)Zyvms@yd+&v>3JRJ(}`wUfa2`IbSB%lP_Pr+2wxJ6056gX3jdR zrU%Rhq!I7<0V6-_^gfh)f6J7$8t~v!`6RpJ>K8(*^PwDpA%z8Q*+jS7tgM{5Ii#im zR1h>Ej0+$6Y3ChA)`iQ!y2)7MxbjQb3XC&iiM`JFxt7Sl@y5F}GCikdLtThb2BYgtba7=mi7U_q=>Isj@lFiP|F(etU7-Ds1^mB>0YN?3 zY)^Ev=6@4|m^A2mtvZ)zgJFqKXlw7{DvCd?ji`Dly=t)|J0v!%VbUQNT>k zZepG2irR}f!qS%pAt{aDJ6<>sXP4VZkeH5wVKX_L6ZwbPkzFzLJR!H4kcOic%xoM4q zh*Jt=SYJdv7ieGcwu@f%hlsMmMXfWqT1oPVI6l9RH59`04~7vdyO!1u5iJnDanA;E zL`a{^Q&699fssn_bU6HeetwvNzNhmKN@yEy8d~7(_%YIhu*wK0Y*6JAyQZJ#ofb?W zy#hfn_!~(0PEmjET91$CgA{0r&LSu`u?3hFtlNW}CAQE99|WHxRF~&IQ?jl`3I7b166qkApo8OpQ|BGiZ=bc!CA2Yxb{LIIKF#DnwCP(ZvhgA3`p z822MIqHXj-lq_DOt7> zZ=K0-DP*C;z21-XoSLFm;~KB)nO+_;)#Vx@E_0Sw3OS*#eFwgtxF+&COIeqoRtlbgP8*rNp00c=REm*t``%PWSC^Ce(?;KTRkE6&xLUQ}mXBrq3fv zs>TlR#@5ba(2-x*F)^t|G3b$gLM2LvO6cWv`!2TY6JE#0g! zf5VEF3IUv#losR^ELJz_Nq3-WZ`G8!WiuvEaaXz|H*cB=CQjKSV9y zNsx&MI`9A-lah<0nY-z`nMLhnW}#-T#lXVI&dkWlP6Njz`kwN~&GG%t`{jRBtsNc2 zjNQzMsl|9$nOWIbm|3}*-wPZpbj% zk(#%YIWd!>iH)k8Jsgt)F)J6`yAkQ)>PF1M{m*1X?`6)vY`nkS{kw@NVQ1`?`f>vf z^Y5>K?^;U^cw8v{^P1H&NkU0{PT;R8$XAe4c}!RmZD);*@`M^Fcw1tCQz_6N+_(bl)T}m_H=Hu2KM+z7SkYR z%CsDoUUFo}7|Ja!*rNtOvb09o+&H-=oiNI2&=vu1&jcN_GT1Bxi_x4Z;e52j0NsF! zA?SQgYa`gR$JBr0%U4o(A_61a4b@R*GQYtrDn*~m%j!0n;rTx2--)I5OXluvda&?s zj6RnII^(B%g*M=pty|{q{5Uz|o#AvLNV)!N{lp2gFG*{6M&>cVK?8y{@W#)?{8{;8 zJ0cDev~2}dKz1+Aj+1w^N^L^cYe#0WUM()k7>}@ZdE>|FqslOVaV|&z>#gmt{q=6* z2QR^Fz!=*Thu#vRXR0kSWY?v}T@Pa8nXe|xU;tX^5~*)-Q_)a^j_}I-TWszvY~k|p zsr{VpT|?6Rl<*PIS+$g1LHVe|798+xDM>|eo*``fDWGhrpr;CVmP>vKLR%w}`=$d{ z040}FC`S3NmKVYHP)wt)&^@cKY>yM2SGZ8HXt^}H7@Y=3oYIBZlNDS#BmalgEIMTH zM=g!;~ zWv@@z>U#KBe75bAx&F&oTqxibSo%YzliAsH++&7`D$dL!n?PEX$Y>WRYs=m8AuX{) zew!Y8xDTEzp>Z5s&GwWet0SITP2{B(dt6Sg^ z(W`jIV`&!{u^vT;{Q_YLknEdX;l*UM-Refg^gKFn_1i~ut)){58cGkh@N9+WO?lnM*ys>u1L zQk}fy?0mh88n~ql7m6jhEZ$Mo*l}n^S!JjAdgL6yR{{op#HGnc2i_I6%ScM_)0b7H zu0BjQq3r`BmwuMBtb|YL+J4NQ)O1-lbRA_T09&F8X^AUm<+sIgLmhjD?;MND_Iu>9 zI3`y|$AKT@ZDF8Bw|}M(Ub32fwK&P$5*gGcp!X0fCz!6or_qD=D%qfo7aQdpdO|I8&mK{owL~6*M>v^{90>__pSH1Z1%g0Q%0bOpR^Nba7fm! zb(@T`gp@HNLL>bv8qfm#T7fYm2@#zspJ+pNo%;J5xj}Pdi%4_84>IaE>(8b(g@Pll~Y*8>;&M9dx4-NFT4fjly-wC*qvL5>@s zwSLd6wj5c)QMBch_<5E`Rl2ycNb?4CQ|#lxK*cl8M}%P>;v?@+zo#o%85Z-gT^tni zG3LBR)Zq?&OhLKFW~@c4cFH!}$KgOxZB-VT;Mh^(&dr!%PNkmS)RW zA|?qp3}l>)(!MsL%8~m|gsS_}I-!Fx?1(uGVY4Iq_a1!TgAYfz#twHai)>FvJa5SL z5{PB~%c+HC z=p&;bj41mq+~>-p>JOGfj_Z$O_5M}5@>R3q*p8vdZ4N{(FH&uT59_*}x+}LY*sE{E zhCOex%;(_vQ5IZWeHjt8_*0b|bs1xddE1_Gtlu%=y;WOU%Ln^7cynz7PIrhd6(7W3 z8+#H2gNy4myO1Uo(~281$=mq=tORxggf1j$mJ^Byv@J4N;_8usE-t;uuoe%W*XPY= z9KE(bcz~vgVCgl$ry2|Us_Gp&Z8&PEk)J#1p!-qDzmrH|EEL=IgIwlx>bp;HX!dZc zPRdoMU?jBd;6)^$Gnd4(#kbM(@cGYpj2~=B7l9z)EMNq;MF?j<5_1gf+vF0-=dX$8 zH`~Lhd%p3BzJP|1a0Bb=WG&7;7jCByMfv<*PJhQvF%I|fA2^Dtk`+ACN~86ylILrA z+T`$;?PeQx@&mqbj;qfVzjIEq29%N7vk%5EY=QM)5u>gSGJ52kje| z+glIT41Gw2XJjXyFj*Ld{odLp#G!o*{OqRnqP`8c3NIM>!-5fS$Y|}t5nZdx4J)1y z&ri|n$YB)&(aQSl3Is7Fs(n0Ga#)DJ&sQQ$o2K{sX6)uNkl8+221FRQ}f7!jYJr-zZdwqi& zAr~PfL1igcv4nxcLy7)LXeUx$59OOah=lI9$EmpL>k78M2aXC2ORjVyChI0H*)Sk< zJ>qB4mVX{18O-&RET*j{MqELP&Os`$$Vkd5TbTyh({SGmsIx&it5g?JLN}~Tx)#)s zcX0tv=f|HdHGOrVha0jv)*`awB5h9R_4IuPZr_1+r_2. - (defn) intersected_of_circle_circle : Prop -- Given two circles (\omega_1 \omega_2 : Circle P), return a proposition that the distance between two circle centers is less than the sum of two radii and more than the difference of their radii, i.e., |r_1-r_2|<|O_1O_2| 0$; it is the circle whose center and radius are given. +\end{itemize} + +\subsection{Make of concepts} +\begin{itemize} + \item Definition \verb|Circle.mk_pt_pt|: Given two distinct points $O$ and $A$, this function returns a circle whose center is $O$ and radius is $\|OA\|$. + \item Definition \verb|Circle.mk_pt_pt_pt|: Given three points $A,B,C$ that are not collinear, this function returns a circle which is the circumcircle of triangle $ABC$. {\color{red} This \verb|def| will be moved into the construction of circumcenter.} + \item Definition \verb|CIR| as \verb|Circle.mk_pt_pt|: This is to abbreviate the function \verb|Circle.mk_pt_pt| into \verb|CIR|. + \item Definition $\odot$ as \verb|Circle.mk_pt_pt|: This is to abbreviate the function \verb|Circle.mk_pt_pt| into $\odot$. + \item Definition \verb|Circle.mk_pt_radius|: Given a point $O$ and a positive real number $r$, this function returns a circle whose center is $O$ and radius is $r$. + \item Definition \verb|Circle.mk_pt_pt_diam|: Given two distinct points $A$ and $B$, this function returns a circle with $AB$ as its diameter, i.e. the circle's center is the midpoint of $AB$, and its radius is $\frac{1}{2}\|AB\|$. +\end{itemize} + +\subsection{Position between a point and a circle} +\begin{itemize} + \item Definition \verb|Circle.IsInside|: Given a point $A$ and a circle $\omega$, this function returns whether $A$ lies inside $\omega$; here saying that $A$ lies inside $\omega$ means that the distance between $A$ and the center of $\omega$ is not greater than the radius of $\omega$. + \item Definition \verb|Circle.IsOn|: Given a point $A$ and a circle $\omega$, this function returns whether $A$ lies on $\omega$; here saying that $A$ lies on $\omega$ means that the distance between $A$ and the center of $\omega$ is equal to the radius of $\omega$. + \item Definition \verb|Circle.IsInt|: Given a point $A$ and a circle $\omega$, this function returns whether $A$ lies in the interior of $\omega$; here saying that $A$ lies in the interior of $\omega$ means that the distance between $A$ and the center of $\omega$ is smaller than the radius of $\omega$. + \item Definition \verb|Circle.IsOutside|: Given a point $A$ and a circle $\omega$, this function returns whether $A$ lies outside $\omega$; here saying that $A$ lies outside $\omega$ means that the distance between $A$ and the center of $\omega$ is greater than the radius of $\omega$. + \item Definition \verb|Circle.carrier|: Given a circle, its underlying set is the set of points that lie on this circle. + \item Definition \verb|Circle.interior|: Given a circle, its interior is the set of points that lie in the interior of this circle. + \item Definition \verb|LiesIn| as \verb|Circle.IsInside|: This is to abbreviate the function \verb|Circle.IsInside| into \verb|LiesIn|. + \item Definition \verb|LiesOut| as \verb|Circle.IsOutside|: This is to abbreviate the function \verb|Circle.IsOutside| into \verb|LiesOut|. + \item Instance \verb|Circle.pt_liesout_ne_center|: Given a circle $\omega$ and a point $A$ that lies outside $\omega$, then $A$ is distinct to the center of $\omega$. + \item Instance \verb|Circle.pt_lieson_ne_center|: Given a circle $\omega$ and a point $A$ that lies on $\omega$, then $A$ is distinct to the center of $\omega$. + \item Instance \verb|Circle.pt_liesout_ne_pt_lieson|: Given a circle $\omega$, a point $A$ that lies outside $\omega$ and a point $B$ that lies on $\omega$, then $A$ and $B$ are distinct, i.e. $A \ne B$. + \item Instance \verb|Circle.pt_liesint_ne_pt_lieson|: Given a circle $\omega$, a point $A$ that lies in the interior of $\omega$ and a point $B$ that lies on $\omega$, then $A$ and $B$ are distinct, i.e. $A \ne B$. + \item Instance \verb|Circle.pt_liesout_ne_pt_liesint|: Given a circle $\omega$, a point $A$ that lies outside $\omega$ and a point $B$ that lies in the interior of $\omega$, then $A$ and $B$ are distinct, i.e. $A \ne B$. + \item Theorem \verb|Circle.liesint_iff_liesin_and_not_lieson|: Given a circle $\omega$ and a point $A$, then $A$ lies in the interior of $\omega$ if and only if $A$ lies inside $\omega$ and $A$ doesn't lie on $\omega$. + \item Theorem \verb|Circle.liesin_iff_liesint_or_lieson|: Given a circle $\omega$ and a point $A$, then $A$ lies inside $\omega$ if and only if $A$ lies in the interior of $\omega$ or $A$ lies on $\omega$. + \item Theorem \verb|Circle.mk_pt_pt_lieson|: Given two distinct points $O$ and $A$, then $A$ lies on \verb|CIR O A|, i.e. the center of the circle is $O$ and the radius is $\|OA\|$. + \item Theorem \verb|Circle.mk_pt_pt_diam_fst_lieson|: Given two distinct points $A$ and $B$, then the first point $A$ lies on the circle with $AB$ as its diameter. + \item Theorem \verb|Circle.mk_pt_pt_diam_snd_lieson|: Given two distinct points $A$ and $B$, then the second point $B$ lies on the circle with $AB$ as its diameter. + \item Definition \verb|Circle.seg_lies_inside_circle|: Given a segment $l$ and a circle $\omega$, this function returns whether $l$ lies inside $\omega$; here saying that $l$ lies inside $\omega$ means that the two endpoints of $l$ both lie inside $\omega$. + \item Definition \verb|SegInCir| as \verb|Circle.seg_lies_inside_circle|: This is to abbreviate the function \verb|Circle.seg_lies_inside_circle| into \verb|SegInCir|. + \item Theorem \verb|Circle.pt_lies_inside_circle_of_seg_inside_circle|: Given a circle $\omega$, a segment $l$ that lies in the interior of $\omega$ and a point $A$ that lies in the interior of $l$, then $A$ lies in the interior of $\omega$. {\color{red} still \verb|sorry|, need a lemma of \emph{Seg}} +\end{itemize} + +\subsection{Position between different points} +\begin{itemize} + \item Lemma \verb|Circle.pts_lieson_circle_vec_eq|: Given a circle $\omega$ and two distinct points $A,B$ that both lie on $\omega$, if we denote the perpendicular foot of the center of $\omega$ to the line $AB$ as $P$, then $\overrightarrow{AP} = \overrightarrow{PB}$. + \item Theorem \verb|Circle.pts_lieson_circle_perpfoot_eq_midpoint|: Given a circle $\omega$ and two distinct points $A,B$ that both lie on $\omega$, then the perpendicular foot of the center of $\omega$ to the line $AB$ is equal to the midpoint of $AB$. + \item Theorem \verb|Circle.three_pts_lieson_circle_not_collinear|: Given a circle $\omega$ and three points $A,B,C$ that is distinct to each other, and they all lie on $\omega$, then $A,B,C$ are not collinear. +\end{itemize} + +\subsection{Antipode} +\begin{itemize} + \item Definition \verb|Circle.IsAntipode|: Given a circle $\omega$ and two points $A,B$ that both lie on $\omega$, this function returns whether $B$ is $A$'s antipode; here saying that $B$ is $A$'s antipode means that $B$ is the point reflection of $A$ respect to the center of $\omega$. + \item Theorem \verb|Circle.antipode_symm|: Given a circle $\omega$ and two points $A,B$ that both lie on $\omega$, if $B$ is $A$'s antipode, then $A$ is $B$'s antipode. + \item Theorem \verb|Circle.antipode_center_is_midpoint|: Given a circle $\omega$ and two points $A,B$ that both lie on $\omega$, if $B$ is $A$'s antipode, then the center of $\omega$ is the midpoint of segment $AB$. + \item Theorem \verb|Circle.antipode_iff_collinear|: Given a circle $\omega$ and two distinct points $A,B$ that both lie on $\omega$, then $B$ is $A$'s antipode if and only if $A,O,B$ are collinear, where $O$ is the center of $\omega$. + \item Theorem \verb|Circle.mk_pt_pt_diam_is_antipode|: Given two distinct points $A,B$, then $B$ is $A$'s antipode respect to the circle with segment $AB$ as its diameter. +\end{itemize} + +\subsection{Arc} +\begin{itemize} + \item Structure \verb|Arc|: Given a circle $\omega$, an \emph{Arc} consists of two points named \verb|source| and \verb|target|, and properties that these two points both lies on the circle and they are distinct; it is an arc from \verb|source| to \verb|target| respect to $\omega$. + \item Definition \verb|Arc.mk_pt_pt_circle|: Given a circle $\omega$ and two distinct points $A,B$ that lie on $\omega$, this function returns the arc from $A$ to $B$ respect to $\omega$. + \item Definition \verb|ARC| as \verb|Arc.mk_pt_pt_circle|: This is to abbreviate the function \verb|Arc.mk_pt_pt_circle| into \verb|ARC|. + \item Definition \verb|Arc.IsOn|: Given a circle $\omega$, a point $A$ and an arc $\beta$ on $\omega$, this function returns whether $A$ lies on $\beta$; here saying that $A$ lies on $\beta$ means that $A$ lies on $\omega$ and $A$ doesn't lie on the left side of the directed line from $\beta$'s source to target. + \item Definition \verb|Arc.ne_endpts|: Given a circle $\omega$, a point $A$ and an arc $\beta$ on $\omega$, this function returns whether $A$ is not equal to $\beta$'s endpoints; here saying that $A$ is not equal to $\beta$'s endpoints means that $A$ is not equal to $\beta$'s source or target. + \item Instance \verb|Arc.pt_ne_source|: Given a circle $\omega$, an arc $\beta$ on $\omega$ and a point $A$ that is not equal to $\beta$'s endpoints, then $A$ is not equal to $\beta$'s source. + \item Instance \verb|Arc.pt_ne_target|: Given a circle $\omega$, an arc $\beta$ on $\omega$ and a point $A$ that is not equal to $\beta$'s endpoints, then $A$ is not equal to $\beta$'s target. + \item Definition \verb|Arc.IsInt|: Given a circle $\omega$, a point $A$ and an arc $\beta$ on $\omega$, this function returns whether $A$ lies in the interior of $\beta$; here saying that $A$ lies in the interior of $\beta$ means that $A$ lies on $\beta$ and $A$ is not $\beta$'s endpoints. + \item Definition \verb|Arc.carrier|: Given an arc, its underlying set is the set of points that lie on this arc. + \item Definition \verb|Arc.interior|: Given an arc, its interior is the set of points that lie in the interior of this arc. + \item Theorem \verb|Arc.center_ne_endpts|: Given a circle $\omega$ and an arc $\beta$ on $\omega$, then $\omega$'s center is not equal to $\beta$'s endpoints. + \item Instance \verb|Arc.source_ne_center|: Given a circle $\omega$ and an arc $\beta$ on $\omega$, then $\beta$'s source is not equal to $\omega$'s center. + \item Instance \verb|Arc.target_ne_center|: Given a circle $\omega$ and an arc $\beta$ on $\omega$, then $\beta$'s target is not equal to $\omega$'s center. + \item Definition \verb|Arc.complement|: Given a circle $\omega$ and an arc $\beta$ on $\omega$, this function returns the complement of $\beta$; here saying that the complement of $\beta$ starts from $\beta$'s target and ends at $\beta$'s source. + \item Lemma \verb|Arc.pt_liesint_not_lieson_dlin|: Given a circle $\omega$, an arc $\beta$ on $\omega$ and a point $A$ that lies in the interior of $\beta$, then $A$ doesn't lie on the directed line from $\beta$'s source to target. + \item Theorem \verb|Arc.pt_liesint_liesonright_dlin|: Given a circle $\omega$, an arc $\beta$ on $\omega$ and a point $A$ that lies in the interior of $\beta$, then $A$ lies on the right side of the directed line from $\beta$'s source to target. + \item Theorem \verb|Arc.pt_liesint_complementary_liesonleft_dlin|: Given a circle $\omega$, an arc $\beta$ on $\omega$ and a point $A$ that lies in the interior of $\beta$'s complement, then $A$ lies on the left side of the directed line from $\beta$'s source to target. + {\color{red} \item Is it necessary to define the sum of arcs which are connected?} +\end{itemize} + +\subsection{Chord} +\begin{itemize} + \item Structure \verb|Chord|: Given a circle $\omega$, a Chord consists of a non-degenerate segment $AB$ and condition that both $A$ and $B$ lie on $\omega$. + \item Instance \verb|Chord.IsND|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the source and target of $s$ are distinct. + \item Definition \verb|Chord.mk_pt_pt_circle|: Given a circle $\omega$ and two distinct points $A,B$ that both lie on $\omega$, this function returns the chord $AB$ in $\omega$. + \item Definition \verb|Chord.IsOn|: Given a circle $\omega$, a point $A$ and a chord $s$ in $\omega$, this function returns whether $A$ lies on $s$; here saying that $A$ lies on $s$ means that $A$ lies on the non-degenerate segment respect to $s$. + \item Definition \verb|Chord.IsInt|: Given a circle $\omega$, a point $A$ and a chord $s$ in $\omega$, this function returns whether $A$ lies in the interior of $s$; here saying that $A$ lies in the interior of $s$ means that $A$ lies in the interior of the non-degenerate segment respect to $s$. + \item Definition \verb|Chord.carrier|: Given a chord, its underlying set is the set of points that lie on this chord. + \item Definition \verb|Chord.interior|: Given a chord, its interior is the set of points that lie in the interior of this chord. + \item Definition \verb|Chord.ne_endpts|: Given a circle $\omega$, a point $A$ and a chord $s$ in $\omega$, this function returns whether $A$ is not equal to the endpoints of $s$; here saying that $A$ is not equal to $s$'s endpoints means that $A$ is not equal to the source or target of $s$. + \item Theorem \verb|Chord.center_ne_endpts|: Given a circle $\omega$ and a chord $s$ in $\omega$, then $\omega$'s center is not equal to the endpoints of $s$. + \item Instance \verb|Chord.source_ne_center|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the source of $s$ is not equal to $\omega$'s center. + \item Instance \verb|Chord.target_ne_center|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the target of $s$ is not equal to $\omega$'s center. + \item Definition \verb|Chord.reverse|: Given a circle $\omega$ and a chord $s$ in $\omega$, then this function returns the reverse chord of $s$, which starts from the target of $s$ and ends at the source of $s$. + \item Theorem \verb|Chord.pt_liesint_liesint_circle|: Given a circle $\omega$, a chord $s$ in $\omega$ and a point A that lies in the interior of $s$, then A lies in the interior of $\omega$. + \item Definition \verb|Arc.toChord|: Given a circle $\omega$ and an arc $\beta$ on $\omega$, this function returns the chord respect to $\beta$. + \item Definition \verb|Chord.toArc|: Given a circle $\omega$ and a chord $s$ in $\omega$, this function returns the arc respect to $s$. + \item Theorem \verb|Circle.complementary_arc_toChord_eq_reverse|: Given a circle $\omega$ and an arc $\beta$ on $\omega$, then the chord respect to the complement of $\beta$ is equal to the reverse chord respect to $\beta$. + \item Theorem \verb|Circle.reverse_chord_toArc_eq_complement|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the arc respect to the reverse chord of $s$ is equal to the complement arc respect to $s$. + \item Definition \verb|Chord.length|: Given a circle $\omega$ and a chord $s$ in $\omega$, this function returns the length of $s$. + \item Definition \verb|Chord.IsDiameter|: Given a circle $\omega$ and a chord $s$ in $\omega$, this function returns whether $s$ is a diameter; here saying that $s$ is a diameter means that the center of $\omega$ lies on $s$. + \item Theorem \verb|Chord.diameter_iff_antipide|: Given a circle $\omega$ and a chord $s$ in $\omega$, then $s$ is a diameter if and only if the source and target of $s$ are antipodes. + \item Theorem \verb|Chord.diameter_length_eq_twice_radius|: Given a circle $\omega$ and a chord $s$ in $\omega$, if $s$ is a diameter, then the length of $s$ is twice as large as $\omega$'s radius, i.e. $|s|=2r$. +\end{itemize} \section{Content in file LCPosition.lean} -In this file, we define the relative position between lines and circles and rays and circles. What's more, when discuss position bewteen rays and circles, we want give a criterion whether the underlying lines have common points with the circles and give constructions to the TWO intersections (may be the same point). - \subsection{position of lines and circles} - Definitions : - (defn) line_tangent_to_circle : Prop -- Given a line and a circle, return a proposition that the line has exactly one common point with the circle, i.e., there exist a common point A and any common point must be A. - (defn) line_secant_to_circle : Prop -- Given a line and a circle, return a proposition that they have exactly two common points. - (defn) line_disjoint_from_circle : Prop -- Given a line and a circle, returen a proposition that they have no common points. - (defn) line_intersect_circle : Prop -- Given a line and a circle, returen a proposition that the line has at least a common point with the circle. - Theorems : - line_tangent_to_circle_iff_one_intersection -- Given a line and a circle, the line is tangent to the circle iff the distance from the center to the line is equal to radius of the circle. - line_secant_to_circle_iff_two_intersection -- Given a line and a circle, the line is secant to the circle iff the distance from the center to the line is less than the radius of the circle. - line_disjoint_from_circle_iff_two_intersection -- Given a line and a circle, the line is disjoint from the circle iff the distance from the center to the line is more than the radius of the circle. - -\end{document} \ No newline at end of file +In this file, we define the position between a line and a circle, and there intersected points if intersected. + +\subsection{Position between a directed line and a circle} +\begin{itemize} + \item Definition \verb|Circle.DirLine.IsDisjoint|: Given a directed line $l$ and a circle $\omega$, this function returns whether $l$ is disjoint to $\omega$; here saying that $l$ is disjoint to $\omega$ means that the distance from the circle of $\omega$ to $l$ is greater than the radius of $\omega$. + \item Definition \verb|Circle.DirLine.IsTangent|: Given a directed line $l$ and a circle $\omega$, this function returns whether $l$ is tangent to $\omega$; here saying that $l$ is tangent to $\omega$ means that the distance from the circle of $\omega$ to $l$ is equal to the radius of $\omega$. + \item Definition \verb|Circle.DirLine.IsSecant|: Given a directed line $l$ and a circle $\omega$, this function returns whether $l$ is secant to $\omega$; here saying that $l$ is secant to $\omega$ means that the distance from the circle of $\omega$ to $l$ is smaller than the radius of $\omega$. + \item Definition \verb|Circle.DirLine.IsIntersected|: Given a directed line $l$ and a circle $\omega$, this function returns whether $l$ is intersected with $\omega$; here saying that $l$ is intersected with $\omega$ means that the distance from the circle of $\omega$ to $l$ is not greater than the radius of $\omega$. + \item Definition \verb|Secant| as \verb|Circle.DirLine.IsSecant|: This is to abbreviate the function \verb|Circle.DirLine.IsSecant| into \verb|Secant|. + \item Definition \verb|Tangent| as \verb|Circle.DirLine.IsTangent|: This is to abbreviate the function \verb|Circle.DirLine.IsTangent| into \verb|Tangent|. + \item Definition \verb|Disjoint| as \verb|Circle.DirLine.IsDisjoint|: This is to abbreviate the function \verb|Circle.DirLine.IsDisjoint| into \verb|Disjoint|. + \item Theorem \verb|DirLC.disjoint_pt_liesout_circle|: Given a circle $\omega$, a directed line $l$ which is disjoint to $\omega$, and a point $A$ that lies on $l$, then $A$ lies outside $\omega$. + \item Theorem \verb|DirLC.intersect_iff_tangent_or_secant|: Given a directed line $l$ and a circle $\omega$, then $l$ is intersected with $\omega$ if and only if $l$ is tangent to $\omega$ or $l$ is secant to $\omega$. + \item Theorem \verb|DirLC.pt_liesint_secant|: Given a circle $\omega$, a point $A$ in the interior of $\omega$ and a directed line $l$ such that $A$ lies on $l$, then $l$ is secant to $\omega$. + \item Theorem \verb|DirLC.pt_liesint_intersect|: Given a circle $\omega$, a point $A$ in the interior of $\omega$ and a directed line $l$ such that $A$ lies on $l$, then $l$ is intersected with $\omega$. +\end{itemize} + +\subsection{Definition of intersected points} +\begin{itemize} + \item Structure \verb|DirLCInxpts|: A \emph{DirLCInxpts} consists of two points named \verb|front| and \verb|back|; they are the intersected points of a directed line and a circle, distinguished by the direction of the directed line. + \item Lemma \verb|DirLC.dist_pt_line_ineq|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, then we have an inequality $r^2-d^2\ge0$, where $r$ is the radius of $\omega$ and $d$ is the distance from the center of $\omega$ to $l$. {\color{blue} This lemma makes sure that the definition of intersected points is well defined.} + \item Definition \verb|DirLC.Inxpts|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, this function returns the intersected points of $l$ and $\omega$. +\end{itemize} + +\subsection{Basic properties of intersected points} +\begin{itemize} + \item Lemma \verb|DirLC.inx_pts_lieson_dlin|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, then both of the intersected points of $l$ and $\omega$ lie on $l$. + \item Theorem \verb|DirLC.inx_pts_lieson_circle|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, then both of the intersected points of $l$ and $\omega$ lie on $\omega$. + \item Theorem \verb|DirLC.inx_pts_same_iff_tangent|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, then two intersected points of $l$ and $\omega$ coincide if and only if $l$ is tangent to $\omega$. + \item Lemma \verb|DirLC.inx_pts_ne_center|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, then both of the intersected points of $l$ and $\omega$ are distinct with the center of $\omega$. + \item Theorem \verb|DirLC.inx_pts_antipode_iff_center_lieson|: Given a circle $\omega$ and a directed line $l$ that is intersected with $\omega$, then one of the intersected points of $l$ and $\omega$ is the antipode of another if and only if the center of $\omega$ lies on $l$. {\color{red} still \verb|sorry|} + \item Theorem \verb|DirLC.inxwith_iff_intersect|: Given a circle $\omega$ and a directed line $l$, then the images of $l$ and $\omega$ have intersection if and only if $l$ is intersected with $\omega$. + \item Theorem \verb|DirLC.inxwith_iff_tangent_or_secant|: Given a circle $\omega$ and a directed line $l$, then the images of $l$ and $\omega$ have intersection if and only if $l$ is tangent to $\omega$ or $l$ is secant to $\omega$. + {\color{red} Do we need to change the statement of \verb|IsIntersected| to \verb|InxWith| in the above theorems?} +\end{itemize} + +\subsection{Tangent point} +\begin{itemize} + \item Definition \verb|DirLC.Tangentpt|: Given a circle $\omega$ and a directed line $l$ that is tangent to $\omega$, this function returns the tangent point of $l$ and $\omega$. + \item Lemma \verb|DirLC.tangent_pt_ne_center|: Given a circle $\omega$ and a directed line $l$ that is tangent to $\omega$, then the tangent point of $l$ and $\omega$ is distinct with the center of $\omega$. + \item Theorem \verb|DirLC.tangent_pt_center_perp_line|: Given a circle $\omega$ and a directed line $l$ that is tangent to $\omega$, then the line between the center of $\omega$ and the tangent point is perpendicular to $l$. + \item Theorem \verb|DirLC.tangent_pt_eq_perp_foot|: Given a circle $\omega$ and a directed line $l$ that is tangent to $\omega$, then the tangent point is the perpendicular foot from the center of $\omega$ to $l$. +\end{itemize} + +\subsection{The uniqueness of intersected points} +\begin{itemize} + \item Theorem \verb|Circle.DirLC_intersection_eq_inxpts|: Given a circle $\omega$, a directed line $l$ that is intersected with $\omega$ and a point $A$ that both lie on $l$ and $\omega$, then $A$ is equal to one of the intersected points of $l$ and $\omega$. + \item Theorem \verb|Circle.pt_pt_tangent_eq_tangent_pt|: Given a circle $\omega$ and two points $A,B$ that $A$ lies outside $\omega$ and $B$ lies on $\omega$, if directed line $AB$ is tangent to $\omega$, then $B$ is the tangent point. + \item Theorem \verb|Circle.chord_toDirLine_intersected|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the directed line respect to $s$, which starts from the source of $s$ and ends at the target of $s$, is intersected with $\omega$. + \item Theorem \verb|Circle.chord_toDirLine_inx_front_pt_eq_target|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the front intersected point of the directed line respect to $s$ and $\omega$ is equal to the target of $s$. {\color{red} still \verb|sorry|} + \item Theorem \verb|Circle.chord_toDirLine_inx_back_pt_eq_source|: Given a circle $\omega$ and a chord $s$ in $\omega$, then the back intersected point of the directed line respect to $s$ and $\omega$ is equal to the source of $s$. {\color{red} still \verb|sorry|} +\end{itemize} + +\subsection{Equivalent condition for tangency} +\begin{itemize} + \item Theorem \verb|Circle.pt_pt_tangent_perp|: Given a circle $\omega$ and two points $A,B$ that $A$ lies outside $\omega$ and $B$ lies on $\omega$, if directed line $AB$ is tangent to $\omega$, then the directed line from the center of $\omega$ to $B$ is perpendicular to directed line $AB$. + \item Theorem \verb|Circle.pt_pt_perp_tangent|: Given a circle $\omega$ and two points $A,B$ that $A$ lies outside $\omega$ and $B$ lies on $\omega$, if directed line $AB$ is perpendicular to the directed line from the center of $\omega$ to $B$, then directed line $AB$ is tangent to $\omega$. + \item Theorem \verb|Circle.pt_pt_perp_eq_tangent_pt|: Given a circle $\omega$ and two points $A,B$ that $A$ lies outside $\omega$ and $B$ lies on $\omega$, if directed line $AB$ is perpendicular to the directed line from the center of $\omega$ to $B$, then $B$ is the tangent point of directed line $AB$ and $\omega$. +\end{itemize} + +\subsection{Position between a line and a circle} +\begin{itemize} + \item Definition \verb|Circle.Line.IsDisjoint|: Given a line $l$ and a circle $\omega$, this function returns whether $l$ is disjoint to $\omega$; here saying that $l$ is disjoint to $\omega$ means that the distance from the circle of $\omega$ to $l$ is greater than the radius of $\omega$. + \item Definition \verb|Circle.Line.IsTangent|: Given a line $l$ and a circle $\omega$, this function returns whether $l$ is tangent to $\omega$; here saying that $l$ is tangent to $\omega$ means that the distance from the circle of $\omega$ to $l$ is equal to the radius of $\omega$. + \item Definition \verb|Circle.Line.IsSecant|: Given a line $l$ and a circle $\omega$, this function returns whether $l$ is secant to $\omega$; here saying that $l$ is secant to $\omega$ means that the distance from the circle of $\omega$ to $l$ is smaller than the radius of $\omega$. + \item Definition \verb|Circle.Line.IsIntersected|: Given a line $l$ and a circle $\omega$, this function returns whether $l$ is intersected with $\omega$; here saying that $l$ is intersected with $\omega$ means that the distance from the circle of $\omega$ to $l$ is not greater than the radius of $\omega$. +\end{itemize} + + +\section{Content in file CCPosition.lean} +In this file, we define the position between two circles, and there intersected points if intersected. + +\subsection{Position between two circles} +\begin{itemize} + \item Definition \verb|Circle.CC.IsSeparated|: Given two circles $\omega_1,\omega_2$, this function returns whether $\omega_1$ is separated from $\omega_2$; here saying that $\omega_1$ is separated from $\omega_2$ means that the distance between their centers is greater than the sum of their radius, i.e. $d > r_1 + r_2$. + \item Definition \verb|Circle.CC.IsIntersected|: Given two circles $\omega_1,\omega_2$, this function returns whether $\omega_1$ is intersected with $\omega_2$; here saying that $\omega_1$ is intersected with $\omega_2$ means that the distance between their centers is smaller than the sum of their radius and greater than the absolute value of the difference between their radius, i.e, $|r_1-r_2|